# userswp/1.0.21/includes/helpers/misc.php

UsersWP – Front-end login form, User Registration, User Profile &amp; Members Directory plugin for WP, version 1.0.21. 1,745 lines.

- Page: https://pluginprobe.com/plugins/userswp/1.0.21/code/includes/helpers/misc.php
- Raw: https://pluginprobe.com/plugins/userswp/1.0.21/raw/includes/helpers/misc.php
- Modified: 2018-12-21T12:06:42+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/userswp/1.0.21/code/includes/helpers/misc.php#L10-L20`.

```php
<?php
/**
 * Converts string value to options array.
 * Used in select, multiselect and radio fields.
 * Wraps inside optgroup if available.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string          $option_values          String option values.
 * @param       bool            $translated             Do you want to translate the output?
 *
 * @return      array|null                              Options array.
 */
function uwp_string_values_to_options($option_values = '', $translated = false)
{
    $options = array();
    if ($option_values == '') {
        return NULL;
    }

    if (strpos($option_values, "{/optgroup}") !== false) {
        $option_values_arr = explode("{/optgroup}", $option_values);

        foreach ($option_values_arr as $optgroup) {
            if (strpos($optgroup, "{optgroup}") !== false) {
                $optgroup_arr = explode("{optgroup}", $optgroup);

                $count = 0;
                foreach ($optgroup_arr as $optgroup_str) {
                    $count++;
                    $optgroup_str = trim($optgroup_str);

                    $optgroup_label = '';
                    if (strpos($optgroup_str, "|") !== false) {
                        $optgroup_str_arr = explode("|", $optgroup_str, 2);
                        $optgroup_label = trim($optgroup_str_arr[0]);
                        if ($translated && $optgroup_label != '') {
                            $optgroup_label = __($optgroup_label, 'userswp');
                        }
                        $optgroup_label = ucfirst($optgroup_label);
                        $optgroup_str = $optgroup_str_arr[1];
                    }

                    $optgroup3 = uwp_string_to_options($optgroup_str, $translated);

                    if ($count > 1 && $optgroup_label != '' && !empty($optgroup3)) {
                        $optgroup_start = array(array('label' => $optgroup_label, 'value' => NULL, 'optgroup' => 'start'));
                        $optgroup_end = array(array('label' => $optgroup_label, 'value' => NULL, 'optgroup' => 'end'));
                        $optgroup3 = array_merge($optgroup_start, $optgroup3, $optgroup_end);
                    }
                    $options = array_merge($options, $optgroup3);
                }
            } else {
                $optgroup1 = uwp_string_to_options($optgroup, $translated);
                $options = array_merge($options, $optgroup1);
            }
        }
    } else {
        $options = uwp_string_to_options($option_values, $translated);
    }

    return $options;
}

/**
 * Converts string value to options array.
 * Used in select, multiselect and radio fields.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $input          Input String
 * @param       bool        $translated     Do you want to translate the output?
 *
 * @return      array                       Options array.
 */
function uwp_string_to_options($input = '', $translated = false)
{
    $return = array();
    if ($input != '') {
        $input = trim($input);
        $input = rtrim($input, ",");
        $input = ltrim($input, ",");
        $input = trim($input);
    }

    $input_arr = explode(',', $input);

    if (!empty($input_arr)) {
        foreach ($input_arr as $input_str) {
            $input_str = trim($input_str);

            if (strpos($input_str, "/") !== false) {
                $input_str = explode("/", $input_str, 2);
                $label = trim($input_str[0]);
                if ($translated && $label != '') {
                    $label = __($label, 'userswp');
                }
                $label = ucfirst($label);
                $value = trim($input_str[1]);
            } else {
                if ($translated && $input_str != '') {
                    $input_str = __($input_str, 'userswp');
                }
                $label = ucfirst($input_str);
                $value = $input_str;
            }

            if ($label != '') {
                $return[] = array('label' => $label, 'value' => $value, 'optgroup' => NULL);
            }
        }
    }

    return $return;
}


/**
 * Resizes the image.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $image      Reference a local file
 * @param       int         $width      Image width      
 * @param       int         $height     Image height    
 * @param       float       $scale      Image scale ratio.
 *
 * @return      mixed                   Resized image.
 */
function uwp_resizeImage($image,$width,$height,$scale) {
    /** @noinspection PhpUnusedLocalVariableInspection */
    list($imagewidth, $imageheight, $imageType) = getimagesize($image);
    $imageType = image_type_to_mime_type($imageType);
    $newImageWidth = ceil($width * $scale);
    $newImageHeight = ceil($height * $scale);
    $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
    $source = false;
    switch($imageType) {
        case "image/gif":
            $source=imagecreatefromgif($image);
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            $source=imagecreatefromjpeg($image);
            break;
        case "image/png":
        case "image/x-png":
            $source=imagecreatefrompng($image);
            break;
    }
    imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);

    switch($imageType) {
        case "image/gif":
            imagegif($newImage,$image);
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            imagejpeg($newImage,$image,90);
            break;
        case "image/png":
        case "image/x-png":
            imagepng($newImage,$image);
            break;
    }

    chmod($image, 0777);
    return $image;
}

/**
 * Resizes thumbnail image.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $thumb_image_name
 * @param       string      $image
 * @param       int         $x                      x-coordinate of source point.
 * @param       int         $y                      y-coordinate of source point.
 * @param       int         $src_w                  Source width.
 * @param       int         $src_h                  Source height.
 * @param       float       $scale                  Image scale ratio.
 *
 * @return      mixed                               Resized image.
 */
function uwp_resizeThumbnailImage($thumb_image_name, $image, $x, $y, $src_w, $src_h, $scale){
    // ignore image createion warnings
    @ini_set('gd.jpeg_ignore_warning', 1);
    /** @noinspection PhpUnusedLocalVariableInspection */
    list($imagewidth, $imageheight, $imageType) = getimagesize($image);
    $imageType = image_type_to_mime_type($imageType);

    $newImageWidth = ceil($src_w * $scale);
    $newImageHeight = ceil($src_h * $scale);
    $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
    $source = false;
    switch($imageType) {
        case "image/gif":
            $source=imagecreatefromgif($image);
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            $source=imagecreatefromjpeg($image);
            break;
        case "image/png":
        case "image/x-png":
            $source=imagecreatefrompng($image);
            break;
    }
    imagecopyresampled($newImage,$source,0,0,$x,$y,$newImageWidth, $newImageHeight, $src_w, $src_h);
    switch($imageType) {
        case "image/gif":
            imagegif($newImage, $thumb_image_name);
            break;
        case "image/pjpeg":
        case "image/jpeg":
        case "image/jpg":
            imagejpeg($newImage, $thumb_image_name, 100);
            break;
        case "image/png":
        case "image/x-png":
            imagepng($newImage, $thumb_image_name);
            break;
    }

    chmod($thumb_image_name, 0777);
    return $thumb_image_name;
}


/**
 * Logs the error message.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       array|object|string     $log        Error message.
 *
 * @return      void
 */
function uwp_error_log($log){
    /*
     * A filter to override the WP_DEBUG setting for function uwp_error_log().
     */
    $should_log = apply_filters( 'uwp_log_errors', WP_DEBUG);
    if ( true === $should_log ) {
        if ( is_array( $log ) || is_object( $log ) ) {
            error_log( print_r( $log, true ) );
        } else {
            error_log( $log );
        }
    }
}


/**
 * Prints the users page main content.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      void
 */
function get_uwp_users_list() {

    global $wpdb;

    $keyword = false;
    if (isset($_GET['uwps']) && $_GET['uwps'] != '') {
        $keyword = stripslashes(strip_tags($_GET['uwps']));
    }

    $sort_by = false;
    if (isset($_GET['uwp_sort_by']) && $_GET['uwp_sort_by'] != '') {
        $sort_by = strip_tags(esc_sql($_GET['uwp_sort_by']));
    }

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

    $number = uwp_get_option('profile_no_of_items', 10);

    $where = '';
    $where = apply_filters('uwp_users_search_where', $where, $keyword);

    $arg = array(
        'fields' => 'ID',
        'meta_query' => array(
            'relation' => 'OR',
            array(
                'key'     => 'uwp_mod',
                'value'   => 'email_unconfirmed',
                'compare' => '=='
            ),
            array(
                'key'     => 'uwp_hide_from_listing',
                'value'   => 1,
                'compare' => '=='
            )
        )
    );

    $inactive_users = new WP_User_Query($arg);
    $exclude_users = $inactive_users->get_results();

    $excluded_globally = uwp_get_option('users_excluded_from_list');
    if ( $excluded_globally ) {
        $users = str_replace(' ', '', $excluded_globally );
        $users_array = explode(',', $users );
        $exclude_users = array_merge($exclude_users, $users_array);
    }

    $exclude_users = apply_filters('uwp_excluded_users_from_list', $exclude_users, $where, $keyword);

    if($exclude_users){
        $exclude_users_list = implode(',', array_unique($exclude_users));
        $exclude_query = 'AND '. $wpdb->users.'.ID NOT IN ('.$exclude_users_list.')';
    } else {
        $exclude_query = ' ';
    }

    if ($keyword || $where) {
        if (empty($where)) {
            $users = $wpdb->get_results($wpdb->prepare(
                "SELECT DISTINCT SQL_CALC_FOUND_ROWS $wpdb->users.*
            FROM $wpdb->users
            INNER JOIN $wpdb->usermeta
            ON ( $wpdb->users.ID = $wpdb->usermeta.user_id )
            WHERE 1=1
            $exclude_query
            AND ( 
            ( $wpdb->usermeta.meta_key = 'first_name' AND $wpdb->usermeta.meta_value LIKE %s ) 
            OR 
            ( $wpdb->usermeta.meta_key = 'last_name' AND $wpdb->usermeta.meta_value LIKE %s ) 
            OR 
            user_login LIKE %s 
            OR 
            user_nicename LIKE %s 
            OR 
            display_name LIKE %s 
            OR 
            user_email LIKE %s
            )
            ORDER BY display_name ASC
            LIMIT 0, 20",
                array(
                    '%' . $keyword . '%',
                    '%' . $keyword . '%',
                    '%' . $keyword . '%',
                    '%' . $keyword . '%',
                    '%' . $keyword . '%',
                    '%' . $keyword . '%'
                )
            ));
        } else {
            $usermeta_table = get_usermeta_table_prefix() . 'uwp_usermeta';

            $users = $wpdb->get_results(
                "SELECT DISTINCT SQL_CALC_FOUND_ROWS $wpdb->users.*
            FROM $wpdb->users
            INNER JOIN $usermeta_table
            ON ( $wpdb->users.ID = $usermeta_table.user_id )
            WHERE 1=1
            $exclude_query
            $where
            ORDER BY display_name ASC
            LIMIT 0, 20");
        }

        $total_user = count($users);

    } else {

        $args = array(
            'number' => (int) $number,
            'paged' => $paged,
            'exclude' => $exclude_users,
        );


        if ($sort_by) {
            switch ($sort_by) {
                case "newer":
                    $args['orderby'] = 'registered';
                    $args['order'] = 'desc';
                    break;
                case "older":
                    $args['orderby'] = 'registered';
                    $args['order'] = 'asc';
                    break;
                case "alpha_asc":
                    $args['orderby'] = 'display_name';
                    $args['order'] = 'asc';
                    break;
                case "alpha_desc":
                    $args['orderby'] = 'display_name';
                    $args['order'] = 'desc';
                    break;

            }
        }

        $users_query = new WP_User_Query($args);
        $users = $users_query->get_results();
        $total_user = $users_query->get_total();

    }

    $total_pages=ceil($total_user/$number);

    $layout_class = uwp_get_layout_class();
    ?>
    <ul class="uwp-users-list-wrap <?php echo $layout_class; ?>" id="uwp_user_items_layout">
        <?php
        if ($users) {
            foreach ($users as $user) {
                $user_obj = get_user_by('id', $user->ID);

                // exclude logged in user
                $exclude_loggedin_user = apply_filters('uwp_users_list_exclude_loggedin_user', false);
                if ($exclude_loggedin_user) {
                    if ($user_obj->ID == get_current_user_id()) {
                        continue;
                    }
                }
                ?>
                <li class="uwp-users-list-user">
                    <div class="uwp-users-list-user-left">
                        <?php do_action('uwp_users_profile_header', $user); ?>
                    </div>
                    <div class="uwp-users-list-user-right">
                        <div class="uwp-users-list-user-name">
                            <h3 class="uwp-user-title" data-user="<?php echo $user_obj->ID; ?>">
                                <a href="<?php echo apply_filters('uwp_profile_link', get_author_posts_url($user_obj->ID), $user_obj->ID); ?>">
                                    <?php echo apply_filters('uwp_profile_display_name', $user_obj->display_name); ?>
                                </a>
                                <?php do_action('uwp_users_after_title', $user_obj->ID ); ?>
                            </h3>
                        </div>
                        <div class="uwp-users-list-user-btns">
                            <?php do_action('uwp_profile_buttons', $user_obj ); ?>
                        </div>
                        <div class="uwp-users-list-user-social">
                            <?php do_action('uwp_profile_social', $user_obj ); ?>
                        </div>
                        <div class="uwp-users-list-extra">
                            <?php do_action('uwp_users_extra', $user_obj ); ?>
                        </div>
                        <div class="clfx"></div>
                    </div>
                </li>
                <?php
            }
        } else {
            // no users found
            echo '<div class="uwp-alert-error text-center">';
            echo __('No Users Found', 'userswp');
            echo '</div>';
        }
        ?>
    </ul>

    <?php
    if ($total_pages > 1) {
        do_action('uwp_profile_pagination', $total_pages);
    }
    ?>
    <?php
}

/**
 * Gets the custom field info for given key.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $htmlvar_name       Custom field key.
 *
 * @return      object                          Field info.
 */
function uwp_get_custom_field_info($htmlvar_name) {
    global $wpdb;
    $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
    $field = $wpdb->get_row($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE htmlvar_name = %s", array($htmlvar_name)));
    return $field;
}



/**
 * Returns the Users page layout class based on the setting.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      string      Layout class.
 */
function uwp_get_layout_class() {
    $default_layout = uwp_get_option('users_default_layout', 'list');
    switch ($default_layout) {
        case "list":
            $class = "uwp_listview";
            break;
        case "2col":
            $class = "uwp_gridview uwp_gridview_2col";
            break;
        case "3col":
            $class = "uwp_gridview uwp_gridview_3col";
            break;
        case "4col":
            $class = "uwp_gridview uwp_gridview_4col";
            break;
        case "5col":
            $class = "uwp_gridview uwp_gridview_5col";
            break;
        default:
            $class = "uwp_listview";
    }

    return $class;
}

add_filter( 'get_user_option_metaboxhidden_nav-menus', 'uwp_always_nav_menu_visibility', 10, 3 );

/**
 * Filters nav menu visibility option value.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       mixed       $result     Value for the user's option.
 * @param       string      $option     Name of the option being retrieved.
 * @param       WP_User     $user       WP_User object of the user whose option is being retrieved.
 *
 * @return      array                   Filtered value.
 */
function uwp_always_nav_menu_visibility( $result, $option, $user )
{
    if( is_array($result) && in_array( 'add-users-wp-nav-menu', $result ) ) {
        $result = array_diff( $result, array( 'add-users-wp-nav-menu' ) );
    }

    return $result;
}

add_filter('user_profile_picture_description', 'uwp_admin_user_profile_picture_description');

/**
 * Filters the user profile picture description displayed under the Gravatar.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $description    Profile picture description.
 *
 * @return      string                      Modified description.
 */
function uwp_admin_user_profile_picture_description($description) {
    if (is_admin() && IS_PROFILE_PAGE) {
        $user_id = get_current_user_id();
        $avatar = uwp_get_usermeta($user_id, 'uwp_account_avatar_thumb', '');

        if (!empty($avatar)) {
            $description = sprintf( __( 'You can change your profile picture on your <a href="%s">Profile Page</a>.', 'userswp' ),
                uwp_build_profile_tab_url( $user_id ));
        }

    }
    return $description;
}

/**
 * Adds avatar and banner fields in admin side.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       object      $user       User object.
 *
 * @return      void
 */
function uwp_admin_edit_banner_fields($user) {
    global $wpdb;

    $file_obj = new UsersWP_Files();

    $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
    $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE (form_type = 'avatar' OR form_type = 'banner') ORDER BY sort_order ASC");
    if ($fields) {
        ?>
        <div class="uwp-profile-extra uwp_page">
            <?php do_action('uwp_admin_profile_edit', $user ); ?>
            <table class="uwp-profile-extra-table form-table">
                <?php
                foreach ($fields as $field) {

                    // Icon
                    $icon = uwp_get_field_icon( $field->field_icon );

                    if ($field->field_type == 'fieldset') {
                        ?>
                        <tr style="margin: 0; padding: 0">
                            <th class="uwp-profile-extra-key" style="margin: 0; padding: 0"><h3 style="margin: 10px 0;">
                                    <?php echo $icon.$field->site_title; ?></h3></th>
                            <td></td>
                        </tr>
                        <?php
                    } else { ?>
                        <tr>
                            <th class="uwp-profile-extra-key"><?php echo $icon.$field->site_title; ?></th>
                            <td class="uwp-profile-extra-value">
                                <?php
                                if ($field->htmlvar_name == "uwp_avatar_file") {
                                    $value = uwp_get_usermeta($user->ID, "uwp_account_avatar_thumb", "");
                                } elseif ($field->htmlvar_name == "uwp_banner_file") {
                                    $value = uwp_get_usermeta($user->ID, "uwp_account_banner_thumb", "");
                                } else {
                                    $value = "";
                                }
                                ?>
                                <?php echo $file_obj->uwp_file_upload_preview($field, $value); ?>
                                <?php
                                if ($field->htmlvar_name == "uwp_avatar_file") {
                                    if (!empty($value)) {
                                        ?>
                                        <a class="uwp-profile-modal-form-trigger" data-type="avatar" href="#">
                                            <?php echo __("Change Avatar", "userswp"); ?>
                                        </a>
                                        <?php
                                    } else {
                                        ?>
                                        <a class="uwp-profile-modal-form-trigger" data-type="avatar" href="#">
                                            <?php echo __("Upload Avatar", "userswp"); ?>
                                        </a>
                                        <?php
                                    }
                                } elseif ($field->htmlvar_name == "uwp_banner_file") {
                                    if (!empty($value)) {
                                        ?>
                                        <a class="uwp-profile-modal-form-trigger" data-type="banner" href="#">
                                            <?php echo __("Change Banner", "userswp"); ?>
                                        </a>
                                        <?php
                                    } else {
                                        ?>
                                        <a class="uwp-profile-modal-form-trigger" data-type="banner" href="#">
                                            <?php echo __("Upload Banner", "userswp"); ?>
                                        </a>
                                        <?php
                                    }
                                }
                                ?>
                            </td>
                        </tr>
                        <?php
                    }
                }
                ?>
            </table>
        </div>
        <?php
    }
}
add_action('show_user_profile', 'uwp_admin_edit_banner_fields');
add_action('edit_user_profile', 'uwp_admin_edit_banner_fields');

add_filter('admin_body_class', 'uwp_add_admin_body_class');
function uwp_add_admin_body_class($classes) {
    $screen = get_current_screen();
    if ( 'profile' == $screen->base || 'user-edit' == $screen->base )
    $classes .= 'uwp_page';
    return $classes;
}

// Privacy
add_filter('uwp_account_page_title', 'uwp_account_privacy_page_title', 10, 2);

/**
 * Adds Privacy tab title in Account page.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $title      Privacy title.
 * @param       string      $type       Tab type.
 *
 * @return      string|void             Title.
 */
function uwp_account_privacy_page_title($title, $type) {
    if ($type == 'privacy') {
        $title = __( 'Privacy', 'userswp' );
    }

    return $title;
}

add_action('uwp_account_form_display', 'uwp_account_privacy_edit_form_display');

/**
 * Adds form html for privacy fields in account page.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $type       Form type.
 *
 * @return      void
 */
function uwp_account_privacy_edit_form_display($type) {
    if ($type == 'privacy') {
        $make_profile_private = uwp_can_make_profile_private();
        echo '<div class="uwp-account-form uwp_wc_form">';
        $extra_where = "AND is_public='2'";
        $fields = get_account_form_fields($extra_where);
        $fields = apply_filters('uwp_account_privacy_fields', $fields);
        $user_id = get_current_user_id();
        ?>
        <div class="uwp-profile-extra">
            <div class="uwp-profile-extra-div form-table">
                <form class="uwp-account-form uwp_form" method="post">
                    <?php if ($fields) { ?>
                        <div class="uwp-profile-extra-wrap">
                            <div class="uwp-profile-extra-key" style="font-weight: bold;">
                                <?php echo __("Field", "userswp") ?>
                            </div>
                            <div class="uwp-profile-extra-value" style="font-weight: bold;">
                                <?php echo __("Is Public?", "userswp") ?>
                            </div>
                        </div>
                        <?php foreach ($fields as $field) { ?>
                            <div class="uwp-profile-extra-wrap">
                                <div class="uwp-profile-extra-key"><?php echo $field->site_title; ?>
                                    <span class="uwp-profile-extra-sep">:</span></div>
                                <div class="uwp-profile-extra-value">
                                    <?php
                                    $field_name = $field->htmlvar_name . '_privacy';
                                    $value = uwp_get_usermeta($user_id, $field_name, false);
                                    if ($value === false) {
                                        $value = 'yes';
                                    }
                                    ?>
                                    <select name="<?php echo $field_name; ?>" class="uwp_privacy_field"
                                            style="margin: 0;">
                                        <option value="no" <?php selected($value, "no"); ?>><?php echo __("No", "userswp") ?></option>
                                        <option value="yes" <?php selected($value, "yes"); ?>><?php echo __("Yes", "userswp") ?></option>
                                    </select>
                                </div>
                            </div>
                        <?php }
                    }
                    $value = get_user_meta($user_id, 'uwp_hide_from_listing', true); ?>
                    <div class="uwp-profile-extra-wrap">
                        <div id="uwp_hide_from_listing" class="uwp_hide_from_listing">
                            <input name="uwp_hide_from_listing" class="" <?php checked($value, "1", true); ?> type="checkbox" value="1"><?php _e('Hide profile from the users listing page.', 'userswp'); ?>
                        </div>
                    </div>
                    <?php
                    do_action('uwp_after_privacy_form_fields', $fields);
                    if ($make_profile_private) {
                        $field_name = 'uwp_make_profile_private';
                        $value = get_user_meta($user_id, $field_name, true);
                        if ($value === false) {
                            $value = '0';
                        }
                        ?>
                        <div id="uwp_make_profile_private" class=" uwp_make_profile_private_row">
                            <input type="hidden" name="uwp_make_profile_private" value="0">
                            <input name="uwp_make_profile_private" class="" <?php checked( $value, "1", true ); ?> type="checkbox" value="1">
                            <?php _e( 'Make the whole profile private', 'userswp' ); ?>
                        </div>
                        <?php
                    }
                    ?>
                    <input type="hidden" name="uwp_privacy_nonce" value="<?php echo wp_create_nonce( 'uwp-privacy-nonce' ); ?>" />
                    <input name="uwp_privacy_submit" value="<?php echo __( 'Submit', 'userswp' ); ?>" type="submit">
                </form>
            </div>
        </div>
        <?php
        echo '</div>';
    }
}

add_action('uwp_account_menu_display', 'uwp_add_account_menu_links');

/**
 * Prints "Edit account" page subtab / submenu links. Ex: Privacy
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      void
 */
function uwp_add_account_menu_links() {

    if (isset($_GET['type'])) {
        $type = strip_tags(esc_sql($_GET['type']));
    } else {
        $type = 'account';
    }

    $account_page = uwp_get_page_id('account_page', false);
    $account_page_link = get_permalink($account_page);

    $account_available_tabs = uwp_account_get_available_tabs();

    if (!is_array($account_available_tabs) && count($account_available_tabs) > 0) {
        return;
    }

    echo '<ul class="uwp_account_menu">';

    foreach( $account_available_tabs as $tab_id => $tab ) {

        if ($tab_id == 'account') {
            $tab_url = $account_page_link;
        } else {
            $tab_url = add_query_arg(array(
                'type' => $tab_id,
            ), $account_page_link);
        }

        if (isset($tab['link'])) {
            $tab_url = $tab['link'];
        }

        $active = $type == $tab_id ? ' active' : '';
        ?>
        <li id="uwp-account-<?php echo $tab_id; ?>">
            <a class="<?php echo $active; ?>" href="<?php echo esc_url( $tab_url ); ?>">
                <i class="<?php echo $tab['icon']; ?>"></i> <?php echo $tab['title']; ?>
            </a>
        </li>
        <?php
    }

    $template = new UsersWP_Templates();
    $logout_url = $template->uwp_logout_url();
    echo '<li id="uwp-account-logout"><a class="uwp-account-logout-link" href="'.$logout_url.'"><i class="fas fa-sign-out-alt"></i>'.__('Logout', 'userswp').'</a></li>';
    echo '</ul>';
}




/**
 * Updates extras fields sort order.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       array       $field_ids      Form extras field ids.
 * @param       string      $form_type      Form type.
 *
 * @return      array|bool                  Sorted field ids.
 */
function uwp_form_extras_field_order($field_ids = array(), $form_type = 'register')
{
    global $wpdb;
    $extras_table_name = uwp_get_table_prefix() . 'uwp_form_extras';

    $count = 0;
    if (!empty($field_ids)):
        foreach ($field_ids as $id) {

            $cf = trim($id, '_');

            $wpdb->query(
                $wpdb->prepare(
                    "update " . $extras_table_name . " set
															sort_order=%d
															where id= %d",
                    array($count, $cf)
                )
            );
            $count++;
        }

        return $field_ids;
    else:
        return false;
    endif;
}

/**
 * Uppercase the first character of each word in a string.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $string     String to convert.
 * @param       string      $charset    Charset.
 *
 * @return      string                  Converted string.
 */
function uwp_ucwords($string, $charset='UTF-8') {
    if (function_exists('mb_convert_case')) {
        return mb_convert_case($string, MB_CASE_TITLE, $charset);
    } else {
        return ucwords($string);
    }
}

/**
 * Checks whether the column exists in the table.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $db             Table name.
 * @param       string      $column         Column name.
 *
 * @return      bool
 */
function uwp_column_exist($db, $column)
{
    $table = new UsersWP_Tables();
    return $table->column_exists($db, $column);
}

/**
 * Adds column if not exist in the table.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $db             Table name.
 * @param       string      $column         Column name.
 * @param       string      $column_attr    Column attributes.
 *
 * @return      bool|int                    True when success.
 */
function uwp_add_column_if_not_exist($db, $column, $column_attr = "VARCHAR( 255 ) NOT NULL")
{
    $table = new UsersWP_Tables();
    return $table->add_column_if_not_exist($db, $column, $column_attr);

}

/**
 * Returns excluded custom fields.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      array   Excluded custom fields.
 */
function uwp_get_excluded_fields() {
    $excluded = array(
        'uwp_account_password',
        'uwp_account_confirm_password',
    );
    return $excluded;
}

/**
 * Formats the currency using currency separator.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string              $number     Currency number.
 * @param       array|string        $cf         Custom field info.
 *
 * @return      string                          Formatted currency.
 */
function uwp_currency_format_number($number='',$cf=''){

    $cs = isset($cf['extra_fields']) ? maybe_unserialize($cf['extra_fields']) : '';

    $symbol = isset($cs['currency_symbol']) ? $cs['currency_symbol'] : '$';
    $decimals = isset($cf['decimal_point']) && $cf['decimal_point'] ? $cf['decimal_point'] : 2;
    $decimal_display = isset($cf['decimal_display']) && $cf['decimal_display'] ? $cf['decimal_display'] : 'if';
    $decimalpoint = '.';

    if(isset($cs['decimal_separator']) && $cs['decimal_separator']=='comma'){
        $decimalpoint = ',';
    }

    $separator = ',';

    if(isset($cs['thousand_separator'])){
        if($cs['thousand_separator']=='comma'){$separator = ',';}
        if($cs['thousand_separator']=='slash'){$separator = '\\';}
        if($cs['thousand_separator']=='period'){$separator = '.';}
        if($cs['thousand_separator']=='space'){$separator = ' ';}
        if($cs['thousand_separator']=='none'){$separator = '';}
    }

    $currency_symbol_placement = isset($cs['currency_symbol_placement']) ? $cs['currency_symbol_placement'] : 'left';

    if($decimals>0 && $decimal_display=='if'){
        if(is_int($number) || floor( $number ) == $number)
            $decimals = 0;
    }

    $number = number_format($number,$decimals,$decimalpoint,$separator);



    if($currency_symbol_placement=='left'){
        $number = $symbol . $number;
    }else{
        $number = $number . $symbol;
    }


    return $number;
}


/**
 * Checks whether the user can make his/her own profile private or not.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      bool
 */
function uwp_can_make_profile_private() {
    $make_profile_private = apply_filters('uwp_user_can_make_profile_private', false);
    return $make_profile_private;
}

/**
 * Returns available registration status options.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      array       Registration status options.
 */
function uwp_registration_status_options() {
    $registration_options = array(
        'auto_approve' =>  __('Auto approve', 'userswp'),
        'auto_approve_login' =>  __('Auto approve + Auto Login', 'userswp'),
        'require_email_activation' =>  __('Require Email Activation', 'userswp'),
    );

    $registration_options = apply_filters('uwp_registration_status_options', $registration_options);

    return $registration_options;
}

/**
 * Retrieves a user row based on password reset key and login
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string         $key       Hash to validate sending user's password.
 * @param       string         $login     The user login.
 *
 * @return      WP_Error|WP_User          User object.
 */
function uwp_check_activation_key( $key, $login ) {
    $user_data = check_password_reset_key( $key, $login );

    return $user_data;
}


add_action('uwp_template_fields', 'uwp_template_fields_terms_check', 100, 1);

/**
 * Adds "Accept terms and conditions" checkbox in register form.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $form_type      Form type.
 *
 * @return      void
 */
function uwp_template_fields_terms_check($form_type) {
    if ($form_type == 'register') {
        $terms_page = false;
        $reg_terms_page_id = uwp_get_page_id('register_terms_page', false);
        $reg_terms_page_id = apply_filters('uwp_reg_terms_page_id', $reg_terms_page_id);
        if (!empty($reg_terms_page_id)) {
            $terms_page = get_permalink($reg_terms_page_id);
        }
        if ($terms_page) {
            ?>
            <div class="uwp-remember-me">
                <label style="display: inline-block;font-weight: normal" for="agree_terms">
                    <input name="agree_terms" id="agree_terms" value="yes" type="checkbox">
                    <?php echo sprintf( __( 'I Accept <a href="%s" target="_blank">Terms and Conditions</a>.', 'userswp' ), $terms_page); ?>
                </label>
            </div>
            <?php
        }
    }
}



/**
 * Redirects the user to login page when email not confirmed.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $username       Username.
 * @param       object      $user           User object.
 *
 * @return      void
 */
function uwp_unconfirmed_login_redirect( $username, $user ) {
    if (!is_wp_error($user)) {
        $mod_value = get_user_meta( $user->ID, 'uwp_mod', true );
        if ($mod_value == 'email_unconfirmed') {
            if ( !in_array( 'administrator', $user->roles ) ) {
                $login_page = uwp_get_page_id('login_page', false);
                if ($login_page) {
                    $redirect_to = add_query_arg(array('uwp_err' => 'act_pending'), get_permalink($login_page));
                    wp_destroy_current_session();
                    wp_clear_auth_cookie();
                    wp_redirect($redirect_to);
                    exit();
                }
            }
        }
    }
}
add_filter( 'wp_login', 'uwp_unconfirmed_login_redirect', 10, 2 );

/**
 * Adds notification menu in admin toolbar.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      void
 */
function uwp_notifications_toolbar_menu() {
    global $wp_admin_bar;

    if ( ! is_user_logged_in() ) {
        return;
    }

    $available_counts = apply_filters('uwp_notifications_available_counts', array());

    if (count($available_counts) == 0) {
        return;
    }

    $total_count = 0;
    foreach ($available_counts as $key => $value) {
        $total_count = $total_count + $value;
    }


    $alert_class   = (int) $total_count > 0 ? 'pending-count' : 'count';
    $menu_title    = '<span id="uwp-notification-count" class="' . $alert_class . '">'
        . number_format_i18n( $total_count ) . '</span>';
    $menu_link     = '';

    // Add the top-level Notifications button.
    $wp_admin_bar->add_menu( array(
        'parent'    => 'top-secondary',
        'id'        => 'uwp-notifications',
        'title'     => $menu_title,
        'href'      => $menu_link,
    ) );

    do_action('uwp_notifications_items', $wp_admin_bar);

    return;
}
add_action( 'admin_bar_menu', 'uwp_notifications_toolbar_menu', 90 );

/**
 * Returns the installation type.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      string      Installation type.
 */
function uwp_get_installation_type() {
    // *. Single Site
    if (!is_multisite()) {
        return "single";
    } else {
        // Multisite
        if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
            require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
        }

        // Network active.
        if ( is_plugin_active_for_network( 'userswp/userswp.php' ) ) {
            if (defined('UWP_ROOT_PAGES')) {
                if (UWP_ROOT_PAGES == 'all') {
                    // *. Multisite - Network Active - Pages on all sites
                    return "multi_na_all";
                } else {
                    // *. Multisite - Network Active - Pages on specific site
                    return "multi_na_site_id";
                }
            } else {
                // Multi - network active - default
                // *. Multisite - Network Active - Pages on main site
                return "multi_na_default";
            }
        } else {
            // * Multisite - Not network active
            return "multi_not_na";
        }
    }
}

/**
 * Returns the table prefix based on the installation type.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      string      Table prefix
 */
function uwp_get_table_prefix() {
    $tables = new UsersWP_Tables();
    return $tables->get_table_prefix();
}

/**
 * Returns the table prefix based on the installation type.
 *
 * @since       1.0.16
 * @package     userswp
 *
 * @return      string      Table prefix
 */
function get_usermeta_table_prefix() {
    $tables = new UsersWP_Tables();
    return $tables->get_usermeta_table_prefix();
}



/**
 * Converts array to comma separated string.
 *
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $key        Custom field key.
 * @param       string      $value      Custom field value.
 *
 * @return      string                  Converted custom field value string.
 */
function uwp_maybe_serialize($key, $value) {
    $field = uwp_get_custom_field_info($key);
    if (isset($field->field_type) && $field->field_type == 'multiselect') {
        $value = implode(",", $value);
    }
    return $value;
}

/**
 * Converts comma separated string to array.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $key        Custom field key.
 * @param       string      $value      Custom field value.
 *
 * @return      array                   Converted custom field value array.
 */
function uwp_maybe_unserialize($key, $value) {
    $field = uwp_get_custom_field_info($key);
    if (isset($field->field_type) && $field->field_type == 'multiselect') {
        $value = explode(",", $value);
    }
    return $value;
}

/**
 * Creates UsersWP related tables.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      void
 */
function uwp_create_tables()
{
    $tables = new UsersWP_Tables();
    $tables->uwp_create_tables();
}

/**
 * Creates uwp_usermeta table which introduced in version 1.0.1
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      void
 */
function uwp101_create_tables() {
    $tables = new UsersWP_Tables();
    $tables->uwp101_create_tables();
}

/**
 * Returns tye client IP.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @return      string      IP address.
 */
function uwp_get_ip() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        //check ip from share internet
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        //to check ip is pass from proxy
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }

    return apply_filters('uwp_get_ip', $ip);
}

/**
 * Checks whether the string starts with the given string.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $haystack       String to compare with.
 * @param       string      $needle         String to search for.
 *
 * @return      bool                        True when success. False when failure.
 */
function uwp_str_starts_with($haystack, $needle)
{
    $length = strlen($needle);
    return (substr($haystack, 0, $length) === $needle);
}

/**
 * Checks whether the string ends with the given string.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $haystack       String to compare with.
 * @param       string      $needle         String to search for.
 *
 * @return      bool                        True when success. False when failure.
 */
function uwp_str_ends_with($haystack, $needle)
{
    $length = strlen($needle);
    if ($length == 0) {
        return true;
    }

    return (substr($haystack, -$length) === $needle);
}

/**
 * Returns the font awesome icon value for field type. 
 * Displayed in profile tabs.
 *
 * @since       1.0.0
 * @package     userswp
 *
 * @param       string      $type       Field type.
 *
 * @return      string                  Font awesome icon value.
 */
function uwp_field_type_to_fa_icon($type) {
    $field_types = array(
        'text' => 'fas fa-minus',
        'datepicker' => 'fas fa-calendar-alt',
        'textarea' => 'fas fa-bars',
        'time' =>'far fa-clock',
        'checkbox' =>'far fa-check-square',
        'phone' =>'far fa-phone',
        'radio' =>'far fa-dot-circle',
        'email' =>'far fa-envelope',
        'select' =>'far fa-caret-square-down',
        'multiselect' =>'far fa-caret-square-down',
        'url' =>'fas fa-link',
        'file' =>'fas fa-file'
    );

    if (isset($field_types[$type])) {
        return $field_types[$type];
    } else {
        return "";
    }
    
}

/**
 * Check wpml active or not.
 *
 * @since 1.0.7
 *
 * @return True if WPML is active else False.
 */
function uwp_is_wpml() {
    if (class_exists('SitePress') && function_exists('icl_object_id')) {
        return true;
    }

    return false;
}

/**
 * Get the element in the WPML current language.
 *
 * @since 1.0.7
 *
 * @param int         $element_id                 Use term_id for taxonomies, post_id for posts
 * @param string      $element_type               Use post, page, {custom post type name}, nav_menu, nav_menu_item, category, tag, etc.
 *                                                You can also pass 'any', to let WPML guess the type, but this will only work for posts.
 * @param bool        $return_original_if_missing Optional, default is FALSE. If set to true it will always return a value (the original value, if translation is missing).
 * @param string|NULL $ulanguage_code              Optional, default is NULL. If missing, it will use the current language.
 *                                                If set to a language code, it will return a translation for that language code or
 *                                                the original if the translation is missing and $return_original_if_missing is set to TRUE.
 *
 * @return int|NULL
 */
function uwp_wpml_object_id( $element_id, $element_type = 'post', $return_original_if_missing = false, $ulanguage_code = null ) {
    if ( uwp_is_wpml() ) {
        if ( function_exists( 'wpml_object_id_filter' ) ) {
            return apply_filters( 'wpml_object_id', $element_id, $element_type, $return_original_if_missing, $ulanguage_code );
        } else {
            return icl_object_id( $element_id, $element_type, $return_original_if_missing, $ulanguage_code );
        }
    }

    return $element_id;
}

function uwp_get_default_avatar_uri(){
    $default = uwp_get_option('profile_default_profile', '');
    if(empty($default)){
        $default = USERSWP_PLUGIN_URL."public/assets/images/no_profile.png";
    } else {
        $default = wp_get_attachment_url($default);
    }

    return $default;
}

function uwp_refresh_permalinks_on_bad_404() {

    global $wp;

    if( ! is_404() ) {
        return;
    }

    if( isset( $_GET['uwp-flush'] ) ) {
        return;
    }

    if( false === get_transient( 'uwp_refresh_404_permalinks' ) ) {

        flush_rewrite_rules( false );

        set_transient( 'uwp_refresh_404_permalinks', 1, HOUR_IN_SECONDS * 12 );

        wp_redirect( home_url( add_query_arg( array( 'uwp-flush' => 1 ), $wp->request ) ) ); exit;

    }
}
add_action( 'template_redirect', 'uwp_refresh_permalinks_on_bad_404' );

add_filter( 'avatar_defaults', 'uwp_avatar_defaults' , 99999 , 6 );
/*
 * Remove get_avatar filter applied by UWP for default avatars in settings
 * @param array $avatar_defaults default avatars
 * @return array $avatar_defaults default avatars
 *
 */
function uwp_avatar_defaults($avatar_defaults){
    remove_filter('get_avatar', 'uwp_modify_get_avatar', 99999, 6);
    return $avatar_defaults;
}

remove_all_filters('get_avatar');
add_filter( 'get_avatar', 'uwp_modify_get_avatar' , 99999 , 6 );
/**
 * Modifies get_avatar function to use userswp avatar.
 *
 * @since       1.0.0
 * @package     userswp
 * @param       string      $avatar         img tag value for the user's avatar.
 * @param       mixed       $id_or_email    The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
 *                                          user email, WP_User object, WP_Post object, or WP_Comment object.
 * @param       int         $size           Square avatar width and height in pixels to retrieve.
 * @param       string      $default        URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
 *                                          'wavatar', 'indenticon','mystery' (or 'mm', or 'mysteryman'), 'blank', or 'gravatar_default'.
 *                                          Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
 * @param       string      $alt            Alternative text to use in the avatar image tag. Default empty.
 * @return      string                      Modified img tag value
 */
function uwp_modify_get_avatar( $avatar, $id_or_email, $size, $default, $alt, $args )
{
    $user = false;

    if (is_numeric($id_or_email)) {

        $id = (int)$id_or_email;
        $user = get_user_by('id', $id);

    } elseif (is_object($id_or_email)) {

        if (!empty($id_or_email->user_id)) {
            $id = (int)$id_or_email->user_id;
            $user = get_user_by('id', $id);
        }

    } else {
        $user = get_user_by('email', $id_or_email);
    }

    if ($user && is_object($user)) {
        $avatar_thumb = uwp_get_usermeta($user->data->ID, 'uwp_account_avatar_thumb', '');
        if (!empty($avatar_thumb)) {
            $uploads = wp_upload_dir();
            $upload_url = $uploads['baseurl'];
            if (substr($avatar_thumb, 0, 4) !== "http") {
                $avatar_thumb = $upload_url . $avatar_thumb;
            }
            $avatar = "<img alt='{$alt}' src='{$avatar_thumb}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
        } else {
            $default = uwp_get_default_avatar_uri();
            $args = get_avatar_data($id_or_email, $args);
            $url = $args['url'];
            $url = remove_query_arg('d', $url);
            $url = add_query_arg(array('d' => $default), $url);
            if (!$url || is_wp_error($url)) {
                return $avatar;
            }
            $avatar = '<img src="' . $url . '" class="gravatar avatar avatar-' . $size . ' uwp-avatar" width="' . $size . '" height="' . $size . '" alt="' . $alt . '" />';
        }

    }

    return $avatar;
}

/**
 * Handles multisite upload dir path
 *
 * @param $uploads array upload variable array
 *
 * @return array updated upload variable array.
 */
function uwp_handle_multisite_profile_image($uploads){
    if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
        require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
    }

    // Network active.
    if ( is_plugin_active_for_network( 'userswp/userswp.php' ) ) {
        $main_site = get_network()->site_id;
        switch_to_blog( $main_site );
        remove_filter( 'upload_dir', 'uwp_handle_multisite_profile_image');
        $uploads = wp_upload_dir();
        restore_current_blog();
    }

    return $uploads;
}

/**
 * let_to_num function.
 *
 * This function transforms the php.ini notation for numbers (like '2M') to an integer.
 *
 * @since 2.0.0
 * @param $size
 * @return int
 */
function uwp_let_to_num( $size ) {
    $l   = substr( $size, -1 );
    $ret = substr( $size, 0, -1 );
    switch ( strtoupper( $l ) ) {
        case 'P':
            $ret *= 1024;
        case 'T':
            $ret *= 1024;
        case 'G':
            $ret *= 1024;
        case 'M':
            $ret *= 1024;
        case 'K':
            $ret *= 1024;
    }
    return $ret;
}

function uwp_format_decimal($number, $dp = false, $trim_zeros = false){
    $locale   = localeconv();
    $decimals = array( uwp_get_decimal_separator(), $locale['decimal_point'], $locale['mon_decimal_point'] );

    // Remove locale from string.
    if ( ! is_float( $number ) ) {
        $number = str_replace( $decimals, '.', $number );
        $number = preg_replace( '/[^0-9\.,-]/', '', uwp_clean( $number ) );
    }

    if ( false !== $dp ) {
        $dp     = intval( '' == $dp ? uwp_get_decimal_separator() : $dp );
        $number = number_format( floatval( $number ), $dp, '.', '' );
        // DP is false - don't use number format, just return a string in our format
    } elseif ( is_float( $number ) ) {
        // DP is false - don't use number format, just return a string using whatever is given. Remove scientific notation using sprintf.
        $number     = str_replace( $decimals, '.', sprintf( '%.' . uwp_get_rounding_precision() . 'f', $number ) );
        // We already had a float, so trailing zeros are not needed.
        $trim_zeros = true;
    }

    if ( $trim_zeros && strstr( $number, '.' ) ) {
        $number = rtrim( rtrim( $number, '0' ), '.' );
    }

    return $number;
}

/**
 * Return the decimal separator.
 * @since  1.0.20
 * @return string
 */
function uwp_get_decimal_separator() {
    $separator = apply_filters( 'uwp_decimal_separator', '.' );
    return $separator ? stripslashes( $separator ) : '.';
}

/**
 * Get rounding precision for internal UWP calculations.
 * Will increase the precision of uwp_get_decimal_separator by 2 decimals, unless UWP_ROUNDING_PRECISION is set to a higher number.
 *
 * @since 1.0.20
 * @return int
 */
function uwp_get_rounding_precision() {
    $precision = uwp_get_decimal_separator() + 2;
    if ( absint( UWP_ROUNDING_PRECISION ) > $precision ) {
        $precision = absint( UWP_ROUNDING_PRECISION );
    }
    return $precision;
}

/**
 * Clean variables using sanitize_text_field. Arrays are cleaned recursively.
 * Non-scalar values are ignored.
 *
 * @param string|array $var
 *
 * @return string|array
 */
function uwp_clean( $var ) {

    if ( is_array( $var ) ) {
        return array_map( 'uwp_clean', $var );
    } else {
        return is_scalar( $var ) ? sanitize_text_field( $var ) : $var;
    }

}

/**
 * Define a constant if it is not already defined.
 *
 * @since 1.0.21
 *
 * @param string $name Constant name.
 * @param string $value Value.
 */
function uwp_maybe_define( $name, $value ) {
    if ( ! defined( $name ) ) {
        define( $name, $value );
    }
}

function uwp_insert_usermeta(){
    global $wpdb;
    $sort= "user_registered";

    $all_users_id = $wpdb->get_col( $wpdb->prepare(
        "SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY %s ASC"
        , $sort ));

    //we got all the IDs, now loop through them to get individual IDs
    foreach ( $all_users_id as $user_id ) {
        $user_data = get_userdata($user_id);

        $meta_table = get_usermeta_table_prefix() . 'uwp_usermeta';
        $user_meta = array(
            'uwp_account_username' => $user_data->user_login,
            'uwp_account_email' => $user_data->user_email,
            'uwp_account_first_name' => $user_data->first_name,
            'uwp_account_last_name' => $user_data->last_name,
            'uwp_account_display_name' => $user_data->display_name,
        );

        $users = $wpdb->get_var($wpdb->prepare("SELECT COUNT(user_id) FROM {$meta_table} WHERE user_id = %d", $user_id));

        if(!empty($users)) {
            $wpdb->update(
                $meta_table,
                $user_meta,
                array('user_id' => $user_id)
            );
        }  else {
            $user_meta['user_id'] = $user_id;
            $wpdb->insert(
                $meta_table,
                $user_meta
            );
        }
    }
}

function uwp_get_localize_data(){
    $uwp_localize_data = array(
        'uwp_more_char_limit' => '100',
        'uwp_more_text' => __('more','userswp'),
        'uwp_less_text' => __('less','userswp'),
        'uwp_more_ellipses_text' => '...',
    );

    return apply_filters('uwp_localize_data', $uwp_localize_data);
}
```
