You've already forked joomla_test
							
							
		
			
	
	
		
			247 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			247 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @package     Joomla.Site
							 | 
						||
| 
								 | 
							
								 * @subpackage  com_users
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
							 | 
						||
| 
								 | 
							
								 * @license     GNU General Public License version 2 or later; see LICENSE.txt
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								defined('_JEXEC') or die;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								require_once JPATH_COMPONENT.'/controller.php';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Registration controller class for Users.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @package     Joomla.Site
							 | 
						||
| 
								 | 
							
								 * @subpackage  com_users
							 | 
						||
| 
								 | 
							
								 * @since       1.6
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class UsersControllerUser extends UsersController
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Method to log in a user.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @since   1.6
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function login()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										JSession::checkToken('post') or jexit(JText::_('JInvalid_Token'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										$app = JFactory::getApplication();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Populate the data array:
							 | 
						||
| 
								 | 
							
										$data = array();
							 | 
						||
| 
								 | 
							
										$data['return'] = base64_decode($app->input->post->get('return', '', 'BASE64'));
							 | 
						||
| 
								 | 
							
										$data['username'] = JRequest::getVar('username', '', 'method', 'username');
							 | 
						||
| 
								 | 
							
										$data['password'] = JRequest::getString('password', '', 'post', JREQUEST_ALLOWRAW);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Set the return URL if empty.
							 | 
						||
| 
								 | 
							
										if (empty($data['return']))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											$data['return'] = 'index.php?option=com_users&view=profile';
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Set the return URL in the user state to allow modification by plugins
							 | 
						||
| 
								 | 
							
										$app->setUserState('users.login.form.return', $data['return']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Get the log in options.
							 | 
						||
| 
								 | 
							
										$options = array();
							 | 
						||
| 
								 | 
							
										$options['remember'] = $this->input->getBool('remember', false);
							 | 
						||
| 
								 | 
							
										$options['return'] = $data['return'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Get the log in credentials.
							 | 
						||
| 
								 | 
							
										$credentials = array();
							 | 
						||
| 
								 | 
							
										$credentials['username'] = $data['username'];
							 | 
						||
| 
								 | 
							
										$credentials['password'] = $data['password'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Perform the log in.
							 | 
						||
| 
								 | 
							
										if (true === $app->login($credentials, $options))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Success
							 | 
						||
| 
								 | 
							
											$app->setUserState('users.login.form.data', array());
							 | 
						||
| 
								 | 
							
											$app->redirect(JRoute::_($app->getUserState('users.login.form.return'), false));
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Login failed !
							 | 
						||
| 
								 | 
							
											$data['remember'] = (int) $options['remember'];
							 | 
						||
| 
								 | 
							
											$app->setUserState('users.login.form.data', $data);
							 | 
						||
| 
								 | 
							
											$app->redirect(JRoute::_('index.php?option=com_users&view=login', false));
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Method to log out a user.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @since   1.6
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function logout()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										JSession::checkToken('request') or jexit(JText::_('JInvalid_Token'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										$app = JFactory::getApplication();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Perform the log in.
							 | 
						||
| 
								 | 
							
										$error = $app->logout();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Check if the log out succeeded.
							 | 
						||
| 
								 | 
							
										if (!($error instanceof Exception))
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Get the return url from the request and validate that it is internal.
							 | 
						||
| 
								 | 
							
											$return = JRequest::getVar('return', '', 'method', 'base64');
							 | 
						||
| 
								 | 
							
											$return = base64_decode($return);
							 | 
						||
| 
								 | 
							
											if (!JUri::isInternal($return))
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												$return = '';
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Redirect the user.
							 | 
						||
| 
								 | 
							
											$app->redirect(JRoute::_($return, false));
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											$app->redirect(JRoute::_('index.php?option=com_users&view=login', false));
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Method to register a user.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @since   1.6
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function register()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										JSession::checkToken('post') or jexit(JText::_('JINVALID_TOKEN'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Get the form data.
							 | 
						||
| 
								 | 
							
										$data  = $this->input->post->get('user', array(), 'array');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Get the model and validate the data.
							 | 
						||
| 
								 | 
							
										$model  = $this->getModel('Registration', 'UsersModel');
							 | 
						||
| 
								 | 
							
										$return	= $model->validate($data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Check for errors.
							 | 
						||
| 
								 | 
							
										if ($return === false)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Get the validation messages.
							 | 
						||
| 
								 | 
							
											$app	= &JFactory::getApplication();
							 | 
						||
| 
								 | 
							
											$errors	= $model->getErrors();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Push up to three validation messages out to the user.
							 | 
						||
| 
								 | 
							
											for ($i = 0, $n = count($errors); $i < $n && $i < 3; $i++)
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												if ($errors[$i] instanceof Exception)
							 | 
						||
| 
								 | 
							
												{
							 | 
						||
| 
								 | 
							
													$app->enqueueMessage($errors[$i]->getMessage(), 'notice');
							 | 
						||
| 
								 | 
							
												} else {
							 | 
						||
| 
								 | 
							
													$app->enqueueMessage($errors[$i], 'notice');
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Save the data in the session.
							 | 
						||
| 
								 | 
							
											$app->setUserState('users.registration.form.data', $data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Redirect back to the registration form.
							 | 
						||
| 
								 | 
							
											$this->setRedirect('index.php?option=com_users&view=registration');
							 | 
						||
| 
								 | 
							
											return false;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Finish the registration.
							 | 
						||
| 
								 | 
							
										$return	= $model->register($data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Check for errors.
							 | 
						||
| 
								 | 
							
										if ($return === false)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Save the data in the session.
							 | 
						||
| 
								 | 
							
											$app->setUserState('users.registration.form.data', $data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Redirect back to the registration form.
							 | 
						||
| 
								 | 
							
											$message = JText::sprintf('COM_USERS_REGISTRATION_SAVE_FAILED', $model->getError());
							 | 
						||
| 
								 | 
							
											$this->setRedirect('index.php?option=com_users&view=registration', $message, 'error');
							 | 
						||
| 
								 | 
							
											return false;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Flush the data from the session.
							 | 
						||
| 
								 | 
							
										$app->setUserState('users.registration.form.data', null);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										exit;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Method to login a user.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @since   1.6
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function remind()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										// Check the request token.
							 | 
						||
| 
								 | 
							
										JSession::checkToken('post') or jexit(JText::_('JINVALID_TOKEN'));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										$app   = JFactory::getApplication();
							 | 
						||
| 
								 | 
							
										$model = $this->getModel('User', 'UsersModel');
							 | 
						||
| 
								 | 
							
										$data  = $this->input->post->get('jform', array(), 'array');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Submit the username remind request.
							 | 
						||
| 
								 | 
							
										$return	= $model->processRemindRequest($data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										// Check for a hard error.
							 | 
						||
| 
								 | 
							
										if ($return instanceof Exception)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Get the error message to display.
							 | 
						||
| 
								 | 
							
											if ($app->getCfg('error_reporting'))
							 | 
						||
| 
								 | 
							
											{
							 | 
						||
| 
								 | 
							
												$message = $return->getMessage();
							 | 
						||
| 
								 | 
							
											} else {
							 | 
						||
| 
								 | 
							
												$message = JText::_('COM_USERS_REMIND_REQUEST_ERROR');
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Get the route to the next page.
							 | 
						||
| 
								 | 
							
											$itemid = UsersHelperRoute::getRemindRoute();
							 | 
						||
| 
								 | 
							
											$itemid = $itemid !== null ? '&Itemid='.$itemid : '';
							 | 
						||
| 
								 | 
							
											$route	= 'index.php?option=com_users&view=remind'.$itemid;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Go back to the complete form.
							 | 
						||
| 
								 | 
							
											$this->setRedirect(JRoute::_($route, false), $message, 'error');
							 | 
						||
| 
								 | 
							
											return false;
							 | 
						||
| 
								 | 
							
										} elseif ($return === false)
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Complete failed.
							 | 
						||
| 
								 | 
							
											// Get the route to the next page.
							 | 
						||
| 
								 | 
							
											$itemid = UsersHelperRoute::getRemindRoute();
							 | 
						||
| 
								 | 
							
											$itemid = $itemid !== null ? '&Itemid='.$itemid : '';
							 | 
						||
| 
								 | 
							
											$route	= 'index.php?option=com_users&view=remind'.$itemid;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Go back to the complete form.
							 | 
						||
| 
								 | 
							
											$message = JText::sprintf('COM_USERS_REMIND_REQUEST_FAILED', $model->getError());
							 | 
						||
| 
								 | 
							
											$this->setRedirect(JRoute::_($route, false), $message, 'notice');
							 | 
						||
| 
								 | 
							
											return false;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											// Complete succeeded.
							 | 
						||
| 
								 | 
							
											// Get the route to the next page.
							 | 
						||
| 
								 | 
							
											$itemid = UsersHelperRoute::getLoginRoute();
							 | 
						||
| 
								 | 
							
											$itemid = $itemid !== null ? '&Itemid='.$itemid : '';
							 | 
						||
| 
								 | 
							
											$route	= 'index.php?option=com_users&view=login'.$itemid;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Proceed to the login form.
							 | 
						||
| 
								 | 
							
											$message = JText::_('COM_USERS_REMIND_REQUEST_SUCCESS');
							 | 
						||
| 
								 | 
							
											$this->setRedirect(JRoute::_($route, false), $message);
							 | 
						||
| 
								 | 
							
											return true;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Method to login a user.
							 | 
						||
| 
								 | 
							
									 *
							 | 
						||
| 
								 | 
							
									 * @since   1.6
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function resend()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										// Check for request forgeries
							 | 
						||
| 
								 | 
							
										JSession::checkToken('post') or jexit(JText::_('JINVALID_TOKEN'));
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |