<?php if (!empty($wp_crm['data_structure']) && is_array($wp_crm['data_structure']['attributes'])) { $attribute_keys = array_keys($wp_crm['data_structure']['attributes']); } else { $attribute_keys = array(); } if ($_REQUEST['message'] == 'created') { WP_CRM_F::add_message(__('Profile created.', 'wp_crm')); } elseif ($_REQUEST['message'] == 'updated') { WP_CRM_F::add_message(__('Profile updated.', 'wp_crm')); } if ($wp_crm_user) { $user_id = $_REQUEST['user_id']; $object = $wp_crm_user; $title = WP_CRM_F::get_primary_display_value($object); } else { $object = array(); $object['new'] = true; $object['user_role']['default'][0] = get_option('default_role'); $title = __('Add New Person', 'wp_crm'); } $wp_crm_js = array('user_id' => is_numeric($user_id) ? $user_id : false, 'hidden_attributes' => $wp_crm['hidden_attributes']); if ($wp_crm['configuration']['standardize_display_name'] == 'true' && !empty($wp_crm['configuration']['display_name_rule'])) { $wp_crm_js['standardize_display_name'] = true; $wp_crm_js['display_name_rule'] = $wp_crm['configuration']['display_name_rule']; } if (is_array($wp_crm_js)) { echo '<script type="text/javascript">var wp_crm = jQuery.parseJSON(' . json_encode(json_encode($wp_crm_js)) . '); </script>'; } ?>
/** * Returns user's information as set in Overview Page User Card * * @since 0.21 * */ static function render_user_card($args = false) { global $wp_crm, $current_user; if (!$args) { return; } $defaults = array('avatar_width' => 50, 'do_not_display_user_avatars' => !empty($wp_crm['configuration']['do_not_display_user_avatars']) && $wp_crm['configuration']['do_not_display_user_avatars'] == 'true' ? true : false, 'show_user_actions' => false); $args = wp_parse_args($args, $defaults); extract($args); if (!isset($user_object)) { $user_object = wp_crm_get_user($user_id); } if ($show_user_actions && is_array($wp_crm['overview_user_actions'])) { foreach ($wp_crm['overview_user_actions'] as $action => $data) { if (!empty($data['enable']) && $data['enable'] == 'true') { $html = $data['label']; if ($action == 'reset_password' && $current_user->ID == (int) $user_id) { continue; } //** Apply filters to action */ $action = apply_filters('wp_crm_user_action', array('html' => $html, 'action' => $action, 'data' => $data, 'user_object' => $user_object, 'user_id' => $user_id)); $user_actions[] = '<li class="wp_crm_user_action" user_id="' . $action['user_id'] . '" action="' . $action['action'] . '">' . $action['html'] . '</li>'; } } } //** Get selected attributes from Settings page */ $user_card_attributes = $wp_crm['configuration']['overview_table_options']['main_view']; //** Load Default user card values to avoid having blank user cards */ if (!is_array($user_card_attributes)) { $user_card_attributes[] = 'display_name'; $user_card_attributes[] = 'user_email'; } ob_start(); ?> <?php if (!$do_not_display_user_avatars) { ?> <div class='user_avatar'> <?php if (current_user_can('WP-CRM: View Profiles')) { ?> <a href='<?php echo admin_url("admin.php?page=wp_crm_add_new&user_id={$user_id}"); ?> '><?php echo get_avatar($user_id, $avatar_width); ?> </a> <?php } else { ?> <?php echo get_avatar($user_id, $avatar_width); ?> <?php } ?> </div> <?php } ?> <div class="user_card_inner_wrapper"> <ul class="user_card_data"> <li class='primary'> <?php if (current_user_can('WP-CRM: View Profiles')) { ?> <a href='<?php echo admin_url("admin.php?page=wp_crm_add_new&user_id={$user_id}"); ?> '><?php echo WP_CRM_F::get_primary_display_value($user_object); ?> </a> <?php } else { ?> <?php echo WP_CRM_F::get_primary_display_value($user_object); ?> <?php } ?> </li> <?php foreach ($user_card_attributes as $key) { ?> <li class="<?php echo $key; ?> "> <?php unset($visible_options); if (!empty($wp_crm['data_structure']['attributes'][$key]['has_options'])) { $visible_options = WP_CRM_F::list_options($user_object, $key); } else { $visible_options[] = apply_filters('wp_crm_display_' . $key, WP_CRM_F::get_first_value($user_object[$key]), $user_id, $user_object, 'user_card'); } if (is_array($visible_options)) { foreach ($visible_options as $this_key => $option) { if (CRM_UD_F::is_url($option)) { $visible_options[$this_key] = "<a href='{$option}'>{$option}</a>"; } } } if (is_array($visible_options)) { echo '<ul><li>' . implode('</li><li>', $visible_options) . '</li></ul>'; } ?> </li> <?php } ?> </ul> <?php if (!empty($user_actions) && is_array($user_actions)) { echo '<ul class="wp_crm_user_row_actions">' . implode('<li class="wp_crm_divider"> | </li>', $user_actions) . '</ul>'; } ?> </div> <?php $content = ob_get_contents(); ob_end_clean(); return $content; }
/** * Saves user data * * @hooked_into WP_CRM_Core::admin_head(); * @since 0.1 */ function wp_crm_save_user_data($user_data, $args = '') { global $wpdb, $wp_crm; $insert_data = array(); $insert_custom_data = array(); $args = wp_parse_args($args, array('use_global_messages' => 'true', 'match_login' => 'false', 'no_errors' => 'false', 'return_detail' => 'false', 'default_role' => get_option('default_role'), 'no_redirect' => 'false')); $wp_insert_user_vars = array('user_pass', 'user_email', 'user_login', 'user_url', 'role', 'user_nicename', 'display_name', 'user_registered', 'first_name', 'last_name', 'nickname'); //** Get custom meta attributes */ $wp_user_meta_data = array(); if (!empty($wp_crm['data_structure']) && is_array($wp_crm['data_structure']['attributes'])) { foreach ($wp_crm['data_structure']['attributes'] as $slug => $value) { if (!in_array($slug, $wp_insert_user_vars)) { $wp_user_meta_data[] = $slug; } } } //** Add custom keys that are not necessarily created in WP-CRM data but must be saved if passed */ $wp_user_meta_data[] = 'show_admin_bar_front'; $wp_user_meta_data[] = 'admin_color'; $temp_data['user_id'] = WP_CRM_F::get_first_value($user_data['user_id']); // Prepare Data foreach ($user_data as $meta_key => $values) { //** Fix up values if they are not passed in the crazy CRM format */ if (!empty($values) && !is_array($values)) { //** Check if Attribute TITLE was passed intead of the slug */ foreach ($wp_crm['data_structure']['attributes'] as $attribute_slug => $attribute_data) { if ($attribute_data['title'] == $meta_key) { //** Actual slug / meta_key found, we overwrite the passed one */ $meta_key = $attribute_slug; break; } } //** Check if this is an option key, and value needs to be convered to 'on' */ if ($wp_crm['data_structure']['attributes'][$meta_key]['has_options']) { if (in_array($values, $wp_crm['data_structure']['attributes'][$meta_key]['option_labels'])) { //** Get option key from passed option title */ $option_key = array_search($values, $wp_crm['data_structure']['attributes'][$meta_key]['option_labels']); //** Restet $values, and update with checkbox friendly data entry */ $values = array(rand(10000, 99999) => array('value' => 'on', 'option' => $option_key)); } } else { //** Handle Regular values */ $values = array(rand(10000, 99999) => array('value' => $values)); } } //** Make sure values are always in array format */ $values = (array) $values; foreach ($values as $temp_key => $data) { //** If this attribute is in the main user table, we store it here */ if (in_array($meta_key, $wp_insert_user_vars)) { //** Do not overwrite $insert_data if its already set */ if (!isset($insert_data[$meta_key])) { $insert_data[$meta_key] = $data['value']; continue; } //** Store data in meta table as well, as long as it's not already stored in main table */ if ($insert_data[$meta_key] != $data['value']) { //** Store any extra keys in values in regular data */ $insert_custom_data[$meta_key][] = $data['value']; } } //** If the attribute is a meta key created by WP-CRM, we store it here */ if (in_array($meta_key, $wp_user_meta_data)) { switch (!empty($wp_crm['data_structure']['attributes'][$meta_key]['input_type']) ? $wp_crm['data_structure']['attributes'][$meta_key]['input_type'] : '') { case 'checkbox': if (!empty($data['option']) && $data['value'] == 'on') { //** get full meta key of option */ $full_meta_key = $wp_crm['data_structure']['attributes'][$meta_key]['option_keys'][$data['option']]; if (empty($full_meta_key)) { $full_meta_key = $meta_key; } $insert_custom_data[$full_meta_key][] = 'on'; } break; case 'dropdown': //** get full meta key of option */ $full_meta_key = $wp_crm['data_structure']['attributes'][$meta_key]['option_keys'][$data['option']]; if (empty($full_meta_key)) { $full_meta_key = $meta_key; } if (!empty($data['option'])) { $insert_custom_data[$full_meta_key][] = 'on'; } break; default: //* Do not save empty values until this is being done on the profile editing page */ if (isset($data['value'])) { if (!$args['admin_save_action'] && empty($data['value'])) { continue; } } if (!empty($wp_crm['data_structure']['attributes'][$meta_key]['has_options'])) { $full_meta_key = $wp_crm['data_structure']['attributes'][$meta_key]['option_keys'][$data['option']]; if (empty($full_meta_key)) { $full_meta_key = $meta_key; } $insert_custom_data[$full_meta_key][] = $data['value']; } else { $insert_custom_data[$meta_key][] = $data['value']; } break; } } } } //* Determine user_id */ if (empty($temp_data['user_id'])) { if ($args['match_login'] == 'true' && (isset($user_data['user_login']) || isset($user_data['user_email']))) { $temp_data['user_login'] = WP_CRM_F::get_first_value($user_data['user_login']); $temp_data['user_email'] = WP_CRM_F::get_first_value($user_data['user_email']); //* Try to get ID based on login and email */ if ($temp_data['user_email']) { $insert_data['ID'] = username_exists($temp_data['user_email']); } //* Validate e-mail */ if (empty($insert_data['ID'])) { $insert_data['ID'] = email_exists($temp_data['user_email']); } } } else { //** User ID was passed */ $insert_data['ID'] = $temp_data['user_id']; } if (empty($insert_data['ID'])) { $new_user = true; } //** Set user_login from user_email or a guessed value if this is a new usr and user_login is not passed */ if (!empty($new_user) && empty($insert_data['user_login'])) { //** Try getting it from e-mail address */ if (!empty($insert_data['user_email'])) { $insert_data['user_login'] = $insert_data['user_email']; } else { //** Try to guess user_login from first passed user value */ if ($user_login = WP_CRM_F::get_primary_display_value($user_data)) { $user_login = sanitize_user($user_login, true); $user_login = apply_filters('pre_user_login', $user_login); $insert_data['user_login'] = $user_login; } } } //** If password is passed, we hash it */ if (empty($insert_data['user_pass'])) { //** Unset password to prevent it being cleared out */ unset($insert_data['user_pass']); } else { //** We don't need to do it because wp_insert/update_user does it too! @author korotkov@ud */ /* if($new_user) { $insert_data['user_pass'] = wp_hash_password($insert_data['user_pass']); } */ } //** Set default role if no role set and this isn't a new user */ if (empty($insert_data['role']) && empty($insert_data['ID'])) { $insert_data['role'] = $args['default_role']; } //** @author korotkov@ud */ if (empty($insert_data['user_email'])) { if ($wp_crm['configuration']['allow_account_creation_with_no_email'] == 'true') { $fake_user_email = rand(10000, 99999) . '@' . rand(10000, 99999) . '.com'; $insert_data['user_email'] = $fake_user_email; } else { WP_CRM_F::add_message(__('Error saving user: Email address cannot be empty', 'wp_crm'), 'bad'); return false; } } else { if (!filter_var($insert_data['user_email'], FILTER_VALIDATE_EMAIL)) { WP_CRM_F::add_message(__('Error saving user: Email address is invalid', 'wp_crm'), 'bad'); return false; } } //** Determine if data has user_nicename we should sanitize it. peshkov@UD */ if (isset($insert_data['user_nicename'])) { $user_nicename = sanitize_title($insert_data['user_nicename']); if (empty($user_nicename)) { unset($insert_data['user_nicename']); } else { $insert_data['user_nicename'] = $user_nicename; } } //** Always update display name if its blank */ if (empty($insert_data['display_name']) && isset($insert_data['user_email'])) { $insert_data['display_name'] = $insert_data['user_email']; } if (!empty($new_user)) { $user_id = wp_insert_user($insert_data); //** If multisite - assign user to blog */ if (is_multisite()) { global $blog_id; add_user_to_blog($blog_id, $user_id, $insert_data['role']); } } else { $user_id = wp_update_user($insert_data); } if (is_numeric($user_id)) { if (isset($fake_user_email)) { $wpdb->update($wpdb->users, array('user_email' => ''), array('ID' => $user_id)); } //** Remove all old meta values if field is set (to avoid deleting unpasssed values) */ foreach ($wp_user_meta_data as $meta_key) { if (isset($insert_custom_data[$meta_key])) { delete_user_meta($user_id, $meta_key); } //** Delete old option meta keys for this meta_key */ if (!empty($wp_crm['data_structure']['attributes'][$meta_key]['has_options'])) { //** Delete "holder" meta key (this may not be necessary */ delete_user_meta($user_id, $meta_key); foreach ($wp_crm['data_structure']['attributes'][$meta_key]['option_keys'] as $old_meta_key) { //** Delete individual long (optional) meta keys */ delete_user_meta($user_id, $old_meta_key); } } elseif (isset($args['admin_save_action']) && !empty($wp_crm['data_structure']['attributes'][$meta_key]['input_type']) && $wp_crm['data_structure']['attributes'][$meta_key]['input_type'] == 'checkbox') { delete_user_meta($user_id, $meta_key); } } //** Add meta values */ if (is_array($insert_custom_data) && !empty($insert_custom_data)) { foreach ((array) $insert_custom_data as $meta_key => $meta_value) { foreach ($meta_value as $single_value) { add_user_meta($user_id, $meta_key, $single_value); } } } $display_name = WP_CRM_F::get_primary_display_value($user_id); if ($display_name) { $wpdb->update($wpdb->users, array('display_name' => $display_name), array('ID' => $user_id)); } if (!empty($new_user)) { if ($args['use_global_messages'] == 'true') { WP_CRM_F::add_message(__('New user added.', 'wp_crm')); } } else { if ($args['use_global_messages'] == 'true') { WP_CRM_F::add_message(__('User updated.', 'wp_crm')); } } do_action('wp_crm_save_user', array('user_id' => $user_id, 'insert_data' => $insert_data, 'insert_custom_data' => $insert_custom_data, 'args' => $args)); // Don't redirect if data was passed if ($args['no_redirect'] != 'true') { if (!empty($_REQUEST['redirect_to'])) { $url = urldecode($_REQUEST['redirect_to']) . "&message=updated"; } else { $url = admin_url("admin.php?page=wp_crm_add_new&user_id={$user_id}&message=" . (!empty($new_user) ? 'created' : 'updated')); } wp_redirect($url); } } else { if ($args['use_global_messages'] == 'true') { switch ($user_id->get_error_code()) { case 'existing_user_email': $existing_id = email_exists($insert_data['user_email']); WP_CRM_F::add_message(sprintf(__('Error saving user: %s', 'wp_crm'), $user_id->get_error_message() . ' <a href="' . admin_url("admin.php?page=wp_crm_add_new&user_id={$existing_id}") . '">' . __('Go to user profile', 'wp_crm') . '</a>'), 'bad'); break; default: WP_CRM_F::add_message(sprintf(__('Error saving user: %s', 'wp_crm'), $user_id->get_error_message()), 'bad'); break; } } } if ($args['no_errors'] && is_wp_error($user_id)) { return false; } if ($args['return_detail'] == 'true') { $return['user_id'] = $user_id; if ($new_user) { $return['new_user'] = true; } return $return; } return $user_id; }