/**
  * 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.
 }
 /**
  * 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;
 }
 /**
  * Settings initialization.
  */
 public static function init()
 {
     add_action('admin_init', array(__CLASS__, 'admin_init'));
     self::$default_fields = array('first_name' => array('obligatory' => false, 'enabled' => true, 'label' => __('First Name', AFFILIATES_PLUGIN_DOMAIN), 'required' => true, 'is_default' => true, 'type' => 'text'), 'last_name' => array('obligatory' => false, 'enabled' => true, 'label' => __('Last Name', AFFILIATES_PLUGIN_DOMAIN), 'required' => true, 'is_default' => true, 'type' => 'text'), 'user_login' => array('obligatory' => false, 'enabled' => true, 'label' => __('Username', AFFILIATES_PLUGIN_DOMAIN), 'required' => true, 'is_default' => true, 'type' => 'text'), 'user_email' => array('obligatory' => true, 'enabled' => true, 'label' => __('Email', AFFILIATES_PLUGIN_DOMAIN), 'required' => true, 'is_default' => true, 'type' => 'text'), 'user_url' => array('obligatory' => false, 'enabled' => true, 'label' => __('Website', AFFILIATES_PLUGIN_DOMAIN), 'required' => false, 'is_default' => true, 'type' => 'text'), 'password' => array('obligatory' => false, 'enabled' => false, 'label' => __('Password', AFFILIATES_PLUGIN_DOMAIN), 'required' => false, 'is_default' => true, 'type' => 'password'));
 }
 /**
  * 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;
 }
/**
 * 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();
}
 /**
  * Settings admin section.
  */
 public static function admin_settings()
 {
     global $wp, $wpdb, $affiliates_options, $wp_roles;
     if (!current_user_can(AFFILIATES_ADMINISTER_OPTIONS)) {
         wp_die(__('Access denied.', AFFILIATES_PLUGIN_DOMAIN));
     }
     wp_enqueue_style('affiliates-admin-settings');
     wp_enqueue_script('affiliates-field-choice');
     self::init_sections();
     $section = isset($_REQUEST['section']) ? $_REQUEST['section'] : null;
     if (!key_exists($section, self::$sections)) {
         $section = 'general';
     }
     $section_title = self::$sections[$section];
     echo '<h1>' . __('Settings', AFFILIATES_PLUGIN_DOMAIN) . '</h1>';
     $section_links = array();
     foreach (self::$sections as $sec => $title) {
         $section_links[] = sprintf('<a class="section-link %s" href="%s">%s</a>', $section == $sec ? 'active' : '', esc_url(add_query_arg('section', $sec, admin_url('admin.php?page=affiliates-admin-settings'))), $title);
     }
     echo '<div class="section-links">';
     echo implode(' | ', $section_links);
     echo '</div>';
     echo '<h2>' . $section_title . '</h2>';
     switch ($section) {
         case 'integrations':
             require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-integrations.php';
             Affiliates_Settings_Integrations::section();
             break;
         case 'pages':
             require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-pages.php';
             Affiliates_Settings_Pages::section();
             break;
         case 'referrals':
             require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-referrals.php';
             Affiliates_Settings_Referrals::section();
             break;
         case 'registration':
             require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-registration.php';
             Affiliates_Settings_Registration::section();
             break;
         case 'general':
             require_once AFFILIATES_CORE_LIB . '/class-affiliates-settings-general.php';
             Affiliates_Settings_General::section();
             break;
         default:
             do_action('affiliates_settings_section', $section);
     }
 }