/** 
         * Outputs widget content. Overrides WP_Widget::widget(). Must be overidden by child class.
         * 
         * @param array $args		array of form elements 
         * @param object $instance	widget instance
         */
        public function widget($args, $instance)
        {
            $username = null;
            extract($args);
            // output custom WP widget wrapper
            echo $before_widget;
            // output title based on option input
            $title = apply_filters('widget_title', $instance['title']);
            $customLink = empty($instance['customLink']) ? $this->defaults['customLink'] : $instance['customLink'];
            $customLinkTitle = empty($instance['customLinkTitle']) ? $this->defaults['customLinkTitle'] : $instance['customLinkTitle'];
            $default_tab = empty($instance['defaultTab']) ? $this->defaults['defaultTab'] : $instance['defaultTab'];
            $displayAvatar = empty($instance['displayAvatar']) ? $this->defaults['displayAvatar'] : $instance['displayAvatar'];
            $loginButtonLabel = empty($instance['loginButtonLabel']) ? $this->defaults['loginButtonLabel'] : $instance['loginButtonLabel'];
            $loginTabLabel = empty($instance['loginTabLabel']) ? $this->defaults['loginTabLabel'] : $instance['loginTabLabel'];
            $registerButtonLabel = empty($instance['registerButtonLabel']) ? $this->defaults['registerButtonLabel'] : $instance['registerButtonLabel'];
            $registerTabLabel = empty($instance['registerTabLabel']) ? $this->defaults['registerTabLabel'] : $instance['registerTabLabel'];
            $resetButtonLabel = empty($instance['resetButtonLabel']) ? $this->defaults['resetButtonLabel'] : $instance['resetButtonLabel'];
            $resetTabLabel = empty($instance['resetTabLabel']) ? $this->defaults['resetTabLabel'] : $instance['resetTabLabel'];
            // set default active tab
            $active_tab = $default_tab;
            // output widget title with WP wrapper
            if (!empty($title)) {
                echo $before_title . $title . $after_title;
            }
            // output html
            try {
                ?>
    					<div id="wp-user-control-login-register-password">
    					
    					<?php 
                global $user_ID, $blog_id;
                get_currentuserinfo();
                global $user_login, $user_email;
                // if user is not already logged in...
                if (!$user_ID) {
                    // grab POST variables
                    $login = array_key_exists('login', $_GET) ? trim($_GET['login']) : false;
                    $register = array_key_exists('register', $_GET) ? trim($_GET['register']) : false;
                    $reset = array_key_exists('reset', $_GET) ? trim($_GET['reset']) : false;
                    ?>
	    						<?php 
                    // Output tabs
                    ?>
	    						<ul class="tabs_login">
	    							<li id="login_tab"><a href="#login_div"><?php 
                    echo $loginTabLabel;
                    ?>
</a></li>
	    							<li id="register_tab"><a href="#register_div"><?php 
                    echo $registerTabLabel;
                    ?>
</a></li>
	    							<li id="reset_tab"><a href="#reset_div"><?php 
                    echo $resetTabLabel;
                    ?>
</a></li>
	    						</ul>
	    						<div class="tab_container_login">
	    							<?php 
                    // LOGIN FORM BEGIN
                    ?>
	    							<div id="login_div" class="tab_content_login" style="display:none;">
	    								<?php 
                    // handle user signon failure
                    if ($login == 'failed') {
                        $user_login = array_key_exists('user_login', $_REQUEST) ? trim($_REQUEST['user_login']) : false;
                        $active_tab = 'login';
                        ?>
	    									<p><span class="loginfail">
	    									<?php 
                        _e('Please check your username and password.', 'wp-user-control');
                        ?>
	    									</span></p>
	    									<?php 
                    } else {
                        ?>
	    									<p>
	    									<?php 
                        _e('Enter your username and password below to login.', 'wp-user-control');
                        ?>
	    									</p><?php 
                    }
                    ?>
	    								<form method="post" action="<?php 
                    echo wp_user_control_cleanURI($_SERVER['REQUEST_URI']) . '?wp_uc_login_request=true';
                    ?>
" class="wp-user-form">
	    									<div class="username">
	    										<label for="user_login"><?php 
                    _e('Username', 'wp-user-control');
                    ?>
: </label>
	    										<input type="text" name="user_login" value="<?php 
                    if (!isset($username)) {
                        echo trim(stripslashes($user_login));
                    } else {
                        echo trim(stripslashes($username));
                    }
                    ?>
" id="user_login" tabindex="11" />
	    									</div>
	    									<div class="password">
	    										<label for="user_pass"><?php 
                    _e('Password', 'wp-user-control');
                    ?>
: </label>
	    										<input type="password" name="user_pass" value="" id="user_pass" tabindex="12" />
	    									</div>
	    									<div class="login_fields">
	    										<div class="remember">
	    											<label for="remember">
	    												<input type="checkbox" name="remember" value="forever" checked="checked" id="remember" tabindex="13" />&nbsp;<?php 
                    _e('Remember me', 'wp-user-control');
                    ?>
	    											</label>
	    										</div>
	    										<?php 
                    do_action('login_form');
                    ?>
	    										<input type="submit" name="user-submit" value="<?php 
                    echo $loginButtonLabel;
                    ?>
" tabindex="14" class="user-submit" />
	    										<input type="hidden" name="redirect_to" value="<?php 
                    echo wp_user_control_cleanURI($_SERVER['REQUEST_URI']);
                    ?>
" />
	    										<input type="hidden" name="user-cookie" value="1" />
	    									</div>
	    								</form>
	    							</div>
	    							<?php 
                    // LOGIN FORM END
                    ?>
									<?php 
                    // REGISTRATION FORM BEGIN
                    ?>
	    							<div id="register_div" class="tab_content_login" style="display:none;">
	    								<?php 
                    // if register == true then set register as the active tab
                    if ($register == 'true') {
                        $active_tab = 'register';
                    }
                    // set default for register error to none
                    $register_error = 'none';
                    // first, determine user registration setting for site
                    if (is_multisite()) {
                        // make sure user registration is enabled
                        $active_signup = get_site_option('registration');
                        // if signup option doesn't exist assume everything is enabled (blog and user signup)
                        if (!$active_signup) {
                            $active_signup = 'all';
                        }
                        // determine specifics of what is enabled
                        $active_signup = apply_filters('wpmu_active_signup', $active_signup);
                        // return "all", "none", "blog" or "user"
                        // if registration is enabled, proceed --- "all" or "user"
                        if ($active_signup == 'all' || $active_signup == 'user') {
                            $registrations_disabled = false;
                        } else {
                            $registrations_disabled = true;
                        }
                        // if not multisite, check user registration option for standard install
                    } else {
                        $registrations_disabled = get_option('users_can_register') ? false : true;
                    }
                    // check registration honey pot
                    $reg_pot = array_key_exists('reg_pot', $_REQUEST) ? trim($_REQUEST['reg_pot']) : false;
                    // grab desired user name and email
                    $user_login = array_key_exists('user_login', $_REQUEST) ? trim($_REQUEST['user_login']) : false;
                    $user_email = array_key_exists('user_email', $_REQUEST) ? trim($_REQUEST['user_email']) : false;
                    /**
                     * TODO: implement email validation function to check for valid email address format
                     */
                    if (!empty($reg_pot)) {
                        $register_error = 'honeypot';
                        // reset register flag
                        $register = 'false';
                    } elseif (empty($user_login) && !empty($register) || empty($user_email) && !empty($register)) {
                        $register_error = 'empty_fields';
                        // reset register flag
                        $register = 'false';
                        // make sure user is not already signed in
                    } elseif (is_user_logged_in() && !empty($register)) {
                        // if they are then return an error message and we're done
                        $register_error = 'logged_in';
                        // reset register flag
                        $register = 'false';
                        // if registration has actually been submitted, proceed
                    } elseif ($register) {
                        if (username_exists($user_login)) {
                            $register_error = 'username_exists';
                            // reset register flag
                            $register = 'false';
                            // make sure user email is not already registered
                        } elseif (email_exists($user_email)) {
                            $register_error = 'email_exists';
                            // reset register flag
                            $register = 'false';
                            // check for uppercase
                        } elseif (preg_match("/[A-Z]/", $user_login)) {
                            $register_error = 'uppercase';
                            // reset register flag
                            $register = 'false';
                            // check for spaces
                        } elseif (strpos($user_login, " ") !== false) {
                            $register_error = 'spaces';
                            // reset register flag
                            $register = 'false';
                            // otherwise proceed with registration checks
                        } else {
                            // make sure user registration is enabled
                            if (!$registrations_disabled) {
                                // set flag for successful registration
                                $register = 'true';
                                // generate temp password
                                $temp_password = wp_PluginUtilities::generatePassword();
                                // check for WPMS
                                if (is_multisite()) {
                                    // register user for WPMS
                                    wpmu_create_user($user_login, $temp_password, $user_email);
                                    // get user info after it has been created
                                    if ($user = get_user_by('login', $user_login)) {
                                        // add user to current blog as subscriber
                                        add_user_to_blog($blog_id, $user->id, 'subscriber');
                                    }
                                    // otherwise this is a standard WP install
                                } else {
                                    // register user for WP standard
                                    wp_create_user($user_login, $temp_password, $user_email);
                                }
                                // send user notification email
                                $message = wp_user_control_user_email_msg('new', $temp_password, home_url(), $user_login);
                                // send new user registration email meassage
                                wp_user_control_mail($message, 'New User Registration', $user_email);
                                // otherwise, we're done - return message to WP User Control widget
                            } else {
                                $register_error = 'registration_disabled';
                                // reset register flag
                                $register = 'false';
                            }
                        }
                    }
                    // if registration attempt returned success
                    if ($register == 'true') {
                        ?>
	    									<p><?php 
                        _e('Check your email for the password and then return to log in.', 'wp-user-control');
                        ?>
</p> <?php 
                        // if registration request has not been sent, output initial message
                    } elseif ($register_error == 'none') {
                        ?>
<p><?php 
                        _e('Complete the form below to register.', 'wp-user-control');
                        ?>
</p><?php 
                        // if registration request failed, process error
                    } elseif ($register == 'false') {
                        $registerError = $register_error;
                        // output friendly registration error
                        wp_user_control_output_registration_error($registerError);
                        // other possibility is that user registrations are currently disabled
                    } elseif ($registrations_disabled) {
                        ?>
<p><?php 
                        _e('New registrations currently disabled.', 'wp-user-control');
                        ?>
</p><?php 
                    }
                    ?>
	    								<form method="post" action="<?php 
                    echo wp_user_control_cleanURI($_SERVER['REQUEST_URI']) . '?register=true';
                    ?>
" class="wp-user-form">
	    									<div class="username">
	    										<label for="user_login"><?php 
                    _e('Username', 'wp-user-control');
                    ?>
: </label>
	    										<input type="text" <?php 
                    if ($registrations_disabled) {
                        ?>
 disabled="disabled" <?php 
                    }
                    ?>
 name="user_login" value="<?php 
                    echo stripslashes($user_login);
                    ?>
" id="user_login" tabindex="101" />
	    									</div>
	    									<div class="password">
	    										<label for="user_email"><?php 
                    _e('Email', 'wp-user-control');
                    ?>
: </label>
	    										<input type="text" <?php 
                    if ($registrations_disabled) {
                        ?>
 disabled="disabled" <?php 
                    }
                    ?>
 name="user_email" value="<?php 
                    echo stripslashes($user_email);
                    ?>
" id="user_email" tabindex="102" />
	    									</div>
	    									<div class="reg_pot">
	    										<input type="text" name="reg_pot" value="" alt="if this field is not empty your registration will not be processed" />
	    									</div>
	    									<div class="login_fields">
	    										<?php 
                    do_action('register_form');
                    ?>
	    										<input type="submit" name="user-submit" value="<?php 
                    echo $registerButtonLabel;
                    ?>
" <?php 
                    if ($registrations_disabled) {
                        ?>
 disabled="disabled" <?php 
                    }
                    ?>
 class="user-submit" tabindex="103" />
	    										<input type="hidden" name="redirect_to" value="<?php 
                    echo wp_user_control_cleanURI($_SERVER['REQUEST_URI']);
                    ?>
?register=true" />
	    										<input type="hidden" name="user-cookie" value="1" />
	    									</div>
	    								</form>
	    							</div>
	    							<?php 
                    // REGISTRATION FORM END
                    ?>
	    							<?php 
                    // RESET FORM BEGIN
                    ?>
	    							<div id="reset_div" class="tab_content_login" style="display:none;"><?php 
                    if ($reset == 'true') {
                        $active_tab = 'reset';
                        global $wpdb;
                        $user_email = array_key_exists('user_email', $_POST) ? trim($_POST['user_email']) : null;
                        $user_exists = false;
                        if (!empty($user_email)) {
                            // check for email
                            if (email_exists($user_email)) {
                                $user_exists = true;
                                $reset_user = get_user_by('email', $user_email);
                                // otherwise, user does not exist
                            } else {
                                $error[] = '<p><span class="registerfail">' . __('Email does not exist.', 'wp-user-control') . '</span></p>';
                                $reset = false;
                            }
                        } else {
                            $error[] = '<p><span class="registerfail">' . __('Invalid email. Please try again.', 'wp-user-control') . '</span></p>';
                        }
                        // if user exists, then proceed
                        if ($user_exists) {
                            $user_login = $reset_user->user_login;
                            $user_email = $reset_user->user_email;
                            // generate password
                            $temp_password = wp_PluginUtilities::generatePassword();
                            // insert new password into WP DB
                            wp_update_user(array('ID' => $reset_user->ID, 'user_pass' => $temp_password));
                            // create password reset email message
                            $message = wp_user_control_user_email_msg('reset', $temp_password, home_url(), $user_login);
                            wp_user_control_mail($message, 'Password Reset', $user_email);
                        }
                        // output errors, if appropriate
                        if (isset($error) && count($error) > 0) {
                            foreach ($error as $e) {
                                echo $e;
                            }
                            $reset = false;
                            // otherwise password reset was successful, so output message
                        } else {
                            ?>
	    										<p><?php 
                            _e('Check your email for your new password.', 'wp-user-control');
                            ?>
</p><?php 
                        }
                    } else {
                        ?>
	    									<p><?php 
                        _e('Enter your email address to reset your password.', 'wp-user-control');
                        ?>
</p><?php 
                    }
                    ?>
	    								<form method="post" action="<?php 
                    echo wp_user_control_cleanURI($_SERVER['REQUEST_URI']);
                    ?>
?reset=true" class="wp-user-form">
	    									<div class="username">
	    										<label for="user_email" class="hide"><?php 
                    _e('Email', 'wp-user-control');
                    ?>
: </label>
	    										<input type="text" name="user_email" value="<?php 
                    if (!empty($user_email)) {
                        echo $user_email;
                    }
                    ?>
" id="user_email" tabindex="1001" />
	    									</div>
	    									<div class="login_fields">
	    										<?php 
                    do_action('login_form', 'resetpass');
                    ?>
	    										<input type="submit" name="user-submit" value="<?php 
                    echo $resetButtonLabel;
                    ?>
" class="user-submit" tabindex="1002" />
		    										<input type="hidden" name="user-cookie" value="1" />
		    									</div>
		    								</form>
		    							</div>
		    						</div>
    					<?php 
                    // RESET FORM END
                    ?>
    					<?php 
                    // LOGGED IN USER BEGIN
                    ?>
    					<?php 
                } else {
                    // is logged in
                    // output logged in user control box
                    wp_user_control_logged_in_user($customLink, $customLinkTitle, $displayAvatar);
                }
                ?>
    					<!-- WP User Control Widget JS -->
    					<script type="text/javascript">
						wp_user_control_widget_js( '<?php 
                echo $active_tab;
                ?>
' );
    					</script>
    					<!-- WP User Control Widget JS -->
    				</div>
    				<?php 
            } catch (wp_PluginException $e) {
                echo $e->getError();
            }
            // output custom WP widget wrapper
            echo $after_widget;
        }
Esempio n. 2
0
 /** 
  * Helper function for outputting form fields. 
  * 
  * @args array 		array of field attributes (name, id, class, type, value, onchange,
  * onclick, onload, readonly, size, my_selection) 
  */
 protected function outputFormField($args)
 {
     // explode args array into directly addressable variables
     extract($args);
     // check class, onchange, onclick, onload, and readonly properties
     $class = isset($class) ? 'class="' . $class . '" ' : '';
     $cols = isset($cols) ? 'cols="' . $cols . '" ' : '';
     $multiple = isset($multiple) ? $multiple : '';
     $onchange = isset($onchange) ? 'onchange="' . $onchange . '()" ' : '';
     $onclick = isset($onclick) ? 'onclick="' . $onclick . '()" ' : '';
     $onload = isset($onload) ? 'onload="' . $onload . '()" ' : '';
     $readonly = isset($readonly) ? 'readonly="' . $readonly . '" ' : '';
     $rows = isset($rows) ? 'rows="' . $rows . '" ' : '';
     $size = isset($size) ? 'size="' . $size . '" ' : '';
     $style = isset($style) ? 'style="' . $style . '" ' : '';
     if (isset($value)) {
         if ($type === 'checkbox') {
             // detect check box and set value
             $checked = $value === 'enabled' ? 'checked="checked" ' : '';
             $value = 'value="enabled" ';
         } else {
             $value = 'value="' . $value . '" ';
             $checked = '';
         }
     } else {
         $value = '';
         $checked = '';
     }
     // determine open and close tags based on type
     if ($type === 'dropdown' || $type === 'multi-select') {
         $open_tag = '<p><label for="' . $this->get_field_id($field) . '">' . $label . '</label><select id="';
         $close_tag = '>';
     } else {
         $open_tag = '<p><label for="' . $this->get_field_id($field) . '">' . $label . '</label><input id="';
         $close_tag = ' />';
     }
     // alter name if it is a multi-select for array
     if ($type != 'multi-select') {
         $name = 'name="' . $this->get_field_name($field) . '" ';
     } else {
         $name = 'name="' . $this->get_field_name($field) . '[]" ';
     }
     // output field
     $field = $open_tag . $this->get_field_id($field) . '" ' . $name . $checked . $class . $cols . $multiple . $onchange . $onclick . $onload . $readonly . $rows . $size . $style;
     if ($type != 'multi-select') {
         $field .= ' type="' . $type . '" ';
     }
     $field .= $value . $close_tag;
     echo $field;
     // continue to populate dropdown
     if ($type === 'dropdown' || $type === 'multi-select') {
         // check to make sure selections is an array
         if (is_array($selections)) {
             if (!wp_PluginUtilities::isAssociative($selections)) {
                 foreach ($selections as $key => $item) {
                     if ($type === 'dropdown') {
                         $selected = $my_selection == $item ? 'selected="selected"' : '';
                         echo "<option value='{$item}' {$selected}>{$item}</option>";
                     } else {
                         $selected = '';
                         if (is_array($my_selections)) {
                             foreach ($my_selections as $selection) {
                                 if ($selection === $item) {
                                     $selected = 'selected="selected"';
                                     break;
                                 }
                             }
                         }
                         echo "<option value='{$item}' {$selected}>{$item}</option>";
                     }
                 }
             } else {
                 foreach ($selections as $key => $item) {
                     if ($type === 'dropdown') {
                         $selected = $my_selection == $key ? 'selected="selected"' : '';
                         echo "<option value='{$key}' {$selected}>{$item}</option>";
                     } else {
                         $selected = '';
                         if (is_array($my_selections)) {
                             foreach ($my_selections as $selection) {
                                 if ($selection == $key) {
                                     $selected = 'selected="selected"';
                                     break;
                                 }
                             }
                         }
                         echo "<option value='{$key}' {$selected}>{$item}</option>";
                     }
                 }
             }
         }
         echo "</select>";
     }
     echo "</p>";
 }