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( stripslashes( $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 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, $wp_error = false ) { uwp_set_php_limits(); // Ignore image creation warnings @ini_set( 'gd.jpeg_ignore_warning', 1 ); $newImageWidth = ceil( $src_w * $scale ); $newImageHeight = ceil( $src_h * $scale ); /** @noinspection PhpUnusedLocalVariableInspection */ list( $imagewidth, $imageheight, $imageType ) = getimagesize( $image ); $imageType = image_type_to_mime_type( $imageType ); if ( function_exists( 'wp_crop_image' ) ) { $wp_crop = ! in_array( $imageType, array( 'image/gif', 'image/pjpeg', 'image/jpeg', 'image/jpg', 'image/png', 'image/x-png', 'image/webp' ) ) ? true : false; $wp_crop = apply_filters( 'uwp_resize_image_use_wp_crop_image', $wp_crop, $imageType, $image, $thumb_image_name, $x, $y, $src_w, $src_h, $scale ); if ( $wp_crop ) { $cropped = wp_crop_image( $image, $x, $y, $src_w, $src_h, $newImageWidth, $newImageHeight, false, $thumb_image_name ); if ( $wp_error && is_wp_error( $cropped ) ) { return $cropped; } return $thumb_image_name; } } $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 ); if ( apply_filters( 'uwp_keep_png_transperent', true, $thumb_image_name, $image, $x, $y, $src_w, $src_h ) ) { $background = imagecolorallocate( $newImage, 0, 0, 0 ); imagecolortransparent( $newImage, $background ); imagealphablending( $newImage, false ); imagesavealpha( $newImage, true ); } break; case "image/webp": if (function_exists('imagecreatefromwebp')) { $source = imagecreatefromwebp($image); imagealphablending($newImage, false); imagesavealpha($newImage, true); } break; } imagecopyresampled( $newImage, $source, 0, 0, $x, $y, $newImageWidth, $newImageHeight, $src_w, $src_h ); $quality = apply_filters( 'uwp_resize_thumb_quality', 100 ); 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, $quality ); break; case "image/png": case "image/x-png": imagepng( $newImage, $thumb_image_name ); break; case "image/webp": if (function_exists('imagewebp')) { imagewebp( $newImage, $thumb_image_name, $quality ); } else { imagepng( $newImage, $thumb_image_name ); } break; } chmod( $thumb_image_name, 0777 ); imagedestroy($newImage); imagedestroy($source); return $thumb_image_name; } /** * Try to set higher limits on the fly */ function uwp_set_php_limits() { error_reporting( 0 ); // try to set higher limits for import $max_input_time = ini_get( 'max_input_time' ); $max_execution_time = ini_get( 'max_execution_time' ); $memory_limit = ini_get( 'memory_limit' ); if ( $max_input_time !== 0 && $max_input_time != -1 && ( ! $max_input_time || $max_input_time < 3000 ) ) { ini_set( 'max_input_time', 3000 ); } if ( $max_execution_time !== 0 && ( ! $max_execution_time || $max_execution_time < 3000 ) ) { ini_set( 'max_execution_time', 3000 ); } if ( $memory_limit && str_replace( 'M', '', $memory_limit ) ) { if ( str_replace( 'M', '', $memory_limit ) < 256 ) { ini_set( 'memory_limit', '256M' ); } } ini_set( 'auto_detect_line_endings', true ); } /** * 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 debugging setting for function uwp_error_log(). */ $should_log = apply_filters( 'uwp_log_errors', uwp_get_option('enable_uwp_error_log', 0)); if ( 1 == $should_log ) { if ( is_array( $log ) || is_object( $log ) ) { error_log( print_r( $log, true ) ); } else { error_log( $log ); } } } function uwp_get_excluded_users_list() { $args = 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($args); $exclude_users = $inactive_users->get_results(); $excluded_globally = uwp_get_option('users_excluded_from_list'); if ( !empty($excluded_globally) ) { if(is_array($excluded_globally)) { $exclude_users = array_merge($exclude_users, $excluded_globally); } else { $excluded_users = str_replace(' ', '', $excluded_globally); $users_array = explode(',', $excluded_users); $exclude_users = array_merge($exclude_users, $users_array); } } return $exclude_users; } /** * Prints the users page main content. * * @since 1.0.0 * @package userswp * * @return array $users array of users */ function get_uwp_users_list($roles = array()) { global $wpdb; $keyword = false; if (isset($_GET['uwps']) && $_GET['uwps'] != '') { $keyword = stripslashes(strip_tags($_GET['uwps'])); } if ( is_front_page() ) { $paged = ( get_query_var( 'page' ) ) ? absint( get_query_var( 'page' ) ) : 1; } else { $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; } $number = uwp_get_option('users_no_of_items', 10); $number = !empty($number) ? $number : 10; $where = ''; $where = apply_filters('uwp_users_search_where', $where, $keyword); $exclude_users = uwp_get_excluded_users_list(); $exclude_users = apply_filters('uwp_excluded_users_from_list', $exclude_users, $where, $keyword); $exclude_users = !empty($exclude_users) ? array_unique($exclude_users): array(); $exclude_query = ' ';$order_by = 'uwp_meta_value'; $order = 'ASC'; if (isset($_GET['uwp_sort_by']) && $_GET['uwp_sort_by'] != '') { $sort_by = strip_tags(esc_sql($_GET['uwp_sort_by'])); } else { $sort_by = ''; } if ($sort_by) { switch ( $sort_by ) { case "newer": $order_by = 'registered'; $order = 'DESC'; break; case "older": $order_by = 'registered'; $order = 'ASC'; break; } } if(!empty($exclude_users)) { $exclude_users_list = implode(',', $exclude_users); $exclude_query = 'AND '. $wpdb->users.'.ID NOT IN ('.$exclude_users_list.')'; } $users = array(); if($keyword || $where ) { if (empty($where)) { $user_query = $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 ) ORDER BY display_name ASC", array( '%' . $keyword . '%', '%' . $keyword . '%', '%' . $keyword . '%', '%' . $keyword . '%', '%' . $keyword . '%', ) ); } else{ $usermeta_table = get_usermeta_table_prefix() . 'uwp_usermeta'; $keyword_query = ''; if($keyword) { $keyword_query = " AND (( $wpdb->usermeta.meta_key = 'first_name' AND $wpdb->usermeta.meta_value LIKE '$keyword' ) OR ( $wpdb->usermeta.meta_key = 'last_name' AND $wpdb->usermeta.meta_value LIKE '$keyword' ) OR 'user_login' LIKE '$keyword' OR 'user_nicename' LIKE '$keyword' OR 'display_name' LIKE '$keyword')"; } $user_query = "SELECT DISTINCT SQL_CALC_FOUND_ROWS $wpdb->users.* FROM $wpdb->users INNER JOIN $wpdb->usermeta ON ( $wpdb->users.ID = $wpdb->usermeta.user_id ) INNER JOIN $usermeta_table ON ( $wpdb->users.ID = $usermeta_table.user_id ) WHERE 1=1 $keyword_query $exclude_query $where ORDER BY display_name ASC"; } $user_results = $wpdb->get_results($user_query); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $get_users = wp_list_pluck($user_results, 'ID'); if(isset($roles) && is_array($roles) && count($roles) > 0){ $users = get_users( array( 'role__in' => $roles, 'fields' => array('ID') ) ); $users = wp_list_pluck( $users, 'ID' ); if($get_users && count($get_users) > 0 && $users && count($users) > 0){ foreach ($get_users as $key => $get_user){ if(!in_array($get_user, $users)){ unset($get_users[$key]); } } } } if(!empty($get_users) && is_array($get_users) && count($get_users) > 0){ $args = array( 'include' => $get_users, 'number' => (int) $number, 'paged' => (int) $paged, ); if(!empty($exclude_users)) { $args['exclude'] = $exclude_users; } if(!empty($meta_key)) { $args['meta_key'] = $meta_key; } if(!empty($order_by) && !empty($order) ) { $args['orderby'] = $order_by; $args['order'] = $order; } $uwp_users_query = new WP_User_Query($args); $users['users'] = $uwp_users_query->get_results(); $users['total_users'] = $uwp_users_query->get_total(); } else { $users['users'] = array(); $users['total_users'] = 0; } } else { $args = array( 'number' => (int) $number, 'paged' => (int) $paged, ); $roles_args = array( 'fields' => array('ID'), ); if(!empty($exclude_users)) { $args['exclude'] = $exclude_users; $roles_args['exclude'] = $exclude_users; } if(isset($roles) && is_array($roles) && count($roles) > 0){ $include_users = array(); $roles_args['role__in'] = $roles; $users = get_users( $roles_args ); $users = wp_list_pluck( $users, 'ID' ); if($users && count($users) > 0){ $include_users = array_merge($include_users, $users); $args['include'] = $include_users; } } if(!empty($meta_key)) { $args['meta_key'] = $meta_key; } if(!empty($order_by) && !empty($order) ) { $args['orderby'] = $order_by; $args['order'] = $order; } $uwp_users_query = new WP_User_Query($args); $users['users'] = $uwp_users_query->get_results(); $users['total_users'] = $uwp_users_query->get_total(); } return $users; } /** * 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($layout, $count_only = false) { if(!$layout){ if(uwp_get_option("design_style",'bootstrap')){ $value = '3col'; } else { $value = 'list'; } $layout = uwp_get_option('users_default_layout', $value); } switch ($layout) { case "list": $class = "uwp_listview"; $bs_class = "row-cols-md-1"; $col_count = 1; break; case "2col": $class = "uwp_gridview uwp_gridview_2col"; $bs_class = "row-cols-md-2"; $col_count = 2; break; case "3col": $class = "uwp_gridview uwp_gridview_3col"; $bs_class = "row-cols-md-3"; $col_count = 3; break; case "4col": $class = "uwp_gridview uwp_gridview_4col"; $bs_class = "row-cols-md-4"; $col_count = 4; break; case "5col": $class = "uwp_gridview uwp_gridview_5col"; $bs_class = "row-cols-md-5"; $col_count = 5; break; default: $class = "uwp_listview"; $bs_class = "row-cols-md-3"; $col_count = 1; } if($count_only){ return $col_count; } if(uwp_get_option("design_style",'bootstrap')){ return $bs_class; } return $class; } add_filter( 'uwp_users_list_ul_extra_class', 'uwp_get_layout_class', 10, 1 ); 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; } // 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 Title. */ function uwp_account_privacy_page_title($title, $type) { if ($type == 'privacy') { $title = __( 'Privacy', 'userswp' ); } elseif ($type == 'notifications') { $title = __( 'E-Mail Notifications', 'userswp' ); } elseif ($type == 'delete-account') { $title = __( 'Delete Account', 'userswp' ); } elseif ($type == 'change-password') { $title = __( 'Change Password', 'userswp' ); } elseif ($type == 'wp2fa') { $title = __( 'Two-factor Authentication Settings', 'userswp' ); } return $title; } 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() { global $aui_bs5; 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; } $legacy = '