PluginProbe
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP / 1.0.21
UsersWP – Front-end login form, User Registration, User Profile & Members Directory plugin for WP v1.0.21
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.21, at includes/class-tools.php

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