*/
class UsersWP_Tools {
public function uwp_fix_usermeta_table() {
// If table not available it will be created else synced
uwp_create_tables();
uwp101_create_tables();
}
public function uwp_fix_userdata($step) {
$this->uwp_fix_usermeta($step);
}
public function uwp_tools_wrap_error_message($message, $class) {
ob_start();
?>
get_results($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE form_type = %s ORDER BY sort_order ASC", array($form_type)));
$meta_table = uwp_get_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;
}
public function uwp_get_field_columns() {
global $wpdb;
$form_type = 'account';
$table_name = uwp_get_table_prefix() . 'uwp_form_fields';
$fields = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $table_name . " WHERE form_type = %s ORDER BY sort_order ASC", array($form_type)));
$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;
}
public function uwp_fix_usermeta($step) {
global $wpdb;
$items_per_page = 10;
$offset = (int) $step * $items_per_page;
// $end = $offset + $items_per_page;
$user_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT $wpdb->users.ID FROM $wpdb->users LIMIT %d OFFSET %d",
$items_per_page, $offset ));
$total_users = $this->uwp_tools_total_users_count();
$max_step = ceil($total_users / $items_per_page) - 1;
$percent = (($step + 1)/ ($max_step+1)) * 100;
$columns = $this->uwp_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->uwp_fix_usermeta_table();
$output = $this->uwp_fix_field_columns();
if (is_wp_error($output)) {
$table_sync_error = true;
$error = true;
$message = $this->uwp_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);
$first_name = get_user_meta( $user_id, 'first_name', true );
$last_name = get_user_meta( $user_id, 'last_name', true );
$bio = get_user_meta( $user_id, 'description', true );
$usermeta = get_user_meta( $user_id, 'uwp_usermeta', true );
foreach ($columns as $column) {
switch ($column) {
case "uwp_account_username":
$value = $user_data->user_login;
break;
case "uwp_account_email":
$value = $user_data->user_email;
break;
case "uwp_account_first_name":
$value = $first_name;
break;
case "uwp_account_last_name":
$value = $last_name;
break;
case "uwp_account_bio":
$value = $bio;
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);
}
}
//avatar and banner
$avatar_url = isset( $usermeta[ 'uwp_account_avatar_thumb' ] ) ? $usermeta[ 'uwp_account_avatar_thumb' ] : false;
if ($avatar_url !== false) {
uwp_update_usermeta($user_id, 'uwp_account_avatar_thumb', $avatar_url);
}
$banner_url = isset( $usermeta[ 'uwp_account_banner_thumb' ] ) ? $usermeta[ 'uwp_account_banner_thumb' ] : false;
if ($banner_url !== false) {
uwp_update_usermeta($user_id, 'uwp_account_banner_thumb', $banner_url);
}
$count++;
}
if ($step >= $max_step) {
$done = true;
$message = __("Processed Successfully", 'uwp-tools');
$message = $this->uwp_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);
}
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;
}
public function uwp_tools_total_users_count() {
global $wpdb;
$sort= "user_registered";
$total_users = $wpdb->get_var( $wpdb->prepare(
"SELECT count(*) FROM $wpdb->users ORDER BY %s ASC"
, $sort ));
return $total_users;
}
public function uwp_tools_process_dummy_users() {
if (!current_user_can('manage_options')) {
return;
}
if (!isset($_GET['uwp_dummy_users']) || empty($_GET['uwp_dummy_users'])) {
return;
}
global $wpdb;
if ($_GET['uwp_dummy_users'] == 'create') {
$users_data = $this->uwp_dummy_users_data();
foreach ( $users_data as $user ) {
if ( username_exists( $user['login'] ) ) {
continue;
}
$user_id = wp_insert_user( array(
'user_login' => $user['login'],
'user_pass' => $user['pass'],
'display_name' => $user['display_name'],
'user_email' => $user['email'],
'user_registered' => uwp_get_random_date( 45, 1 ),
) );
$query[] = $wpdb->last_query;
$name = explode( ' ', $user['display_name'] );
update_user_meta( $user_id, 'first_name', $name[0] );
update_user_meta( $user_id, 'uwp_dummy_user', '1' );
update_user_meta( $user_id, 'last_name', isset( $name[1] ) ? $name[1] : '' );
$users[] = $user_id;
}
wp_redirect(admin_url('users.php'));
exit();
}
if ($_GET['uwp_dummy_users'] == 'delete') {
//todo: add this feature
}
}
/**
* 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);
}
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',
),
);
}
/**
* Adds the tools settings page menu as submenu.
*
* @since 1.0.0
* @package userswp
*
* @param callable $settings_page The function to be called to output the content for this page.
*
* @return void
*/
public function uwp_add_admin_tools_sub_menu($settings_page) {
add_submenu_page(
"userswp",
__('Tools', 'uwp-tools'),
__('Tools', 'uwp-tools'),
'manage_options',
'uwp_tools',
$settings_page
);
}
public function uwp_tools_main_tab_content() {
?>
uwp_process_diagnosis($type, $step);
die();
}
function uwp_process_diagnosis($type, $step) {
switch ($type) {
case 'fix_user_data':
$this->uwp_fix_userdata($step);
}
}
}