PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.2.74
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.2.74
1.2.74 1.2.73 1.2.72 1.2.71 1.2.70 1.2.69 1.2.68 1.2.67 1.2.66 1.2.65 1.2.64 1.2.63 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 All 174 releases
← All changes | includes/helpers/misc.php +1614 -1187 1.0.201.2.74 View file →
@@ -1,5 +1,6 @@
1 1 <?php
2 +
2 3 /**
3 4 * Converts string value to options array.
4 5 * Used in select, multiselect and radio fields.
5 6 * Wraps inside optgroup if available.
@@ -13,55 +14,55 @@
13 14 * @return array|null Options array.
14 15 */
15 16 function uwp_string_values_to_options($option_values = '', $translated = false)
16 17 {
17 - $options = array();
18 - if ($option_values == '') {
19 - return NULL;
20 - }
18 + $options = array();
19 + if ($option_values == '') {
20 + return NULL;
21 + }
21 22
22 - if (strpos($option_values, "{/optgroup}") !== false) {
23 - $option_values_arr = explode("{/optgroup}", $option_values);
23 + if (strpos($option_values, "{/optgroup}") !== false) {
24 + $option_values_arr = explode("{/optgroup}", $option_values);
24 25
25 - foreach ($option_values_arr as $optgroup) {
26 - if (strpos($optgroup, "{optgroup}") !== false) {
27 - $optgroup_arr = explode("{optgroup}", $optgroup);
26 + foreach ($option_values_arr as $optgroup) {
27 + if (strpos($optgroup, "{optgroup}") !== false) {
28 + $optgroup_arr = explode("{optgroup}", $optgroup);
28 29
29 - $count = 0;
30 - foreach ($optgroup_arr as $optgroup_str) {
31 - $count++;
32 - $optgroup_str = trim($optgroup_str);
30 + $count = 0;
31 + foreach ($optgroup_arr as $optgroup_str) {
32 + $count++;
33 + $optgroup_str = trim($optgroup_str);
33 34
34 - $optgroup_label = '';
35 - if (strpos($optgroup_str, "|") !== false) {
36 - $optgroup_str_arr = explode("|", $optgroup_str, 2);
37 - $optgroup_label = trim($optgroup_str_arr[0]);
38 - if ($translated && $optgroup_label != '') {
39 - $optgroup_label = __($optgroup_label, 'userswp');
40 - }
41 - $optgroup_label = ucfirst($optgroup_label);
42 - $optgroup_str = $optgroup_str_arr[1];
43 - }
35 + $optgroup_label = '';
36 + if (strpos($optgroup_str, "|") !== false) {
37 + $optgroup_str_arr = explode("|", $optgroup_str, 2);
38 + $optgroup_label = trim($optgroup_str_arr[0]);
39 + if ($translated && $optgroup_label != '') {
40 + $optgroup_label = __($optgroup_label, 'userswp');
41 + }
42 + $optgroup_label = ucfirst($optgroup_label);
43 + $optgroup_str = $optgroup_str_arr[1];
44 + }
44 45
45 - $optgroup3 = uwp_string_to_options($optgroup_str, $translated);
46 + $optgroup3 = uwp_string_to_options($optgroup_str, $translated);
46 47
47 - if ($count > 1 && $optgroup_label != '' && !empty($optgroup3)) {
48 - $optgroup_start = array(array('label' => $optgroup_label, 'value' => NULL, 'optgroup' => 'start'));
49 - $optgroup_end = array(array('label' => $optgroup_label, 'value' => NULL, 'optgroup' => 'end'));
50 - $optgroup3 = array_merge($optgroup_start, $optgroup3, $optgroup_end);
51 - }
52 - $options = array_merge($options, $optgroup3);
53 - }
54 - } else {
55 - $optgroup1 = uwp_string_to_options($optgroup, $translated);
56 - $options = array_merge($options, $optgroup1);
57 - }
58 - }
59 - } else {
60 - $options = uwp_string_to_options($option_values, $translated);
61 - }
48 + if ($count > 1 && $optgroup_label != '' && !empty($optgroup3)) {
49 + $optgroup_start = array(array('label' => $optgroup_label, 'value' => NULL, 'optgroup' => 'start'));
50 + $optgroup_end = array(array('label' => $optgroup_label, 'value' => NULL, 'optgroup' => 'end'));
51 + $optgroup3 = array_merge($optgroup_start, $optgroup3, $optgroup_end);
52 + }
53 + $options = array_merge($options, $optgroup3);
54 + }
55 + } else {
56 + $optgroup1 = uwp_string_to_options($optgroup, $translated);
57 + $options = array_merge($options, $optgroup1);
58 + }
59 + }
60 + } else {
61 + $options = uwp_string_to_options($option_values, $translated);
62 + }
62 63
63 - return $options;
64 + return $options;
64 65 }
65 66
66 67 /**
67 68 * Converts string value to options array.
@@ -76,105 +77,48 @@
76 77 * @return array Options array.
77 78 */
78 79 function uwp_string_to_options($input = '', $translated = false)
79 80 {
80 - $return = array();
81 - if ($input != '') {
82 - $input = trim($input);
83 - $input = rtrim($input, ",");
84 - $input = ltrim($input, ",");
85 - $input = trim($input);
86 - }
81 + $return = array();
82 + if ($input != '') {
83 + $input = trim($input);
84 + $input = rtrim($input, ",");
85 + $input = ltrim($input, ",");
86 + $input = trim($input);
87 + }
87 88
88 - $input_arr = explode(',', $input);
89 + $input_arr = explode(',', $input);
89 90
90 - if (!empty($input_arr)) {
91 - foreach ($input_arr as $input_str) {
92 - $input_str = trim($input_str);
91 + if (!empty($input_arr)) {
92 + foreach ($input_arr as $input_str) {
93 + $input_str = trim(stripslashes($input_str));
93 94
94 - if (strpos($input_str, "/") !== false) {
95 - $input_str = explode("/", $input_str, 2);
96 - $label = trim($input_str[0]);
97 - if ($translated && $label != '') {
98 - $label = __($label, 'userswp');
99 - }
100 - $label = ucfirst($label);
101 - $value = trim($input_str[1]);
102 - } else {
103 - if ($translated && $input_str != '') {
104 - $input_str = __($input_str, 'userswp');
105 - }
106 - $label = ucfirst($input_str);
107 - $value = $input_str;
108 - }
95 + if (strpos($input_str, "/") !== false) {
96 + $input_str = explode("/", $input_str, 2);
97 + $label = trim($input_str[0]);
98 + if ($translated && $label != '') {
99 + $label = __($label, 'userswp');
100 + }
101 + $label = ucfirst($label);
102 + $value = trim($input_str[1]);
103 + } else {
104 + if ($translated && $input_str != '') {
105 + $input_str = __($input_str, 'userswp');
106 + }
107 + $label = ucfirst($input_str);
108 + $value = $input_str;
109 + }
109 110
110 - if ($label != '') {
111 - $return[] = array('label' => $label, 'value' => $value, 'optgroup' => NULL);
112 - }
113 - }
114 - }
111 + if ($label != '') {
112 + $return[] = array('label' => $label, 'value' => $value, 'optgroup' => NULL);
113 + }
114 + }
115 + }
115 116
116 - return $return;
117 + return $return;
117 118 }
118 119
119 -
120 120 /**
121 - * Resizes the image.
122 - *
123 - * @since 1.0.0
124 - * @package userswp
125 - *
126 - * @param string $image Reference a local file
127 - * @param int $width Image width
128 - * @param int $height Image height
129 - * @param float $scale Image scale ratio.
130 - *
131 - * @return mixed Resized image.
132 - */
133 -function uwp_resizeImage($image,$width,$height,$scale) {
134 - /** @noinspection PhpUnusedLocalVariableInspection */
135 - list($imagewidth, $imageheight, $imageType) = getimagesize($image);
136 - $imageType = image_type_to_mime_type($imageType);
137 - $newImageWidth = ceil($width * $scale);
138 - $newImageHeight = ceil($height * $scale);
139 - $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
140 - $source = false;
141 - switch($imageType) {
142 - case "image/gif":
143 - $source=imagecreatefromgif($image);
144 - break;
145 - case "image/pjpeg":
146 - case "image/jpeg":
147 - case "image/jpg":
148 - $source=imagecreatefromjpeg($image);
149 - break;
150 - case "image/png":
151 - case "image/x-png":
152 - $source=imagecreatefrompng($image);
153 - break;
154 - }
155 - imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);
156 -
157 - switch($imageType) {
158 - case "image/gif":
159 - imagegif($newImage,$image);
160 - break;
161 - case "image/pjpeg":
162 - case "image/jpeg":
163 - case "image/jpg":
164 - imagejpeg($newImage,$image,90);
165 - break;
166 - case "image/png":
167 - case "image/x-png":
168 - imagepng($newImage,$image);
169 - break;
170 - }
171 -
172 - chmod($image, 0777);
173 - return $image;
174 -}
175 -
176 -/**
177 121 * Resizes thumbnail image.
178 122 *
179 123 * @since 1.0.0
180 124 * @package userswp
@@ -188,54 +132,131 @@
188 132 * @param float $scale Image scale ratio.
189 133 *
190 134 * @return mixed Resized image.
191 135 */
192 -function uwp_resizeThumbnailImage($thumb_image_name, $image, $x, $y, $src_w, $src_h, $scale){
193 - // ignore image createion warnings
194 - @ini_set('gd.jpeg_ignore_warning', 1);
195 - /** @noinspection PhpUnusedLocalVariableInspection */
196 - list($imagewidth, $imageheight, $imageType) = getimagesize($image);
197 - $imageType = image_type_to_mime_type($imageType);
136 +function uwp_resizeThumbnailImage($thumb_image_name, $image, $x, $y, $src_w, $src_h, $scale, $wp_error = false)
137 +{
138 + uwp_set_php_limits();
198 139
199 - $newImageWidth = ceil($src_w * $scale);
200 - $newImageHeight = ceil($src_h * $scale);
201 - $newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
202 - $source = false;
203 - switch($imageType) {
204 - case "image/gif":
205 - $source=imagecreatefromgif($image);
206 - break;
207 - case "image/pjpeg":
208 - case "image/jpeg":
209 - case "image/jpg":
210 - $source=imagecreatefromjpeg($image);
211 - break;
212 - case "image/png":
213 - case "image/x-png":
214 - $source=imagecreatefrompng($image);
215 - break;
216 - }
217 - imagecopyresampled($newImage,$source,0,0,$x,$y,$newImageWidth, $newImageHeight, $src_w, $src_h);
218 - switch($imageType) {
219 - case "image/gif":
220 - imagegif($newImage, $thumb_image_name);
221 - break;
222 - case "image/pjpeg":
223 - case "image/jpeg":
224 - case "image/jpg":
225 - imagejpeg($newImage, $thumb_image_name, 100);
226 - break;
227 - case "image/png":
228 - case "image/x-png":
229 - imagepng($newImage, $thumb_image_name);
230 - break;
231 - }
140 + // Ignore image creation warnings
141 + @ini_set('gd.jpeg_ignore_warning', 1);
232 142
233 - chmod($thumb_image_name, 0777);
234 - return $thumb_image_name;
143 + $newImageWidth = ceil($src_w * $scale);
144 + $newImageHeight = ceil($src_h * $scale);
145 +
146 + /** @noinspection PhpUnusedLocalVariableInspection */
147 + list($imagewidth, $imageheight, $imageType) = getimagesize($image);
148 + $imageType = image_type_to_mime_type($imageType);
149 +
150 + if (function_exists('wp_crop_image')) {
151 + $wp_crop = ! in_array($imageType, array('image/gif', 'image/pjpeg', 'image/jpeg', 'image/jpg', 'image/png', 'image/x-png', 'image/webp')) ? true : false;
152 + $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);
153 +
154 + if ($wp_crop) {
155 + $cropped = wp_crop_image($image, $x, $y, $src_w, $src_h, $newImageWidth, $newImageHeight, false, $thumb_image_name);
156 +
157 + if ($wp_error && is_wp_error($cropped)) {
158 + return $cropped;
159 + }
160 +
161 + return $thumb_image_name;
162 + }
163 + }
164 +
165 + $newImage = imagecreatetruecolor($newImageWidth, $newImageHeight);
166 + $source = false;
167 +
168 + switch ($imageType) {
169 + case "image/gif":
170 + $source = imagecreatefromgif($image);
171 + break;
172 + case "image/pjpeg":
173 + case "image/jpeg":
174 + case "image/jpg":
175 + $source = imagecreatefromjpeg($image);
176 + break;
177 + case "image/png":
178 + case "image/x-png":
179 + $source = imagecreatefrompng($image);
180 + if (apply_filters('uwp_keep_png_transperent', true, $thumb_image_name, $image, $x, $y, $src_w, $src_h)) {
181 + $background = imagecolorallocate($newImage, 0, 0, 0);
182 +
183 + imagecolortransparent($newImage, $background);
184 + imagealphablending($newImage, false);
185 + imagesavealpha($newImage, true);
186 + }
187 + break;
188 + case "image/webp":
189 + if (function_exists('imagecreatefromwebp')) {
190 + $source = imagecreatefromwebp($image);
191 + imagealphablending($newImage, false);
192 + imagesavealpha($newImage, true);
193 + }
194 + break;
195 + }
196 +
197 + imagecopyresampled($newImage, $source, 0, 0, $x, $y, $newImageWidth, $newImageHeight, $src_w, $src_h);
198 +
199 + $quality = apply_filters('uwp_resize_thumb_quality', 100);
200 +
201 + switch ($imageType) {
202 + case "image/gif":
203 + imagegif($newImage, $thumb_image_name);
204 + break;
205 + case "image/pjpeg":
206 + case "image/jpeg":
207 + case "image/jpg":
208 + imagejpeg($newImage, $thumb_image_name, $quality);
209 + break;
210 + case "image/png":
211 + case "image/x-png":
212 + imagepng($newImage, $thumb_image_name);
213 + break;
214 + case "image/webp":
215 + if (function_exists('imagewebp')) {
216 + imagewebp($newImage, $thumb_image_name, $quality);
217 + } else {
218 + imagepng($newImage, $thumb_image_name);
219 + }
220 + break;
221 + }
222 +
223 + chmod($thumb_image_name, 0777);
224 + imagedestroy($newImage);
225 + imagedestroy($source);
226 +
227 + return $thumb_image_name;
235 228 }
236 229
230 +/**
231 + * Try to set higher limits on the fly
232 + */
233 +function uwp_set_php_limits()
234 +{
235 + error_reporting(0);
237 236
237 + // try to set higher limits for import
238 + $max_input_time = ini_get('max_input_time');
239 + $max_execution_time = ini_get('max_execution_time');
240 + $memory_limit = ini_get('memory_limit');
241 +
242 + if ($max_input_time !== 0 && $max_input_time != -1 && (! $max_input_time || $max_input_time < 3000)) {
243 + ini_set('max_input_time', 3000);
244 + }
245 +
246 + if ($max_execution_time !== 0 && (! $max_execution_time || $max_execution_time < 3000)) {
247 + ini_set('max_execution_time', 3000);
248 + }
249 +
250 + if ($memory_limit && str_replace('M', '', $memory_limit)) {
251 + if (str_replace('M', '', $memory_limit) < 256) {
252 + ini_set('memory_limit', '256M');
253 + }
254 + }
255 +
256 + ini_set('auto_detect_line_endings', true);
257 +}
258 +
238 259 /**
239 260 * Logs the error message.
240 261 *
241 262 * @since 1.0.0
@@ -244,308 +265,383 @@
244 265 * @param array|object|string $log Error message.
245 266 *
246 267 * @return void
247 268 */
248 -function uwp_error_log($log){
249 - /*
250 - * A filter to override the WP_DEBUG setting for function uwp_error_log().
251 - */
252 - $should_log = apply_filters( 'uwp_log_errors', WP_DEBUG);
253 - if ( true === $should_log ) {
254 - if ( is_array( $log ) || is_object( $log ) ) {
255 - error_log( print_r( $log, true ) );
256 - } else {
257 - error_log( $log );
258 - }
259 - }
269 +function uwp_error_log($log)
270 +{
271 + /*
272 + * A filter to override the debugging setting for function uwp_error_log().
273 + */
274 + $should_log = apply_filters('uwp_log_errors', uwp_get_option('enable_uwp_error_log', 0));
275 + if (1 == $should_log) {
276 + if (is_array($log) || is_object($log)) {
277 + error_log(print_r($log, true));
278 + } else {
279 + error_log($log);
280 + }
281 + }
260 282 }
261 283
284 +function uwp_get_excluded_users_list()
285 +{
262 286
287 + $args = array(
288 + 'fields' => 'ID',
289 + 'meta_query' => array(
290 + 'relation' => 'OR',
291 + array(
292 + 'key' => 'uwp_mod',
293 + 'value' => 'email_unconfirmed',
294 + 'compare' => '=='
295 + ),
296 + array(
297 + 'key' => 'uwp_hide_from_listing',
298 + 'value' => 1,
299 + 'compare' => '=='
300 + )
301 + )
302 + );
303 +
304 + $inactive_users = new WP_User_Query($args);
305 + $exclude_users = $inactive_users->get_results();
306 +
307 + $excluded_globally = uwp_get_option('users_excluded_from_list');
308 + if (!empty($excluded_globally)) {
309 +
310 + if (is_array($excluded_globally)) {
311 + $exclude_users = array_merge($exclude_users, $excluded_globally);
312 + } else {
313 + $excluded_users = str_replace(' ', '', $excluded_globally);
314 + $users_array = explode(',', $excluded_users);
315 + $exclude_users = array_merge($exclude_users, $users_array);
316 + }
317 + }
318 +
319 + return $exclude_users;
320 +}
321 +
263 322 /**
264 - * Prints the users page main content.
323 + * Retrieves a list of users with optional filtering, searching, and sorting.
265 324 *
266 - * @since 1.0.0
267 - * @package userswp
325 + * @since 1.0.0
326 + * @package userswp
268 327 *
269 - * @return void
328 + * @param array $roles Optional. Array of user roles to filter by. Default empty array.
329 + * @return array {
330 + * Array of users and pagination data.
331 + *
332 + * @type array $users Array of WP_User objects.
333 + * @type int $total_users Total number of users found.
334 + * }
270 335 */
271 -function get_uwp_users_list() {
336 +function get_uwp_users_list( $roles = array() )
337 +{
338 + global $wpdb;
272 339
273 - global $wpdb;
340 + // Sanitize and validate input parameters
341 + $keyword = false;
342 + if ( isset( $_GET['uwps'] ) && ! empty( $_GET['uwps'] ) ) {
343 + $keyword = sanitize_text_field( wp_unslash( $_GET['uwps'] ) );
344 + }
274 345
275 - $keyword = false;
276 - if (isset($_GET['uwps']) && $_GET['uwps'] != '') {
277 - $keyword = stripslashes(strip_tags($_GET['uwps']));
278 - }
346 + // Get pagination parameter with proper fallback
347 + $paged = 1;
348 + if ( isset( $_GET['paged'] ) && ! empty( $_GET['paged'] ) ) {
349 + $paged = absint( $_GET['paged'] );
350 + } elseif ( is_front_page() ) {
351 + $page_var = get_query_var( 'page' );
352 + $paged = absint( $page_var ) > 0 ? absint( $page_var ) : 1;
353 + } else {
354 + $paged_var = get_query_var( 'paged' );
355 + $paged = absint( $paged_var ) > 0 ? absint( $paged_var ) : 1;
356 + }
279 357
280 - $sort_by = false;
281 - if (isset($_GET['uwp_sort_by']) && $_GET['uwp_sort_by'] != '') {
282 - $sort_by = strip_tags(esc_sql($_GET['uwp_sort_by']));
283 - }
358 + // Get number of items per page
359 + $number = absint( uwp_get_option( 'users_no_of_items', 10 ) );
360 + $number = $number > 0 ? $number : 10;
284 361
285 - $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
362 + // Get search where clause from filters
363 + $where = '';
364 + $where = apply_filters( 'uwp_users_search_where', $where, $keyword );
286 365
287 - $number = uwp_get_option('profile_no_of_items', 10);
366 + // Get excluded users list
367 + $exclude_users = uwp_get_excluded_users_list();
368 + $exclude_users = apply_filters( 'uwp_excluded_users_from_list', $exclude_users, $where, $keyword );
369 + $exclude_users = ! empty( $exclude_users ) ? array_unique( $exclude_users ) : array();
288 370
289 - $where = '';
290 - $where = apply_filters('uwp_users_search_where', $where, $keyword);
371 + // Initialize sorting parameters
372 + $exclude_query = ' ';
373 + $order_by = 'uwp_meta_value';
374 + $order = 'ASC';
375 + $meta_key = '';
291 376
292 - $arg = array(
293 - 'fields' => 'ID',
294 - 'meta_query' => array(
295 - 'relation' => 'OR',
296 - array(
297 - 'key' => 'uwp_mod',
298 - 'value' => 'email_unconfirmed',
299 - 'compare' => '=='
300 - ),
301 - array(
302 - 'key' => 'uwp_hide_from_listing',
303 - 'value' => 1,
304 - 'compare' => '=='
305 - )
306 - )
307 - );
377 + // Get and sanitize sort parameter
378 + $sort_by = '';
379 + if ( isset( $_GET['uwp_sort_by'] ) && ! empty( $_GET['uwp_sort_by'] ) ) {
380 + $sort_by = sanitize_text_field( wp_unslash( $_GET['uwp_sort_by'] ) );
381 + }
308 382
309 - $inactive_users = new WP_User_Query($arg);
310 - $exclude_users = $inactive_users->get_results();
383 + // Process sorting parameters
384 + if ( ! empty( $sort_by ) ) {
385 + // Handle special cases for newer/older
386 + if ( 'newer' === $sort_by ) {
387 + $order_by = 'user_registered';
388 + $order = 'DESC';
389 + } elseif ( 'older' === $sort_by ) {
390 + $order_by = 'user_registered';
391 + $order = 'ASC';
392 + } else {
393 + // Handle _asc and _desc suffixes
394 + if ( substr( $sort_by, -4 ) === '_asc' ) {
395 + $order_by = substr( $sort_by, 0, -4 );
396 + $order = 'ASC';
397 + } elseif ( substr( $sort_by, -5 ) === '_desc' ) {
398 + $order_by = substr( $sort_by, 0, -5 );
399 + $order = 'DESC';
400 + } else {
401 + // Default to ASC if no suffix
402 + $order_by = $sort_by;
403 + $order = 'ASC';
404 + }
405 + }
406 + }
311 407
312 - $excluded_globally = uwp_get_option('users_excluded_from_list');
313 - if ( $excluded_globally ) {
314 - $users = str_replace(' ', '', $excluded_globally );
315 - $users_array = explode(',', $users );
316 - $exclude_users = array_merge($exclude_users, $users_array);
317 - }
408 + // Build exclude query for excluded users
409 + if ( ! empty( $exclude_users ) ) {
410 + $exclude_users_list = implode( ',', array_map( 'absint', $exclude_users ) );
411 + $exclude_query = 'AND ' . $wpdb->users . '.ID NOT IN (' . $exclude_users_list . ')';
412 + }
318 413
319 - $exclude_users = apply_filters('uwp_excluded_users_from_list', $exclude_users, $where, $keyword);
414 + $users = array();
320 415
321 - if($exclude_users){
322 - $exclude_users_list = implode(',', array_unique($exclude_users));
323 - $exclude_query = 'AND '. $wpdb->users.'.ID NOT IN ('.$exclude_users_list.')';
324 - } else {
325 - $exclude_query = ' ';
326 - }
416 + // Check if we have search criteria
417 + if ( $keyword || $where ) {
327 418
328 - if ($keyword || $where) {
329 - if (empty($where)) {
330 - $users = $wpdb->get_results($wpdb->prepare(
331 - "SELECT DISTINCT SQL_CALC_FOUND_ROWS $wpdb->users.*
332 - FROM $wpdb->users
333 - INNER JOIN $wpdb->usermeta
334 - ON ( $wpdb->users.ID = $wpdb->usermeta.user_id )
335 - WHERE 1=1
336 - $exclude_query
337 - AND (
338 - ( $wpdb->usermeta.meta_key = 'first_name' AND $wpdb->usermeta.meta_value LIKE %s )
339 - OR
340 - ( $wpdb->usermeta.meta_key = 'last_name' AND $wpdb->usermeta.meta_value LIKE %s )
341 - OR
342 - user_login LIKE %s
343 - OR
344 - user_nicename LIKE %s
345 - OR
346 - display_name LIKE %s
347 - OR
348 - user_email LIKE %s
349 - )
350 - ORDER BY display_name ASC
351 - LIMIT 0, 20",
352 - array(
353 - '%' . $keyword . '%',
354 - '%' . $keyword . '%',
355 - '%' . $keyword . '%',
356 - '%' . $keyword . '%',
357 - '%' . $keyword . '%',
358 - '%' . $keyword . '%'
359 - )
360 - ));
361 - } else {
362 - $usermeta_table = get_usermeta_table_prefix() . 'uwp_usermeta';
419 + // Build search query based on whether we have custom where clause
420 + if ( empty( $where ) ) {
421 + // Standard search query with keyword
422 + $search_term = '%' . $wpdb->esc_like( $keyword ) . '%';
423 + $user_query = $wpdb->prepare(
424 + "SELECT DISTINCT SQL_CALC_FOUND_ROWS {$wpdb->users}.*
425 + FROM {$wpdb->users}
426 + LEFT JOIN {$wpdb->usermeta} AS first_name_meta ON ( {$wpdb->users}.ID = first_name_meta.user_id AND first_name_meta.meta_key = 'first_name' )
427 + LEFT JOIN {$wpdb->usermeta} AS last_name_meta ON ( {$wpdb->users}.ID = last_name_meta.user_id AND last_name_meta.meta_key = 'last_name' )
428 + LEFT JOIN {$wpdb->usermeta} AS nickname_meta ON ( {$wpdb->users}.ID = nickname_meta.user_id AND nickname_meta.meta_key = 'nickname' )
429 + WHERE 1=1
430 + {$exclude_query}
431 + AND (
432 + first_name_meta.meta_value LIKE %s
433 + OR last_name_meta.meta_value LIKE %s
434 + OR nickname_meta.meta_value LIKE %s
435 + OR user_login LIKE %s
436 + OR user_nicename LIKE %s
437 + OR display_name LIKE %s
438 + )
439 + ORDER BY display_name ASC",
440 + $search_term,
441 + $search_term,
442 + $search_term,
443 + $search_term,
444 + $search_term,
445 + $search_term
446 + );
447 + } else {
448 + // Custom where clause with uwp_usermeta table
449 + $usermeta_table = get_usermeta_table_prefix() . 'uwp_usermeta';
450 + $keyword_query = '';
363 451
364 - $users = $wpdb->get_results(
365 - "SELECT DISTINCT SQL_CALC_FOUND_ROWS $wpdb->users.*
366 - FROM $wpdb->users
367 - INNER JOIN $usermeta_table
368 - ON ( $wpdb->users.ID = $usermeta_table.user_id )
369 - WHERE 1=1
370 - $exclude_query
371 - $where
372 - ORDER BY display_name ASC
373 - LIMIT 0, 20");
374 - }
452 + if ( $keyword ) {
453 + $search_term = '%' . $wpdb->esc_like( $keyword ) . '%';
454 + $keyword_query = $wpdb->prepare(
455 + " AND (( {$wpdb->usermeta}.meta_key = 'first_name' AND {$wpdb->usermeta}.meta_value LIKE %s )
456 + OR ( {$wpdb->usermeta}.meta_key = 'last_name' AND {$wpdb->usermeta}.meta_value LIKE %s )
457 + OR ( {$wpdb->usermeta}.meta_key = 'nickname' AND {$wpdb->usermeta}.meta_value LIKE %s )
458 + OR user_login LIKE %s
459 + OR user_nicename LIKE %s
460 + OR display_name LIKE %s)",
461 + $search_term,
462 + $search_term,
463 + $search_term,
464 + $search_term,
465 + $search_term,
466 + $search_term
467 + );
468 + }
375 469
376 - $total_user = count($users);
470 + $user_query = "SELECT DISTINCT SQL_CALC_FOUND_ROWS {$wpdb->users}.*
471 + FROM {$wpdb->users}
472 + INNER JOIN {$wpdb->usermeta} ON ( {$wpdb->users}.ID = {$wpdb->usermeta}.user_id )
473 + INNER JOIN {$usermeta_table} ON ( {$wpdb->users}.ID = {$usermeta_table}.user_id )
474 + WHERE 1=1 {$keyword_query} {$exclude_query} {$where}
475 + ORDER BY display_name ASC";
476 + }
377 477
378 - } else {
478 + // Execute search query
479 + $user_results = $wpdb->get_results( $user_query ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
480 + $get_users = wp_list_pluck( $user_results, 'ID' );
379 481
380 - $args = array(
381 - 'number' => (int) $number,
382 - 'paged' => $paged,
383 - 'exclude' => $exclude_users,
384 - );
482 + // Filter by roles if specified
483 + if ( ! empty( $roles ) && is_array( $roles ) ) {
484 + $role_users = get_users( array(
485 + 'role__in' => $roles,
486 + 'fields' => array( 'ID' )
487 + ) );
488 + $role_user_ids = wp_list_pluck( $role_users, 'ID' );
489 +
490 + if ( ! empty( $get_users ) && ! empty( $role_user_ids ) ) {
491 + $get_users = array_intersect( $get_users, $role_user_ids );
492 + }
493 + }
385 494
495 + // Process results if we have users
496 + if ( ! empty( $get_users ) && is_array( $get_users ) ) {
497 + // Prepare WP_User_Query arguments
498 + $args = array(
499 + 'include' => $get_users,
500 + 'number' => $number,
501 + 'paged' => $paged,
502 + );
386 503
387 - if ($sort_by) {
388 - switch ($sort_by) {
389 - case "newer":
390 - $args['orderby'] = 'registered';
391 - $args['order'] = 'desc';
392 - break;
393 - case "older":
394 - $args['orderby'] = 'registered';
395 - $args['order'] = 'asc';
396 - break;
397 - case "alpha_asc":
398 - $args['orderby'] = 'display_name';
399 - $args['order'] = 'asc';
400 - break;
401 - case "alpha_desc":
402 - $args['orderby'] = 'display_name';
403 - $args['order'] = 'desc';
404 - break;
504 + // Add exclude users if any
505 + if ( ! empty( $exclude_users ) ) {
506 + $args['exclude'] = $exclude_users;
507 + }
405 508
406 - }
407 - }
509 + // Add meta_key if specified
510 + if ( ! empty( $meta_key ) ) {
511 + $args['meta_key'] = $meta_key;
512 + }
408 513
409 - $users_query = new WP_User_Query($args);
410 - $users = $users_query->get_results();
411 - $total_user = $users_query->get_total();
514 + // Handle sorting
515 + if ( ! empty( $order_by ) && ! empty( $order ) ) {
516 + if ( in_array( $order_by, array( 'first_name', 'last_name' ), true ) ) {
517 + $args['meta_key'] = $order_by;
518 + $args['orderby'] = 'meta_value';
519 + $args['order'] = $order;
520 + } else {
521 + $args['orderby'] = $order_by;
522 + $args['order'] = $order;
523 + }
524 + }
412 525
413 - }
526 + // Execute WP_User_Query
527 + $uwp_users_query = new WP_User_Query( $args );
528 + $users['users'] = $uwp_users_query->get_results();
529 + $users['total_users'] = $uwp_users_query->get_total();
414 530
415 - $total_pages=ceil($total_user/$number);
531 + } else {
532 + $users['users'] = array();
533 + $users['total_users'] = 0;
534 + }
535 + } else {
536 + // No search criteria - get all users with optional role filtering
537 + $args = array(
538 + 'number' => $number,
539 + 'paged' => $paged,
540 + );
416 541
417 - $layout_class = uwp_get_layout_class();
418 - ?>
419 - <ul class="uwp-users-list-wrap <?php echo $layout_class; ?>" id="uwp_user_items_layout">
420 - <?php
421 - if ($users) {
422 - foreach ($users as $user) {
423 - $user_obj = get_user_by('id', $user->ID);
542 + // Add exclude users if any
543 + if ( ! empty( $exclude_users ) ) {
544 + $args['exclude'] = $exclude_users;
545 + }
424 546
425 - // exclude logged in user
426 - $exclude_loggedin_user = apply_filters('uwp_users_list_exclude_loggedin_user', false);
427 - if ($exclude_loggedin_user) {
428 - if ($user_obj->ID == get_current_user_id()) {
429 - continue;
430 - }
431 - }
432 - ?>
433 - <li class="uwp-users-list-user">
434 - <div class="uwp-users-list-user-left">
435 - <?php do_action('uwp_users_profile_header', $user); ?>
436 - </div>
437 - <div class="uwp-users-list-user-right">
438 - <div class="uwp-users-list-user-name">
439 - <h3 class="uwp-user-title" data-user="<?php echo $user_obj->ID; ?>">
440 - <a href="<?php echo apply_filters('uwp_profile_link', get_author_posts_url($user_obj->ID), $user_obj->ID); ?>">
441 - <?php echo apply_filters('uwp_profile_display_name', $user_obj->display_name); ?>
442 - </a>
443 - <?php do_action('uwp_users_after_title', $user_obj->ID ); ?>
444 - </h3>
445 - </div>
446 - <div class="uwp-users-list-user-btns">
447 - <?php do_action('uwp_profile_buttons', $user_obj ); ?>
448 - </div>
449 - <div class="uwp-users-list-user-social">
450 - <?php do_action('uwp_profile_social', $user_obj ); ?>
451 - </div>
452 - <div class="uwp-users-list-extra">
453 - <?php do_action('uwp_users_extra', $user_obj ); ?>
454 - </div>
455 - <div class="clfx"></div>
456 - </div>
457 - </li>
458 - <?php
459 - }
460 - } else {
461 - // no users found
462 - echo '<div class="uwp-alert-error text-center">';
463 - echo __('No Users Found', 'userswp');
464 - echo '</div>';
465 - }
466 - ?>
467 - </ul>
547 + // Filter by roles if specified
548 + if ( ! empty( $roles ) && is_array( $roles ) ) {
549 + $args['role__in'] = $roles;
550 + }
468 551
469 - <?php
470 - if ($total_pages > 1) {
471 - do_action('uwp_profile_pagination', $total_pages);
472 - }
473 - ?>
474 - <?php
475 -}
552 + // Add meta_key if specified
553 + if ( ! empty( $meta_key ) ) {
554 + $args['meta_key'] = $meta_key;
555 + }
476 556
557 + // Handle sorting
558 + if ( ! empty( $order_by ) && ! empty( $order ) ) {
559 + if ( in_array( $order_by, array( 'first_name', 'last_name' ), true ) ) {
560 + $args['meta_key'] = $order_by;
561 + $args['orderby'] = 'meta_value';
562 + $args['order'] = $order;
563 + } else {
564 + $args['orderby'] = $order_by;
565 + $args['order'] = $order;
566 + }
567 + }
477 568
569 + // Execute WP_User_Query
570 + $uwp_users_query = new WP_User_Query( $args );
571 + $users['users'] = $uwp_users_query->get_results();
572 + $users['total_users'] = $uwp_users_query->get_total();
573 + }
478 574
479 -/**
480 - * Loads the font-awesome css files.
481 - *
482 - * @since 1.0.0
483 - * @package userswp
484 - *
485 - * @return void
486 - */
487 -function uwp_load_font_awesome() {
488 - //load font awesome
489 - wp_register_script('font-awesome', 'https://use.fontawesome.com/releases/v5.4.1/js/all.js', array('font-awesome-shim'));
490 - wp_register_script('font-awesome-shim', 'https://use.fontawesome.com/releases/v5.4.1/js/v4-shims.js', array());
491 - wp_enqueue_script( 'font-awesome' );
575 + return $users;
492 576 }
493 577
494 578 /**
495 - * Gets the custom field info for given key.
579 + * Returns the Users page layout class based on the setting.
496 580 *
497 581 * @since 1.0.0
498 582 * @package userswp
499 583 *
500 - * @param string $htmlvar_name Custom field key.
501 - *
502 - * @return object Field info.
584 + * @return string Layout class.
503 585 */
504 -function uwp_get_custom_field_info($htmlvar_name) {
505 - global $wpdb;
506 - $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
507 - $field = $wpdb->get_row($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE htmlvar_name = %s", array($htmlvar_name)));
508 - return $field;
509 -}
586 +function uwp_get_layout_class($layout, $count_only = false)
587 +{
588 + if (!$layout) {
589 + if (uwp_get_option("design_style", 'bootstrap')) {
590 + $value = '3col';
591 + } else {
592 + $value = 'list';
593 + }
594 + $layout = uwp_get_option('users_default_layout', $value);
595 + }
510 596
597 + switch ($layout) {
598 + case "list":
599 + $class = "uwp_listview";
600 + $bs_class = "row-cols-md-1";
601 + $col_count = 1;
602 + break;
603 + case "2col":
604 + $class = "uwp_gridview uwp_gridview_2col";
605 + $bs_class = "row-cols-md-2";
606 + $col_count = 2;
607 + break;
608 + case "3col":
609 + $class = "uwp_gridview uwp_gridview_3col";
610 + $bs_class = "row-cols-md-3";
611 + $col_count = 3;
612 + break;
613 + case "4col":
614 + $class = "uwp_gridview uwp_gridview_4col";
615 + $bs_class = "row-cols-md-4";
616 + $col_count = 4;
617 + break;
618 + case "5col":
619 + $class = "uwp_gridview uwp_gridview_5col";
620 + $bs_class = "row-cols-md-5";
621 + $col_count = 5;
622 + break;
623 + default:
624 + $class = "uwp_listview";
625 + $bs_class = "row-cols-md-3";
626 + $col_count = 1;
627 + }
511 628
629 + if ($count_only) {
630 + return $col_count;
631 + }
512 632
513 -/**
514 - * Returns the Users page layout class based on the setting.
515 - *
516 - * @since 1.0.0
517 - * @package userswp
518 - *
519 - * @return string Layout class.
520 - */
521 -function uwp_get_layout_class() {
522 - $default_layout = uwp_get_option('users_default_layout', 'list');
523 - switch ($default_layout) {
524 - case "list":
525 - $class = "uwp_listview";
526 - break;
527 - case "2col":
528 - $class = "uwp_gridview uwp_gridview_2col";
529 - break;
530 - case "3col":
531 - $class = "uwp_gridview uwp_gridview_3col";
532 - break;
533 - case "4col":
534 - $class = "uwp_gridview uwp_gridview_4col";
535 - break;
536 - case "5col":
537 - $class = "uwp_gridview uwp_gridview_5col";
538 - break;
539 - default:
540 - $class = "uwp_listview";
541 - }
633 + if (uwp_get_option("design_style", 'bootstrap')) {
634 + return $bs_class;
635 + }
542 636
543 - return $class;
637 + return $class;
544 638 }
545 639
546 -add_filter( 'get_user_option_metaboxhidden_nav-menus', 'uwp_always_nav_menu_visibility', 10, 3 );
640 +add_filter('uwp_users_list_ul_extra_class', 'uwp_get_layout_class', 10, 1);
547 641
642 +add_filter('get_user_option_metaboxhidden_nav-menus', 'uwp_always_nav_menu_visibility', 10, 3);
643 +
548 644 /**
549 645 * Filters nav menu visibility option value.
550 646 *
551 647 * @since 1.0.0
@@ -556,146 +652,17 @@
556 652 * @param WP_User $user WP_User object of the user whose option is being retrieved.
557 653 *
558 654 * @return array Filtered value.
559 655 */
560 -function uwp_always_nav_menu_visibility( $result, $option, $user )
656 +function uwp_always_nav_menu_visibility($result, $option, $user)
561 657 {
562 - if( is_array($result) && in_array( 'add-users-wp-nav-menu', $result ) ) {
563 - $result = array_diff( $result, array( 'add-users-wp-nav-menu' ) );
564 - }
658 + if (is_array($result) && in_array('add-users-wp-nav-menu', $result)) {
659 + $result = array_diff($result, array('add-users-wp-nav-menu'));
660 + }
565 661
566 - return $result;
662 + return $result;
567 663 }
568 664
569 -add_filter('user_profile_picture_description', 'uwp_admin_user_profile_picture_description');
570 -
571 -/**
572 - * Filters the user profile picture description displayed under the Gravatar.
573 - *
574 - * @since 1.0.0
575 - * @package userswp
576 - *
577 - * @param string $description Profile picture description.
578 - *
579 - * @return string Modified description.
580 - */
581 -function uwp_admin_user_profile_picture_description($description) {
582 - if (is_admin() && IS_PROFILE_PAGE) {
583 - $user_id = get_current_user_id();
584 - $avatar = uwp_get_usermeta($user_id, 'uwp_account_avatar_thumb', '');
585 -
586 - if (!empty($avatar)) {
587 - $description = sprintf( __( 'You can change your profile picture on your <a href="%s">Profile Page</a>.', 'userswp' ),
588 - uwp_build_profile_tab_url( $user_id ));
589 - }
590 -
591 - }
592 - return $description;
593 -}
594 -
595 -/**
596 - * Adds avatar and banner fields in admin side.
597 - *
598 - * @since 1.0.0
599 - * @package userswp
600 - *
601 - * @param object $user User object.
602 - *
603 - * @return void
604 - */
605 -function uwp_admin_edit_banner_fields($user) {
606 - global $wpdb;
607 -
608 - $file_obj = new UsersWP_Files();
609 -
610 - $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
611 - $fields = $wpdb->get_results("SELECT * FROM " . $table_name . " WHERE (form_type = 'avatar' OR form_type = 'banner') ORDER BY sort_order ASC");
612 - if ($fields) {
613 - ?>
614 - <div class="uwp-profile-extra uwp_page">
615 - <?php do_action('uwp_admin_profile_edit', $user ); ?>
616 - <table class="uwp-profile-extra-table form-table">
617 - <?php
618 - foreach ($fields as $field) {
619 -
620 - // Icon
621 - $icon = uwp_get_field_icon( $field->field_icon );
622 -
623 - if ($field->field_type == 'fieldset') {
624 - ?>
625 - <tr style="margin: 0; padding: 0">
626 - <th class="uwp-profile-extra-key" style="margin: 0; padding: 0"><h3 style="margin: 10px 0;">
627 - <?php echo $icon.$field->site_title; ?></h3></th>
628 - <td></td>
629 - </tr>
630 - <?php
631 - } else { ?>
632 - <tr>
633 - <th class="uwp-profile-extra-key"><?php echo $icon.$field->site_title; ?></th>
634 - <td class="uwp-profile-extra-value">
635 - <?php
636 - if ($field->htmlvar_name == "uwp_avatar_file") {
637 - $value = uwp_get_usermeta($user->ID, "uwp_account_avatar_thumb", "");
638 - } elseif ($field->htmlvar_name == "uwp_banner_file") {
639 - $value = uwp_get_usermeta($user->ID, "uwp_account_banner_thumb", "");
640 - } else {
641 - $value = "";
642 - }
643 - ?>
644 - <?php echo $file_obj->uwp_file_upload_preview($field, $value); ?>
645 - <?php
646 - if ($field->htmlvar_name == "uwp_avatar_file") {
647 - if (!empty($value)) {
648 - ?>
649 - <a class="uwp-profile-modal-form-trigger" data-type="avatar" href="#">
650 - <?php echo __("Change Avatar", "userswp"); ?>
651 - </a>
652 - <?php
653 - } else {
654 - ?>
655 - <a class="uwp-profile-modal-form-trigger" data-type="avatar" href="#">
656 - <?php echo __("Upload Avatar", "userswp"); ?>
657 - </a>
658 - <?php
659 - }
660 - } elseif ($field->htmlvar_name == "uwp_banner_file") {
661 - if (!empty($value)) {
662 - ?>
663 - <a class="uwp-profile-modal-form-trigger" data-type="banner" href="#">
664 - <?php echo __("Change Banner", "userswp"); ?>
665 - </a>
666 - <?php
667 - } else {
668 - ?>
669 - <a class="uwp-profile-modal-form-trigger" data-type="banner" href="#">
670 - <?php echo __("Upload Banner", "userswp"); ?>
671 - </a>
672 - <?php
673 - }
674 - }
675 - ?>
676 - </td>
677 - </tr>
678 - <?php
679 - }
680 - }
681 - ?>
682 - </table>
683 - </div>
684 - <?php
685 - }
686 -}
687 -add_action('show_user_profile', 'uwp_admin_edit_banner_fields');
688 -add_action('edit_user_profile', 'uwp_admin_edit_banner_fields');
689 -
690 -add_filter('admin_body_class', 'uwp_add_admin_body_class');
691 -function uwp_add_admin_body_class($classes) {
692 - $screen = get_current_screen();
693 - if ( 'profile' == $screen->base || 'user-edit' == $screen->base )
694 - $classes .= 'uwp_page';
695 - return $classes;
696 -}
697 -
698 665 // Privacy
699 666 add_filter('uwp_account_page_title', 'uwp_account_privacy_page_title', 10, 2);
700 667
701 668 /**
@@ -706,103 +673,26 @@
706 673 *
707 674 * @param string $title Privacy title.
708 675 * @param string $type Tab type.
709 676 *
710 - * @return string|void Title.
677 + * @return string Title.
711 678 */
712 -function uwp_account_privacy_page_title($title, $type) {
713 - if ($type == 'privacy') {
714 - $title = __( 'Privacy', 'userswp' );
715 - }
679 +function uwp_account_privacy_page_title($title, $type)
680 +{
716 681
717 - return $title;
718 -}
682 + if ($type == 'privacy') {
683 + $title = __('Privacy', 'userswp');
684 + } elseif ($type == 'notifications') {
685 + $title = __('E-Mail Notifications', 'userswp');
686 + } elseif ($type == 'delete-account') {
687 + $title = __('Delete Account', 'userswp');
688 + } elseif ($type == 'change-password') {
689 + $title = __('Change Password', 'userswp');
690 + } elseif ($type == 'wp2fa') {
691 + $title = __('Two-factor Authentication Settings', 'userswp');
692 + }
719 693
720 -add_action('uwp_account_form_display', 'uwp_account_privacy_edit_form_display');
721 -
722 -/**
723 - * Adds form html for privacy fields in account page.
724 - *
725 - * @since 1.0.0
726 - * @package userswp
727 - *
728 - * @param string $type Form type.
729 - *
730 - * @return void
731 - */
732 -function uwp_account_privacy_edit_form_display($type) {
733 - if ($type == 'privacy') {
734 - $make_profile_private = uwp_can_make_profile_private();
735 - echo '<div class="uwp-account-form uwp_wc_form">';
736 - $extra_where = "AND is_public='2'";
737 - $fields = get_account_form_fields($extra_where);
738 - $fields = apply_filters('uwp_account_privacy_fields', $fields);
739 - $user_id = get_current_user_id();
740 - ?>
741 - <div class="uwp-profile-extra">
742 - <div class="uwp-profile-extra-div form-table">
743 - <form class="uwp-account-form uwp_form" method="post">
744 - <?php if ($fields) { ?>
745 - <div class="uwp-profile-extra-wrap">
746 - <div class="uwp-profile-extra-key" style="font-weight: bold;">
747 - <?php echo __("Field", "userswp") ?>
748 - </div>
749 - <div class="uwp-profile-extra-value" style="font-weight: bold;">
750 - <?php echo __("Is Public?", "userswp") ?>
751 - </div>
752 - </div>
753 - <?php foreach ($fields as $field) { ?>
754 - <div class="uwp-profile-extra-wrap">
755 - <div class="uwp-profile-extra-key"><?php echo $field->site_title; ?>
756 - <span class="uwp-profile-extra-sep">:</span></div>
757 - <div class="uwp-profile-extra-value">
758 - <?php
759 - $field_name = $field->htmlvar_name . '_privacy';
760 - $value = uwp_get_usermeta($user_id, $field_name, false);
761 - if ($value === false) {
762 - $value = 'yes';
763 - }
764 - ?>
765 - <select name="<?php echo $field_name; ?>" class="uwp_privacy_field"
766 - style="margin: 0;">
767 - <option value="no" <?php selected($value, "no"); ?>><?php echo __("No", "userswp") ?></option>
768 - <option value="yes" <?php selected($value, "yes"); ?>><?php echo __("Yes", "userswp") ?></option>
769 - </select>
770 - </div>
771 - </div>
772 - <?php }
773 - }
774 - $value = get_user_meta($user_id, 'uwp_hide_from_listing', true); ?>
775 - <div class="uwp-profile-extra-wrap">
776 - <div id="uwp_hide_from_listing" class="uwp_hide_from_listing">
777 - <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'); ?>
778 - </div>
779 - </div>
780 - <?php
781 - do_action('uwp_after_privacy_form_fields', $fields);
782 - if ($make_profile_private) {
783 - $field_name = 'uwp_make_profile_private';
784 - $value = get_user_meta($user_id, $field_name, true);
785 - if ($value === false) {
786 - $value = '0';
787 - }
788 - ?>
789 - <div id="uwp_make_profile_private" class=" uwp_make_profile_private_row">
790 - <input type="hidden" name="uwp_make_profile_private" value="0">
791 - <input name="uwp_make_profile_private" class="" <?php checked( $value, "1", true ); ?> type="checkbox" value="1">
792 - <?php _e( 'Make the whole profile private', 'userswp' ); ?>
793 - </div>
794 - <?php
795 - }
796 - ?>
797 - <input type="hidden" name="uwp_privacy_nonce" value="<?php echo wp_create_nonce( 'uwp-privacy-nonce' ); ?>" />
798 - <input name="uwp_privacy_submit" value="<?php echo __( 'Submit', 'userswp' ); ?>" type="submit">
799 - </form>
800 - </div>
801 - </div>
802 - <?php
803 - echo '</div>';
804 - }
694 + return $title;
805 695 }
806 696
807 697 add_action('uwp_account_menu_display', 'uwp_add_account_menu_links');
808 698
@@ -813,60 +703,72 @@
813 703 * @package userswp
814 704 *
815 705 * @return void
816 706 */
817 -function uwp_add_account_menu_links() {
707 +function uwp_add_account_menu_links()
708 +{
709 + global $aui_bs5;
818 710
819 - if (isset($_GET['type'])) {
820 - $type = strip_tags(esc_sql($_GET['type']));
821 - } else {
822 - $type = 'account';
823 - }
711 + if (isset($_GET['type'])) {
712 + $type = strip_tags(esc_sql($_GET['type']));
713 + } else {
714 + $type = 'account';
715 + }
824 716
825 - $account_page = uwp_get_page_id('account_page', false);
826 - $account_page_link = get_permalink($account_page);
717 + $account_page = uwp_get_page_id('account_page', false);
718 + $account_page_link = get_permalink($account_page);
827 719
828 - $account_available_tabs = uwp_account_get_available_tabs();
720 + $account_available_tabs = uwp_account_get_available_tabs();
829 721
830 - if (!is_array($account_available_tabs) && count($account_available_tabs) > 0) {
831 - return;
832 - }
722 + if (!is_array($account_available_tabs) && count($account_available_tabs) > 0) {
723 + return;
724 + }
833 725
834 - echo '<ul class="uwp_account_menu">';
726 + $legacy = '<ul class="uwp_account_menu">';
727 + ob_start();
728 +?>
729 + <ul class="<?php echo $aui_bs5 ? 'nav' : 'navbar-nav'; ?> m-0 p-0 mt-3 list-unstyled flex-lg-column flex-row flex-wrap" aria-labelledby="account_settings">
730 + <?php
731 + foreach ($account_available_tabs as $tab_id => $tab) {
835 732
836 - foreach( $account_available_tabs as $tab_id => $tab ) {
733 + if ($tab_id == 'account') {
734 + $tab_url = $account_page_link;
735 + } else {
736 + $tab_url = add_query_arg(array(
737 + 'type' => $tab_id,
738 + ), $account_page_link);
739 + }
837 740
838 - if ($tab_id == 'account') {
839 - $tab_url = $account_page_link;
840 - } else {
841 - $tab_url = add_query_arg(array(
842 - 'type' => $tab_id,
843 - ), $account_page_link);
844 - }
741 + if (isset($tab['link'])) {
742 + $tab_url = $tab['link'];
743 + }
845 744
846 - if (isset($tab['link'])) {
847 - $tab_url = $tab['link'];
848 - }
745 + $active = $type == $tab_id ? ' active' : '';
849 746
850 - $active = $type == $tab_id ? ' active' : '';
851 - ?>
852 - <li id="uwp-account-<?php echo $tab_id; ?>">
853 - <a class="<?php echo $active; ?>" href="<?php echo esc_url( $tab_url ); ?>">
854 - <i class="<?php echo $tab['icon']; ?>"></i> <?php echo $tab['title']; ?>
855 - </a>
856 - </li>
857 - <?php
858 - }
747 + ?>
748 + <li class="nav-item m-0 p-0 list-unstyled mx-md-2 mx-2">
749 + <a class="nav-link text-decoration-none uwp-account-<?php echo esc_attr($tab_id . ' ' . $active); ?>" href="<?php echo esc_url($tab_url); ?>"><?php echo '<i class="' . esc_attr($tab["icon"]) . ' mr-1 fa-fw"></i>' . esc_html($tab['title']); ?></a>
750 + </li>
751 + <?php
859 752
860 - $template = new UsersWP_Templates();
861 - $logout_url = $template->uwp_logout_url();
862 - 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>';
863 - echo '</ul>';
753 + $legacy .= '<li id="uwp-account-' . $tab_id . '">';
754 + $legacy .= '<a class="' . $active . '" href="' . esc_url($tab_url) . '">';
755 + $legacy .= '<i class="' . esc_attr($tab["icon"]) . '"></i>' . esc_html($tab["title"]);
756 + $legacy .= '</a></li>';
757 + }
758 + ?>
759 + </ul>
760 + <?php
761 + $legacy .= '</ul>';
762 + $bs_output = ob_get_clean();
763 + $style = uwp_get_option('design_style', 'bootstrap');
764 + if (!empty($style)) {
765 + echo $bs_output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
766 + } else {
767 + echo $legacy; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
768 + }
864 769 }
865 770
866 -
867 -
868 -
869 771 /**
870 772 * Updates extras fields sort order.
871 773 *
872 774 * @since 1.0.0
@@ -873,37 +775,38 @@
873 775 * @package userswp
874 776 *
875 777 * @param array $field_ids Form extras field ids.
876 778 * @param string $form_type Form type.
779 + * @param int $form_id Form ID.
877 780 *
878 781 * @return array|bool Sorted field ids.
879 782 */
880 -function uwp_form_extras_field_order($field_ids = array(), $form_type = 'register')
783 +function uwp_form_extras_field_order($field_ids = array(), $form_type = 'register', $form_id = 1)
881 784 {
882 - global $wpdb;
883 - $extras_table_name = uwp_get_table_prefix() . 'uwp_form_extras';
785 + global $wpdb;
786 + $extras_table_name = uwp_get_table_prefix() . 'uwp_form_extras';
884 787
885 - $count = 0;
886 - if (!empty($field_ids)):
887 - foreach ($field_ids as $id) {
788 + $count = 0;
789 + if (!empty($field_ids)):
790 + foreach ($field_ids as $id) {
888 791
889 - $cf = trim($id, '_');
792 + $cf = trim($id, '_');
890 793
891 - $wpdb->query(
892 - $wpdb->prepare(
893 - "update " . $extras_table_name . " set
894 - sort_order=%d
895 - where id= %d",
896 - array($count, $cf)
897 - )
898 - );
899 - $count++;
900 - }
794 + $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
795 + $extras_table_name,
796 + array(
797 + 'sort_order' => $count,
798 + ),
799 + array('id' => $cf, 'form_id' => $form_id)
800 + );
901 801
902 - return $field_ids;
903 - else:
904 - return false;
905 - endif;
802 + $count++;
803 + }
804 +
805 + return $field_ids;
806 + else:
807 + return false;
808 + endif;
906 809 }
907 810
908 811 /**
909 812 * Uppercase the first character of each word in a string.
@@ -915,14 +818,15 @@
915 818 * @param string $charset Charset.
916 819 *
917 820 * @return string Converted string.
918 821 */
919 -function uwp_ucwords($string, $charset='UTF-8') {
920 - if (function_exists('mb_convert_case')) {
921 - return mb_convert_case($string, MB_CASE_TITLE, $charset);
922 - } else {
923 - return ucwords($string);
924 - }
822 +function uwp_ucwords($string, $charset = 'UTF-8')
823 +{
824 + if (function_exists('mb_convert_case')) {
825 + return mb_convert_case($string, MB_CASE_TITLE, $charset);
826 + } else {
827 + return ucwords($string);
828 + }
925 829 }
926 830
927 831 /**
928 832 * Checks whether the column exists in the table.
@@ -936,10 +840,10 @@
936 840 * @return bool
937 841 */
938 842 function uwp_column_exist($db, $column)
939 843 {
940 - $table = new UsersWP_Tables();
941 - $table->column_exists($db, $column);
844 + $table = new UsersWP_Tables();
845 + return $table->column_exists($db, $column);
942 846 }
943 847
944 848 /**
945 849 * Adds column if not exist in the table.
@@ -954,11 +858,10 @@
954 858 * @return bool|int True when success.
955 859 */
956 860 function uwp_add_column_if_not_exist($db, $column, $column_attr = "VARCHAR( 255 ) NOT NULL")
957 861 {
958 - $table = new UsersWP_Tables();
959 - $table->add_column_if_not_exist($db, $column, $column_attr);
960 -
862 + $table = new UsersWP_Tables();
863 + return $table->add_column_if_not_exist($db, $column, $column_attr);
961 864 }
962 865
963 866 /**
964 867 * Returns excluded custom fields.
@@ -967,14 +870,16 @@
967 870 * @package userswp
968 871 *
969 872 * @return array Excluded custom fields.
970 873 */
971 -function uwp_get_excluded_fields() {
972 - $excluded = array(
973 - 'uwp_account_password',
974 - 'uwp_account_confirm_password',
975 - );
976 - return $excluded;
874 +function uwp_get_excluded_fields()
875 +{
876 + $excluded = array(
877 + 'password',
878 + 'confirm_password',
879 + 'user_privacy',
880 + );
881 + return apply_filters('uwp_excluded_fields', $excluded);
977 882 }
978 883
979 884 /**
980 885 * Formats the currency using currency separator.
@@ -986,50 +891,61 @@
986 891 * @param array|string $cf Custom field info.
987 892 *
988 893 * @return string Formatted currency.
989 894 */
990 -function uwp_currency_format_number($number='',$cf=''){
895 +function uwp_currency_format_number($number = '', $cf = '')
896 +{
991 897
992 - $cs = isset($cf['extra_fields']) ? maybe_unserialize($cf['extra_fields']) : '';
898 + $cs = isset($cf['extra_fields']) ? maybe_unserialize($cf['extra_fields']) : '';
993 899
994 - $symbol = isset($cs['currency_symbol']) ? $cs['currency_symbol'] : '$';
995 - $decimals = isset($cf['decimal_point']) && $cf['decimal_point'] ? $cf['decimal_point'] : 2;
996 - $decimal_display = isset($cf['decimal_display']) && $cf['decimal_display'] ? $cf['decimal_display'] : 'if';
997 - $decimalpoint = '.';
900 + $symbol = isset($cs['currency_symbol']) ? $cs['currency_symbol'] : '$';
901 + $decimals = isset($cf['decimal_point']) && $cf['decimal_point'] ? $cf['decimal_point'] : 2;
902 + $decimal_display = isset($cf['decimal_display']) && $cf['decimal_display'] ? $cf['decimal_display'] : 'if';
903 + $decimalpoint = '.';
998 904
999 - if(isset($cs['decimal_separator']) && $cs['decimal_separator']=='comma'){
1000 - $decimalpoint = ',';
1001 - }
905 + if (isset($cs['decimal_separator']) && $cs['decimal_separator'] == 'comma') {
906 + $decimalpoint = ',';
907 + }
1002 908
1003 - $separator = ',';
909 + $separator = ',';
1004 910
1005 - if(isset($cs['thousand_separator'])){
1006 - if($cs['thousand_separator']=='comma'){$separator = ',';}
1007 - if($cs['thousand_separator']=='slash'){$separator = '\\';}
1008 - if($cs['thousand_separator']=='period'){$separator = '.';}
1009 - if($cs['thousand_separator']=='space'){$separator = ' ';}
1010 - if($cs['thousand_separator']=='none'){$separator = '';}
1011 - }
911 + if (isset($cs['thousand_separator'])) {
912 + if ($cs['thousand_separator'] == 'comma') {
913 + $separator = ',';
914 + }
915 + if ($cs['thousand_separator'] == 'slash') {
916 + $separator = '\\';
917 + }
918 + if ($cs['thousand_separator'] == 'period') {
919 + $separator = '.';
920 + }
921 + if ($cs['thousand_separator'] == 'space') {
922 + $separator = ' ';
923 + }
924 + if ($cs['thousand_separator'] == 'none') {
925 + $separator = '';
926 + }
927 + }
1012 928
1013 - $currency_symbol_placement = isset($cs['currency_symbol_placement']) ? $cs['currency_symbol_placement'] : 'left';
929 + $currency_symbol_placement = isset($cs['currency_symbol_placement']) ? $cs['currency_symbol_placement'] : 'left';
1014 930
1015 - if($decimals>0 && $decimal_display=='if'){
1016 - if(is_int($number) || floor( $number ) == $number)
1017 - $decimals = 0;
1018 - }
931 + if ($decimals > 0 && $decimal_display == 'if') {
932 + if (is_int($number) || floor($number) == $number)
933 + $decimals = 0;
934 + }
1019 935
1020 - $number = number_format($number,$decimals,$decimalpoint,$separator);
936 + $number = number_format($number, $decimals, $decimalpoint, $separator);
1021 937
1022 938
1023 939
1024 - if($currency_symbol_placement=='left'){
1025 - $number = $symbol . $number;
1026 - }else{
1027 - $number = $number . $symbol;
1028 - }
940 + if ($currency_symbol_placement == 'left') {
941 + $number = $symbol . $number;
942 + } else {
943 + $number = $number . $symbol;
944 + }
1029 945
1030 946
1031 - return $number;
947 + return $number;
1032 948 }
1033 949
1034 950
1035 951 /**
@@ -1039,163 +955,15 @@
1039 955 * @package userswp
1040 956 *
1041 957 * @return bool
1042 958 */
1043 -function uwp_can_make_profile_private() {
1044 - $make_profile_private = apply_filters('uwp_user_can_make_profile_private', false);
1045 - return $make_profile_private;
959 +function uwp_can_make_profile_private()
960 +{
961 + $make_profile_private = apply_filters('uwp_user_can_make_profile_private', false);
962 + return $make_profile_private;
1046 963 }
1047 964
1048 965 /**
1049 - * Returns available registration status options.
1050 - *
1051 - * @since 1.0.0
1052 - * @package userswp
1053 - *
1054 - * @return array Registration status options.
1055 - */
1056 -function uwp_registration_status_options() {
1057 - $registration_options = array(
1058 - 'auto_approve' => __('Auto approve', 'userswp'),
1059 - 'auto_approve_login' => __('Auto approve + Auto Login', 'userswp'),
1060 - 'require_email_activation' => __('Require Email Activation', 'userswp'),
1061 - );
1062 -
1063 - $registration_options = apply_filters('uwp_registration_status_options', $registration_options);
1064 -
1065 - return $registration_options;
1066 -}
1067 -
1068 -/**
1069 - * Retrieves a user row based on password reset key and login
1070 - *
1071 - * @since 1.0.0
1072 - * @package userswp
1073 - *
1074 - * @param string $key Hash to validate sending user's password.
1075 - * @param string $login The user login.
1076 - *
1077 - * @return WP_Error|WP_User User object.
1078 - */
1079 -function uwp_check_activation_key( $key, $login ) {
1080 - $user_data = check_password_reset_key( $key, $login );
1081 -
1082 - return $user_data;
1083 -}
1084 -
1085 -
1086 -add_action('uwp_template_fields', 'uwp_template_fields_terms_check', 100, 1);
1087 -
1088 -/**
1089 - * Adds "Accept terms and conditions" checkbox in register form.
1090 - *
1091 - * @since 1.0.0
1092 - * @package userswp
1093 - *
1094 - * @param string $form_type Form type.
1095 - *
1096 - * @return void
1097 - */
1098 -function uwp_template_fields_terms_check($form_type) {
1099 - if ($form_type == 'register') {
1100 - $terms_page = false;
1101 - $reg_terms_page_id = uwp_get_page_id('register_terms_page', false);
1102 - $reg_terms_page_id = apply_filters('uwp_reg_terms_page_id', $reg_terms_page_id);
1103 - if (!empty($reg_terms_page_id)) {
1104 - $terms_page = get_permalink($reg_terms_page_id);
1105 - }
1106 - if ($terms_page) {
1107 - ?>
1108 - <div class="uwp-remember-me">
1109 - <label style="display: inline-block;font-weight: normal" for="agree_terms">
1110 - <input name="agree_terms" id="agree_terms" value="yes" type="checkbox">
1111 - <?php echo sprintf( __( 'I Accept <a href="%s" target="_blank">Terms and Conditions</a>.', 'userswp' ), $terms_page); ?>
1112 - </label>
1113 - </div>
1114 - <?php
1115 - }
1116 - }
1117 -}
1118 -
1119 -
1120 -
1121 -/**
1122 - * Redirects the user to login page when email not confirmed.
1123 - *
1124 - * @since 1.0.0
1125 - * @package userswp
1126 - *
1127 - * @param string $username Username.
1128 - * @param object $user User object.
1129 - *
1130 - * @return void
1131 - */
1132 -function uwp_unconfirmed_login_redirect( $username, $user ) {
1133 - if (!is_wp_error($user)) {
1134 - $mod_value = get_user_meta( $user->ID, 'uwp_mod', true );
1135 - if ($mod_value == 'email_unconfirmed') {
1136 - if ( !in_array( 'administrator', $user->roles ) ) {
1137 - $login_page = uwp_get_page_id('login_page', false);
1138 - if ($login_page) {
1139 - $redirect_to = add_query_arg(array('uwp_err' => 'act_pending'), get_permalink($login_page));
1140 - wp_destroy_current_session();
1141 - wp_clear_auth_cookie();
1142 - wp_redirect($redirect_to);
1143 - exit();
1144 - }
1145 - }
1146 - }
1147 - }
1148 -}
1149 -add_filter( 'wp_login', 'uwp_unconfirmed_login_redirect', 10, 2 );
1150 -
1151 -/**
1152 - * Adds notification menu in admin toolbar.
1153 - *
1154 - * @since 1.0.0
1155 - * @package userswp
1156 - *
1157 - * @return void
1158 - */
1159 -function uwp_notifications_toolbar_menu() {
1160 - global $wp_admin_bar;
1161 -
1162 - if ( ! is_user_logged_in() ) {
1163 - return;
1164 - }
1165 -
1166 - $available_counts = apply_filters('uwp_notifications_available_counts', array());
1167 -
1168 - if (count($available_counts) == 0) {
1169 - return;
1170 - }
1171 -
1172 - $total_count = 0;
1173 - foreach ($available_counts as $key => $value) {
1174 - $total_count = $total_count + $value;
1175 - }
1176 -
1177 -
1178 - $alert_class = (int) $total_count > 0 ? 'pending-count' : 'count';
1179 - $menu_title = '<span id="uwp-notification-count" class="' . $alert_class . '">'
1180 - . number_format_i18n( $total_count ) . '</span>';
1181 - $menu_link = '';
1182 -
1183 - // Add the top-level Notifications button.
1184 - $wp_admin_bar->add_menu( array(
1185 - 'parent' => 'top-secondary',
1186 - 'id' => 'uwp-notifications',
1187 - 'title' => $menu_title,
1188 - 'href' => $menu_link,
1189 - ) );
1190 -
1191 - do_action('uwp_notifications_items', $wp_admin_bar);
1192 -
1193 - return;
1194 -}
1195 -add_action( 'admin_bar_menu', 'uwp_notifications_toolbar_menu', 90 );
1196 -
1197 -/**
1198 966 * Returns the installation type.
1199 967 *
1200 968 * @since 1.0.0
1201 969 * @package userswp
@@ -1201,38 +969,39 @@
1201 969 * @package userswp
1202 970 *
1203 971 * @return string Installation type.
1204 972 */
1205 -function uwp_get_installation_type() {
1206 - // *. Single Site
1207 - if (!is_multisite()) {
1208 - return "single";
1209 - } else {
1210 - // Multisite
1211 - if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
1212 - require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
1213 - }
973 +function uwp_get_installation_type()
974 +{
975 + // *. Single Site
976 + if (!is_multisite()) {
977 + return "single";
978 + } else {
979 + // Multisite
980 + if (! function_exists('is_plugin_active_for_network')) {
981 + require_once(ABSPATH . '/wp-admin/includes/plugin.php');
982 + }
1214 983
1215 - // Network active.
1216 - if ( is_plugin_active_for_network( 'userswp/userswp.php' ) ) {
1217 - if (defined('UWP_ROOT_PAGES')) {
1218 - if (UWP_ROOT_PAGES == 'all') {
1219 - // *. Multisite - Network Active - Pages on all sites
1220 - return "multi_na_all";
1221 - } else {
1222 - // *. Multisite - Network Active - Pages on specific site
1223 - return "multi_na_site_id";
1224 - }
1225 - } else {
1226 - // Multi - network active - default
1227 - // *. Multisite - Network Active - Pages on main site
1228 - return "multi_na_default";
1229 - }
1230 - } else {
1231 - // * Multisite - Not network active
1232 - return "multi_not_na";
1233 - }
1234 - }
984 + // Network active.
985 + if (is_plugin_active_for_network('userswp/userswp.php')) {
986 + if (defined('UWP_ROOT_PAGES')) {
987 + if (UWP_ROOT_PAGES == 'all') {
988 + // *. Multisite - Network Active - Pages on all sites
989 + return "multi_na_all";
990 + } else {
991 + // *. Multisite - Network Active - Pages on specific site
992 + return "multi_na_site_id";
993 + }
994 + } else {
995 + // Multi - network active - default
996 + // *. Multisite - Network Active - Pages on main site
997 + return "multi_na_default";
998 + }
999 + } else {
1000 + // * Multisite - Not network active
1001 + return "multi_not_na";
1002 + }
1003 + }
1235 1004 }
1236 1005
1237 1006 /**
1238 1007 * Returns the table prefix based on the installation type.
@@ -1241,11 +1010,12 @@
1241 1010 * @package userswp
1242 1011 *
1243 1012 * @return string Table prefix
1244 1013 */
1245 -function uwp_get_table_prefix() {
1246 - $tables = new UsersWP_Tables();
1247 - return $tables->get_table_prefix();
1014 +function uwp_get_table_prefix()
1015 +{
1016 + $tables = new UsersWP_Tables();
1017 + return $tables->get_table_prefix();
1248 1018 }
1249 1019
1250 1020 /**
1251 1021 * Returns the table prefix based on the installation type.
@@ -1254,15 +1024,14 @@
1254 1024 * @package userswp
1255 1025 *
1256 1026 * @return string Table prefix
1257 1027 */
1258 -function get_usermeta_table_prefix() {
1259 - $tables = new UsersWP_Tables();
1260 - return $tables->get_usermeta_table_prefix();
1028 +function get_usermeta_table_prefix()
1029 +{
1030 + $tables = new UsersWP_Tables();
1031 + return $tables->get_usermeta_table_prefix();
1261 1032 }
1262 1033
1263 -
1264 -
1265 1034 /**
1266 1035 * Converts array to comma separated string.
1267 1036 *
1268 1037 *
@@ -1273,14 +1042,15 @@
1273 1042 * @param string $value Custom field value.
1274 1043 *
1275 1044 * @return string Converted custom field value string.
1276 1045 */
1277 -function uwp_maybe_serialize($key, $value) {
1278 - $field = uwp_get_custom_field_info($key);
1279 - if (isset($field->field_type) && $field->field_type == 'multiselect') {
1280 - $value = implode(",", $value);
1281 - }
1282 - return $value;
1046 +function uwp_maybe_serialize($key, $value)
1047 +{
1048 + $field = uwp_get_custom_field_info($key);
1049 + if (isset($field->field_type) && $field->field_type == 'multiselect' && is_array($value)) {
1050 + $value = implode(",", $value);
1051 + }
1052 + return $value;
1283 1053 }
1284 1054
1285 1055 /**
1286 1056 * Converts comma separated string to array.
@@ -1292,14 +1062,15 @@
1292 1062 * @param string $value Custom field value.
1293 1063 *
1294 1064 * @return array Converted custom field value array.
1295 1065 */
1296 -function uwp_maybe_unserialize($key, $value) {
1297 - $field = uwp_get_custom_field_info($key);
1298 - if (isset($field->field_type) && $field->field_type == 'multiselect') {
1299 - $value = explode(",", $value);
1300 - }
1301 - return $value;
1066 +function uwp_maybe_unserialize($key, $value)
1067 +{
1068 + $field = uwp_get_custom_field_info($key);
1069 + if (isset($field->field_type) && $field->field_type == 'multiselect' && $value) {
1070 + $value = explode(",", $value);
1071 + }
1072 + return $value;
1302 1073 }
1303 1074
1304 1075 /**
1305 1076 * Creates UsersWP related tables.
@@ -1310,26 +1081,13 @@
1310 1081 * @return void
1311 1082 */
1312 1083 function uwp_create_tables()
1313 1084 {
1314 - $tables = new UsersWP_Tables();
1315 - $tables->uwp_create_tables();
1085 + $tables = new UsersWP_Tables();
1086 + $tables->create_tables();
1316 1087 }
1317 1088
1318 1089 /**
1319 - * Creates uwp_usermeta table which introduced in version 1.0.1
1320 - *
1321 - * @since 1.0.0
1322 - * @package userswp
1323 - *
1324 - * @return void
1325 - */
1326 -function uwp101_create_tables() {
1327 - $tables = new UsersWP_Tables();
1328 - $tables->uwp101_create_tables();
1329 -}
1330 -
1331 -/**
1332 1090 * Returns tye client IP.
1333 1091 *
1334 1092 * @since 1.0.0
1335 1093 * @package userswp
@@ -1335,20 +1093,21 @@
1335 1093 * @package userswp
1336 1094 *
1337 1095 * @return string IP address.
1338 1096 */
1339 -function uwp_get_ip() {
1340 - if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
1341 - //check ip from share internet
1342 - $ip = $_SERVER['HTTP_CLIENT_IP'];
1343 - } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
1344 - //to check ip is pass from proxy
1345 - $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
1346 - } else {
1347 - $ip = $_SERVER['REMOTE_ADDR'];
1348 - }
1097 +function uwp_get_ip()
1098 +{
1099 + if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
1100 + //check ip from share internet
1101 + $ip = $_SERVER['HTTP_CLIENT_IP'];
1102 + } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
1103 + //to check ip is pass from proxy
1104 + $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
1105 + } else {
1106 + $ip = $_SERVER['REMOTE_ADDR'];
1107 + }
1349 1108
1350 - return apply_filters('uwp_get_ip', $ip);
1109 + return apply_filters('uwp_get_ip', $ip);
1351 1110 }
1352 1111
1353 1112 /**
1354 1113 * Checks whether the string starts with the given string.
@@ -1362,10 +1121,10 @@
1362 1121 * @return bool True when success. False when failure.
1363 1122 */
1364 1123 function uwp_str_starts_with($haystack, $needle)
1365 1124 {
1366 - $length = strlen($needle);
1367 - return (substr($haystack, 0, $length) === $needle);
1125 + $length = strlen($needle);
1126 + return (substr($haystack, 0, $length) === $needle);
1368 1127 }
1369 1128
1370 1129 /**
1371 1130 * Checks whether the string ends with the given string.
@@ -1379,18 +1138,18 @@
1379 1138 * @return bool True when success. False when failure.
1380 1139 */
1381 1140 function uwp_str_ends_with($haystack, $needle)
1382 1141 {
1383 - $length = strlen($needle);
1384 - if ($length == 0) {
1385 - return true;
1386 - }
1142 + $length = strlen($needle);
1143 + if ($length == 0) {
1144 + return true;
1145 + }
1387 1146
1388 - return (substr($haystack, -$length) === $needle);
1147 + return (substr($haystack, -$length) === $needle);
1389 1148 }
1390 1149
1391 1150 /**
1392 - * Returns the font awesome icon value for field type.
1151 + * Returns the font awesome icon value for field type.
1393 1152 * Displayed in profile tabs.
1394 1153 *
1395 1154 * @since 1.0.0
1396 1155 * @package userswp
@@ -1398,30 +1157,30 @@
1398 1157 * @param string $type Field type.
1399 1158 *
1400 1159 * @return string Font awesome icon value.
1401 1160 */
1402 -function uwp_field_type_to_fa_icon($type) {
1403 - $field_types = array(
1404 - 'text' => 'fas fa-minus',
1405 - 'datepicker' => 'fas fa-calendar-alt',
1406 - 'textarea' => 'fas fa-bars',
1407 - 'time' =>'far fa-clock',
1408 - 'checkbox' =>'far fa-check-square',
1409 - 'phone' =>'far fa-phone',
1410 - 'radio' =>'far fa-dot-circle',
1411 - 'email' =>'far fa-envelope',
1412 - 'select' =>'far fa-caret-square-down',
1413 - 'multiselect' =>'far fa-caret-square-down',
1414 - 'url' =>'fas fa-link',
1415 - 'file' =>'fas fa-file'
1416 - );
1161 +function uwp_field_type_to_fa_icon($type)
1162 +{
1163 + $field_types = array(
1164 + 'text' => 'fas fa-minus',
1165 + 'datepicker' => 'fas fa-calendar-alt',
1166 + 'textarea' => 'fas fa-bars',
1167 + 'time' => 'far fa-clock',
1168 + 'checkbox' => 'far fa-check-square',
1169 + 'phone' => 'far fa-phone',
1170 + 'radio' => 'far fa-dot-circle',
1171 + 'email' => 'far fa-envelope',
1172 + 'select' => 'far fa-caret-square-down',
1173 + 'multiselect' => 'far fa-caret-square-down',
1174 + 'url' => 'fas fa-link',
1175 + 'file' => 'fas fa-file'
1176 + );
1417 1177
1418 - if (isset($field_types[$type])) {
1419 - return $field_types[$type];
1420 - } else {
1421 - return "";
1422 - }
1423 -
1178 + if (isset($field_types[$type])) {
1179 + return $field_types[$type];
1180 + } else {
1181 + return "";
1182 + }
1424 1183 }
1425 1184
1426 1185 /**
1427 1186 * Check wpml active or not.
@@ -1429,14 +1188,15 @@
1429 1188 * @since 1.0.7
1430 1189 *
1431 1190 * @return True if WPML is active else False.
1432 1191 */
1433 -function uwp_is_wpml() {
1434 - if (class_exists('SitePress') && function_exists('icl_object_id')) {
1435 - return true;
1436 - }
1192 +function uwp_is_wpml()
1193 +{
1194 + if (defined('ICL_SITEPRESS_VERSION') && ! ICL_PLUGIN_INACTIVE && class_exists('SitePress') && function_exists('icl_object_id')) {
1195 + return true;
1196 + }
1437 1197
1438 - return false;
1198 + return false;
1439 1199 }
1440 1200
1441 1201 /**
1442 1202 * Get the element in the WPML current language.
@@ -1452,247 +1212,914 @@
1452 1212 * the original if the translation is missing and $return_original_if_missing is set to TRUE.
1453 1213 *
1454 1214 * @return int|NULL
1455 1215 */
1456 -function uwp_wpml_object_id( $element_id, $element_type = 'post', $return_original_if_missing = false, $ulanguage_code = null ) {
1457 - if ( uwp_is_wpml() ) {
1458 - if ( function_exists( 'wpml_object_id_filter' ) ) {
1459 - return apply_filters( 'wpml_object_id', $element_id, $element_type, $return_original_if_missing, $ulanguage_code );
1460 - } else {
1461 - return icl_object_id( $element_id, $element_type, $return_original_if_missing, $ulanguage_code );
1462 - }
1463 - }
1216 +function uwp_wpml_object_id($element_id, $element_type = 'post', $return_original_if_missing = false, $ulanguage_code = null)
1217 +{
1218 + if (uwp_is_wpml()) {
1219 + if (function_exists('wpml_object_id_filter')) {
1220 + return apply_filters('wpml_object_id', $element_id, $element_type, $return_original_if_missing, $ulanguage_code);
1221 + } else {
1222 + return icl_object_id($element_id, $element_type, $return_original_if_missing, $ulanguage_code);
1223 + }
1224 + }
1464 1225
1465 - return $element_id;
1226 + return $element_id;
1466 1227 }
1467 1228
1468 -function uwp_get_default_avatar_uri(){
1469 - $default = uwp_get_option('profile_default_profile', '');
1470 - if(empty($default)){
1471 - $default = USERSWP_PLUGIN_URL."public/assets/images/no_profile.png";
1472 - } else {
1473 - $default = wp_get_attachment_url($default);
1474 - }
1229 +/**
1230 + * Check if we might be on localhost.
1231 + *
1232 + * @return bool
1233 + */
1234 +function uwp_is_localhost()
1235 +{
1236 + $localhost = false;
1475 1237
1476 - return $default;
1238 + if (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == 'localhost') {
1239 + $localhost = true;
1240 + } elseif (isset($_SERVER['SERVER_ADDR']) && ($_SERVER['SERVER_ADDR'] == '127.0.0.1' || $_SERVER['SERVER_ADDR'] == '::1')) {
1241 + $localhost = true;
1242 + }
1243 +
1244 + return $localhost;
1477 1245 }
1478 1246
1479 -function uwp_refresh_permalinks_on_bad_404() {
1247 +function uwp_get_default_avatar_uri()
1248 +{
1249 + $default = uwp_get_option('profile_default_profile', '');
1250 + if (empty($default)) {
1251 + $default = USERSWP_PLUGIN_URL . "assets/images/no_profile.png";
1252 + } else {
1253 + $default = wp_get_attachment_url($default);
1254 + }
1480 1255
1481 - global $wp;
1256 + return apply_filters('uwp_default_avatar_uri', $default);
1257 +}
1482 1258
1483 - if( ! is_404() ) {
1484 - return;
1485 - }
1259 +function uwp_get_default_thumb_uri()
1260 +{
1261 + $thumb_url = USERSWP_PLUGIN_URL . "assets/images/no_thumb.png";
1262 + return apply_filters('uwp_default_thumb_uri', $thumb_url);
1263 +}
1486 1264
1487 - if( isset( $_GET['uwp-flush'] ) ) {
1488 - return;
1489 - }
1265 +function uwp_get_default_banner_uri()
1266 +{
1267 + $banner = uwp_get_option('profile_default_banner', '');
1268 + if (empty($banner)) {
1269 + $banner_url = USERSWP_PLUGIN_URL . "assets/images/banner.png";
1270 + } else {
1271 + $banner_url = wp_get_attachment_url($banner);
1272 + }
1273 + return apply_filters('uwp_default_banner_uri', $banner_url);
1274 +}
1490 1275
1491 - if( false === get_transient( 'uwp_refresh_404_permalinks' ) ) {
1276 +/**
1277 + * Handles multisite upload dir path
1278 + *
1279 + * @param $uploads array upload variable array
1280 + *
1281 + * @return array updated upload variable array.
1282 + */
1283 +function uwp_handle_multisite_profile_image($uploads)
1284 +{
1285 + if (! function_exists('is_plugin_active_for_network')) {
1286 + require_once(ABSPATH . '/wp-admin/includes/plugin.php');
1287 + }
1492 1288
1493 - flush_rewrite_rules( false );
1289 + // Network active.
1290 + if (is_plugin_active_for_network('userswp/userswp.php')) {
1291 + $main_site = get_network()->site_id;
1292 + switch_to_blog($main_site);
1293 + remove_filter('upload_dir', 'uwp_handle_multisite_profile_image');
1294 + $uploads = wp_upload_dir();
1295 + restore_current_blog();
1296 + }
1494 1297
1495 - set_transient( 'uwp_refresh_404_permalinks', 1, HOUR_IN_SECONDS * 12 );
1298 + return $uploads;
1299 +}
1496 1300
1497 - wp_redirect( home_url( add_query_arg( array( 'uwp-flush' => 1 ), $wp->request ) ) ); exit;
1301 +/**
1302 + * let_to_num function.
1303 + *
1304 + * This function transforms the php.ini notation for numbers (like '2M') to an integer.
1305 + *
1306 + * @since 2.0.0
1307 + * @param $size
1308 + * @return int
1309 + */
1310 +function uwp_let_to_num($size)
1311 +{
1312 + $l = substr($size, -1);
1313 + $ret = substr($size, 0, -1);
1314 + switch (strtoupper($l)) {
1315 + case 'P':
1316 + $ret *= 1024;
1317 + case 'T':
1318 + $ret *= 1024;
1319 + case 'G':
1320 + $ret *= 1024;
1321 + case 'M':
1322 + $ret *= 1024;
1323 + case 'K':
1324 + $ret *= 1024;
1325 + }
1326 + return $ret;
1327 +}
1498 1328
1499 - }
1329 +function uwp_format_decimal($number, $dp = false, $trim_zeros = false)
1330 +{
1331 + $locale = localeconv();
1332 + $decimals = array(uwp_get_decimal_separator(), $locale['decimal_point'], $locale['mon_decimal_point']);
1333 +
1334 + // Remove locale from string.
1335 + if (! is_float($number)) {
1336 + $number = str_replace($decimals, '.', $number);
1337 + $number = preg_replace('/[^0-9\.,-]/', '', uwp_clean($number));
1338 + }
1339 +
1340 + if (false !== $dp) {
1341 + $dp = intval('' == $dp ? uwp_get_decimal_separator() : $dp);
1342 + $number = number_format(floatval($number), $dp, '.', '');
1343 + // DP is false - don't use number format, just return a string in our format
1344 + } elseif (is_float($number)) {
1345 + // DP is false - don't use number format, just return a string using whatever is given. Remove scientific notation using sprintf.
1346 + $number = str_replace($decimals, '.', sprintf('%.' . uwp_get_rounding_precision() . 'f', $number));
1347 + // We already had a float, so trailing zeros are not needed.
1348 + $trim_zeros = true;
1349 + }
1350 +
1351 + if ($trim_zeros && strstr($number, '.')) {
1352 + $number = rtrim(rtrim($number, '0'), '.');
1353 + }
1354 +
1355 + return $number;
1500 1356 }
1501 -add_action( 'template_redirect', 'uwp_refresh_permalinks_on_bad_404' );
1502 1357
1503 -add_filter( 'avatar_defaults', 'uwp_avatar_defaults' , 99999 , 6 );
1504 -/*
1505 - * Remove get_avatar filter applied by UWP for default avatars in settings
1506 - * @param array $avatar_defaults default avatars
1507 - * @return array $avatar_defaults default avatars
1358 +/**
1359 + * Return the decimal separator.
1360 + * @since 1.0.20
1361 + * @return string
1362 + */
1363 +function uwp_get_decimal_separator()
1364 +{
1365 + $separator = apply_filters('uwp_decimal_separator', '.');
1366 + return $separator ? stripslashes($separator) : '.';
1367 +}
1368 +
1369 +/**
1370 + * Get rounding precision for internal UWP calculations.
1371 + * Will increase the precision of uwp_get_decimal_separator by 2 decimals, unless UWP_ROUNDING_PRECISION is set to a higher number.
1508 1372 *
1373 + * @since 1.0.20
1374 + * @return int
1509 1375 */
1510 -function uwp_avatar_defaults($avatar_defaults){
1511 - remove_filter('get_avatar', 'uwp_modify_get_avatar', 99999, 6);
1512 - return $avatar_defaults;
1376 +function uwp_get_rounding_precision()
1377 +{
1378 + $precision = uwp_get_decimal_separator() + 2;
1379 + if (defined(UWP_ROUNDING_PRECISION) && absint(UWP_ROUNDING_PRECISION) > $precision) {
1380 + $precision = absint(UWP_ROUNDING_PRECISION);
1381 + }
1382 + return $precision;
1513 1383 }
1514 1384
1515 -remove_all_filters('get_avatar');
1516 -add_filter( 'get_avatar', 'uwp_modify_get_avatar' , 99999 , 6 );
1517 1385 /**
1518 - * Modifies get_avatar function to use userswp avatar.
1386 + * Clean variables using sanitize_text_field. Arrays are cleaned recursively.
1387 + * Non-scalar values are ignored.
1519 1388 *
1520 - * @since 1.0.0
1521 - * @package userswp
1522 - * @param string $avatar img tag value for the user's avatar.
1523 - * @param mixed $id_or_email The Gravatar to retrieve. Accepts a user_id, gravatar md5 hash,
1524 - * user email, WP_User object, WP_Post object, or WP_Comment object.
1525 - * @param int $size Square avatar width and height in pixels to retrieve.
1526 - * @param string $default URL for the default image or a default type. Accepts '404', 'retro', 'monsterid',
1527 - * 'wavatar', 'indenticon','mystery' (or 'mm', or 'mysteryman'), 'blank', or 'gravatar_default'.
1528 - * Default is the value of the 'avatar_default' option, with a fallback of 'mystery'.
1529 - * @param string $alt Alternative text to use in the avatar image tag. Default empty.
1530 - * @return string Modified img tag value
1389 + * @param string|array $var
1390 + *
1391 + * @return string|array
1531 1392 */
1532 -function uwp_modify_get_avatar( $avatar, $id_or_email, $size, $default, $alt, $args )
1393 +function uwp_clean($var)
1533 1394 {
1534 - $user = false;
1535 1395
1536 - if (is_numeric($id_or_email)) {
1396 + if (is_array($var)) {
1397 + return array_map('uwp_clean', $var);
1398 + } else {
1399 + return is_scalar($var) ? sanitize_text_field($var) : $var;
1400 + }
1401 +}
1537 1402
1538 - $id = (int)$id_or_email;
1539 - $user = get_user_by('id', $id);
1403 +/**
1404 + * Define a constant if it is not already defined.
1405 + *
1406 + * @since 1.0.21
1407 + *
1408 + * @param string $name Constant name.
1409 + * @param string $value Value.
1410 + */
1411 +function uwp_maybe_define($name, $value)
1412 +{
1413 + if (! defined($name)) {
1414 + define($name, $value);
1415 + }
1416 +}
1540 1417
1541 - } elseif (is_object($id_or_email)) {
1418 +function uwp_insert_usermeta()
1419 +{
1420 + global $wpdb;
1421 + $sort = "user_registered";
1542 1422
1543 - if (!empty($id_or_email->user_id)) {
1544 - $id = (int)$id_or_email->user_id;
1545 - $user = get_user_by('id', $id);
1546 - }
1423 + $all_users_id = $wpdb->get_col($wpdb->prepare( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1424 + "SELECT $wpdb->users.ID FROM $wpdb->users ORDER BY %s ASC",
1425 + $sort
1426 + ));
1547 1427
1548 - } else {
1549 - $user = get_user_by('email', $id_or_email);
1550 - }
1428 + //we got all the IDs, now loop through them to get individual IDs
1429 + foreach ($all_users_id as $user_id) {
1430 + $user_data = get_userdata($user_id);
1551 1431
1552 - if ($user && is_object($user)) {
1553 - $avatar_thumb = uwp_get_usermeta($user->data->ID, 'uwp_account_avatar_thumb', '');
1554 - if (!empty($avatar_thumb)) {
1555 - $uploads = wp_upload_dir();
1556 - $upload_url = $uploads['baseurl'];
1557 - if (substr($avatar_thumb, 0, 4) !== "http") {
1558 - $avatar_thumb = $upload_url . $avatar_thumb;
1559 - }
1560 - $avatar = "<img alt='{$alt}' src='{$avatar_thumb}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
1561 - } else {
1562 - $default = uwp_get_default_avatar_uri();
1563 - $args = get_avatar_data($id_or_email, $args);
1564 - $url = $args['url'];
1565 - $url = remove_query_arg('d', $url);
1566 - $url = add_query_arg(array('d' => $default), $url);
1567 - if (!$url || is_wp_error($url)) {
1568 - return $avatar;
1569 - }
1570 - $avatar = '<img src="' . $url . '" class="gravatar avatar avatar-' . $size . ' uwp-avatar" width="' . $size . '" height="' . $size . '" alt="' . $alt . '" />';
1571 - }
1432 + $meta_table = get_usermeta_table_prefix() . 'uwp_usermeta';
1433 + $user_meta = array(
1434 + 'username' => $user_data->user_login,
1435 + 'email' => sanitize_email($user_data->user_email),
1436 + 'first_name' => $user_data->first_name,
1437 + 'last_name' => $user_data->last_name,
1438 + 'display_name' => $user_data->display_name,
1439 + );
1572 1440
1573 - }
1441 + $users = $wpdb->get_var($wpdb->prepare("SELECT COUNT(user_id) FROM {$meta_table} WHERE user_id = %d", $user_id)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1574 1442
1575 - return $avatar;
1443 + if (!empty($users)) {
1444 + $wpdb->update( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1445 + $meta_table,
1446 + $user_meta,
1447 + array('user_id' => $user_id)
1448 + );
1449 + } else {
1450 + $user_meta['user_id'] = $user_id;
1451 + $wpdb->insert( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
1452 + $meta_table,
1453 + $user_meta
1454 + );
1455 + }
1456 + }
1576 1457 }
1577 1458
1459 +function uwp_get_localize_data()
1460 +{
1461 + $pass_msg = uwp_get_option("register_uwp_strong_pass_msg");
1462 + $uwp_localize_data = array(
1463 + 'uwp_more_char_limit' => 100,
1464 + 'uwp_more_text' => __('more', 'userswp'),
1465 + 'uwp_less_text' => __('less', 'userswp'),
1466 + 'error' => __('Something went wrong.', 'userswp'),
1467 + 'error_retry' => __('Something went wrong, please retry.', 'userswp'),
1468 + 'uwp_more_ellipses_text' => '...',
1469 + 'ajaxurl' => admin_url('admin-ajax.php'),
1470 + 'login_modal' => uwp_get_option("design_style", 'bootstrap') == 'bootstrap' && uwp_get_option("login_modal", 1) ? 1 : '',
1471 + 'register_modal' => uwp_get_option("design_style", 'bootstrap') == 'bootstrap' && uwp_get_option("register_modal", 1) ? 1 : '',
1472 + 'forgot_modal' => uwp_get_option("design_style", 'bootstrap') == 'bootstrap' && uwp_get_option("forgot_modal", 1) ? 1 : '',
1473 + 'uwp_pass_strength' => uwp_get_option("register_min_password_strength", 0),
1474 + 'uwp_strong_pass_msg' => !empty($pass_msg) ? $pass_msg : __("Please enter valid strong password.", "userswp"),
1475 + 'default_banner' => uwp_get_default_banner_uri(),
1476 + 'basicNonce' => esc_attr(wp_create_nonce('uwp_basic_nonce')),
1477 + 'wordfence_2fa_active' => ( class_exists( '\WordfenceLS\Controller_Users' ) && class_exists( '\WordfenceLS\Controller_TOTP' ) ) ? 1 : ''
1478 + );
1479 +
1480 + return apply_filters('uwp_localize_data', $uwp_localize_data);
1481 +}
1482 +
1483 +function uwp_is_page_builder() {
1484 + if (
1485 + ( isset( $_GET['elementor-preview'] ) && $_GET['elementor-preview'] > 0 ) // elementor
1486 + || isset( $_REQUEST['et_fb'] ) || isset( $_REQUEST['et_pb_preview'] ) // divi
1487 + || isset( $_REQUEST['fl_builder'] ) // beaver
1488 + || ! empty( $_REQUEST['siteorigin_panels_live_editor'] ) // siteorigin
1489 + || ! empty( $_REQUEST['cornerstone_preview'] ) // cornerstone
1490 + || ! empty( $_REQUEST['fb-edit'] ) || ! empty( $_REQUEST['fusion_load_nonce'] ) // fusion builder
1491 + || ! empty( $_REQUEST['ct_builder'] ) || ( ! empty( $_REQUEST['action'] ) && ( substr( $_REQUEST['action'], 0, 11 ) === "oxy_render_" || substr( $_REQUEST['action'], 0, 10 ) === "ct_render_" ) ) // oxygen
1492 + || ( function_exists( 'bricks_is_builder' ) && ( bricks_is_builder() || bricks_is_builder_call() ) ) // Bricks Builder
1493 + || ( \function_exists( 'Breakdance\\isRequestFromBuilderIframe' ) && ( \Breakdance\isRequestFromBuilderIframe() || \Breakdance\isRequestFromBuilderSsr() ) ) // Breakdance Builder
1494 + || ( function_exists( 'znhg_kallyas_theme_config' ) && ! empty( $_REQUEST['zn_pb_edit'] ) ) // Kallyas theme Zion builder
1495 + ) {
1496 + return true; // builder.
1497 + }
1498 +
1499 + return false;
1500 +}
1501 +
1578 1502 /**
1579 - * Handles multisite upload dir path
1503 + * Display a help tip for settings.
1580 1504 *
1581 - * @param $uploads array upload variable array
1505 + * @param string $tip Help tip text
1506 + * @param bool $allow_html Allow sanitized HTML if true or escape
1582 1507 *
1583 - * @return array updated upload variable array.
1508 + * @return string
1584 1509 */
1585 -function uwp_handle_multisite_profile_image($uploads){
1586 - if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
1587 - require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
1588 - }
1510 +function uwp_help_tip($tip, $allow_html = false)
1511 +{
1512 + global $aui_bs5;
1513 + if ($allow_html) {
1514 + $tip = uwp_sanitize_tooltip($tip);
1515 + } else {
1516 + $tip = esc_attr($tip);
1517 + }
1589 1518
1590 - // Network active.
1591 - if ( is_plugin_active_for_network( 'userswp/userswp.php' ) ) {
1592 - $main_site = get_network()->site_id;
1593 - switch_to_blog( $main_site );
1594 - remove_filter( 'upload_dir', 'uwp_handle_multisite_profile_image');
1595 - $uploads = wp_upload_dir();
1596 - restore_current_blog();
1597 - }
1519 + $ml = $aui_bs5 ? 'ms-2 float-end' : 'ml-2 float-right';
1598 1520
1599 - return $uploads;
1521 + return '<span class="uwp-help-tip dashicons dashicons-editor-help text-muted ' . $ml . '" title="' . $tip . '" data-bs-toggle="tooltip" data-bs-html="true"></span>';
1600 1522 }
1601 1523
1602 1524 /**
1603 - * let_to_num function.
1525 + * Sanitize a string destined to be a tooltip.
1604 1526 *
1605 - * This function transforms the php.ini notation for numbers (like '2M') to an integer.
1527 + * Tooltips are encoded with htmlspecialchars to prevent XSS. Should not be used in conjunction with esc_attr()
1606 1528 *
1607 - * @since 2.0.0
1608 - * @param $size
1609 - * @return int
1529 + * @param string $var
1530 + * @return string
1610 1531 */
1611 -function uwp_let_to_num( $size ) {
1612 - $l = substr( $size, -1 );
1613 - $ret = substr( $size, 0, -1 );
1614 - switch ( strtoupper( $l ) ) {
1615 - case 'P':
1616 - $ret *= 1024;
1617 - case 'T':
1618 - $ret *= 1024;
1619 - case 'G':
1620 - $ret *= 1024;
1621 - case 'M':
1622 - $ret *= 1024;
1623 - case 'K':
1624 - $ret *= 1024;
1625 - }
1626 - return $ret;
1532 +function uwp_sanitize_tooltip($var)
1533 +{
1534 + return htmlspecialchars(wp_kses(html_entity_decode($var), array(
1535 + 'br' => array(),
1536 + 'em' => array(),
1537 + 'strong' => array(),
1538 + 'small' => array(),
1539 + 'span' => array(),
1540 + 'ul' => array(),
1541 + 'li' => array(),
1542 + 'ol' => array(),
1543 + 'p' => array(),
1544 + )));
1627 1545 }
1628 1546
1629 -function uwp_format_decimal($number, $dp = false, $trim_zeros = false){
1630 - $locale = localeconv();
1631 - $decimals = array( uwp_get_decimal_separator(), $locale['decimal_point'], $locale['mon_decimal_point'] );
1547 +function uwp_all_email_tags($inline = true, $extra_tags = array())
1548 +{
1549 + $tags = array('[#site_name#]', '[#site_name_url#]', '[#to_name#]', '[#from_name#]', '[#from_email#]', '[#user_name#]', '[#username#]', '[#user_email#]', '[#first_name#]', '[#last_name#]', '[#login_details#]', '[#date_time#]', '[#current_date#]', '[#login_url#]', '[#user_login#]', '[#profile_link#]');
1632 1550
1633 - // Remove locale from string.
1634 - if ( ! is_float( $number ) ) {
1635 - $number = str_replace( $decimals, '.', $number );
1636 - $number = preg_replace( '/[^0-9\.,-]/', '', uwp_clean( $number ) );
1637 - }
1551 + if (is_array($extra_tags) && count($extra_tags) > 0) {
1552 + $tags = array_merge($extra_tags, $tags);
1553 + }
1638 1554
1639 - if ( false !== $dp ) {
1640 - $dp = intval( '' == $dp ? uwp_get_decimal_separator() : $dp );
1641 - $number = number_format( floatval( $number ), $dp, '.', '' );
1642 - // DP is false - don't use number format, just return a string in our format
1643 - } elseif ( is_float( $number ) ) {
1644 - // DP is false - don't use number format, just return a string using whatever is given. Remove scientific notation using sprintf.
1645 - $number = str_replace( $decimals, '.', sprintf( '%.' . uwp_get_rounding_precision() . 'f', $number ) );
1646 - // We already had a float, so trailing zeros are not needed.
1647 - $trim_zeros = true;
1648 - }
1555 + $tags = apply_filters('uwp_all_email_tags', $tags);
1649 1556
1650 - if ( $trim_zeros && strstr( $number, '.' ) ) {
1651 - $number = rtrim( rtrim( $number, '0' ), '.' );
1652 - }
1557 + if ($inline) {
1558 + $tags = '<code>' . implode('</code> <code>', $tags) . '</code>';
1559 + }
1653 1560
1654 - return $number;
1561 + return $tags;
1655 1562 }
1656 1563
1564 +function uwp_wp_new_user_notification_tags($inline = true, $extra_tags = array())
1565 +{
1566 + $tags = array('[#site_name#]', '[#site_name_url#]', '[#to_name#]', '[#from_name#]', '[#from_email#]', '[#user_name#]', '[#username#]', '[#user_email#]', '[#date_time#]', '[#current_date#]', '[#login_url#]', '[#user_login#]',);
1567 +
1568 + if (is_array($extra_tags) && count($extra_tags) > 0) {
1569 + $tags = array_merge($tags, $extra_tags);
1570 + }
1571 +
1572 + $tags = apply_filters('uwp_wp_new_user_notification_email_tags', $tags);
1573 +
1574 + if ($inline) {
1575 + $tags = '<code>' . implode('</code> <code>', $tags) . '</code>';
1576 + }
1577 +
1578 + return $tags;
1579 +}
1580 +
1581 +
1582 +function uwp_delete_account_email_tags($inline = true)
1583 +{
1584 + $tags = array('[#site_name#]', '[#site_name_url#]', '[#from_name#]', '[#from_email#]', '[#date_time#]', '[#current_date#]', '[#login_url#]', '[#user_login#]');
1585 +
1586 + $tags = apply_filters('uwp_delete_account_email_tags', $tags);
1587 +
1588 + if ($inline) {
1589 + $tags = '<code>' . implode('</code> <code>', $tags) . '</code>';
1590 + }
1591 +
1592 + return $tags;
1593 +}
1594 +
1595 +function uwp_authbox_tags($inline = true)
1596 +{
1597 + global $wpdb;
1598 +
1599 + $tags = array('[#post_id#]', '[#author_id#]', '[#author_display_name#]', '[#author_name#]', '[#author_link#]', '[#author_bio#]', '[#author_image#]', '[#author_image_url#]', '[#post_modified#]', '[#post_date#]', '[#author_nicename#]', '[#author_registered#]', '[#author_website#]');
1600 +
1601 + $tags = apply_filters('uwp_author_box_default_tags', $tags, $inline);
1602 +
1603 + $table_name = uwp_get_table_prefix() . 'uwp_usermeta';
1604 +
1605 + $excluded = uwp_get_excluded_fields();
1606 +
1607 + $columns = $wpdb->get_col("show columns from $table_name"); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1608 +
1609 + $extra_tags = array_diff($columns, $excluded);
1610 +
1611 + if (!empty($extra_tags) && '' != $extra_tags) {
1612 +
1613 + foreach ($extra_tags as $tag_val) {
1614 + $tags[] = '[#' . $tag_val . '#]';
1615 + }
1616 + }
1617 +
1618 + $tags = apply_filters('uwp_all_author_box_tags', $tags);
1619 +
1620 + if ($inline) {
1621 + $tags = '<code>' . implode('</code> <code>', $tags) . '</code>';
1622 + }
1623 +
1624 + return $tags;
1625 +}
1626 +
1627 +function uwp_get_posttypes()
1628 +{
1629 +
1630 + $exclude_posts = array('attachment', 'revision', 'nav_menu_item', 'custom_css', 'uwp-post');
1631 + $exclude_posttype = apply_filters('uwp_exclude_register_posttype', $exclude_posts);
1632 +
1633 + $all_posttyps = get_post_types(array('public' => true,), 'objects');
1634 +
1635 + $display_posttypes = array();
1636 +
1637 + if (!empty($all_posttyps) && '' != $all_posttyps) {
1638 + foreach ($all_posttyps as $pt_keys => $pt_values) {
1639 +
1640 + if (!in_array($pt_values->name, $exclude_posttype)) {
1641 + $display_posttypes[$pt_values->name] = $pt_values->label;
1642 + }
1643 + }
1644 + }
1645 +
1646 + return $display_posttypes;
1647 +}
1648 +
1649 +function uwp_get_user_by_author_slug()
1650 +{
1651 + $url_type = apply_filters('uwp_profile_url_type', 'slug');
1652 + $author_slug = get_query_var('uwp_profile');
1653 + if ($url_type == 'id') {
1654 + $user = get_user_by('id', $author_slug);
1655 + } else {
1656 + $user = get_user_by('slug', $author_slug);
1657 + }
1658 +
1659 + return $user;
1660 +}
1661 +
1662 +function uwp_get_show_in_locations()
1663 +{
1664 + $show_in_locations = array(
1665 + "[users]" => __("Users Page", 'userswp'),
1666 + "[more_info]" => __("More info tab", 'userswp'),
1667 + "[profile_side]" => __("Profile side (non bootstrap)", 'userswp'),
1668 + "[fieldset]" => __("Fieldset", 'userswp'),
1669 + );
1670 +
1671 + $show_in_locations = apply_filters('uwp_show_in_locations', $show_in_locations);
1672 +
1673 + return $show_in_locations;
1674 +}
1675 +
1676 +function uwp_get_displayed_user()
1677 +{
1678 + global $uwp_user;
1679 + $user = uwp_get_user_by_author_slug(); // for user displayed in profile
1680 +
1681 + if (!$user && is_user_logged_in()) {
1682 + $user = get_userdata(get_current_user_id()); // for user currently logged in
1683 + }
1684 +
1685 + if (isset($uwp_user) && !empty($uwp_user) && $uwp_user instanceof WP_User) { // for user displaying in loop
1686 + $user = $uwp_user;
1687 + }
1688 +
1689 + return apply_filters('uwp_get_displayed_user', $user);
1690 +}
1691 +
1692 +function uwp_is_gdv2()
1693 +{
1694 +
1695 + if (defined('GEODIRECTORY_VERSION') && version_compare(GEODIRECTORY_VERSION, '2.0.0.0', '>=')) {
1696 + return true;
1697 + }
1698 +
1699 + return false;
1700 +}
1701 +
1702 +function uwp_get_blogname()
1703 +{
1704 + $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
1705 +
1706 + return apply_filters('uwp_get_blogname', $blogname);
1707 +}
1708 +
1657 1709 /**
1658 - * Return the decimal separator.
1659 - * @since 1.0.20
1710 + * RGB from hex.
1711 + *
1712 + * @since 1.2.1.3
1713 + *
1714 + * @param string $color Color.
1715 + * @return array $rgb.
1716 + */
1717 +function uwp_rgb_from_hex($color)
1718 +{
1719 + $color = str_replace('#', '', $color);
1720 +
1721 + // Convert shorthand colors to full format, e.g. "FFF" -> "FFFFFF"
1722 + $color = preg_replace('~^(.)(.)(.)$~', '$1$1$2$2$3$3', $color);
1723 + if (empty($color)) {
1724 + return NULL;
1725 + }
1726 +
1727 + $color = str_split($color);
1728 +
1729 + $rgb = array();
1730 + $rgb['R'] = hexdec($color[0] . $color[1]);
1731 + $rgb['G'] = hexdec($color[2] . $color[3]);
1732 + $rgb['B'] = hexdec($color[4] . $color[5]);
1733 +
1734 + return $rgb;
1735 +}
1736 +
1737 +/**
1738 + * HEX darker.
1739 + *
1740 + * @since 1.2.1.3
1741 + *
1742 + * @param string $color Color.
1743 + * @param int $factor Optional. Factor. Default 30.
1744 + * @return string $color.
1745 + */
1746 +function uwp_hex_darker($color, $factor = 30)
1747 +{
1748 + $base = uwp_rgb_from_hex($color);
1749 + if (empty($base)) {
1750 + return $color;
1751 + }
1752 +
1753 + $color = '#';
1754 + foreach ($base as $k => $v) {
1755 + $amount = $v / 100;
1756 + $amount = round($amount * $factor);
1757 + $new_decimal = $v - $amount;
1758 +
1759 + $new_hex_component = dechex($new_decimal);
1760 + if (strlen($new_hex_component) < 2) {
1761 + $new_hex_component = "0" . $new_hex_component;
1762 + }
1763 + $color .= $new_hex_component;
1764 + }
1765 +
1766 + return $color;
1767 +}
1768 +
1769 +/**
1770 + * Hex lighter.
1771 + *
1772 + * @since 1.2.1.3
1773 + *
1774 + * @param string $color Color.
1775 + * @param int $factor Optional. factor. Default 30.
1776 + * @return string $color.
1777 + */
1778 +function uwp_hex_lighter($color, $factor = 30)
1779 +{
1780 + $base = uwp_rgb_from_hex($color);
1781 + if (empty($base)) {
1782 + return $color;
1783 + }
1784 +
1785 + $color = '#';
1786 +
1787 + foreach ($base as $k => $v) {
1788 + $amount = 255 - $v;
1789 + $amount = $amount / 100;
1790 + $amount = round($amount * $factor);
1791 + $new_decimal = $v + $amount;
1792 +
1793 + $new_hex_component = dechex($new_decimal);
1794 + if (strlen($new_hex_component) < 2) {
1795 + $new_hex_component = "0" . $new_hex_component;
1796 + }
1797 + $color .= $new_hex_component;
1798 + }
1799 +
1800 + return $color;
1801 +}
1802 +
1803 +/**
1804 + * Get Light or dark.
1805 + *
1806 + * @since 1.2.1.3
1807 + *
1808 + * @param string $color color.
1809 + * @param string $dark Optional. Dark. Default #000000.
1810 + * @param string $light Optional. Light. Default #FFFFFF.
1660 1811 * @return string
1661 1812 */
1662 -function uwp_get_decimal_separator() {
1663 - $separator = apply_filters( 'uwp_decimal_separator', '.' );
1664 - return $separator ? stripslashes( $separator ) : '.';
1813 +function uwp_light_or_dark($color, $dark = '#000000', $light = '#FFFFFF')
1814 +{
1815 + $hex = str_replace('#', '', $color);
1816 + if (empty($hex)) {
1817 + return $color;
1818 + }
1819 +
1820 + $c_r = hexdec(substr($hex, 0, 2));
1821 + $c_g = hexdec(substr($hex, 2, 2));
1822 + $c_b = hexdec(substr($hex, 4, 2));
1823 +
1824 + $brightness = (($c_r * 299) + ($c_g * 587) + ($c_b * 114)) / 1000;
1825 +
1826 + return $brightness > 155 ? $dark : $light;
1665 1827 }
1666 1828
1667 1829 /**
1668 - * Get rounding precision for internal UWP calculations.
1669 - * Will increase the precision of uwp_get_decimal_separator by 2 decimals, unless UWP_ROUNDING_PRECISION is set to a higher number.
1830 + * Format hex.
1670 1831 *
1671 - * @since 1.0.20
1672 - * @return int
1832 + * @since 1.2.1.3
1833 + *
1834 + * @param string $hex hex.
1835 + * @return string
1673 1836 */
1674 -function uwp_get_rounding_precision() {
1675 - $precision = uwp_get_decimal_separator() + 2;
1676 - if ( absint( UWP_ROUNDING_PRECISION ) > $precision ) {
1677 - $precision = absint( UWP_ROUNDING_PRECISION );
1678 - }
1679 - return $precision;
1837 +function uwp_format_hex($hex)
1838 +{
1839 + $hex = trim(str_replace('#', '', $hex));
1840 + if (empty($hex)) {
1841 + return NULL;
1842 + }
1843 +
1844 + if (strlen($hex) == 3) {
1845 + $hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2];
1846 + }
1847 +
1848 + return $hex ? '#' . $hex : null;
1680 1849 }
1681 1850
1682 1851 /**
1683 - * Clean variables using sanitize_text_field. Arrays are cleaned recursively.
1684 - * Non-scalar values are ignored.
1852 + * Returns activation link for user.
1685 1853 *
1686 - * @param string|array $var
1854 + * @since 1.2.1.3
1687 1855 *
1688 - * @return string|array
1856 + * @param int $user_id User ID.
1857 + *
1858 + * @return string $activation_link
1689 1859 */
1690 -function uwp_clean( $var ) {
1860 +function uwp_get_activation_link($user_id)
1861 +{
1691 1862
1692 - if ( is_array( $var ) ) {
1693 - return array_map( 'uwp_clean', $var );
1694 - } else {
1695 - return is_scalar( $var ) ? sanitize_text_field( $var ) : $var;
1696 - }
1863 + global $wpdb, $wp_hasher;
1697 1864
1698 -}
1865 + if (!$user_id) {
1866 + return false;
1867 + }
1868 +
1869 + $user_data = get_userdata($user_id);
1870 +
1871 + $key = wp_generate_password(20, false);
1872 +
1873 + do_action('uwp_activation_key', $user_data->user_login, $key);
1874 +
1875 + if ( function_exists( 'wp_fast_hash' ) ) {
1876 + $hashed = wp_fast_hash( $key );
1877 + } else {
1878 + if ( empty( $wp_hasher ) ) {
1879 + require_once ABSPATH . 'wp-includes/class-phpass.php';
1880 + $wp_hasher = new PasswordHash( 8, true );
1881 + }
1882 + $hashed = $wp_hasher->HashPassword( $key );
1883 + }
1884 + $wpdb->update($wpdb->users, array('user_activation_key' => time() . ":" . $hashed), array('user_login' => $user_data->user_login)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
1885 + update_user_meta($user_id, 'uwp_mod', 'email_unconfirmed');
1886 +
1887 + $activation_args = array(
1888 + 'uwp_activate' => 'yes',
1889 + 'key' => $key,
1890 + 'login' => rawurlencode($user_data->user_login)
1891 + );
1892 +
1893 + $activation_args = apply_filters('uwp_activation_link_args', $activation_args, $user_id, $user_data);
1894 +
1895 + $activation_link = add_query_arg(
1896 + $activation_args,
1897 + home_url('/login/')
1898 + );
1899 +
1900 + return apply_filters('uwp_activation_link', $activation_link, $user_id, $user_data, $activation_args);
1901 +}
1902 +
1903 +/**
1904 + * Checks a version number against the core version and adds a admin notice if requirements are not met.
1905 + *
1906 + * @param $name
1907 + * @param $version
1908 + *
1909 + * @return bool
1910 + */
1911 +function uwp_min_version_check($name, $version)
1912 +{
1913 + if (version_compare(USERSWP_VERSION, $version, '<')) {
1914 + add_action('admin_notices', function () use (&$name) {
1915 + ?>
1916 + <div class="notice notice-error is-dismissible">
1917 + <p><?php echo esc_html(wp_sprintf(__("%s requires a newer version of UsersWP and will not run until the UsersWP plugin is updated.", "userswp"), $name)); ?></p>
1918 + </div>
1919 +<?php
1920 + });
1921 +
1922 + return false;
1923 + }
1924 +
1925 + return true;
1926 +}
1927 +
1928 +function uwp_get_user_roles($exclude = array())
1929 +{
1930 + $user_roles = array();
1931 + if (!function_exists('get_editable_roles')) {
1932 + require_once(ABSPATH . '/wp-admin/includes/user.php');
1933 + }
1934 +
1935 + $wp_roles = get_editable_roles();
1936 + if (!empty($wp_roles) && is_array($wp_roles)) {
1937 + foreach ($wp_roles as $role => $details) {
1938 + if (in_array($role, $exclude)) {
1939 + } else {
1940 + $user_roles[esc_attr($role)] = !empty($details['name']) ? translate_user_role($details['name']) : $role;
1941 + }
1942 + }
1943 + }
1944 +
1945 + return $user_roles;
1946 +}
1947 +
1948 +function uwp_get_sort_by_order_list()
1949 +{
1950 +
1951 + $cache = wp_cache_get("uwp_get_sort_options");
1952 + if ($cache !== false) {
1953 + return $cache;
1954 + }
1955 +
1956 + global $wpdb;
1957 + $table_name = uwp_get_table_prefix() . 'uwp_user_sorting';
1958 +
1959 + $sort_options_raw = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE is_active = %d AND field_type != 'address' AND tab_parent = '0' ORDER BY sort_order ASC", array(1))); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
1960 +
1961 + $sort_options = array();
1962 +
1963 + if (! empty($sort_options_raw) && count($sort_options_raw) > 1) {
1964 + foreach ($sort_options_raw as $sort) {
1965 + $sort = stripslashes_deep($sort);
1966 +
1967 + $sort->site_title = __(wp_unslash($sort->site_title), 'userswp');
1968 +
1969 + if ($sort->htmlvar_name == 'comment_count') {
1970 + $sort->htmlvar_name = 'rating_count';
1971 + }
1972 +
1973 + $key = $sort->htmlvar_name;
1974 + if (!in_array($key, array('newer', 'older'))) {
1975 + if ($sort->sort == 'asc') {
1976 + $key = esc_attr($sort->htmlvar_name . "_asc");
1977 + } elseif ($sort->sort == 'desc') {
1978 + $key = esc_attr($sort->htmlvar_name . "_desc");
1979 + }
1980 + }
1981 +
1982 + $sort_options[$key] = wp_unslash($sort->site_title);
1983 + }
1984 + }
1985 +
1986 + /**
1987 + * Filter post sort options.
1988 + *
1989 + * @param array $sort_options Unfiltered sort field array.
1990 + */
1991 + $sort_options = apply_filters('uwp_available_users_layout', $sort_options);
1992 +
1993 + wp_cache_set("uwp_get_sort_options", $sort_options);
1994 +
1995 + return $sort_options;
1996 +}
1997 +
1998 +function uwp_get_default_sort()
1999 +{
2000 +
2001 + $cache = wp_cache_get("uwp_get_default_sort");
2002 +
2003 + if ($cache !== false) {
2004 + return $cache;
2005 + }
2006 +
2007 + $default_sort = 'newer_asc';
2008 +
2009 + global $wpdb;
2010 + $table_name = uwp_get_table_prefix() . 'uwp_user_sorting';
2011 +
2012 + $field = $wpdb->get_row("SELECT htmlvar_name, sort, field_type FROM " . $table_name . " WHERE is_active = 1 AND is_default = 1 ORDER BY sort_order ASC"); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
2013 + if (! empty($field)) {
2014 + if ($field->field_type == 'random') {
2015 + $default_sort = 'random';
2016 + } elseif ('newer' == $field->htmlvar_name) {
2017 + $default_sort = 'user_registered_desc';
2018 + } elseif ('older' == $field->htmlvar_name) {
2019 + $default_sort = 'user_registered_asc';
2020 + } else {
2021 + $default_sort = $field->htmlvar_name . '_' . $field->sort;
2022 + }
2023 + }
2024 +
2025 + wp_cache_set("uwp_get_default_sort", $default_sort);
2026 +
2027 + return $default_sort;
2028 +}
2029 +
2030 +function uwp_get_username($user_id)
2031 +{
2032 + $user_data = get_userdata($user_id);
2033 +
2034 + if (! $user_data) {
2035 + return '';
2036 + }
2037 +
2038 + $display_name = ! empty($user_data->display_name) ? $user_data->display_name : $user_data->user_login;
2039 +
2040 + return apply_filters('uwp_get_username', $display_name, $user_id, $user_data);
2041 +}
2042 +
2043 +/**
2044 + * File relative url.
2045 + *
2046 + * @since 1.2.66
2047 + *
2048 + * @param string $url URL.
2049 + * @param bool $full_path Optional. Full Path. Default false.
2050 + * @return string
2051 + */
2052 +function uwp_get_file_relative_url( $url, $full_path = false ) {
2053 + $url = trim( $url );
2054 +
2055 + if ( !$url ) {
2056 + return $url;
2057 + }
2058 +
2059 + $relative_url = $url;
2060 + $url = trim( $url, '/\\' ); // clean slashes
2061 +
2062 + $upload_dir = wp_upload_dir();
2063 + $upload_basedir = $upload_dir['basedir'];
2064 + $upload_baseurl = $upload_dir['baseurl'];
2065 + $content_dir = untrailingslashit( WP_CONTENT_DIR );
2066 + $content_url = untrailingslashit( WP_CONTENT_URL );
2067 +
2068 + if ( strpos( $upload_baseurl, 'https://' ) === 0 ) {
2069 + $https = 'https://';
2070 + $match_upload_baseurl = str_replace( 'https://', '', $upload_baseurl );
2071 + $content_url = str_replace( 'http://', 'https://', $content_url );
2072 + } else {
2073 + $https = 'http://';
2074 + $match_upload_baseurl = str_replace( 'http://', '', $upload_baseurl );
2075 + $content_url = str_replace( 'https://', 'http://', $content_url );
2076 + }
2077 +
2078 + $match_content_url = strpos( $content_url, 'https://' ) === 0 ? str_replace( 'https://', '', $content_url ) : str_replace( 'http://', '', $content_url );
2079 + $match_url = strpos( $url, 'https://' ) === 0 ? str_replace( 'https://', '', $url ) : str_replace( 'http://', '', $url );
2080 +
2081 + // www.
2082 + $www = '';
2083 + if ( strpos( $match_upload_baseurl, 'www.' ) === 0 ) {
2084 + $www = 'www.';
2085 + $match_upload_baseurl = str_replace( 'www.', '', $match_upload_baseurl );
2086 + }
2087 + if ( strpos( $match_content_url, 'www.' ) === 0 ) {
2088 + $match_content_url = str_replace( 'www.', '', $match_content_url );
2089 + }
2090 + if ( strpos( $match_url, 'www.' ) === 0 ) {
2091 + $match_url = str_replace( 'www.', '', $match_url );
2092 + }
2093 +
2094 + if ( $full_path ) {
2095 + if ( strpos( $relative_url, 'http://' ) === 0 || strpos( $relative_url, 'https://' ) === 0 ) {
2096 + if ( strpos( $match_url, $match_upload_baseurl ) === 0 || strpos( $match_url, $match_content_url ) === 0 ) {
2097 + $relative_url = $https . $www . $match_url;
2098 + }
2099 + } else {
2100 + if ( is_file( $content_dir . '/' . $match_url ) && file_exists( $content_dir . '/' . $match_url ) ) { // url contains content url
2101 + $relative_url = $content_url . '/' . $match_url;
2102 + } elseif ( is_file( $upload_basedir . '/' . $match_url ) && file_exists( $upload_basedir . '/' . $match_url ) ) { // url contains content url
2103 + $relative_url = $upload_baseurl . '/' . $match_url;
2104 + }
2105 + }
2106 + } else {
2107 + if ( substr_count( $match_url, $match_upload_baseurl ) > 1 || substr_count( $match_url, $match_content_url ) > 1 ) {
2108 + return '';
2109 + }
2110 +
2111 + if ( strpos( $match_url, $match_upload_baseurl ) === 0 ) { // url contains uploads baseurl
2112 + $relative_url = substr( $match_url, strlen( $match_upload_baseurl ) );
2113 + } elseif ( strpos( $match_url, $match_content_url ) === 0 ) { // url contains content url
2114 + $relative_url = substr( $match_url, strlen( $match_content_url ) );
2115 + }
2116 +
2117 + $relative_url = trim( $relative_url, '/\\' );
2118 +
2119 + if ( false !== strpos( $relative_url, '..' ) ) {
2120 + return '';
2121 + }
2122 + }
2123 +
2124 + return apply_filters( 'uwp_get_file_relative_url', $relative_url, $url, $full_path );
2125 +}