Current File : /home/inteuuod/public_html/wp-content/plugins/userswp/includes//class-tools.php
<?php
/**
* UsersWP tools functions
*
* All UsersWP tools related functions can be found here.
*
* @since 1.0.0
* @author GeoDirectory Team <info@wpgeodirectory.com>
*/
class UsersWP_Tools {
/**
* Constructor.
*/
public function __construct() {
add_filter('uwp_load_db_language', array($this,'load_custom_field_translation') );
add_filter('uwp_load_db_language', array($this,'load_uwp_options_text_translation') );
}
/**
* Fixes usermeta table
*
* @package userswp
*
*/
public function fix_usermeta_table() {
uwp_create_tables();
}
/**
* Wraps message
*
* @package userswp
*
* @param string $message Message to wrap
* @param string $class Class for wrapper
*
* @return string
*
*/
public function tools_wrap_error_message($message, $class) {
ob_start();
?>
<div class="notice inline notice-<?php echo esc_attr( $class ); ?> notice-alt">
<p><?php echo wp_kses_post( $message ); ?></p>
</div>
<?php
$html = ob_get_clean();
return $html;
}
/**
* Fixes field columns
*
* @package userswp
*
* @return object|bool
*
*/
public function fix_field_columns() {
global $wpdb;
$errors = new WP_Error();
$form_type = 'account';
$table_name = uwp_get_table_prefix() . 'uwp_form_fields';
$fields = $wpdb->get_results($wpdb->prepare("SELECT htmlvar_name FROM " . $table_name . " WHERE form_type = %s ORDER BY sort_order ASC", array($form_type))); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$meta_table = get_usermeta_table_prefix() . 'uwp_usermeta';
$excluded = uwp_get_excluded_fields();
if (!empty($fields)) {
foreach ($fields as $field) {
$htmlvar_name = $field->htmlvar_name;
if (in_array($htmlvar_name, $excluded)) {
continue;
}
$is_exists = uwp_column_exist($meta_table, $htmlvar_name);
if (!$is_exists) {
$meta_field_add = $this->uwp_sql_datatype_from_field($field);
$add_result = uwp_add_column_if_not_exist($meta_table, $htmlvar_name, $meta_field_add);
if ($add_result === false) {
$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'));
return $errors;
}
}
}
}
return true;
}
/**
* Returns columns for field
*
* @package userswp
*
* @return array
*
*/
public function get_field_columns() {
global $wpdb;
$form_type = 'account';
$table_name = uwp_get_table_prefix() . 'uwp_form_fields';
$fields = $wpdb->get_results($wpdb->prepare("SELECT htmlvar_name FROM " . $table_name . " WHERE form_type = %s ORDER BY sort_order ASC", array($form_type))); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
$excluded = uwp_get_excluded_fields();
$columns = array();
if (!empty($fields)) {
foreach ($fields as $field) {
$htmlvar_name = $field->htmlvar_name;
if (in_array($htmlvar_name, $excluded)) {
continue;
}
$columns[] = $htmlvar_name;
}
}
return $columns;
}
/**
* Fixes users meta
*
* @package userswp
*
* @param int $step Step for processing
*
*/
public function fix_usermeta($step) {
global $wpdb;
$items_per_page = apply_filters('tools_process_fix_usermeta_per_page', 10, $step);
$offset = (int) $step * $items_per_page;
$user_ids = $wpdb->get_col( $wpdb->prepare( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
"SELECT $wpdb->users.ID FROM $wpdb->users LIMIT %d OFFSET %d",
$items_per_page, $offset ));
$users_count = count_users();
$total_users = $users_count['total_users'];
$max_step = ceil($total_users / $items_per_page) - 1;
$percent = (($step + 1)/ ($max_step+1)) * 100;
$columns = $this->get_field_columns();
//we got all the IDs, now loop through them to get individual IDs
$count = 0;
$message = '';
$table_sync_error = false;
$done = false;
$error = false;
if ($step == 0) {
$this->fix_usermeta_table();
$output = $this->fix_field_columns();
if (is_wp_error($output)) {
$table_sync_error = true;
$error = true;
$message = $this->tools_wrap_error_message($output->get_error_message(), 'error');
}
}
if (!$table_sync_error) {
foreach ( $user_ids as $user_id ) {
// get user info by calling get_userdata() on each id
$user_data = get_userdata($user_id);
$usermeta = get_user_meta( $user_id, 'uwp_usermeta', true );
foreach ($columns as $column) {
switch ($column) {
case "username":
$value = $user_data->user_login;
break;
case "email":
$value = $user_data->user_email;
break;
case "first_name":
$value = $user_data->first_name;
break;
case "last_name":
$value = $user_data->last_name;
break;
case "bio":
$value = $user_data->description;
break;
default:
if ($usermeta === false) {
$value = false;
} else {
$value = isset( $usermeta[ $column ] ) ? $usermeta[ $column ] : false;
}
}
if ($value !== false) {
uwp_update_usermeta($user_id, $column, $value);
}
}
$count++;
}
if ($step >= $max_step) {
$done = true;
$message = __("Processed Successfully", 'userswp');
$message = $this->tools_wrap_error_message($message, 'success');
} else {
$done = false;
$step = $step + 1;
}
}
$output = array(
'done' => $done,
'error' => $error,
'message' => $message,
'step' => $step,
'percent' => intval($percent)
);
echo json_encode($output);
}
/**
* Exports DB texts for translation.
*
* @package userswp
*
* @param int $step Step for processing
*
* @return bool
*
*/
public function export_db_texts($step){
$error = false;
$percent = 100;
$wp_filesystem = UsersWP_Files::uwp_init_filesystem();
$language_file = USERSWP_PATH . 'db-language.php';
if ( is_file( $language_file ) && ! is_writable( $language_file ) ) {
return false;
} // Not possible to create.
if ( ! is_file( $language_file ) && ! is_writable( dirname( $language_file ) ) ) {
return false;
} // Not possible to create.
$contents_strings = array();
/**
* Filter the language string from database to translate via po editor
*
* @since 1.2.2
*
* @param array $contents_strings Array of strings.
*/
$contents_strings = apply_filters( 'uwp_load_db_language', $contents_strings );
$contents_strings = array_unique( $contents_strings );
$contents_head = array();
$contents_head[] = "<?php";
$contents_head[] = "/**";
$contents_head[] = " * Translate language string stored in database. Ex: Custom Fields";
$contents_head[] = " *";
$contents_head[] = " * @package userswp";
$contents_head[] = " * @since ".USERSWP_VERSION;
$contents_head[] = " */";
$contents_head[] = "";
$contents_foot = array();
$contents_foot[] = "";
$contents_foot[] = "";
$contents = implode( PHP_EOL, $contents_head );
if ( ! empty( $contents_strings ) ) {
foreach ( $contents_strings as $string ) {
if ( is_scalar( $string ) && $string != '' ) {
$string = str_replace( "'", "\'", $string );
do_action( 'uwp_language_file_add_string', $string );
$contents .= PHP_EOL . "__('" . $string . "', 'userswp');";
}
}
}
$contents .= implode( PHP_EOL, $contents_foot );
if ( ! $wp_filesystem->put_contents( $language_file, $contents, FS_CHMOD_FILE ) ) {
return false;
} // Failure; could not write file.
$done = true;
$message = __("Processed Successfully", 'userswp');
$message = $this->tools_wrap_error_message($message, 'success');
$output = array(
'done' => $done,
'error' => $error,
'message' => $message,
'step' => $step,
'percent' => intval($percent)
);
echo json_encode($output);
}
/**
* Get the custom fields texts for translation
*
* @since 1.2.2
* @package userswp
*
* @global object $wpdb WordPress database abstraction object.
*
* @param array $translation_texts Array of text strings.
*
* @return array Translation texts.
*/
public function load_custom_field_translation( $translation_texts = array() ) {
global $wpdb;
$table_name = uwp_get_table_prefix() . 'uwp_form_fields';
// Custom fields table
$sql = "SELECT site_title, form_label, help_text, required_msg, default_value, option_values, validation_msg FROM " . $table_name . " where form_type = 'account'";
$rows = $wpdb->get_results( $sql ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
if ( ! empty( $rows ) ) {
foreach ( $rows as $row ) {
if ( ! empty( $row->site_title ) ) {
$translation_texts[] = stripslashes_deep( $row->site_title );
}
if ( ! empty( $row->form_label ) ) {
$translation_texts[] = stripslashes_deep( $row->form_label );
}
if ( ! empty( $row->help_text ) ) {
$translation_texts[] = stripslashes_deep( $row->help_text );
}
if ( ! empty( $row->required_msg ) ) {
$translation_texts[] = stripslashes_deep( $row->required_msg );
}
if ( ! empty( $row->validation_msg ) ) {
$translation_texts[] = stripslashes_deep( $row->validation_msg );
}
if ( ! empty( $row->default_value ) ) {
$translation_texts[] = stripslashes_deep( $row->default_value );
}
if ( ! empty( $row->placeholder_value ) ) {
$translation_texts[] = stripslashes_deep( $row->placeholder_value );
}
if ( ! empty( $row->option_values ) ) {
$option_values = uwp_string_values_to_options( stripslashes_deep( $row->option_values ) );
if ( ! empty( $option_values ) ) {
foreach ( $option_values as $option_value ) {
if ( ! empty( $option_value['label'] ) ) {
$translation_texts[] = $option_value['label'];
}
}
}
}
}
}
$translation_texts = ! empty( $translation_texts ) ? array_unique( $translation_texts ) : $translation_texts;
return $translation_texts;
}
/**
* Get the userswp notification subject & content texts for translation.
*
* @since 1.2.2
* @package userswp
*
* @param array $translation_texts Array of text strings.
* @return array Translation texts.
*/
public function load_uwp_options_text_translation($translation_texts = array()) {
$translation_texts = !empty( $translation_texts ) && is_array( $translation_texts ) ? $translation_texts : array();
$uwp_options = array(
'register_link_title',
'forgot_link_title',
'login_link_title',
'profile_link_title',
'account_link_title',
'author_box_content',
'author_box_content_bootstrap',
'email_name',
'email_footer_text',
'registration_activate_email_subject',
'registration_activate_email_content',
'registration_success_email_subject',
'registration_success_email_content',
'forgot_password_email_subject',
'forgot_password_email_content',
'change_password_email_subject',
'change_password_email_content',
'reset_password_email_subject',
'reset_password_email_content',
'account_update_email_subject',
'account_update_email_content',
'account_delete_email_subject',
'account_delete_email_content',
'registration_success_email_subject_admin',
'registration_success_email_content_admin',
'account_delete_email_subject_admin',
'account_delete_email_content_admin',
'wp_new_user_notification_email_subject',
'wp_new_user_notification_email_content',
'wp_new_user_notification_email_subject_admin',
'wp_new_user_notification_email_content_admin',
'account_new_email_activation_email',
'account_new_email_activation_email_subject',
'account_new_email_activation_email_content',
);
/**
* Filters the userswp option names that requires to add for translation.
*
* @since 1.2.2
* @package userswp
*
* @param array $uwp_options Array of option names.
*/
$uwp_options = apply_filters('uwp_options_for_translation', $uwp_options);
$uwp_options = array_unique($uwp_options);
if (!empty($uwp_options)) {
foreach ($uwp_options as $uwp_option) {
if ($uwp_option != '' && $option_value = uwp_get_option($uwp_option)) {
$option_value = is_string($option_value) ? stripslashes_deep($option_value) : '';
if ($option_value != '' && !in_array($option_value, $translation_texts)) {
$translation_texts[] = stripslashes_deep($option_value);
}
}
}
}
$translation_texts = !empty($translation_texts) ? array_unique($translation_texts) : $translation_texts;
return $translation_texts;
}
/**
* Returns SQL data type for field
*
* @package userswp
*
* @param object $field Field object
*
* @return string
*
*/
public function uwp_sql_datatype_from_field($field) {
switch ($field->field_type) {
case 'checkbox':
$data_type = 'TINYINT';
$meta_field_add = $data_type . "( 1 ) NOT NULL ";
if ((int)$field->default_value === 1) {
$meta_field_add .= " DEFAULT '1'";
}
break;
case 'multiselect':
case 'select':
$data_type = 'VARCHAR';
$op_size = '500';
$meta_field_add = $data_type . "( $op_size ) NULL ";
if ($field->default_value != '') {
$meta_field_add .= " DEFAULT '" . $field->default_value . "'";
}
break;
case 'textarea':
case 'html':
case 'url':
case 'file':
$data_type = 'TEXT';
$meta_field_add = $data_type . " NULL ";
break;
case 'datepicker':
$data_type = 'DATE';
$meta_field_add = $data_type . " NULL ";
break;
case 'time':
$data_type = 'TIME';
$meta_field_add = $data_type . " NULL ";
break;
default:
$data_type = $field->data_type;
$decimal_point = $field->decimal_point;
$default_value = $field->default_value;
if ($data_type != 'VARCHAR' && $data_type != '') {
$meta_field_add = $data_type . " NULL ";
if ($data_type == 'FLOAT' && $decimal_point > 0) {
$meta_field_add = "DECIMAL(11, " . (int)$decimal_point . ") NULL ";
}
if (is_numeric($default_value) && $default_value != '') {
$meta_field_add .= " DEFAULT '" . $default_value . "'";
}
} else {
$meta_field_add = " VARCHAR( 254 ) NULL ";
if ($default_value != '') {
$meta_field_add .= " DEFAULT '" . $default_value . "'";
}
}
}
return $meta_field_add;
}
/**
* Process add or remove dummy users
*
* @package userswp
*
* @param int $step Current step
* @param string $type Action type add or remove
*
*/
public function uwp_tools_process_dummy_users($step, $type = 'add') {
$items_per_page = apply_filters('tools_process_dummy_users_per_page', 10, $step, $type);
$offset = (int) $step * $items_per_page;
$message = '';
$error = false;
$percent = 100;
$max_step = 0;
if ('add' == $type) {
$users_data = $this->uwp_dummy_users_data();
$total_users = count($users_data);
$max_step = ceil($total_users / $items_per_page) - 1;
$percent = (($step + 1)/ ($max_step+1)) * 100;
$dummy_users = array_slice($users_data, $offset, $items_per_page, true);
foreach ( $dummy_users as $user ) {
if ( username_exists( $user['login'] ) ) {
continue;
}
$name = explode( ' ', $user['display_name'] );
$user_id = wp_insert_user( array(
'user_login' => $user['login'],
'user_pass' => $user['pass'],
'first_name' => isset( $name[0] ) ? $name[0] : '',
'last_name' => isset( $name[1] ) ? $name[1] : '',
'display_name' => $user['display_name'],
'user_email' => $user['email'],
'user_registered' => uwp_get_random_date( 45, 1 ),
) );
update_user_meta( $user_id, 'uwp_dummy_user', '1' );
}
}
if ('remove' == $type) {
$dummy_users = get_users( array( 'meta_key' => 'uwp_dummy_user', 'meta_value' => '1', 'fields' => array( 'ID' )) );
$max_step = $step;
foreach ( $dummy_users as $user ) {
wp_delete_user($user->ID);
}
}
if ($step >= $max_step) {
$done = true;
$message = __("Processed Successfully", 'userswp');
$message = $this->tools_wrap_error_message($message, 'success');
} else {
$done = false;
$step = $step + 1;
}
$output = array(
'done' => $done,
'error' => $error,
'message' => $message,
'step' => $step,
'percent' => intval($percent)
);
echo json_encode($output);
}
/**
* Get a site specific password for dummy users.
*
* @return string
*/
private static function get_dummy_user_passowrd(){
return substr(hash( 'SHA256', AUTH_KEY . site_url() ), 0, 15);
}
/**
* Returns array of dummy users
*
* @package userswp
*
* @return array
*
*/
public function uwp_dummy_users_data() {
return array(
0 => array(
'login' => 'antawn',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Antawn Jamison',
'email' => 'uwp.dummy.user+1@gmail.com',
),
1 => array(
'login' => 'chynna',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Chynna Phillips',
'email' => 'uwp.dummy.user+2@gmail.com',
),
2 => array(
'login' => 'kiki',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Kiki Cuyler',
'email' => 'uwp.dummy.user+3@gmail.com',
),
3 => array(
'login' => 'malivai',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'MaliVai Washington',
'email' => 'uwp.dummy.user+4@gmail.com',
),
4 => array(
'login' => 'matraca',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Matraca Berg',
'email' => 'uwp.dummy.user+5@gmail.com',
),
5 => array(
'login' => 'ron',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Ron Faucheux',
'email' => 'uwp.dummy.user+6@gmail.com',
),
6 => array(
'login' => 'michellie',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Michellie Jones',
'email' => 'uwp.dummy.user+7@gmail.com',
),
7 => array(
'login' => 'monta',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Monta Ellis',
'email' => 'uwp.dummy.user+8@gmail.com',
),
8 => array(
'login' => 'picabo',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Picabo Street',
'email' => 'uwp.dummy.user+9@gmail.com',
),
9 => array(
'login' => 'ralph',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Ralph Fiennes',
'email' => 'uwp.dummy.user+10@gmail.com',
),
10 => array(
'login' => 'seamus',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Seamus',
'email' => 'uwp.dummy.user+11@gmail.com',
),
11 => array(
'login' => 'shan',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Shan Foster',
'email' => 'uwp.dummy.user+12@gmail.com',
),
12 => array(
'login' => 'siobhan',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Siobhan',
'email' => 'uwp.dummy.user+13@gmail.com',
),
13 => array(
'login' => 'stephen',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Stephen Curry',
'email' => 'uwp.dummy.user+14@gmail.com',
),
14 => array(
'login' => 'wynonna',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Wynonna Judd',
'email' => 'uwp.dummy.user+15@gmail.com',
),
15 => array(
'login' => 'john',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'John Caius',
'email' => 'uwp.dummy.user+16@gmail.com',
),
16 => array(
'login' => 'thomas',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Thomas Carew',
'email' => 'uwp.dummy.user+17@gmail.com',
),
17 => array(
'login' => 'jason',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Jason Chaffetz',
'email' => 'uwp.dummy.user+18@gmail.com',
),
18 => array(
'login' => 'mamah',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Mamah Cheney',
'email' => 'uwp.dummy.user+19@gmail.com',
),
19 => array(
'login' => 'cecelia',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Cecelia Cichan ',
'email' => 'uwp.dummy.user+20@gmail.com',
),
20 => array(
'login' => 'dan',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Dan Cortese ',
'email' => 'uwp.dummy.user+21@gmail.com',
),
21 => array(
'login' => 'vernon',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Vernon Dahmer',
'email' => 'uwp.dummy.user+22@gmail.com',
),
22 => array(
'login' => 'andre',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Andre Dubus',
'email' => 'uwp.dummy.user+23@gmail.com',
),
23 => array(
'login' => 'justin',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Justin Duchscherer',
'email' => 'uwp.dummy.user+24@gmail.com',
),
24 => array(
'login' => 'keir',
'pass' => self::get_dummy_user_passowrd(),
'display_name' => 'Keir Dullea ',
'email' => 'uwp.dummy.user+25@gmail.com',
),
);
}
/**
* Outputs tools form
*
* @package userswp
*
*/
public static function output() {
ob_start();
?>
<div class="wrap userswp">
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
<table class="uwp-tools-table widefat">
<tbody>
<?php if (defined('USERSWP_VERSION')) {
do_action('uwp_tools_output_start');
?>
<tr>
<th>
<strong class="tool-name"><?php esc_html_e('Clear version numbers', 'userswp');?></strong>
<p class="tool-description"><?php esc_html_e('This will force install/upgrade functions to run.', 'userswp');?></p>
</th>
<td class="run-tool">
<input type="button" value="<?php esc_attr_e('Run', 'userswp');?>" class="button-primary uwp_diagnosis_button" data-diagnose="clear_version_numbers"/>
</td>
</tr>
<tr>
<td colspan="2" class="has-pbar">
<div id="uwp_diagnose_pb_clear_version_numbers" class="uwp-pb-wrapper">
<div class="progressBar" style="display: none;"><div></div></div>
</div>
<div id="uwp_diagnose_clear_version_numbers"></div>
</td>
</tr>
<tr>
<th>
<strong class="tool-name"><?php esc_html_e('Fix User Data', 'userswp');?></strong>
<p class="tool-description"><?php esc_html_e('Fixes User Data if you were using the Beta version.', 'userswp');?></p>
</th>
<td class="run-tool">
<input type="button" value="<?php esc_attr_e('Run', 'userswp');?>" class="button-primary uwp_diagnosis_button" data-diagnose="fix_user_data"/>
</td>
</tr>
<tr>
<td colspan="2" class="has-pbar">
<div id="uwp_diagnose_pb_fix_user_data" class="uwp-pb-wrapper">
<div class="progressBar" style="display: none;"><div></div></div>
</div>
<div id="uwp_diagnose_fix_user_data"></div>
</td>
</tr>
<tr>
<th>
<strong class="tool-name"><?php esc_html_e('DB text translation', 'userswp');?></strong>
<p class="tool-description"><?php esc_html_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>
</th>
<td class="run-tool">
<input type="button" value="<?php esc_attr_e('Run', 'userswp');?>" class="button-primary uwp_diagnosis_button" data-diagnose="export_db_texts"/>
</td>
</tr>
<tr>
<td colspan="2" class="has-pbar">
<div id="uwp_diagnose_pb_export_db_texts" class="uwp-pb-wrapper">
<div class="progressBar" style="display: none;"><div></div></div>
</div>
<div id="uwp_diagnose_export_db_texts"></div>
</td>
</tr>
<tr>
<th>
<strong class="tool-name"><?php esc_html_e('Dummy Users', 'userswp');?></strong>
<p class="tool-description"><?php esc_html_e('Dummy Users for Testing. Password for all dummy users:', 'userswp'); echo " " . esc_html( self::get_dummy_user_passowrd() );?></p>
</th>
<td class="run-tool">
<?php
$dummy_users = get_users( array( 'meta_key' => 'uwp_dummy_user', 'meta_value' => '1', 'fields' => array( 'ID' ) ) );
$total_dummy_users = !empty( $dummy_users ) ? count($dummy_users) : 0;
?>
<input style="display: <?php echo ( $total_dummy_users > 0 ) ? 'none' :'block'; ?>" type="button" value="<?php esc_attr_e('Create', 'userswp');?>" class="button-primary uwp_diagnosis_button uwp_add_dummy_users_button" data-diagnose="add_dummy_users"/>
<input style="display: <?php echo ( $total_dummy_users > 0 ) ? 'block' :'none'; ?>" type="button" value="<?php esc_attr_e('Remove', 'userswp');?>" class="button-primary uwp_diagnosis_button uwp_remove_dummy_users_button" data-diagnose="remove_dummy_users"/>
</td>
</tr>
<tr>
<td colspan="2" class="has-pbar">
<div id="uwp_diagnose_pb_add_dummy_users" class="uwp-pb-wrapper">
<div class="progressBar" style="display: none;"><div></div></div>
</div>
<div id="uwp_diagnose_add_dummy_users"></div>
</td>
</tr>
<tr>
<td colspan="2" class="has-pbar">
<div id="uwp_diagnose_pb_remove_dummy_users" class="uwp-pb-wrapper">
<div class="progressBar" style="display: none;"><div></div></div>
</div>
<div id="uwp_diagnose_remove_dummy_users"></div>
</td>
</tr>
<?php
do_action('uwp_tools_output_end');
} ?>
</tbody>
</table>
</div>
<script type="text/javascript">
(function( $, window, undefined ) {
$(document).ready(function () {
$('.uwp_diagnosis_button').click(function (e) {
e.preventDefault();
var type = $(this).data('diagnose');
$(this).hide();
jQuery("#uwp_diagnose_add_dummy_users,#uwp_diagnose_remove_dummy_users").html('');
$("#uwp_diagnose_pb_" + type).find('.progressBar').show().progressbar({value: 0});
uwp_process_diagnose_step( 0, type );
});
});
}( jQuery, window ));
function uwp_process_diagnose_step(step, type) {
jQuery.ajax({
url: ajaxurl,
type: 'POST',
dataType: 'json',
data: {
action: 'uwp_process_diagnosis',
step: step,
type: type,
security: '<?php echo esc_js( wp_create_nonce('uwp_process_diagnosis') ); ?>',
},
beforeSend: function() {},
success: function(response, textStatus, xhr) {
if(response.done === true || response.error === true ) {
tools_progress(response.percent, type);
setTimeout(function(){
jQuery("#uwp_diagnose_pb_" + type).find('.progressBar').hide();
jQuery("#uwp_diagnose_" + type).html(response.message);
if( 'add_dummy_users' === type ) {
jQuery('.uwp_remove_dummy_users_button').show();
jQuery('.uwp_add_dummy_users_button').hide();
} else{
jQuery('.uwp_add_dummy_users_button').show();
jQuery('.uwp_remove_dummy_users_button').hide();
}
}, 1500);
} else {
tools_progress(response.percent, type);
setTimeout(function(){
uwp_process_diagnose_step(parseInt( response.step ), type)
}, 500);
}
},
error: function(xhr, textStatus, errorThrown) {
alert(textStatus);
}
}); // end of ajax
function tools_progress(percent, type) {
$element = jQuery("#uwp_diagnose_pb_" + type).find('.progressBar');
var progressBarWidth = percent * $element.width() / 100;
$element.find('div').animate({ width: progressBarWidth }, 500).html(percent + "% ");
}
}
</script>
<?php
echo ob_get_clean(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}
/**
* Process diagnosis AJAX call
*/
public function uwp_process_diagnosis_ajax() {
if (!is_user_logged_in()) {
return;
}
check_ajax_referer( 'uwp_process_diagnosis', 'security' );
$type = strip_tags(esc_sql($_POST['type']));
$step = isset($_POST['step']) ? strip_tags(esc_sql($_POST['step'])) : 0;
if (!current_user_can('manage_options')) {
return;
}
$this->uwp_process_diagnosis($type, $step);
die();
}
/**
* Process diagnosis step
*
* @package userswp
*
* @param string $type Action type
* @param int $step Current step
*
*/
public function uwp_process_diagnosis($type, $step) {
switch ($type) {
case 'clear_version_numbers':
$this->clear_version_numbers();
break;
case 'fix_user_data':
$this->fix_usermeta($step);
break;
case 'export_db_texts':
$this->export_db_texts($step);
break;
case 'add_dummy_users':
$this->uwp_tools_process_dummy_users($step, 'add');
break;
case 'remove_dummy_users':
$this->uwp_tools_process_dummy_users($step, 'remove');
break;
default :
do_action('uwp_process_diagnosis', $type, $step);
}
}
/**
* Clear version numbers so install/upgrade functions will run.
*/
public function clear_version_numbers(){
delete_option( 'uwp_db_version' );
do_action( 'uwp_clear_version_numbers'); // used by addons to clear their version numbers.
$message = aui()->alert(array(
'type'=>'success',
'content'=> __( 'Version numbers cleared. Install/upgrade functions will run on next page load.', 'userswp' )
)
);
$output = array(
'done' => true,
'message' => "<div class='bsui'>".$message."</div>",
);
echo json_encode($output);
}
public static function setup_menu( $menu_id = '',$menu_location = '' ) {
$menu_id = sanitize_title_with_dashes($menu_id);
$menu_location = sanitize_title_with_dashes($menu_location);
// confirm the sidebar_id is valid
if(!$menu_id && !$menu_location){
return new WP_Error( 'uwp-wizard-setup-menu', __( "The menu is not valid.", "userswp" ) );
}
$items_added = 0;
$items_exist= 0;
if($menu_id){
$menu_exists = wp_get_nav_menu_object( $menu_id );
if(!$menu_exists){
return new WP_Error( 'uwp-wizard-setup-menu', __( "The menu is not valid.", "userswp" ) );
}
$current_menu_items = wp_get_nav_menu_items( $menu_id );
$current_menu_titles = array();
// get a list of current slugs so we don't add things twice.
if(!empty($current_menu_items)){
foreach($current_menu_items as $current_menu_item){
if(!empty($current_menu_item->post_name)){
$current_menu_titles[] = $current_menu_item->title;
}
}
}
$uwp_menus = new UsersWP_Menus();
$uwp_menu_items = $uwp_menus->get_endpoints();
if(!empty($uwp_menu_items)){
foreach($uwp_menu_items as $menu_item_type){
if(!empty($menu_item_type)){
$menu_item_type = array_map('wp_setup_nav_menu_item', $menu_item_type);
foreach($menu_item_type as $menu_item){
if(!empty($current_menu_titles) && (in_array($menu_item->title,$current_menu_titles) || in_array(str_replace(" page",'',$menu_item->title),$current_menu_titles))){
$items_exist++; continue 2;
}
// setup standard menu stuff
$menu_item->{'menu-item-object-id'} = $menu_item->object_id;
$menu_item->{'menu-item-object'} = $menu_item->object;
$menu_item->{'menu-item-type'} = $menu_item->type;
$menu_item->{'menu-item-status'} = 'publish';
$menu_item->{'menu-item-classes'} = !empty($menu_item->classes) ? implode(" ",$menu_item->classes) : 'uwp-menu-item';
if($menu_item->type=='custom'){
$menu_item->{'menu-item-url'} = $menu_item->url;
$menu_item->{'menu-item-title'} = $menu_item->title;
}
wp_update_nav_menu_item($menu_id, 0, $menu_item);
$items_added++;
}
}
}
}
} elseif($menu_location){
$menuname = "UsersWP Menu";
$menu_exists = wp_get_nav_menu_object( $menuname );
// If it doesn't exist, let's create it.
if( !$menu_exists) {
$menu_id = wp_create_nav_menu( $menuname );
$locations = get_theme_mod( 'nav_menu_locations' );
if($menu_id){
$locations[$menu_location] = $menu_id;
set_theme_mod('nav_menu_locations', $locations);
return self::setup_menu($menu_id);
}
}else{
return new WP_Error( 'uwp-wizard-setup-menu', __( "Menu already exists.", "userswp" ) );
}
}
if($items_added == 0 && $items_exist > 0){
return __( 'Menu items already exist, none added.' , 'userswp' );
}elseif($items_added > 0){
return __( 'Menu items added successfully.' , 'userswp' );
}else{
return __( 'Something went wrong, you can manually add items in Appearance > Menus' , 'userswp' );
}
}
}