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

1,105 lines 37.3 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 /**
13 * Constructor.
14 */
15 public function __construct() {
16 add_filter('uwp_load_db_language', array($this,'load_custom_field_translation') );
17 add_filter('uwp_load_db_language', array($this,'load_uwp_options_text_translation') );
18 }
19
20 /**
21 * Fixes usermeta table
22 *
23 * @package userswp
24 *
25 */
26 public function fix_usermeta_table() {
27 uwp_create_tables();
28 }
29
30 /**
31 * Wraps message
32 *
33 * @package userswp
34 *
35 * @param string $message Message to wrap
36 * @param string $class Class for wrapper
37 *
38 * @return string
39 *
40 */
41 public function tools_wrap_error_message($message, $class) {
42 ob_start();
43 ?>
44 <div class="notice inline notice-<?php echo $class; ?> notice-alt">
45 <p><?php echo $message; ?></p>
46 </div>
47 <?php
48 $html = ob_get_clean();
49 return $html;
50 }
51
52 /**
53 * Fixes field columns
54 *
55 * @package userswp
56 *
57 * @return object|bool
58 *
59 */
60 public function fix_field_columns() {
61 global $wpdb;
62 $errors = new WP_Error();
63
64 $form_type = 'account';
65 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
66 $fields = $wpdb->get_results($wpdb->prepare("SELECT htmlvar_name FROM " . $table_name . " WHERE form_type = %s ORDER BY sort_order ASC", array($form_type)));
67 $meta_table = get_usermeta_table_prefix() . 'uwp_usermeta';
68
69 $excluded = uwp_get_excluded_fields();
70
71 if (!empty($fields)) {
72 foreach ($fields as $field) {
73 $htmlvar_name = $field->htmlvar_name;
74 if (in_array($htmlvar_name, $excluded)) {
75 continue;
76 }
77 $is_exists = uwp_column_exist($meta_table, $htmlvar_name);
78 if (!$is_exists) {
79 $meta_field_add = $this->uwp_sql_datatype_from_field($field);
80 $add_result = uwp_add_column_if_not_exist($meta_table, $htmlvar_name, $meta_field_add);
81 if ($add_result === false) {
82 $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'));
83 return $errors;
84 }
85 }
86 }
87 }
88 return true;
89 }
90
91 /**
92 * Returns columns for field
93 *
94 * @package userswp
95 *
96 * @return array
97 *
98 */
99 public function get_field_columns() {
100 global $wpdb;
101 $form_type = 'account';
102 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
103 $fields = $wpdb->get_results($wpdb->prepare("SELECT htmlvar_name FROM " . $table_name . " WHERE form_type = %s ORDER BY sort_order ASC", array($form_type)));
104
105 $excluded = uwp_get_excluded_fields();
106
107 $columns = array();
108
109 if (!empty($fields)) {
110 foreach ($fields as $field) {
111 $htmlvar_name = $field->htmlvar_name;
112 if (in_array($htmlvar_name, $excluded)) {
113 continue;
114 }
115 $columns[] = $htmlvar_name;
116 }
117 }
118
119 return $columns;
120
121 }
122
123 /**
124 * Fixes users meta
125 *
126 * @package userswp
127 *
128 * @param int $step Step for processing
129 *
130 */
131 public function fix_usermeta($step) {
132
133 global $wpdb;
134
135
136 $items_per_page = apply_filters('tools_process_fix_usermeta_per_page', 10, $step);
137 $offset = (int) $step * $items_per_page;
138
139 $user_ids = $wpdb->get_col( $wpdb->prepare(
140 "SELECT $wpdb->users.ID FROM $wpdb->users LIMIT %d OFFSET %d",
141 $items_per_page, $offset ));
142
143 $users_count = count_users();
144 $total_users = $users_count['total_users'];
145
146 $max_step = ceil($total_users / $items_per_page) - 1;
147 $percent = (($step + 1)/ ($max_step+1)) * 100;
148
149 $columns = $this->get_field_columns();
150
151 //we got all the IDs, now loop through them to get individual IDs
152 $count = 0;
153 $message = '';
154 $table_sync_error = false;
155 $done = false;
156 $error = false;
157
158 if ($step == 0) {
159 $this->fix_usermeta_table();
160
161 $output = $this->fix_field_columns();
162 if (is_wp_error($output)) {
163 $table_sync_error = true;
164 $error = true;
165 $message = $this->tools_wrap_error_message($output->get_error_message(), 'error');
166 }
167 }
168
169 if (!$table_sync_error) {
170 foreach ( $user_ids as $user_id ) {
171
172 // get user info by calling get_userdata() on each id
173 $user_data = get_userdata($user_id);
174 $usermeta = get_user_meta( $user_id, 'uwp_usermeta', true );
175
176 foreach ($columns as $column) {
177 switch ($column) {
178 case "username":
179 $value = $user_data->user_login;
180 break;
181 case "email":
182 $value = $user_data->user_email;
183 break;
184 case "first_name":
185 $value = $user_data->first_name;
186 break;
187 case "last_name":
188 $value = $user_data->last_name;
189 break;
190 case "bio":
191 $value = $user_data->description;
192 break;
193 default:
194 if ($usermeta === false) {
195 $value = false;
196 } else {
197 $value = isset( $usermeta[ $column ] ) ? $usermeta[ $column ] : false;
198 }
199
200 }
201 if ($value !== false) {
202 uwp_update_usermeta($user_id, $column, $value);
203 }
204 }
205
206 $count++;
207 }
208
209 if ($step >= $max_step) {
210 $done = true;
211 $message = __("Processed Successfully", 'userswp');
212 $message = $this->tools_wrap_error_message($message, 'success');
213 } else {
214 $done = false;
215 $step = $step + 1;
216 }
217 }
218
219 $output = array(
220 'done' => $done,
221 'error' => $error,
222 'message' => $message,
223 'step' => $step,
224 'percent' => intval($percent)
225 );
226 echo json_encode($output);
227
228 }
229
230 /**
231 * Exports DB texts for translation.
232 *
233 * @package userswp
234 *
235 * @param int $step Step for processing
236 *
237 * @return bool
238 *
239 */
240 public function export_db_texts($step){
241
242 $error = false;
243 $percent = 100;
244
245 $wp_filesystem = UsersWP_Files::uwp_init_filesystem();
246
247 $language_file = USERSWP_PATH . 'db-language.php';
248
249 if ( is_file( $language_file ) && ! is_writable( $language_file ) ) {
250 return false;
251 } // Not possible to create.
252
253 if ( ! is_file( $language_file ) && ! is_writable( dirname( $language_file ) ) ) {
254 return false;
255 } // Not possible to create.
256
257 $contents_strings = array();
258
259 /**
260 * Filter the language string from database to translate via po editor
261 *
262 * @since 1.2.2
263 *
264 * @param array $contents_strings Array of strings.
265 */
266 $contents_strings = apply_filters( 'uwp_load_db_language', $contents_strings );
267
268 $contents_strings = array_unique( $contents_strings );
269
270 $contents_head = array();
271 $contents_head[] = "<?php";
272 $contents_head[] = "/**";
273 $contents_head[] = " * Translate language string stored in database. Ex: Custom Fields";
274 $contents_head[] = " *";
275 $contents_head[] = " * @package userswp";
276 $contents_head[] = " * @since ".USERSWP_VERSION;
277 $contents_head[] = " */";
278 $contents_head[] = "";
279
280 $contents_foot = array();
281 $contents_foot[] = "";
282 $contents_foot[] = "";
283
284 $contents = implode( PHP_EOL, $contents_head );
285
286 if ( ! empty( $contents_strings ) ) {
287 foreach ( $contents_strings as $string ) {
288 if ( is_scalar( $string ) && $string != '' ) {
289 $string = str_replace( "'", "\'", $string );
290
291 do_action( 'uwp_language_file_add_string', $string );
292
293 $contents .= PHP_EOL . "__('" . $string . "', 'userswp');";
294 }
295 }
296 }
297
298 $contents .= implode( PHP_EOL, $contents_foot );
299
300 if ( ! $wp_filesystem->put_contents( $language_file, $contents, FS_CHMOD_FILE ) ) {
301 return false;
302 } // Failure; could not write file.
303
304 $done = true;
305 $message = __("Processed Successfully", 'userswp');
306 $message = $this->tools_wrap_error_message($message, 'success');
307
308 $output = array(
309 'done' => $done,
310 'error' => $error,
311 'message' => $message,
312 'step' => $step,
313 'percent' => intval($percent)
314 );
315 echo json_encode($output);
316 }
317
318 /**
319 * Get the custom fields texts for translation
320 *
321 * @since 1.2.2
322 * @package userswp
323 *
324 * @global object $wpdb WordPress database abstraction object.
325 *
326 * @param array $translation_texts Array of text strings.
327 *
328 * @return array Translation texts.
329 */
330 public function load_custom_field_translation( $translation_texts = array() ) {
331 global $wpdb;
332
333 $table_name = uwp_get_table_prefix() . 'uwp_form_fields';
334 // Custom fields table
335 $sql = "SELECT site_title, form_label, help_text, required_msg, default_value, option_values, validation_msg FROM " . $table_name . " where form_type = 'account'";
336 $rows = $wpdb->get_results( $sql );
337
338 if ( ! empty( $rows ) ) {
339 foreach ( $rows as $row ) {
340 if ( ! empty( $row->site_title ) ) {
341 $translation_texts[] = stripslashes_deep( $row->site_title );
342 }
343
344 if ( ! empty( $row->form_label ) ) {
345 $translation_texts[] = stripslashes_deep( $row->form_label );
346 }
347
348 if ( ! empty( $row->help_text ) ) {
349 $translation_texts[] = stripslashes_deep( $row->help_text );
350 }
351
352 if ( ! empty( $row->required_msg ) ) {
353 $translation_texts[] = stripslashes_deep( $row->required_msg );
354 }
355
356 if ( ! empty( $row->validation_msg ) ) {
357 $translation_texts[] = stripslashes_deep( $row->validation_msg );
358 }
359
360 if ( ! empty( $row->default_value ) ) {
361 $translation_texts[] = stripslashes_deep( $row->default_value );
362 }
363
364 if ( ! empty( $row->option_values ) ) {
365 $option_values = uwp_string_values_to_options( stripslashes_deep( $row->option_values ) );
366
367 if ( ! empty( $option_values ) ) {
368 foreach ( $option_values as $option_value ) {
369 if ( ! empty( $option_value['label'] ) ) {
370 $translation_texts[] = $option_value['label'];
371 }
372 }
373 }
374 }
375 }
376 }
377
378 $translation_texts = ! empty( $translation_texts ) ? array_unique( $translation_texts ) : $translation_texts;
379
380 return $translation_texts;
381 }
382
383 /**
384 * Get the userswp notification subject & content texts for translation.
385 *
386 * @since 1.2.2
387 * @package userswp
388 *
389 * @param array $translation_texts Array of text strings.
390 * @return array Translation texts.
391 */
392 public function load_uwp_options_text_translation($translation_texts = array()) {
393 $translation_texts = !empty( $translation_texts ) && is_array( $translation_texts ) ? $translation_texts : array();
394
395 $uwp_options = array(
396 'email_name',
397 'email_footer_text',
398 'registration_activate_email_subject',
399 'registration_activate_email_content',
400 'registration_success_email_subject',
401 'registration_success_email_content',
402 'forgot_password_email_subject',
403 'forgot_password_email_content',
404 'change_password_email_subject',
405 'change_password_email_content',
406 'reset_password_email_subject',
407 'reset_password_email_content',
408 'account_update_email_subject',
409 'account_update_email_content',
410 'account_delete_email_subject',
411 'account_delete_email_content',
412 'registration_success_email_subject_admin',
413 'registration_success_email_content_admin',
414 'account_delete_email_subject_admin',
415 'account_delete_email_content_admin',
416 );
417
418 /**
419 * Filters the userswp option names that requires to add for translation.
420 *
421 * @since 1.2.2
422 * @package userswp
423 *
424 * @param array $uwp_options Array of option names.
425 */
426 $uwp_options = apply_filters('uwp_options_for_translation', $uwp_options);
427 $uwp_options = array_unique($uwp_options);
428
429 if (!empty($uwp_options)) {
430 foreach ($uwp_options as $uwp_option) {
431 if ($uwp_option != '' && $option_value = uwp_get_option($uwp_option)) {
432 $option_value = is_string($option_value) ? stripslashes_deep($option_value) : '';
433
434 if ($option_value != '' && !in_array($option_value, $translation_texts)) {
435 $translation_texts[] = stripslashes_deep($option_value);
436 }
437 }
438 }
439 }
440
441 $translation_texts = !empty($translation_texts) ? array_unique($translation_texts) : $translation_texts;
442
443 return $translation_texts;
444 }
445
446 /**
447 * Returns SQL data type for field
448 *
449 * @package userswp
450 *
451 * @param object $field Field object
452 *
453 * @return string
454 *
455 */
456 public function uwp_sql_datatype_from_field($field) {
457
458 switch ($field->field_type) {
459 case 'checkbox':
460 $data_type = 'TINYINT';
461
462 $meta_field_add = $data_type . "( 1 ) NOT NULL ";
463 if ((int)$field->default_value === 1) {
464 $meta_field_add .= " DEFAULT '1'";
465 }
466 break;
467 case 'multiselect':
468 case 'select':
469 $data_type = 'VARCHAR';
470 $op_size = '500';
471 $meta_field_add = $data_type . "( $op_size ) NULL ";
472 if ($field->default_value != '') {
473 $meta_field_add .= " DEFAULT '" . $field->default_value . "'";
474 }
475 break;
476 case 'textarea':
477 case 'html':
478 case 'url':
479 case 'file':
480 $data_type = 'TEXT';
481 $meta_field_add = $data_type . " NULL ";
482 break;
483 case 'datepicker':
484 $data_type = 'DATE';
485 $meta_field_add = $data_type . " NULL ";
486 break;
487 case 'time':
488 $data_type = 'TIME';
489 $meta_field_add = $data_type . " NULL ";
490 break;
491 default:
492 $data_type = $field->data_type;
493 $decimal_point = $field->decimal_point;
494 $default_value = $field->default_value;
495 if ($data_type != 'VARCHAR' && $data_type != '') {
496 $meta_field_add = $data_type . " NULL ";
497
498 if ($data_type == 'FLOAT' && $decimal_point > 0) {
499 $meta_field_add = "DECIMAL(11, " . (int)$decimal_point . ") NULL ";
500 }
501
502 if (is_numeric($default_value) && $default_value != '') {
503 $meta_field_add .= " DEFAULT '" . $default_value . "'";
504 }
505 } else {
506 $meta_field_add = " VARCHAR( 254 ) NULL ";
507
508 if ($default_value != '') {
509 $meta_field_add .= " DEFAULT '" . $default_value . "'";
510 }
511 }
512 }
513
514 return $meta_field_add;
515 }
516
517 /**
518 * Process add or remove dummy users
519 *
520 * @package userswp
521 *
522 * @param int $step Current step
523 * @param string $type Action type add or remove
524 *
525 */
526 public function uwp_tools_process_dummy_users($step, $type = 'add') {
527
528 global $wpdb;
529 $items_per_page = apply_filters('tools_process_dummy_users_per_page', 10, $step, $type);
530 $offset = (int) $step * $items_per_page;
531 $message = '';
532 $error = false;
533 $percent = 100;
534 $max_step = 0;
535 if ('add' == $type) {
536 $users_data = $this->uwp_dummy_users_data();
537 $total_users = count($users_data);
538 $max_step = ceil($total_users / $items_per_page) - 1;
539 $percent = (($step + 1)/ ($max_step+1)) * 100;
540 $dummy_users = array_slice($users_data, $offset, $items_per_page, true);
541 foreach ( $dummy_users as $user ) {
542 if ( username_exists( $user['login'] ) ) {
543 continue;
544 }
545 $name = explode( ' ', $user['display_name'] );
546 $user_id = wp_insert_user( array(
547 'user_login' => $user['login'],
548 'user_pass' => $user['pass'],
549 'first_name' => isset( $name[0] ) ? $name[0] : '',
550 'last_name' => isset( $name[1] ) ? $name[1] : '',
551 'display_name' => $user['display_name'],
552 'user_email' => $user['email'],
553 'user_registered' => uwp_get_random_date( 45, 1 ),
554 ) );
555 update_user_meta( $user_id, 'uwp_dummy_user', '1' );
556 }
557 }
558 if ('remove' == $type) {
559 $dummy_users = get_users( array( 'meta_key' => 'uwp_dummy_user', 'meta_value' => '1', 'fields' => array( 'ID' )) );
560 $max_step = $step;
561 foreach ( $dummy_users as $user ) {
562 wp_delete_user($user->ID);
563 }
564 }
565 if ($step >= $max_step) {
566 $done = true;
567 $message = __("Processed Successfully", 'userswp');
568 $message = $this->tools_wrap_error_message($message, 'success');
569 } else {
570 $done = false;
571 $step = $step + 1;
572 }
573 $output = array(
574 'done' => $done,
575 'error' => $error,
576 'message' => $message,
577 'step' => $step,
578 'percent' => intval($percent)
579 );
580 echo json_encode($output);
581
582 }
583
584 /**
585 * Get a site specific password for dummy users.
586 *
587 * @return string
588 */
589 private static function get_dummy_user_passowrd(){
590 return substr(hash( 'SHA256', AUTH_KEY . site_url() ), 0, 15);
591 }
592
593 /**
594 * Returns array of dummy users
595 *
596 * @package userswp
597 *
598 * @return array
599 *
600 */
601 public function uwp_dummy_users_data() {
602
603 return array(
604 0 => array(
605 'login' => 'antawn',
606 'pass' => self::get_dummy_user_passowrd(),
607 'display_name' => 'Antawn Jamison',
608 'email' => 'uwp.dummy.user+1@gmail.com',
609 ),
610 1 => array(
611 'login' => 'chynna',
612 'pass' => self::get_dummy_user_passowrd(),
613 'display_name' => 'Chynna Phillips',
614 'email' => 'uwp.dummy.user+2@gmail.com',
615 ),
616 2 => array(
617 'login' => 'kiki',
618 'pass' => self::get_dummy_user_passowrd(),
619 'display_name' => 'Kiki Cuyler',
620 'email' => 'uwp.dummy.user+3@gmail.com',
621 ),
622 3 => array(
623 'login' => 'malivai',
624 'pass' => self::get_dummy_user_passowrd(),
625 'display_name' => 'MaliVai Washington',
626 'email' => 'uwp.dummy.user+4@gmail.com',
627 ),
628 4 => array(
629 'login' => 'matraca',
630 'pass' => self::get_dummy_user_passowrd(),
631 'display_name' => 'Matraca Berg',
632 'email' => 'uwp.dummy.user+5@gmail.com',
633 ),
634 5 => array(
635 'login' => 'ron',
636 'pass' => self::get_dummy_user_passowrd(),
637 'display_name' => 'Ron Faucheux',
638 'email' => 'uwp.dummy.user+6@gmail.com',
639 ),
640 6 => array(
641 'login' => 'michellie',
642 'pass' => self::get_dummy_user_passowrd(),
643 'display_name' => 'Michellie Jones',
644 'email' => 'uwp.dummy.user+7@gmail.com',
645 ),
646 7 => array(
647 'login' => 'monta',
648 'pass' => self::get_dummy_user_passowrd(),
649 'display_name' => 'Monta Ellis',
650 'email' => 'uwp.dummy.user+8@gmail.com',
651 ),
652 8 => array(
653 'login' => 'picabo',
654 'pass' => self::get_dummy_user_passowrd(),
655 'display_name' => 'Picabo Street',
656 'email' => 'uwp.dummy.user+9@gmail.com',
657 ),
658 9 => array(
659 'login' => 'ralph',
660 'pass' => self::get_dummy_user_passowrd(),
661 'display_name' => 'Ralph Fiennes',
662 'email' => 'uwp.dummy.user+10@gmail.com',
663 ),
664 10 => array(
665 'login' => 'seamus',
666 'pass' => self::get_dummy_user_passowrd(),
667 'display_name' => 'Seamus',
668 'email' => 'uwp.dummy.user+11@gmail.com',
669 ),
670 11 => array(
671 'login' => 'shan',
672 'pass' => self::get_dummy_user_passowrd(),
673 'display_name' => 'Shan Foster',
674 'email' => 'uwp.dummy.user+12@gmail.com',
675 ),
676 12 => array(
677 'login' => 'siobhan',
678 'pass' => self::get_dummy_user_passowrd(),
679 'display_name' => 'Siobhan',
680 'email' => 'uwp.dummy.user+13@gmail.com',
681 ),
682 13 => array(
683 'login' => 'stephen',
684 'pass' => self::get_dummy_user_passowrd(),
685 'display_name' => 'Stephen Curry',
686 'email' => 'uwp.dummy.user+14@gmail.com',
687 ),
688 14 => array(
689 'login' => 'wynonna',
690 'pass' => self::get_dummy_user_passowrd(),
691 'display_name' => 'Wynonna Judd',
692 'email' => 'uwp.dummy.user+15@gmail.com',
693 ),
694 15 => array(
695 'login' => 'john',
696 'pass' => self::get_dummy_user_passowrd(),
697 'display_name' => 'John Caius',
698 'email' => 'uwp.dummy.user+16@gmail.com',
699 ),
700 16 => array(
701 'login' => 'thomas',
702 'pass' => self::get_dummy_user_passowrd(),
703 'display_name' => 'Thomas Carew',
704 'email' => 'uwp.dummy.user+17@gmail.com',
705 ),
706 17 => array(
707 'login' => 'jason',
708 'pass' => self::get_dummy_user_passowrd(),
709 'display_name' => 'Jason Chaffetz',
710 'email' => 'uwp.dummy.user+18@gmail.com',
711 ),
712 18 => array(
713 'login' => 'mamah',
714 'pass' => self::get_dummy_user_passowrd(),
715 'display_name' => 'Mamah Cheney',
716 'email' => 'uwp.dummy.user+19@gmail.com',
717 ),
718 19 => array(
719 'login' => 'cecelia',
720 'pass' => self::get_dummy_user_passowrd(),
721 'display_name' => 'Cecelia Cichan ',
722 'email' => 'uwp.dummy.user+20@gmail.com',
723 ),
724 20 => array(
725 'login' => 'dan',
726 'pass' => self::get_dummy_user_passowrd(),
727 'display_name' => 'Dan Cortese ',
728 'email' => 'uwp.dummy.user+21@gmail.com',
729 ),
730 21 => array(
731 'login' => 'vernon',
732 'pass' => self::get_dummy_user_passowrd(),
733 'display_name' => 'Vernon Dahmer',
734 'email' => 'uwp.dummy.user+22@gmail.com',
735 ),
736 22 => array(
737 'login' => 'andre',
738 'pass' => self::get_dummy_user_passowrd(),
739 'display_name' => 'Andre Dubus',
740 'email' => 'uwp.dummy.user+23@gmail.com',
741 ),
742 23 => array(
743 'login' => 'justin',
744 'pass' => self::get_dummy_user_passowrd(),
745 'display_name' => 'Justin Duchscherer',
746 'email' => 'uwp.dummy.user+24@gmail.com',
747 ),
748 24 => array(
749 'login' => 'keir',
750 'pass' => self::get_dummy_user_passowrd(),
751 'display_name' => 'Keir Dullea ',
752 'email' => 'uwp.dummy.user+25@gmail.com',
753 ),
754 );
755
756 }
757
758 /**
759 * Outputs tools form
760 *
761 * @package userswp
762 *
763 */
764 public static function output() {
765 ob_start();
766 ?>
767 <table class="uwp-tools-table widefat">
768 <tbody>
769
770 <?php if (defined('USERSWP_VERSION')) { ?>
771 <tr>
772 <th>
773 <strong class="tool-name"><?php _e('Clear version numbers', 'userswp');?></strong>
774 <p class="tool-description"><?php _e('This will force install/upgrade functions to run.', 'userswp');?></p>
775 </th>
776 <td class="run-tool">
777 <input type="button" value="<?php _e('Run', 'userswp');?>" class="button-primary uwp_diagnosis_button" data-diagnose="clear_version_numbers"/>
778 </td>
779 </tr>
780
781 <tr>
782 <td colspan="2" class="has-pbar">
783 <div id="uwp_diagnose_pb_clear_version_numbers" class="uwp-pb-wrapper">
784 <div class="progressBar" style="display: none;"><div></div></div>
785 </div>
786 <div id="uwp_diagnose_clear_version_numbers"></div>
787 </td>
788 </tr>
789
790 <tr>
791 <th>
792 <strong class="tool-name"><?php _e('Fix User Data', 'userswp');?></strong>
793 <p class="tool-description"><?php _e('Fixes User Data if you were using the Beta version.', 'userswp');?></p>
794 </th>
795 <td class="run-tool">
796 <input type="button" value="<?php _e('Run', 'userswp');?>" class="button-primary uwp_diagnosis_button" data-diagnose="fix_user_data"/>
797 </td>
798 </tr>
799
800 <tr>
801 <td colspan="2" class="has-pbar">
802 <div id="uwp_diagnose_pb_fix_user_data" class="uwp-pb-wrapper">
803 <div class="progressBar" style="display: none;"><div></div></div>
804 </div>
805 <div id="uwp_diagnose_fix_user_data"></div>
806 </td>
807 </tr>
808
809 <tr>
810 <th>
811 <strong class="tool-name"><?php _e('DB text translation', 'userswp');?></strong>
812 <p class="tool-description"><?php _e('This tool will collect any texts stored in the DB and put them in the file db-language.php so they can then be used to translate them by translations tools.', 'userswp');?></p>
813 </th>
814 <td class="run-tool">
815 <input type="button" value="<?php _e('Run', 'userswp');?>" class="button-primary uwp_diagnosis_button" data-diagnose="export_db_texts"/>
816 </td>
817 </tr>
818
819 <tr>
820 <td colspan="2" class="has-pbar">
821 <div id="uwp_diagnose_pb_export_db_texts" class="uwp-pb-wrapper">
822 <div class="progressBar" style="display: none;"><div></div></div>
823 </div>
824 <div id="uwp_diagnose_export_db_texts"></div>
825 </td>
826 </tr>
827
828 <tr>
829 <th>
830 <strong class="tool-name"><?php _e('Dummy Users', 'userswp');?></strong>
831 <p class="tool-description"><?php _e('Dummy Users for Testing. Password for all dummy users:', 'userswp'); echo " ".self::get_dummy_user_passowrd();?></p>
832 </th>
833 <td class="run-tool">
834 <?php
835 $dummy_users = get_users( array( 'meta_key' => 'uwp_dummy_user', 'meta_value' => '1', 'fields' => array( 'ID' ) ) );
836 $total_dummy_users = !empty( $dummy_users ) ? count($dummy_users) : 0;
837 ?>
838 <input style="display: <?php echo ( $total_dummy_users > 0 ) ? 'none' :'block'; ?>" type="button" value="<?php _e('Create', 'userswp');?>" class="button-primary uwp_diagnosis_button uwp_add_dummy_users_button" data-diagnose="add_dummy_users"/>
839 <input style="display: <?php echo ( $total_dummy_users > 0 ) ? 'block' :'none'; ?>" type="button" value="<?php _e('Remove', 'userswp');?>" class="button-primary uwp_diagnosis_button uwp_remove_dummy_users_button" data-diagnose="remove_dummy_users"/>
840 </td>
841 </tr>
842
843 <tr>
844 <td colspan="2" class="has-pbar">
845 <div id="uwp_diagnose_pb_add_dummy_users" class="uwp-pb-wrapper">
846 <div class="progressBar" style="display: none;"><div></div></div>
847 </div>
848 <div id="uwp_diagnose_add_dummy_users"></div>
849 </td>
850 </tr>
851
852 <tr>
853 <td colspan="2" class="has-pbar">
854 <div id="uwp_diagnose_pb_remove_dummy_users" class="uwp-pb-wrapper">
855 <div class="progressBar" style="display: none;"><div></div></div>
856 </div>
857 <div id="uwp_diagnose_remove_dummy_users"></div>
858 </td>
859 </tr>
860
861 <?php } ?>
862
863 </tbody>
864 </table>
865
866 <script type="text/javascript">
867 (function( $, window, undefined ) {
868 $(document).ready(function () {
869 $('.uwp_diagnosis_button').click(function (e) {
870 e.preventDefault();
871 var type = $(this).data('diagnose');
872 $(this).hide();
873 jQuery("#uwp_diagnose_add_dummy_users,#uwp_diagnose_remove_dummy_users").html('');
874 $("#uwp_diagnose_pb_" + type).find('.progressBar').show().progressbar({value: 0});
875 uwp_process_diagnose_step( 0, type );
876
877 });
878 });
879 }( jQuery, window ));
880
881 function uwp_process_diagnose_step(step, type) {
882 jQuery.ajax({
883 url: ajaxurl,
884 type: 'POST',
885 dataType: 'json',
886 data: {
887 action: 'uwp_process_diagnosis',
888 step: step,
889 type: type,
890 security: '<?php echo wp_create_nonce('uwp_process_diagnosis'); ?>',
891 },
892 beforeSend: function() {},
893 success: function(response, textStatus, xhr) {
894 if(response.done === true || response.error === true ) {
895 tools_progress(response.percent, type);
896 setTimeout(function(){
897 jQuery("#uwp_diagnose_pb_" + type).find('.progressBar').hide();
898 jQuery("#uwp_diagnose_" + type).html(response.message);
899 if( 'add_dummy_users' === type ) {
900 jQuery('.uwp_remove_dummy_users_button').show();
901 jQuery('.uwp_add_dummy_users_button').hide();
902 } else{
903 jQuery('.uwp_add_dummy_users_button').show();
904 jQuery('.uwp_remove_dummy_users_button').hide();
905 }
906 }, 1500);
907 } else {
908 tools_progress(response.percent, type);
909 setTimeout(function(){
910 uwp_process_diagnose_step(parseInt( response.step ), type)
911 }, 500);
912 }
913 },
914 error: function(xhr, textStatus, errorThrown) {
915 alert(textStatus);
916 }
917 }); // end of ajax
918
919
920 function tools_progress(percent, type) {
921 $element = jQuery("#uwp_diagnose_pb_" + type).find('.progressBar');
922 var progressBarWidth = percent * $element.width() / 100;
923 $element.find('div').animate({ width: progressBarWidth }, 500).html(percent + "% ");
924 }
925 }
926 </script>
927 <?php
928
929 echo ob_get_clean();
930 }
931
932 /**
933 * Process diagnosis AJAX call
934 */
935 public function uwp_process_diagnosis_ajax() {
936
937 if (!is_user_logged_in()) {
938 return;
939 }
940
941 check_ajax_referer( 'uwp_process_diagnosis', 'security' );
942
943 $type = strip_tags(esc_sql($_POST['type']));
944 $step = isset($_POST['step']) ? strip_tags(esc_sql($_POST['step'])) : 0;
945
946
947 if (!current_user_can('manage_options')) {
948 return;
949 }
950
951 $this->uwp_process_diagnosis($type, $step);
952
953 die();
954
955 }
956
957 /**
958 * Process diagnosis step
959 *
960 * @package userswp
961 *
962 * @param string $type Action type
963 * @param int $step Current step
964 *
965 */
966 public function uwp_process_diagnosis($type, $step) {
967 switch ($type) {
968 case 'clear_version_numbers':
969 $this->clear_version_numbers();
970 break;
971 case 'fix_user_data':
972 $this->fix_usermeta($step);
973 break;
974 case 'export_db_texts':
975 $this->export_db_texts($step);
976 break;
977 case 'add_dummy_users':
978 $this->uwp_tools_process_dummy_users($step, 'add');
979 break;
980 case 'remove_dummy_users':
981 $this->uwp_tools_process_dummy_users($step, 'remove');
982 break;
983 }
984 }
985
986
987 /**
988 * Clear version numbers so install/upgrade functions will run.
989 */
990 public function clear_version_numbers(){
991 delete_option( 'uwp_db_version' );
992 do_action( 'uwp_clear_version_numbers'); // used by addons to clear their version numbers.
993 $message = aui()->alert(array(
994 'type'=>'success',
995 'content'=> __( 'Version numbers cleared. Install/upgrade functions will run on next page load.', 'userswp' )
996 )
997 );
998 $output = array(
999 'done' => true,
1000 'message' => "<div class='bsui'>".$message."</div>",
1001 );
1002 echo json_encode($output);
1003 }
1004
1005 public static function setup_menu( $menu_id = '',$menu_location = '' ) {
1006
1007 $menu_id = sanitize_title_with_dashes($menu_id);
1008 $menu_location = sanitize_title_with_dashes($menu_location);
1009
1010 // confirm the sidebar_id is valid
1011 if(!$menu_id && !$menu_location){
1012 return new WP_Error( 'uwp-wizard-setup-menu', __( "The menu is not valid.", "userswp" ) );
1013 }
1014
1015 $items_added = 0;
1016 $items_exist= 0;
1017
1018 if($menu_id){
1019
1020 $menu_exists = wp_get_nav_menu_object( $menu_id );
1021
1022 if(!$menu_exists){
1023 return new WP_Error( 'uwp-wizard-setup-menu', __( "The menu is not valid.", "userswp" ) );
1024 }
1025
1026 $current_menu_items = wp_get_nav_menu_items( $menu_id );
1027
1028 $current_menu_titles = array();
1029 // get a list of current slugs so we don't add things twice.
1030 if(!empty($current_menu_items)){
1031 foreach($current_menu_items as $current_menu_item){
1032 if(!empty($current_menu_item->post_name)){
1033 $current_menu_titles[] = $current_menu_item->title;
1034 }
1035 }
1036 }
1037
1038 $uwp_menus = new UsersWP_Menus();
1039 $uwp_menu_items = $uwp_menus->get_endpoints();
1040
1041 if(!empty($uwp_menu_items)){
1042 foreach($uwp_menu_items as $menu_item_type){
1043 if(!empty($menu_item_type)){
1044
1045 $menu_item_type = array_map('wp_setup_nav_menu_item', $menu_item_type);
1046
1047 foreach($menu_item_type as $menu_item){
1048
1049 if(!empty($current_menu_titles) && (in_array($menu_item->title,$current_menu_titles) || in_array(str_replace(" page",'',$menu_item->title),$current_menu_titles))){
1050 $items_exist++; continue 2;
1051 }
1052
1053 // setup standard menu stuff
1054 $menu_item->{'menu-item-object-id'} = $menu_item->object_id;
1055 $menu_item->{'menu-item-object'} = $menu_item->object;
1056 $menu_item->{'menu-item-type'} = $menu_item->type;
1057 $menu_item->{'menu-item-status'} = 'publish';
1058 $menu_item->{'menu-item-classes'} = !empty($menu_item->classes) ? implode(" ",$menu_item->classes) : 'uwp-menu-item';
1059 if($menu_item->type=='custom'){
1060 $menu_item->{'menu-item-url'} = $menu_item->url;
1061 $menu_item->{'menu-item-title'} = $menu_item->title;
1062 }
1063
1064 wp_update_nav_menu_item($menu_id, 0, $menu_item);
1065 $items_added++;
1066 }
1067 }
1068 }
1069 }
1070
1071 } elseif($menu_location){
1072
1073 $menuname = "UsersWP Menu";
1074
1075 $menu_exists = wp_get_nav_menu_object( $menuname );
1076
1077 // If it doesn't exist, let's create it.
1078 if( !$menu_exists) {
1079 $menu_id = wp_create_nav_menu( $menuname );
1080
1081 $locations = get_theme_mod( 'nav_menu_locations' );
1082
1083 if($menu_id){
1084 $locations[$menu_location] = $menu_id;
1085 set_theme_mod('nav_menu_locations', $locations);
1086 return self::setup_menu($menu_id);
1087 }
1088
1089 }else{
1090 return new WP_Error( 'uwp-wizard-setup-menu', __( "Menu already exists.", "userswp" ) );
1091 }
1092
1093 }
1094
1095 if($items_added == 0 && $items_exist > 0){
1096 return __( 'Menu items already exist, none added.' , 'userswp' );
1097 }elseif($items_added > 0){
1098 return __( 'Menu items added successfully.' , 'userswp' );
1099 }else{
1100 return __( 'Something went wrong, you can manually add items in Appearance > Menus' , 'userswp' );
1101 }
1102
1103 }
1104
1105 }