/**
  * Widget output
  * 
  * @see WP_Widget::widget()
  */
 function widget($args, $instance)
 {
     if (affiliates_user_is_affiliate()) {
         return;
     }
     extract($args);
     $title = isset($instance['title']) ? apply_filters('widget_title', $instance['title']) : '';
     $widget_id = $args['widget_id'];
     echo $before_widget;
     if (!empty($title)) {
         echo $before_title . $title . $after_title;
     }
     $ext = '-' . $widget_id;
     $options = array('is_widget' => true);
     if (isset($instance['terms_post_id'])) {
         $options['terms_post_id'] = $instance['terms_post_id'];
     }
     echo Affiliates_Registration::render_form($options, $widget_id);
     echo $after_widget;
 }
 /**
  * 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.
 }
 /**
  * URL shortcode - renders the affiliate url.
  *
  * @param array $atts attributes
  * @param string $content (is not used)
  */
 public static function affiliates_url($atts, $content = null)
 {
     global $wpdb;
     $pname = get_option('aff_pname', AFFILIATES_PNAME);
     remove_shortcode('affiliates_url');
     $content = do_shortcode($content);
     add_shortcode('affiliates_url', array(__CLASS__, 'affiliates_url'));
     $output = "";
     $user_id = get_current_user_id();
     if ($user_id && affiliates_user_is_affiliate($user_id)) {
         $affiliates_table = _affiliates_get_tablename('affiliates');
         $affiliates_users_table = _affiliates_get_tablename('affiliates_users');
         if ($affiliate_id = $wpdb->get_var($wpdb->prepare("SELECT {$affiliates_users_table}.affiliate_id FROM {$affiliates_users_table} LEFT JOIN {$affiliates_table} ON {$affiliates_users_table}.affiliate_id = {$affiliates_table}.affiliate_id WHERE {$affiliates_users_table}.user_id = %d AND {$affiliates_table}.status = 'active'", intval($user_id)))) {
             $encoded_affiliate_id = affiliates_encode_affiliate_id($affiliate_id);
             if (strlen($content) == 0) {
                 $base_url = get_bloginfo('url');
             } else {
                 $base_url = $content;
             }
             $separator = '?';
             $url_query = parse_url($base_url, PHP_URL_QUERY);
             if (!empty($url_query)) {
                 $separator = '&';
             }
             $output .= $base_url . $separator . $pname . '=' . $encoded_affiliate_id;
         }
     }
     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;
 }
function affiliate_referrer_info($attr = array(), $content = null)
{
    global $wpdb;
    $affiliate_referrer = 1;
    $active_plugins = get_option('active_plugins', array());
    $affiliates_pro_is_active = in_array('affiliates-pro/affiliates-pro.php', $active_plugins);
    $affiliates_entr_is_active = in_array('affiliates-pro/affiliates-enterprise.php', $active_plugins);
    $options = shortcode_atts(array('direct' => false, 'display' => 'user_login'), $attr);
    extract($options);
    $output = '';
    $user_id = get_current_user_id();
    if ($affiliates_entr_is_active) {
        $relations_table = _affiliates_get_tablename('affiliates_relations');
        if ($user_id && affiliates_user_is_affiliate($user_id)) {
            if ($affiliate_ids = affiliates_get_user_affiliate($user_id)) {
                foreach ($affiliate_ids as $affiliate_id) {
                    if ($affiliate_referrer = $wpdb->get_var($wpdb->prepare("SELECT from_affiliate_id FROM {$relations_table} WHERE to_affiliate_id=%d ", $affiliate_id))) {
                        continue;
                    }
                }
            }
        }
    } else {
        if ($affiliates_pro_is_active) {
            $affiliate_referrers = get_option('affiliate_referrers');
            $relations = count($affiliate_referrers);
            if ($user_id && affiliates_user_is_affiliate($user_id)) {
                if ($affiliate_ids = affiliates_get_user_affiliate($user_id)) {
                    $affiliate_id = $affiliate_ids[0];
                    for ($i = 0; $i <= $relations; $i++) {
                        foreach ($affiliate_referrers[$i] as $key => $value) {
                            if ($affiliate_id == $value) {
                                $affiliate_referrer = $key;
                            }
                        }
                    }
                }
            }
        } else {
            echo "<div class='error'>The <strong>Affiliates Referrer Info</strong> plugin requires on of the Affiliates plugins by <a href='http://itthinx.com'>Itthinx</a> to be installed and activated.</div>";
        }
    }
    if ($user_id = affiliates_get_affiliate_user($affiliate_referrer)) {
        if ($user = get_user_by('id', $user_id)) {
            switch ($display) {
                case 'user_login':
                    $output .= $user->user_login;
                    break;
                case 'user_nicename':
                    $output .= $user->user_nicename;
                    break;
                case 'user_email':
                    $output .= $user->user_email;
                    break;
                case 'user_url':
                    $output .= $user->user_url;
                    break;
                case 'display_name':
                    $output .= $user->display_name;
                    break;
                default:
                    $output .= $user->user_login;
            }
            $output = wp_strip_all_tags($output);
        }
    }
    return $output;
}
 /**
  * Updates an affiliate user.
  *
  * @access private
  * @param array $userdata
  * @return int|WP_Error Either user's ID or error on failure.
  */
 public static function update_affiliate_user($user_id, $userdata)
 {
     global $wpdb, $affiliates_update_affiliate_user;
     if (!isset($affiliates_update_affiliate_user)) {
         $affiliates_update_affiliate_user = true;
     } else {
         return;
     }
     $errors = new WP_Error();
     if (($user = get_user_by('id', $user_id)) && affiliates_user_is_affiliate($user_id)) {
         $new_password = false;
         $user_email = apply_filters('user_registration_email', $userdata['user_email']);
         // Check the e-mail address
         if ($user_email == '') {
             $errors->add('empty_email', __('<strong>ERROR</strong>: Please type your e-mail address.', AFFILIATES_PLUGIN_DOMAIN));
         } elseif (!is_email($user_email)) {
             $errors->add('invalid_email', __('<strong>ERROR</strong>: The email address isn&#8217;t correct.', AFFILIATES_PLUGIN_DOMAIN));
             $user_email = '';
         } elseif ($other_user_id = email_exists($user_email)) {
             if ($other_user_id != $user_id) {
                 $errors->add('email_exists', __('<strong>ERROR</strong>: This email is already registered, please choose another one.', AFFILIATES_PLUGIN_DOMAIN));
             }
         }
         if ($errors->get_error_code()) {
             return $errors;
         }
         $userdata['first_name'] = sanitize_text_field($userdata['first_name']);
         $userdata['last_name'] = sanitize_text_field($userdata['last_name']);
         $userdata['user_email'] = $user_email;
         if (!empty($userdata['user_url'])) {
             $userdata['user_url'] = esc_url_raw($userdata['user_url']);
             $userdata['user_url'] = preg_match('/^(https?|ftps?|mailto|news|irc|gopher|nntp|feed|telnet):/is', $userdata['user_url']) ? $userdata['user_url'] : 'http://' . $userdata['user_url'];
         }
         // update affiliate user and affiliate entry
         $_userdata = array('ID' => $user_id, 'first_name' => esc_sql($userdata['first_name']), 'last_name' => esc_sql($userdata['last_name']), 'user_email' => esc_sql($userdata['user_email']));
         if (!empty($userdata['password'])) {
             // Don't pass the new password through wp_update_user as we risk
             // sending headers again when wp_update_user() clears the cookies while
             // the new password is set. Instead, we set the new password here and
             // only update the other user data below.
             $new_password = true;
             wp_set_password($userdata['password'], $user_id);
         }
         if (isset($userdata['user_url'])) {
             $_userdata['user_url'] = esc_sql($userdata['user_url']);
         }
         // update user and affiliate entry
         $user_id = wp_update_user($_userdata);
         // if WP_Error it's returned below
         if (!is_wp_error($user_id)) {
             // add user meta from remaining fields
             foreach ($userdata as $meta_key => $meta_value) {
                 if (!key_exists($meta_key, $_userdata) && !in_array($meta_key, self::$skip_meta_fields)) {
                     update_user_meta($user_id, $meta_key, maybe_unserialize($meta_value));
                 }
             }
             // update affiliate entry
             $affiliate_ids = affiliates_get_user_affiliate($user_id);
             if ($affiliate_id = array_shift($affiliate_ids)) {
                 $affiliates_table = _affiliates_get_tablename('affiliates');
                 $query = $wpdb->prepare("UPDATE {$affiliates_table} SET name = %s, email = %s WHERE affiliate_id = %d", $_userdata['first_name'] . ' ' . $_userdata['last_name'], $_userdata['user_email'], intval($affiliate_id));
                 if ($wpdb->query($query)) {
                     do_action('affiliates_updated_affiliate', $affiliate_id);
                 }
             }
             // @todo headers already sent notices with WC when password is changed ... for example
             // wp_woocommerce_session_... cookie cannot be set - headers already sent by .../wp-content/themes/twentytwelve/header.php on line 13 in .../wp-content/plugins/woocommerce/includes/wc-core-functions.php on line 469
             // below doesn't solve this and we don't want to force logout/login on password change anyway
             // 				if ( $new_password ) {
             // 					$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
             // 					wp_redirect( wp_login_url( $current_url ) );
             // 					exit;
             // 				}
         }
     }
     return $user_id;
 }
 /**
  * Fields:
  * 
  * - first_name
  * - last_name
  * - user_login
  * - email
  * - url
  * 
  * first name + last name => affiliate name
  * 
  * Form options :
  * - terms_post_id
  * - redirect_to
  * - is_widget
  * 
  * @param array $options form options
  * @return string rendered registration form
  */
 static function render_form($options = array())
 {
     $output = '';
     $ext = '';
     // currently not relevant
     if ($is_logged_in = is_user_logged_in()) {
         $user = wp_get_current_user();
         // sanitize_user_object is deprecated in WP 3.3 beta3
         //$user       = sanitize_user_object( $user );
         $first_name = $user->first_name;
         $first_name = sanitize_user_field('first_name', $first_name, $user->ID, 'display');
         $last_name = $user->last_name;
         $last_name = sanitize_user_field('last_name', $last_name, $user->ID, 'display');
         $user_login = $user->user_login;
         $user_login = sanitize_user_field('user_login', $user_login, $user->ID, 'display');
         $email = $user->user_email;
         $email = sanitize_user_field('email', $email, $user->ID, 'display');
         $url = $user->user_url;
         $url = sanitize_user_field('user_url', $url, $user->ID, 'display');
     } else {
         $user = null;
     }
     if ($is_affiliate = affiliates_user_is_affiliate()) {
         $output .= '<div class="affiliates-registration registered">';
         $output .= '<p>';
         $output .= __('You are already registered as an affiliate.', AFFILIATES_PLUGIN_DOMAIN);
         $output .= '</p>';
         if (isset($options['registered_profile_link_url'])) {
             $output .= '<p>';
             $output .= '<a href="' . esc_url($options['registered_profile_link_url']) . '">';
             if (isset($options['registered_profile_link_text'])) {
                 $output .= wp_filter_kses($options['registered_profile_link_text']);
             } else {
                 $output .= __('Access your profile', AFFILIATES_PLUGIN_DOMAIN);
             }
             $output .= '</a>';
             $output .= '</p>';
         }
         $output .= '</div>';
         return $output;
     }
     if (!get_option('aff_registration', get_option('users_can_register', false))) {
         $output .= '<p>' . __('Registration is currently closed.', AFFILIATES_PLUGIN_DOMAIN) . '</p>';
         return $output;
     }
     $method = 'post';
     $action = "";
     $submit_name = 'affiliates-registration-submit';
     $nonce = 'affiliates-registration-nonce';
     $nonce_action = 'affiliates-registration';
     $send = false;
     $first_name_class = ' class="required" ';
     $last_name_class = ' class="required" ';
     $user_login_class = ' class="required" ';
     $email_class = ' class="required" ';
     $url_class = '';
     if (isset($options['terms_post_id'])) {
         $terms_post = get_post($options['terms_post_id']);
         if ($terms_post) {
             $terms_post_link = '<a target="_blank" href="' . esc_url(get_permalink($terms_post->ID)) . '">' . get_the_title($terms_post->ID) . '</a>';
             $terms = sprintf(__('By signing up, you indicate that you have read and agree to the %s.', AFFILIATES_PLUGIN_DOMAIN), $terms_post_link);
         }
     }
     $captcha = '';
     $error = false;
     if (!empty($_POST[$submit_name])) {
         if (!wp_verify_nonce($_POST[$nonce], $nonce_action)) {
             $error = true;
             // fail but don't give clues
         }
         $captcha = $_POST[Affiliates_Utility::get_captcha_field_id()];
         if (!Affiliates_Utility::captcha_validates($captcha)) {
             $error = true;
             // dumbot
         }
         if (!$is_logged_in) {
             $first_name = isset($_POST['first_name']) ? Affiliates_Utility::filter($_POST['first_name']) : '';
             $last_name = isset($_POST['last_name']) ? Affiliates_Utility::filter($_POST['last_name']) : '';
             $user_login = isset($_POST['user_login']) ? Affiliates_Utility::filter($_POST['user_login']) : '';
             $email = isset($_POST['email']) ? Affiliates_Utility::filter($_POST['email']) : '';
             $url = isset($_POST['url']) ? Affiliates_Utility::filter($_POST['url']) : '';
         } else {
             $first_name = $user->first_name;
             $last_name = $user->last_name;
             $user_login = $user->user_login;
             $email = $user->user_email;
             $url = $user->user_url;
         }
         if (empty($first_name)) {
             $first_name_class = ' class="required missing" ';
             $error = true;
         }
         if (empty($last_name)) {
             $last_name_class = ' class="required missing" ';
             $error = true;
         }
         if (empty($user_login)) {
             $user_login_class = ' class="required missing" ';
             $error = true;
         }
         if (empty($email) || !is_email($email)) {
             $email_class = ' class="required missing" ';
             $error = true;
         }
         $error = apply_filters('affiliates_registration_error_validate', $error);
         if (!$error) {
             $userdata = array('first_name' => $first_name, 'last_name' => $last_name, 'user_login' => $user_login, 'email' => $email, 'user_url' => $url);
             // don't try to create a new user on multiple renderings
             global $affiliate_user_id, $new_affiliate_registered;
             if (!isset($affiliate_user_id)) {
                 if (!$is_logged_in) {
                     // allow plugins to be aware of new user account being created
                     do_action('affiliates_before_register_affiliate', $userdata);
                     // create the affiliate user account
                     $affiliate_user_id = self::register_affiliate($userdata);
                     $new_affiliate_registered = true;
                     do_action('affiliates_after_register_affiliate', $userdata);
                 } else {
                     $affiliate_user_id = $user->ID;
                     $new_affiliate_registered = true;
                 }
             }
             // register as affiliate
             if (!is_wp_error($affiliate_user_id)) {
                 // add affiliate entry
                 $send = true;
                 if ($new_affiliate_registered) {
                     $affiliate_id = self::store_affiliate($affiliate_user_id, $userdata);
                     do_action('affiliates_stored_affiliate', $affiliate_id, $affiliate_user_id);
                 }
                 $is_widget = isset($options['is_widget']) && ($options['is_widget'] === true || $options['is_widget'] == 'true');
                 $redirect = isset($options['redirect']) && ($options['redirect'] === true || $options['redirect'] == 'true');
                 $redirect_url = empty($_REQUEST['redirect_to']) ? get_home_url(get_current_blog_id(), 'wp-login.php?checkemail=confirm') : $_REQUEST['redirect_to'];
                 if ($redirect && !$is_widget && !headers_sent()) {
                     wp_safe_redirect($redirect_url);
                     exit;
                 } else {
                     $output .= '<p>' . __('Thanks for signing up!', AFFILIATES_PLUGIN_DOMAIN) . '</p>';
                     if (!$is_logged_in) {
                         $output .= '<p>' . __('Please check your email for the confirmation link.', AFFILIATES_PLUGIN_DOMAIN) . '</p>';
                         if ($redirect && !$is_widget) {
                             $output .= '<script type="text/javascript">window.location="' . esc_url($redirect_url) . '";</script>';
                         } else {
                             $output .= '<p>' . sprintf(__('Log in <a href="%s">here</a>.', AFFILIATES_PLUGIN_DOMAIN), get_home_url(get_current_blog_id(), 'wp-login.php?checkemail=confirm')) . '</p>';
                         }
                     } else {
                         if (isset($options['registered_profile_link_url'])) {
                             $output .= '<p>';
                             $output .= '<a href="' . esc_url($options['registered_profile_link_url']) . '">';
                             if (isset($options['registered_profile_link_text'])) {
                                 $output .= wp_filter_kses($options['registered_profile_link_text']);
                             } else {
                                 $output .= __('Access your profile', AFFILIATES_PLUGIN_DOMAIN);
                             }
                             $output .= '</a>';
                             $output .= '</p>';
                         }
                     }
                 }
             } else {
                 $error = true;
                 $wp_error = $affiliate_user_id;
                 if ($wp_error->get_error_code()) {
                     $errors = '';
                     $messages = '';
                     foreach ($wp_error->get_error_codes() as $code) {
                         switch ($code) {
                             case 'empty_username':
                             case 'invalid_username':
                             case 'username_exists':
                                 $user_login_class = ' class="required missing" ';
                                 break;
                             case 'empty_email':
                             case 'invalid_email':
                             case 'email_exists':
                                 $email_class = ' class="required missing" ';
                                 break;
                         }
                         $severity = $wp_error->get_error_data($code);
                         foreach ($wp_error->get_error_messages($code) as $error) {
                             if ('message' == $severity) {
                                 $messages .= '	' . $error . "<br />\n";
                             } else {
                                 $errors .= '	' . $error . "<br />\n";
                             }
                         }
                     }
                     if (!empty($errors)) {
                         echo '<div id="login_error">' . apply_filters('login_errors', $errors) . "</div>\n";
                     }
                     if (!empty($messages)) {
                         echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n";
                     }
                 }
             }
         }
     } else {
         if (!$is_logged_in) {
             $first_name = '';
             $last_name = '';
             $user_login = '';
             $email = '';
             $url = '';
         }
     }
     if (!$send) {
         $output .= '<div class="affiliates-registration" id="affiliates-registration' . $ext . '">';
         $output .= '<img id="affiliates-registration-throbber' . $ext . '" src="' . AFFILIATES_PLUGIN_URL . 'images/affiliates-throbber.gif" style="display:none" />';
         $output .= '<form id="affiliates-registration-form' . $ext . '" action="' . $action . '" method="' . $method . '">';
         $output .= '<div>';
         $field_disabled = "";
         if ($is_logged_in) {
             $field_disabled = ' disabled="disabled" ';
             if (empty($first_name) || empty($last_name)) {
                 $output .= '<p>';
                 $output .= sprintf(__('<p>Please fill in the required information in your <a href="%s">profile</a> first.</p>'), esc_url(admin_url("profile.php")));
                 $output .= '</p>';
             }
         }
         $output .= apply_filters('affiliates_registration_before_fields', '');
         $output .= '<label ' . $first_name_class . ' id="affiliates-registration-form' . $ext . '-first-name-label" for="first_name">' . __('First Name', AFFILIATES_PLUGIN_DOMAIN) . '</label>';
         $output .= '<input ' . $field_disabled . ' id="affiliates-registration-form' . $ext . '-first-name" name="first_name" type="text" value="' . esc_attr($first_name) . '"/>';
         $output .= '<label ' . $last_name_class . ' id="affiliates-registration-form' . $ext . '-last-name-label" for="last_name">' . __('Last Name', AFFILIATES_PLUGIN_DOMAIN) . '</label>';
         $output .= '<input ' . $field_disabled . ' id="affiliates-registration-form' . $ext . '-last-name" name="last_name" type="text" value="' . esc_attr($last_name) . '"/>';
         $output .= '<label ' . $user_login_class . ' id="affiliates-registration-form' . $ext . '-user-login-label" for="user_login">' . __('Username', AFFILIATES_PLUGIN_DOMAIN) . '</label>';
         $output .= '<input ' . $field_disabled . ' id="affiliates-registration-form' . $ext . '-user-login" name="user_login" type="text" value="' . esc_attr($user_login) . '"/>';
         $output .= '<label ' . $email_class . ' id="affiliates-registration-form' . $ext . '-email-label" for="email">' . __('Email', AFFILIATES_PLUGIN_DOMAIN) . '</label>';
         $output .= '<input ' . $field_disabled . ' id="affiliates-registration-form' . $ext . '-email" name="email" type="text" value="' . esc_attr($email) . '"/>';
         $output .= '<label ' . $url_class . ' id="affiliates-registration-form' . $ext . '-url-label" for="url">' . __('Website', AFFILIATES_PLUGIN_DOMAIN) . '</label>';
         $output .= '<input ' . $field_disabled . ' id="affiliates-registration-form' . $ext . '-url" name="url" type="text" value="' . esc_attr($url) . '"/>';
         $output .= apply_filters('affiliates_registration_after_fields', '');
         if (isset($terms)) {
             $output .= '<p class="terms">' . $terms . '</p>';
         }
         $output .= Affiliates_Utility::captcha_get($captcha);
         $output .= wp_nonce_field($nonce_action, $nonce, true, false);
         if (isset($options['redirect_to'])) {
             $output .= '<input type="hidden" name="redirect_to" value="' . esc_url($options['redirect_to']) . '" />';
         }
         $output .= '<input type="submit" name="' . $submit_name . '" value="' . self::$submit_button_label . '" />';
         $output .= '</div>';
         $output .= '</form>';
         $output .= '</div>';
     }
     return $output;
 }