function update()
 {
     require_once ABSPATH . 'wp-includes/pluggable.php';
     /* Update profile when there is no error */
     if (!isset($this->errors)) {
         $limited_fields = array();
         $param_field_updates = array('user_id' => $this->userid);
         $limited_fields = apply_filters('upme_trigger_field_update', $limited_fields, $param_field_updates);
         // Get list of dattime fields
         $date_time_fields = array();
         foreach ($this->upme_fileds_array as $key => $field) {
             extract($field);
             if (isset($this->upme_fileds_array[$key]['field']) && $this->upme_fileds_array[$key]['field'] == 'checkbox') {
                 if (in_array($meta, $limited_fields)) {
                     $prev_value = get_user_meta($this->userid, $meta, true);
                     if ($prev_value != null) {
                         array_push($this->changed_fields, array('meta' => $meta, 'prev_value' => $prev_value, 'new_value' => ''));
                     }
                 }
                 update_user_meta($this->userid, $meta, null);
             }
             // Filter date/time custom fields
             if (isset($this->upme_fileds_array[$key]['field']) && $this->upme_fileds_array[$key]['field'] == 'datetime') {
                 array_push($date_time_fields, $this->upme_fileds_array[$key]['meta']);
             }
         }
         if (is_array($this->usermeta)) {
             foreach ($this->usermeta as $key => $value) {
                 /* Update profile when there is no error */
                 if (!isset($this->errors[$key])) {
                     // save checkboxes
                     if (is_array($value)) {
                         // checkboxes
                         $value = implode(', ', $value);
                     }
                     //
                     $upme_date_format = (string) isset($this->upme_settings['date_format']) ? $this->upme_settings['date_format'] : 'mm/dd/yy';
                     if (in_array($key, $date_time_fields)) {
                         if (!empty($value)) {
                             $formatted_date = upme_date_format_to_standerd($value, $upme_date_format);
                             $value = $formatted_date;
                         }
                     }
                     /* UPME Actions for checking extra fields or hidden data in profile edit form */
                     if (in_array($key, $limited_fields)) {
                         $prev_value = get_user_meta($this->userid, $key, true);
                         if ($prev_value != stripslashes_deep(esc_attr($value))) {
                             array_push($this->changed_fields, array('meta' => $key, 'prev_value' => $prev_value, 'new_value' => $value));
                         }
                     }
                     // End Filter
                     // Prevent passwords from saving in user meta table
                     if ('user_pass' != $key && 'user_pass_confirm' != $key) {
                         update_user_meta($this->userid, $key, esc_attr($value));
                     }
                     /* update core fields - email, url, pass */
                     if (in_array($key, array('user_email', 'user_url', 'display_name')) || $key == 'user_pass' && esc_attr($value) != '') {
                         $result = wp_update_user(array('ID' => $this->userid, $key => esc_attr($value)));
                         /* UPME Action for after changing password */
                         if (!is_wp_error($result) && 'user_pass' == $key) {
                             do_action('upme_after_password_change', $this->userid);
                         }
                         // End Filter
                     }
                 }
             }
             // Implementing the email sending capabilities
         }
     }
 }
 function update()
 {
     require_once ABSPATH . 'wp-includes/pluggable.php';
     /* Update profile when there is no error */
     if (!isset($this->errors)) {
         // Get list of dattime fields
         $date_time_fields = array();
         foreach ($this->upme_fileds_array as $key => $field) {
             extract($field);
             if (isset($this->upme_fileds_array[$key]['field']) && $this->upme_fileds_array[$key]['field'] == 'checkbox') {
                 update_user_meta($this->userid, $meta, null);
             }
             // Filter date/time custom fields
             if (isset($this->upme_fileds_array[$key]['field']) && $this->upme_fileds_array[$key]['field'] == 'datetime') {
                 array_push($date_time_fields, $this->upme_fileds_array[$key]['meta']);
             }
         }
         if (is_array($this->usermeta)) {
             $changed_fields = array();
             $limited_fields = array();
             $param_field_updates = array('user_id' => $this->userid);
             $limited_fields = apply_filters('upme_trigger_field_update', $limited_fields, $param_field_updates);
             foreach ($this->usermeta as $key => $value) {
                 /* Update profile when there is no error */
                 if (!isset($this->errors[$key])) {
                     // save checkboxes
                     if (is_array($value)) {
                         // checkboxes
                         $value = implode(', ', $value);
                     }
                     //
                     // Set date format from admin settings
                     $upme_settings = get_option('upme_options');
                     $upme_date_format = (string) isset($upme_settings['date_format']) ? $upme_settings['date_format'] : 'mm/dd/yy';
                     if (in_array($key, $date_time_fields)) {
                         if (!empty($value)) {
                             $formatted_date = upme_date_format_to_standerd($value, $upme_date_format);
                             $value = $formatted_date;
                         }
                     }
                     /* UPME Actions for checking extra fields or hidden data in profile edit form */
                     if (in_array($key, $limited_fields)) {
                         $prev_value = get_user_meta($this->userid, $key, true);
                         if ($prev_value != esc_attr($value)) {
                             array_push($changed_fields, array('meta' => $key, 'prev_value' => $prev_value, 'new_value' => $value));
                         }
                     }
                     // End Filter
                     // Prevent passwords from saving in user meta table
                     if ('user_pass' != $key && 'user_pass_confirm' != $key) {
                         update_user_meta($this->userid, $key, esc_attr($value));
                     }
                     /* update core fields - email, url, pass */
                     if (in_array($key, array('user_email', 'user_url', 'display_name')) || $key == 'user_pass' && esc_attr($value) != '') {
                         $result = wp_update_user(array('ID' => $this->userid, $key => esc_attr($value)));
                         /* UPME Action for after changing password */
                         if (!is_wp_error($result) && 'user_pass' == $key) {
                             do_action('upme_after_password_change', $this->userid);
                         }
                         // End Filter
                     }
                 }
             }
             if (is_array($changed_fields) && count($changed_fields) != 0) {
                 $this->notify_field_update = true;
                 /* UPME Actions for executing custom functions on profile data change */
                 $profile_field_update_triggered_params = array('changed_fields' => $changed_fields, 'user_id' => $this->userid);
                 do_action('upme_profile_field_update_triggered', $profile_field_update_triggered_params);
                 // End action
                 if ($this->notify_field_update) {
                     $full_name = get_user_meta($this->userid, 'first_name', true) . ' ' . get_user_meta($this->userid, 'last_name', true);
                     $subject = __('Profile Information Update', 'upme');
                     $message = sprintf(__('%s has updated profile information.', 'upme'), $full_name) . "\r\n\r\n";
                     $message .= sprintf(__('Please find the updated information below.', 'upme'), $full_name) . "\r\n\r\n";
                     foreach ($changed_fields as $key => $value) {
                         $message .= __('Field Key', 'upme') . "   :" . $value['meta'] . "\r\n";
                         $message .= __('Previous Value', 'upme') . "   :" . $value['prev_value'] . "\r\n";
                         $message .= __('Updated Value', 'upme') . "   :" . $value['new_value'] . "\r\n\r\n";
                     }
                     $message .= __('Thanks', 'upme') . "\r\n";
                     $message .= sprintf(__('%s'), get_option('blogname'), 'upme') . "\r\n";
                     global $upme_email_templates;
                     $send_params = array('full_name' => $full_name, 'changed_fields' => $changed_fields);
                     $upme_email_templates->upme_send_emails('nofify_profile_update', get_option('admin_email'), $subject, $message, $send_params, $this->userid);
                     // wp_mail(
                     //     get_option('admin_email'),
                     //     $subject,
                     //     $message
                     // );
                 }
             }
             // Implementing the email sending capabilities
         }
     }
 }
 function upme_save_user_extra_fields($user_id)
 {
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         if (isset($_POST['upme']) && is_array($_POST['upme']) && count($_POST['upme']) > 0) {
             // Set date format from admin settings
             $upme_settings = get_option('upme_options');
             $upme_date_format = (string) isset($upme_settings['date_format']) ? $upme_settings['date_format'] : 'mm/dd/yy';
             // Get profile fields
             $profile_fields = get_option('upme_profile_fields');
             // Get list of dattime fields
             $date_time_fields = array();
             // Get list of required fields
             $required_fields = array();
             foreach ($profile_fields as $key => $field) {
                 $field_settings = $field;
                 extract($field);
                 // Set checkbox values to null, for preventing checkboxes saving issue when all are deselected
                 if (isset($profile_fields[$key]['field']) && $profile_fields[$key]['field'] == 'checkbox') {
                     update_user_meta($user_id, $meta, null);
                 }
                 // Filter date/time custom fields
                 if (isset($profile_fields[$key]['field']) && $profile_fields[$key]['field'] == 'datetime') {
                     array_push($date_time_fields, $profile_fields[$key]['meta']);
                 }
                 if (isset($profile_fields[$key]['required']) && $profile_fields[$key]['required'] == '1') {
                     $required_fields[$profile_fields[$key]['meta']] = $field_settings;
                 }
                 /* UPME filter for adding restrictions before custom field type saving */
                 $backend_custom_field_type_restrictions_params = array('field_settings' => $field_settings);
                 $this->errors = apply_filters('upme_backend_custom_field_type_restrictions', $this->errors, $_POST['upme'], $backend_custom_field_type_restrictions_params);
                 /* END filter */
             }
             foreach ($_POST['upme'] as $key => $value) {
                 // Validation for required fields
                 if (array_key_exists($key, $required_fields)) {
                     switch ($required_fields[$key]['field']) {
                         case 'text':
                         case 'textarea':
                         case 'datetime':
                         case 'select':
                         case 'fileupload':
                         case 'password':
                         case 'video':
                         case 'soundcloud':
                             if ('' == trim($value)) {
                                 $this->errors[] = __($required_fields[$key]['name'], 'upme') . __(' is required.', 'upme');
                             }
                             break;
                         case 'radio':
                         case 'checkbox':
                             break;
                         default:
                             if ('' == trim($value)) {
                                 $this->errors[] = __($required_fields[$key]['name'], 'upme') . __(' is required.', 'upme');
                             }
                             break;
                     }
                 }
                 //$this->errors[]
                 if (!(isset($this->errors) && count($this->errors) > 0)) {
                     if (is_array($value)) {
                         $value = implode(', ', $value);
                     }
                     if (in_array($key, $date_time_fields)) {
                         if ('' != $value) {
                             $formatted_date = upme_date_format_to_standerd($value, $upme_date_format);
                             $value = $formatted_date;
                         }
                     }
                     /* UPME action for executing custom functionality before saving a field */
                     do_action('upme_before_save_backend_field_' . $key, $key, $value, $user_id);
                     // End Action
                     // To Do Need to check for adding new meta when it was not same as old
                     update_user_meta($user_id, $key, $value);
                     /* UPME action for executing custom functionality after saving a field */
                     do_action('upme_after_save_backend_field_' . $key, $key, $value, $user_id);
                     // End Action
                     if ($key == 'upme_user_profile_status') {
                         /* UPME action for executing custom functionality after saving a field */
                         do_action('upme_user_profile_status_update', $key, $value, $user_id);
                         // End Action
                     }
                 }
             }
             if (!(isset($this->errors) && count($this->errors) > 0)) {
                 // Save core WordPress fields to user meta table
                 update_user_meta($user_id, 'first_name', isset($_POST['first_name']) ? $_POST['first_name'] : '');
                 update_user_meta($user_id, 'last_name', isset($_POST['last_name']) ? $_POST['last_name'] : '');
                 if (isset($_POST['user_email']) && '' != $_POST['user_email']) {
                     update_user_meta($user_id, 'user_email', $_POST['user_email']);
                 }
                 upme_update_user_cache($user_id);
             }
         }
     }
 }
 function create()
 {
     global $upme_roles, $upme_email_templates;
     require_once ABSPATH . 'wp-includes/pluggable.php';
     // Verify whether registration form name is modified
     if (isset($_POST['upme-register-form-name'])) {
         $upme_secret_key = get_option('upme_secret_key');
         $register_form_name = $_POST['upme-register-form-name'];
         $register_form_name_hash = $_POST['upme-hidden-register-form-name-hash'];
         if ($register_form_name_hash != hash('sha256', $register_form_name . $upme_secret_key)) {
             // Invailid form name was defined by manually editing
             $this->errors[] = __('Invalid registration form.', 'upme');
             return;
         }
         $this->registration_form_name = $register_form_name;
     }
     /* UPME action for adding restrictions before registration */
     $before_registration_validation_params = array();
     do_action('upme_before_registration_restrictions', $this->usermeta, $before_registration_validation_params);
     /* END action */
     /* Create profile when there is no error */
     if (!isset($this->errors)) {
         // Set date format from admin settings
         $upme_settings = get_option('upme_options');
         $upme_date_format = (string) isset($upme_settings['date_format']) ? $upme_settings['date_format'] : 'mm/dd/yy';
         /* Create account, update user meta */
         $sanitized_user_login = sanitize_user($_POST['user_login']);
         /* Get password */
         if (isset($_POST['user_pass']) && $_POST['user_pass'] != '') {
             $user_pass = $_POST['user_pass'];
         } else {
             $user_pass = wp_generate_password(12, false);
             /* UPME Filters for before registration head section */
             $registration_generated_password_params = array('meta' => $this->usermeta);
             $user_pass = apply_filters('upme_registration_generated_password', $user_pass, $registration_generated_password_params);
             // End Filters
         }
         /* New user */
         $user_id = wp_create_user($sanitized_user_login, $user_pass, $_POST['user_email']);
         if (!$user_id) {
             /* UPME action for handling failure in new user creation */
             $new_user_registration_fail_params = array();
             do_action('upme_new_user_registration_fail', $user_id, $new_user_registration_fail_params);
             /* END action */
         } else {
             global $upme;
             /* Force custom user role on registration using shortcode attributes */
             if (isset($_POST['upme-hidden-register-form-user-role'])) {
                 $upme_secret_key = get_option('upme_secret_key');
                 $register_user_role = $_POST['upme-hidden-register-form-user-role'];
                 $register_user_role_hash = $_POST['upme-hidden-register-form-user-role-hash'];
                 if ($register_user_role_hash == hash('sha256', $register_user_role . $upme_secret_key) && get_role($register_user_role)) {
                     $user = new WP_User($user_id);
                     $user->set_role($register_user_role);
                 } else {
                     // Invailid user role was defined by manually editing
                     return;
                 }
             } else {
                 /* Allow users to select the role without forcing */
                 $allow_user_role_registration = $upme_settings['select_user_role_in_registration'];
                 // Set new users role specified in the registration page
                 // This will only used when Select User Role in Registration setting is enabled
                 $allowed_user_roles = $upme_roles->upme_allowed_user_roles_registration();
                 $user_role = isset($this->usermeta['user_role']) ? $this->usermeta['user_role'] : '';
                 if (!empty($user_role) && isset($allowed_user_roles[$user_role]) && $allow_user_role_registration) {
                     $user = new WP_User($user_id);
                     $user->set_role($user_role);
                 }
             }
             // Get profile fields
             $profile_fields = get_option('upme_profile_fields');
             // Get list of dattime fields
             $date_time_fields = array();
             foreach ($profile_fields as $key => $field) {
                 extract($field);
                 // Filter date/time custom fields
                 if (isset($profile_fields[$key]['field']) && $profile_fields[$key]['field'] == 'datetime') {
                     array_push($date_time_fields, $profile_fields[$key]['meta']);
                 }
             }
             /* Now update all user meta */
             foreach ($this->usermeta as $key => $value) {
                 // save checkboxes
                 if (is_array($value)) {
                     // checkboxes
                     $value = implode(', ', $value);
                 }
                 if (in_array($key, $date_time_fields)) {
                     if ('' != $value) {
                         $formatted_date = upme_date_format_to_standerd($value, $upme_date_format);
                         $value = $formatted_date;
                     }
                 }
                 /* UPME action for adding custom filtering for each field save registration */
                 $before_registration_field_update_params = array('user_id' => $user_id, 'meta' => $key, 'value' => $value);
                 do_action('upme_before_registration_field_update', $before_registration_field_update_params);
                 /* END action */
                 // Prevent passwords from saving in user meta table
                 if ('user_pass' != $key && 'user_pass_confirm' != $key) {
                     update_user_meta($user_id, $key, esc_attr($value));
                 }
                 /* UPME action for adding custom filtering for each field save registration */
                 $after_registration_field_update_params = array('user_id' => $user_id, 'meta' => $key, 'value' => $value);
                 do_action('upme_after_registration_field_update', $after_registration_field_update_params);
                 /* END action */
                 /* update core fields - email, url, pass */
                 if (in_array($key, array('user_email', 'user_url', 'display_name'))) {
                     wp_update_user(array('ID' => $user_id, $key => esc_attr($value)));
                 }
             }
             // Check user selected passwrod setting for saving the activation details
         }
         // Set approval status when user profile approvals are enabled
         $approval_setting_status = $this->validate_user_approval();
         if ($approval_setting_status) {
             $approval_status = 'INACTIVE';
             update_user_meta($user_id, 'upme_approval_status', $approval_status);
         } else {
             $approval_status = 'ACTIVE';
             update_user_meta($user_id, 'upme_approval_status', $approval_status);
         }
         // Set Profile Status to active by default
         update_user_meta($user_id, 'upme_user_profile_status', 'ACTIVE');
         // Set the password nag when user selected password setting is disabled
         // Set activation status and codes when selected password setting is enabled
         $upme_settings = get_option('upme_options');
         $set_pass = (bool) $upme_settings['set_password'];
         $activation_setting_status = $this->validate_email_confirmation();
         $activation_status = '';
         if (!$set_pass) {
             update_user_option($user_id, 'default_password_nag', true, true);
             //Set up the Password change nag.
         }
         if ($activation_setting_status) {
             $activation_status = 'INACTIVE';
             update_user_meta($user_id, 'upme_activation_status', $activation_status);
         } else {
             $activation_status = 'ACTIVE';
             update_user_meta($user_id, 'upme_activation_status', $activation_status);
         }
         $activation_code = wp_generate_password(12, false);
         update_user_meta($user_id, 'upme_activation_code', $activation_code);
         // Set automatic login based on the setting value in admin
         if ($this->validate_automatic_login()) {
             wp_set_auth_cookie($user_id, false, is_ssl());
         }
         /* action after Account Creation */
         do_action('upme_user_register', $user_id);
         if (!empty($activation_status) && 'INACTIVE' == $activation_status) {
             upme_new_user_notification($user_id, $user_pass, $activation_status, $activation_code);
         } else {
             $user = new WP_User($user_id);
             $username = $user->user_login;
             $current_option = get_option('upme_options');
             $link = get_permalink($current_option['login_page_id']);
             $send_params = array('username' => $username, 'password' => $user_pass, 'login_link' => $link);
             $email_status = $upme_email_templates->upme_send_emails('reg_default_user', '', '', '', $send_params, $user_id);
             $send_params = array('username' => $username, 'email' => $user->user_email);
             $admin_email_status = $upme_email_templates->upme_send_emails('reg_default_admin', '', '', '', $send_params, $user_id);
             if (!$email_status && !$admin_email_status) {
                 wp_new_user_notification($user_id, $user_pass);
             }
         }
     }
 }