PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.0.14
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.0.14
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 1.0.22 All 173 releases
userswp / includes / class-tools.php

class-tools.php in UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP 1.0.14, at includes/class-tools.php

649 lines 23.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * UsersWP tools functions
4 *
5 * All UsersWP tools related functions can be found here.
6 *
7 * @since 1.0.0
8 * @author GeoDirectory Team <info@wpgeodirectory.com>
9 */
10 class UsersWP_Tools {
11
12 public function uwp_fix_usermeta_table() {
13 // If table not available it will be created else synced
14 uwp_create_tables();
15 uwp101_create_tables();
16 }
17
18 public function uwp_fix_userdata($step) {
19 $this->uwp_fix_usermeta($step);
20 }
21
22 public function uwp_tools_wrap_error_message($message, $class) {
23 ob_start();
24 ?>
25 <div class="notice inline notice-<?php echo $class; ?> notice-alt">
26 <p><?php echo $message; ?></p>
27 </div>
28 <?php
29 $html = ob_get_clean();
30 return $html;
31 }
32
33 public function uwp_fix_field_columns() {
34 global $wpdb;
35 $errors = new WP_Error();
36
37 $form_type = 'account';
38 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
39 $fields = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE form_type = %s ORDER BY sort_order ASC", array($form_type)));
40 $meta_table = uwp_get_table_prefix() . 'uwp_usermeta';
41
42 $excluded = uwp_get_excluded_fields();
43
44 if (!empty($fields)) {
45 foreach ($fields as $field) {
46 $htmlvar_name = $field->htmlvar_name;
47 if (in_array($htmlvar_name, $excluded)) {
48 continue;
49 }
50 $is_exists = uwp_column_exist($meta_table, $htmlvar_name);
51 if (!$is_exists) {
52 $meta_field_add = $this->uwp_sql_datatype_from_field($field);
53 $add_result = uwp_add_column_if_not_exist($meta_table, $htmlvar_name, $meta_field_add);
54 if ($add_result === false) {
55 $errors->add('creation_failed', __('Column creation failed, you may have too many columns or the default value does not match with field data type.', 'userswp'));
56 return $errors;
57 }
58 }
59 }
60 }
61 return true;
62 }
63
64 public function uwp_get_field_columns() {
65 global $wpdb;
66 $form_type = 'account';
67 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
68 $fields = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE form_type = %s ORDER BY sort_order ASC", array($form_type)));
69
70 $excluded = uwp_get_excluded_fields();
71
72 $columns = array();
73
74 if (!empty($fields)) {
75 foreach ($fields as $field) {
76 $htmlvar_name = $field->htmlvar_name;
77 if (in_array($htmlvar_name, $excluded)) {
78 continue;
79 }
80 $columns[] = $htmlvar_name;
81 }
82 }
83
84 return $columns;
85
86 }
87
88 public function uwp_fix_usermeta($step) {
89
90 global $wpdb;
91
92
93 $items_per_page = 10;
94 $offset = (int) $step * $items_per_page;
95 // $end = $offset + $items_per_page;
96
97 $user_ids = $wpdb->get_col( $wpdb->prepare(
98 "SELECT $wpdb->users.ID FROM $wpdb->users LIMIT %d OFFSET %d",
99 $items_per_page, $offset ));
100
101 $total_users = $this->uwp_tools_total_users_count();
102
103 $max_step = ceil($total_users / $items_per_page) - 1;
104 $percent = (($step + 1)/ ($max_step+1)) * 100;
105
106 $columns = $this->uwp_get_field_columns();
107
108 //we got all the IDs, now loop through them to get individual IDs
109 $count = 0;
110 $message = '';
111 $table_sync_error = false;
112 $done = false;
113 $error = false;
114
115 if ($step == 0) {
116 $this->uwp_fix_usermeta_table();
117
118 $output = $this->uwp_fix_field_columns();
119 if (is_wp_error($output)) {
120 $table_sync_error = true;
121 $error = true;
122 $message = $this->uwp_tools_wrap_error_message($output->get_error_message(), 'error');
123 }
124 }
125
126 if (!$table_sync_error) {
127 foreach ( $user_ids as $user_id ) {
128
129 // get user info by calling get_userdata() on each id
130 $user_data = get_userdata($user_id);
131 $first_name = get_user_meta( $user_id, 'first_name', true );
132 $last_name = get_user_meta( $user_id, 'last_name', true );
133 $bio = get_user_meta( $user_id, 'description', true );
134 $usermeta = get_user_meta( $user_id, 'uwp_usermeta', true );
135
136 foreach ($columns as $column) {
137 switch ($column) {
138 case "uwp_account_username":
139 $value = $user_data->user_login;
140 break;
141 case "uwp_account_email":
142 $value = $user_data->user_email;
143 break;
144 case "uwp_account_first_name":
145 $value = $first_name;
146 break;
147 case "uwp_account_last_name":
148 $value = $last_name;
149 break;
150 case "uwp_account_bio":
151 $value = $bio;
152 break;
153 default:
154 if ($usermeta === false) {
155 $value = false;
156 } else {
157 $value = isset( $usermeta[ $column ] ) ? $usermeta[ $column ] : false;
158 }
159
160 }
161 if ($value !== false) {
162 uwp_update_usermeta($user_id, $column, $value);
163 }
164 }
165
166
167 //avatar and banner
168 $avatar_url = isset( $usermeta[ 'uwp_account_avatar_thumb' ] ) ? $usermeta[ 'uwp_account_avatar_thumb' ] : false;
169 if ($avatar_url !== false) {
170 uwp_update_usermeta($user_id, 'uwp_account_avatar_thumb', $avatar_url);
171 }
172 $banner_url = isset( $usermeta[ 'uwp_account_banner_thumb' ] ) ? $usermeta[ 'uwp_account_banner_thumb' ] : false;
173 if ($banner_url !== false) {
174 uwp_update_usermeta($user_id, 'uwp_account_banner_thumb', $banner_url);
175 }
176
177
178
179
180 $count++;
181 }
182
183 if ($step >= $max_step) {
184 $done = true;
185 $message = __("Processed Successfully", 'uwp-tools');
186 $message = $this->uwp_tools_wrap_error_message($message, 'success');
187 } else {
188 $done = false;
189 $step = $step + 1;
190 }
191 }
192
193 $output = array(
194 'done' => $done,
195 'error' => $error,
196 'message' => $message,
197 'step' => $step,
198 'percent' => intval($percent)
199 );
200 echo json_encode($output);
201
202 }
203
204 public function uwp_sql_datatype_from_field($field) {
205
206 switch ($field->field_type) {
207 case 'checkbox':
208 $data_type = 'TINYINT';
209
210 $meta_field_add = $data_type . "( 1 ) NOT NULL ";
211 if ((int)$field->default_value === 1) {
212 $meta_field_add .= " DEFAULT '1'";
213 }
214 break;
215 case 'multiselect':
216 case 'select':
217 $data_type = 'VARCHAR';
218 $op_size = '500';
219 $meta_field_add = $data_type . "( $op_size ) NULL ";
220 if ($field->default_value != '') {
221 $meta_field_add .= " DEFAULT '" . $field->default_value . "'";
222 }
223 break;
224 case 'textarea':
225 case 'html':
226 case 'url':
227 case 'file':
228 $data_type = 'TEXT';
229 $meta_field_add = $data_type . " NULL ";
230 break;
231 case 'datepicker':
232 $data_type = 'DATE';
233 $meta_field_add = $data_type . " NULL ";
234 break;
235 case 'time':
236 $data_type = 'TIME';
237 $meta_field_add = $data_type . " NULL ";
238 break;
239 default:
240 $data_type = $field->data_type;
241 $decimal_point = $field->decimal_point;
242 $default_value = $field->default_value;
243 if ($data_type != 'VARCHAR' && $data_type != '') {
244 $meta_field_add = $data_type . " NULL ";
245
246 if ($data_type == 'FLOAT' && $decimal_point > 0) {
247 $meta_field_add = "DECIMAL(11, " . (int)$decimal_point . ") NULL ";
248 }
249
250 if (is_numeric($default_value) && $default_value != '') {
251 $meta_field_add .= " DEFAULT '" . $default_value . "'";
252 }
253 } else {
254 $meta_field_add = " VARCHAR( 254 ) NULL ";
255
256 if ($default_value != '') {
257 $meta_field_add .= " DEFAULT '" . $default_value . "'";
258 }
259 }
260 }
261
262 return $meta_field_add;
263 }
264
265 public function uwp_tools_total_users_count() {
266 global $wpdb;
267 $sort= "user_registered";
268 $total_users = $wpdb->get_var( $wpdb->prepare(
269 "SELECT count(*) FROM $wpdb->users ORDER BY %s ASC"
270 , $sort ));
271 return $total_users;
272 }
273
274 public function uwp_tools_process_dummy_users() {
275 if (!current_user_can('manage_options')) {
276 return;
277 }
278
279 if (!isset($_GET['uwp_dummy_users']) || empty($_GET['uwp_dummy_users'])) {
280 return;
281 }
282
283 global $wpdb;
284
285 if ($_GET['uwp_dummy_users'] == 'create') {
286
287 $users_data = $this->uwp_dummy_users_data();
288 foreach ( $users_data as $user ) {
289 if ( username_exists( $user['login'] ) ) {
290 continue;
291 }
292 $user_id = wp_insert_user( array(
293 'user_login' => $user['login'],
294 'user_pass' => $user['pass'],
295 'display_name' => $user['display_name'],
296 'user_email' => $user['email'],
297 'user_registered' => uwp_get_random_date( 45, 1 ),
298 ) );
299 $query[] = $wpdb->last_query;
300
301 $name = explode( ' ', $user['display_name'] );
302 update_user_meta( $user_id, 'first_name', $name[0] );
303 update_user_meta( $user_id, 'uwp_dummy_user', '1' );
304 update_user_meta( $user_id, 'last_name', isset( $name[1] ) ? $name[1] : '' );
305
306 $users[] = $user_id;
307 }
308
309 wp_redirect(admin_url('users.php'));
310 exit();
311 }
312
313 if ($_GET['uwp_dummy_users'] == 'delete') {
314 //todo: add this feature
315 }
316 }
317
318 /**
319 * Get a site specific password for dummy users.
320 *
321 * @return string
322 */
323 private static function get_dummy_user_passowrd(){
324 return substr(hash( 'SHA256', AUTH_KEY . site_url() ), 0, 15);
325 }
326
327 public function uwp_dummy_users_data() {
328
329 return array(
330 0 => array(
331 'login' => 'antawn',
332 'pass' => self::get_dummy_user_passowrd(),
333 'display_name' => 'Antawn Jamison',
334 'email' => 'uwp.dummy.user+1@gmail.com',
335 ),
336 1 => array(
337 'login' => 'chynna',
338 'pass' => self::get_dummy_user_passowrd(),
339 'display_name' => 'Chynna Phillips',
340 'email' => 'uwp.dummy.user+2@gmail.com',
341 ),
342 2 => array(
343 'login' => 'kiki',
344 'pass' => self::get_dummy_user_passowrd(),
345 'display_name' => 'Kiki Cuyler',
346 'email' => 'uwp.dummy.user+3@gmail.com',
347 ),
348 3 => array(
349 'login' => 'malivai',
350 'pass' => self::get_dummy_user_passowrd(),
351 'display_name' => 'MaliVai Washington',
352 'email' => 'uwp.dummy.user+4@gmail.com',
353 ),
354 4 => array(
355 'login' => 'matraca',
356 'pass' => self::get_dummy_user_passowrd(),
357 'display_name' => 'Matraca Berg',
358 'email' => 'uwp.dummy.user+5@gmail.com',
359 ),
360 5 => array(
361 'login' => 'ron',
362 'pass' => self::get_dummy_user_passowrd(),
363 'display_name' => 'Ron Faucheux',
364 'email' => 'uwp.dummy.user+6@gmail.com',
365 ),
366 6 => array(
367 'login' => 'michellie',
368 'pass' => self::get_dummy_user_passowrd(),
369 'display_name' => 'Michellie Jones',
370 'email' => 'uwp.dummy.user+7@gmail.com',
371 ),
372 7 => array(
373 'login' => 'monta',
374 'pass' => self::get_dummy_user_passowrd(),
375 'display_name' => 'Monta Ellis',
376 'email' => 'uwp.dummy.user+8@gmail.com',
377 ),
378 8 => array(
379 'login' => 'picabo',
380 'pass' => self::get_dummy_user_passowrd(),
381 'display_name' => 'Picabo Street',
382 'email' => 'uwp.dummy.user+9@gmail.com',
383 ),
384 9 => array(
385 'login' => 'ralph',
386 'pass' => self::get_dummy_user_passowrd(),
387 'display_name' => 'Ralph Fiennes',
388 'email' => 'uwp.dummy.user+10@gmail.com',
389 ),
390 10 => array(
391 'login' => 'seamus',
392 'pass' => self::get_dummy_user_passowrd(),
393 'display_name' => 'Seamus',
394 'email' => 'uwp.dummy.user+11@gmail.com',
395 ),
396 11 => array(
397 'login' => 'shan',
398 'pass' => self::get_dummy_user_passowrd(),
399 'display_name' => 'Shan Foster',
400 'email' => 'uwp.dummy.user+12@gmail.com',
401 ),
402 12 => array(
403 'login' => 'siobhan',
404 'pass' => self::get_dummy_user_passowrd(),
405 'display_name' => 'Siobhan',
406 'email' => 'uwp.dummy.user+13@gmail.com',
407 ),
408 13 => array(
409 'login' => 'stephen',
410 'pass' => self::get_dummy_user_passowrd(),
411 'display_name' => 'Stephen Curry',
412 'email' => 'uwp.dummy.user+14@gmail.com',
413 ),
414 14 => array(
415 'login' => 'wynonna',
416 'pass' => self::get_dummy_user_passowrd(),
417 'display_name' => 'Wynonna Judd',
418 'email' => 'uwp.dummy.user+15@gmail.com',
419 ),
420 15 => array(
421 'login' => 'john',
422 'pass' => self::get_dummy_user_passowrd(),
423 'display_name' => 'John Caius',
424 'email' => 'uwp.dummy.user+16@gmail.com',
425 ),
426 16 => array(
427 'login' => 'thomas',
428 'pass' => self::get_dummy_user_passowrd(),
429 'display_name' => 'Thomas Carew',
430 'email' => 'uwp.dummy.user+17@gmail.com',
431 ),
432 17 => array(
433 'login' => 'jason',
434 'pass' => self::get_dummy_user_passowrd(),
435 'display_name' => 'Jason Chaffetz',
436 'email' => 'uwp.dummy.user+18@gmail.com',
437 ),
438 18 => array(
439 'login' => 'mamah',
440 'pass' => self::get_dummy_user_passowrd(),
441 'display_name' => 'Mamah Cheney',
442 'email' => 'uwp.dummy.user+19@gmail.com',
443 ),
444 19 => array(
445 'login' => 'cecelia',
446 'pass' => self::get_dummy_user_passowrd(),
447 'display_name' => 'Cecelia Cichan ',
448 'email' => 'uwp.dummy.user+20@gmail.com',
449 ),
450 20 => array(
451 'login' => 'dan',
452 'pass' => self::get_dummy_user_passowrd(),
453 'display_name' => 'Dan Cortese ',
454 'email' => 'uwp.dummy.user+21@gmail.com',
455 ),
456 21 => array(
457 'login' => 'vernon',
458 'pass' => self::get_dummy_user_passowrd(),
459 'display_name' => 'Vernon Dahmer',
460 'email' => 'uwp.dummy.user+22@gmail.com',
461 ),
462 22 => array(
463 'login' => 'andre',
464 'pass' => self::get_dummy_user_passowrd(),
465 'display_name' => 'Andre Dubus',
466 'email' => 'uwp.dummy.user+23@gmail.com',
467 ),
468 23 => array(
469 'login' => 'justin',
470 'pass' => self::get_dummy_user_passowrd(),
471 'display_name' => 'Justin Duchscherer',
472 'email' => 'uwp.dummy.user+24@gmail.com',
473 ),
474 24 => array(
475 'login' => 'keir',
476 'pass' => self::get_dummy_user_passowrd(),
477 'display_name' => 'Keir Dullea ',
478 'email' => 'uwp.dummy.user+25@gmail.com',
479 ),
480 );
481
482 }
483
484 /**
485 * Adds the tools settings page menu as submenu.
486 *
487 * @since 1.0.0
488 * @package userswp
489 *
490 * @param callable $settings_page The function to be called to output the content for this page.
491 *
492 * @return void
493 */
494 public function uwp_add_admin_tools_sub_menu($settings_page) {
495
496 add_submenu_page(
497 "userswp",
498 __('Tools', 'uwp-tools'),
499 __('Tools', 'uwp-tools'),
500 'manage_options',
501 'uwp_tools',
502 $settings_page
503 );
504
505 }
506
507 public function uwp_tools_main_tab_content() {
508 ?>
509 <table class="form-table gd-tools-table">
510 <tbody>
511 <tr>
512 <td><strong><?php _e('Tool', 'uwp-tools');?></strong></td>
513 <td><strong><?php _e('Description', 'uwp-tools');?></strong></td>
514 <td style="text-align: right"><strong><?php _e('Action', 'uwp-tools');?></strong></td>
515 </tr>
516
517
518 <?php if (defined('USERSWP_VERSION')) { ?>
519 <tr>
520 <td><?php _e('Fix User Data', 'uwp-tools');?></td>
521 <td>
522 <div style="margin-bottom: 10px"><?php _e('Fixes User Data if you were using the Beta version.', 'uwp-tools');?></div>
523 </td>
524 <td style="text-align: right">
525 <?php
526 $total_users = $this->uwp_tools_total_users_count();
527 $items_per_page = 10;
528 if ($total_users > $items_per_page) {
529 $multiple = 'data-step="1"';
530 } else {
531 $multiple = "";
532 }
533 ?>
534 <input type="button" value="<?php _e('Run', 'uwp-tools');?>"
535 class="button-primary uwp_diagnosis_button" <?php echo $multiple; ?> data-diagnose="fix_user_data"/>
536 </td>
537 </tr>
538
539 <tr>
540 <td colspan="3">
541 <div id="uwp_diagnose_pb_fix_user_data" class="uwp-pb-wrapper">
542 <div id="progressBar" style="display: none;"><div></div></div>
543 </div>
544 <div id="uwp_diagnose_fix_user_data"></div>
545 </td>
546 </tr>
547
548 <tr>
549 <td><?php _e('Create Dummy Users', 'uwp-tools');?></td>
550 <td>
551 <div><?php _e('Dummy Users will be created for Testing. You can delete them later. Password for all dummy users:', 'uwp-tools'); echo " ".self::get_dummy_user_passowrd();?></div>
552 </td>
553 <td style="text-align: right">
554 <?php
555 $dummy_users_create_url = add_query_arg( array(
556 'uwp_dummy_users' => 'create',
557 ));
558
559 ?>
560 <a href="<?php echo $dummy_users_create_url; ?>" class="button-primary"><?php _e('Run', 'uwp-tools');?></a>
561 </td>
562 </tr>
563 <?php } ?>
564
565 </tbody>
566 </table>
567
568 <script type="text/javascript">
569 (function( $, window, undefined ) {
570 $(document).ready(function () {
571 $('.uwp_diagnosis_button').click(function (e) {
572 e.preventDefault();
573 var type = $(this).data('diagnose');
574
575 $("#uwp_diagnose_pb_" + type).find('#progressBar').show().progressbar({value: 0});
576
577 // start the process
578 uwp_process_diagnose_step( 0, type );
579
580 });
581 });
582 }( jQuery, window ));
583
584 function uwp_process_diagnose_step(step, type) {
585 jQuery.ajax({
586 url: ajaxurl,
587 type: 'POST',
588 dataType: 'json',
589 data: {
590 action: 'uwp_process_diagnosis',
591 step: step,
592 type: type
593 },
594 beforeSend: function() {},
595 success: function(response, textStatus, xhr) {
596 if(response.done === true || response.error === true ) {
597 jQuery("#uwp_diagnose_pb_" + type).find('#progressBar').hide();
598 jQuery("#uwp_diagnose_" + type).html(response.message);
599 } else {
600 tools_progress(response.percent, type);
601 setTimeout(function(){
602 uwp_process_diagnose_step(parseInt( response.step ), type)
603 }, 500);
604 }
605 },
606 error: function(xhr, textStatus, errorThrown) {
607 alert(textStatus);
608 }
609 }); // end of ajax
610
611
612 function tools_progress(percent, type) {
613 $element = jQuery("#uwp_diagnose_pb_" + type).find('#progressBar');
614 var progressBarWidth = percent * $element.width() / 100;
615 $element.find('div').animate({ width: progressBarWidth }, 500).html(percent + "% ");
616 }
617 }
618 </script>
619 <?php
620 }
621
622 function uwp_process_diagnosis_ajax() {
623
624 if (!is_user_logged_in()) {
625 return;
626 }
627
628 $type = strip_tags(esc_sql($_POST['type']));
629 $step = isset($_POST['step']) ? strip_tags(esc_sql($_POST['step'])) : 0;
630
631
632 if (!current_user_can('manage_options')) {
633 return;
634 }
635
636 $this->uwp_process_diagnosis($type, $step);
637
638 die();
639
640 }
641
642 function uwp_process_diagnosis($type, $step) {
643 switch ($type) {
644 case 'fix_user_data':
645 $this->uwp_fix_userdata($step);
646 }
647 }
648
649 }