/** * Updates the user meta. * * @param int $user_id */ public static function edit_user_profile_update($user_id) { global $wpdb; if (!affiliates_user_is_affiliate($user_id)) { return; } require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings.php'; require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-registration.php'; $registration_fields = Affiliates_Settings_Registration::get_fields(); // remove fields not stored as user meta foreach (Affiliates_Registration::get_skip_meta_fields() as $key) { unset($registration_fields[$key]); } unset($registration_fields['first_name']); unset($registration_fields['last_name']); // update user meta if (!empty($registration_fields)) { foreach ($registration_fields as $name => $field) { $meta_value = isset($_POST[$name]) ? $_POST[$name] : ''; $meta_value = Affiliates_Utility::filter($meta_value); update_user_meta($user_id, $name, maybe_unserialize($meta_value)); } } // The affiliate entry must be updated using the profile_update action // as we don't have the updated user info here yet. }
/** * Renders the registration form fields. * * @return string */ public static function render_fields($registration_fields = null) { $output = ''; require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings.php'; require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-registration.php'; if ($registration_fields === null) { $registration_fields = Affiliates_Settings_Registration::get_fields(); } foreach ($registration_fields as $name => $field) { if ($field['enabled']) { $output .= '<div class="field">'; $output .= '<label>'; $output .= stripslashes($field['label']); $output .= ' '; $type = isset($field['type']) ? $field['type'] : 'text'; $readonly = is_user_logged_in() && ($name == 'user_login' || $name == 'user_email') ? ' readonly="readonly" ' : ''; $output .= sprintf('<input type="%s" class="%s" name="%s" value="%s" %s %s />', esc_attr($type), esc_attr($name) . ($field['required'] ? ' required ' : ''), esc_attr($name), esc_attr(stripslashes(isset($field['value']) ? $field['value'] : '')), $field['required'] ? ' required="required" ' : '', $readonly); $output .= '</label>'; $output .= '</div>'; } } return $output; }
/** * Affiliate field info. * * user_id - print for ... requires AFFILIATES_ADMIN... * name - field name or names, empty includes all by default * edit - yes or no * load_styles - yes or no * * @param array $atts * @param string $content * @return string */ public static function affiliates_fields($atts, $content = null) { $output = ''; if (is_user_logged_in()) { $atts = shortcode_atts(array('edit' => 'yes', 'load_styles' => 'yes', 'name' => '', 'user_id' => null), $atts); $atts['load_styles'] = strtolower(trim($atts['load_styles'])); if ($atts['load_styles'] == 'yes') { wp_enqueue_style('affiliates-fields'); } $atts['edit'] = strtolower(trim($atts['edit'])); $fields = null; if (!empty($atts['name'])) { $fields = array_map('strtolower', array_map('trim', explode(',', $atts['name']))); } if (current_user_can(AFFILIATES_ADMINISTER_AFFILIATES) && !empty($atts['user_id'])) { $user_id = intval(trim($atts['user_id'])); } else { $user_id = get_current_user_id(); } $user = get_user_by('id', $user_id); if (affiliates_user_is_affiliate($user_id)) { require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings.php'; require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-registration.php'; $registration_fields = Affiliates_Settings_Registration::get_fields(); if ($atts['edit'] != 'yes') { unset($registration_fields['password']); } if (!empty($fields)) { $_registration_fields = array(); foreach ($fields as $name) { if (isset($registration_fields[$name])) { $_registration_fields[$name] = $registration_fields[$name]; } } $registration_fields = $_registration_fields; } // handle form submission if ($atts['edit'] === 'yes') { if (!empty($_POST['affiliate-nonce']) && wp_verify_nonce($_POST['affiliate-nonce'], 'save')) { if (!empty($registration_fields)) { $error = false; // gather field values foreach ($registration_fields as $name => $field) { if ($field['enabled']) { $value = isset($_POST[$name]) ? $_POST[$name] : ''; $value = Affiliates_Utility::filter($value); if ($field['required'] && empty($value) && !(is_user_logged_in() && isset($field['type']) && $field['type'] == 'password')) { $error = true; $output .= '<div class="error">'; $output .= __('<strong>ERROR</strong>', AFFILIATES_PLUGIN_DOMAIN); $output .= ' : '; $output .= sprintf(__('Please fill out the field <em>%s</em>.', AFFILIATES_PLUGIN_DOMAIN), $field['label']); $output .= '</div>'; } $registration_fields[$name]['value'] = $value; // password check $type = isset($field['type']) ? $field['type'] : 'text'; if ($type == 'password') { if (!empty($value)) { $value2 = isset($_POST[$name . '2']) ? $_POST[$name . '2'] : ''; $value2 = Affiliates_Utility::filter($value2); if ($value !== $value2) { $error = true; $output .= '<div class="error">'; $output .= __('<strong>ERROR</strong>', AFFILIATES_PLUGIN_DOMAIN); $output .= ' : '; $output .= sprintf(__('The passwords for the field <em>%s</em> do not match.', AFFILIATES_PLUGIN_DOMAIN), $field['label']); $output .= '</div>'; } } } } } $userdata = array(); foreach ($registration_fields as $name => $field) { if ($registration_fields[$name]['enabled']) { $userdata[$name] = $registration_fields[$name]['value']; } } if (!$error) { $updated_user_id = Affiliates_Registration::update_affiliate_user($user_id, $userdata); if (is_wp_error($updated_user_id)) { $error_messages = implode('<br/>', $updated_user_id->get_error_messages()); if (!empty($error_messages)) { $output .= '<div class="error">'; $output .= $error_messages; $output .= '</div>'; } } else { $output .= '<div class="updated">'; $output .= __('Saved', AFFILIATES_PLUGIN_DOMAIN); $output .= '</div>'; } } } } } // show form $n = 0; if (!empty($registration_fields)) { if ($atts['edit'] === 'yes') { $output .= '<form class="affiliates-fields" method="post">'; $output .= '<div>'; } else { $output .= '<div class="affiliates-fields">'; $output .= '<div>'; } foreach ($registration_fields as $name => $field) { if ($field['enabled']) { $n++; $output .= '<div class="field">'; $output .= '<label>'; $output .= esc_html(stripslashes($field['label'])); // @todo i18n $type = isset($field['type']) ? $field['type'] : 'text'; $extra = $atts['edit'] != 'yes' ? ' readonly="readonly" ' : ''; switch ($name) { case 'user_login': $extra .= ' readonly="readonly" '; $value = $user->user_login; break; case 'user_email': $value = $user->user_email; break; case 'user_url': $value = $user->user_url; break; case 'password': $value = ''; break; default: $value = get_user_meta($user_id, $name, true); } $output .= sprintf('<input type="%s" class="%s" name="%s" value="%s" %s %s />', esc_attr($type), 'regular-text ' . esc_attr($name) . ($type != 'password' && $field['required'] ? ' required ' : ''), esc_attr($name), esc_attr(stripslashes($value)), $type != 'password' && $field['required'] ? ' required="required" ' : '', $extra); $output .= '</label>'; $output .= '</div>'; if ($type == 'password') { // the second passwort field is also not required $output .= '<div class="field">'; $output .= '<label>'; $output .= sprintf(__('Repeat %s', AFFILIATES_PLUGIN_DOMAIN), esc_html(stripslashes($field['label']))); // @todo i18n $output .= sprintf('<input type="%s" class="%s" name="%s" value="%s" %s %s />', esc_attr($type), 'regular-text ' . esc_attr($name), esc_attr($name . '2'), esc_attr($value), '', $extra); $output .= '</label>'; $output .= '</div>'; } } } if ($atts['edit'] === 'yes') { $output .= wp_nonce_field('save', 'affiliate-nonce', true, false); $output .= '<div class="save">'; $output .= sprintf('<input class="button" type="submit" name="save" value="%s" />', __('Save', AFFILIATES_PLUGIN_DOMAIN)); $output .= '</div>'; $output .= '</div>'; $output .= '</form>'; } else { $output .= '</div>'; $output .= '</div>'; } } } } return $output; }
/** * Show edit affiliate form. * @param int $affiliate_id affiliate id */ function affiliates_admin_affiliates_edit($affiliate_id) { global $wpdb; if (!current_user_can(AFFILIATES_ADMINISTER_AFFILIATES)) { wp_die(__('Access denied.', AFFILIATES_PLUGIN_DOMAIN)); } $affiliate = affiliates_get_affiliate(intval($affiliate_id)); if (empty($affiliate)) { wp_die(__('No such affiliate.', AFFILIATES_PLUGIN_DOMAIN)); } $affiliates_users_table = _affiliates_get_tablename('affiliates_users'); $affiliate_user = null; $affiliate_user_edit = ''; $affiliate_user_fields = ''; $affiliate_user_id = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM {$affiliates_users_table} WHERE affiliate_id = %d", intval($affiliate_id))); if ($affiliate_user_id !== null) { $affiliate_user = get_user_by('id', intval($affiliate_user_id)); if ($affiliate_user) { // user edit link if (current_user_can('edit_user', $affiliate_user->ID)) { $affiliate_user_edit = sprintf(__('Edit %s', AFFILIATES_PLUGIN_DOMAIN), '<a target="_blank" href="' . esc_url("user-edit.php?user_id={$affiliate_user->ID}") . '">' . $affiliate_user->user_login . '</a>'); } // user meta fields require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings.php'; require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-registration.php'; $registration_fields = Affiliates_Settings_Registration::get_fields(); // remove fields not stored as user meta foreach (Affiliates_Registration::get_skip_meta_fields() as $key) { unset($registration_fields[$key]); } // render user meta foreach ($registration_fields as $name => $field) { if ($field['enabled']) { $affiliate_user_fields .= '<div class="field">'; $affiliate_user_fields .= '<label>'; $affiliate_user_fields .= esc_html(stripslashes($field['label'])); // @todo i18n $affiliate_user_fields .= ' '; $type = isset($field['type']) ? $field['type'] : 'text'; $value = get_user_meta($affiliate_user->ID, $name, true); $affiliate_user_fields .= sprintf('<input type="text" value="%s" readonly="readonly" />', esc_attr(stripslashes($value))); $affiliate_user_fields .= '</label>'; $affiliate_user_fields .= '</div>'; } } } } $current_url = (is_ssl() ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $current_url = remove_query_arg('action', $current_url); $current_url = remove_query_arg('affiliate_id', $current_url); $name = isset($_POST['name-field']) ? $_POST['name-field'] : $affiliate['name']; $email = isset($_POST['email-field']) ? $_POST['email-field'] : $affiliate['email']; $user_login = isset($_POST['user-field']) ? $_POST['user-field'] : ($affiliate_user != null ? $affiliate_user->user_login : ''); $from_date = isset($_POST['from-date-field']) ? $_POST['from-date-field'] : $affiliate['from_date']; $thru_date = isset($_POST['thru-date-field']) ? $_POST['thru-date-field'] : $affiliate['thru_date']; $output = '<div class="manage-affiliates">' . '<div>' . '<h1>' . __('Edit an affiliate', AFFILIATES_PLUGIN_DOMAIN) . '</h1>' . '</div>' . '<form id="edit-affiliate" action="' . esc_url($current_url) . '" method="post">' . '<div class="affiliate edit">' . '<input id="affiliate-id-field" name="affiliate-id-field" type="hidden" value="' . esc_attr(intval($affiliate_id)) . '"/>' . '<div class="field">' . '<label class="field-label first required">' . '<span class="label">' . __('Name', AFFILIATES_PLUGIN_DOMAIN) . '</span>' . ' ' . '<input id="name-field" name="name-field" class="namefield" type="text" value="' . esc_attr(stripslashes($name)) . '"/>' . '</label>' . '</div>' . '<div class="field">' . '<label class="field-label">' . '<span class="label">' . __('Email', AFFILIATES_PLUGIN_DOMAIN) . '</span>' . ' ' . '<input id="email-field" name="email-field" class="emailfield" type="text" value="' . esc_attr($email) . '"/>' . '</label>' . ' ' . '<span class="description">' . __("If a valid <strong>Username</strong> is specified and no email is given, the user's email address will be used automatically.", AFFILIATES_PLUGIN_DOMAIN) . '</span>' . '</div>' . '<div class="field">' . '<label class="field-label">' . '<span class="label">' . __('Username', AFFILIATES_PLUGIN_DOMAIN) . '</span>' . ' ' . '<input id="user-field" name="user-field" class="userfield" type="text" autocomplete="off" value="' . esc_attr(stripslashes($user_login)) . '"/>' . '</label>' . ' ' . $affiliate_user_edit . '</div>' . $affiliate_user_fields . '<div class="field">' . '<label class="field-label">' . '<span class="label">' . __('From', AFFILIATES_PLUGIN_DOMAIN) . '</span>' . ' ' . '<input id="from-date-field" name="from-date-field" class="datefield" type="text" value="' . esc_attr($from_date) . '"/>' . '</label>' . '</div>' . '<div class="field">' . '<label class="field-label">' . '<span class="label">' . __('Until', AFFILIATES_PLUGIN_DOMAIN) . '</span>' . ' ' . '<input id="thru-date-field" name="thru-date-field" class="datefield" type="text" value="' . esc_attr($thru_date) . '"/>' . '</label>' . '</div>'; $output .= '<div class="field">' . wp_nonce_field('affiliates-edit', AFFILIATES_ADMIN_AFFILIATES_NONCE, true, false) . '<input class="button button-primary" type="submit" value="' . __('Save', AFFILIATES_PLUGIN_DOMAIN) . '"/>' . '<input type="hidden" value="edit" name="action"/>' . ' ' . '<a class="cancel button" href="' . esc_url($current_url) . '">' . __('Cancel', AFFILIATES_PLUGIN_DOMAIN) . '</a>' . '</div>' . '</div>' . '</form>' . '</div>'; // .manage-affiliates echo $output; affiliates_footer(); }