You've already forked joomla_test
							
							
		
			
	
	
		
			357 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			357 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | /** | ||
|  |  * @package    Joomla.Administrator | ||
|  |  * | ||
|  |  * @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; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Joomla! Application class | ||
|  |  * | ||
|  |  * Provide many supporting API functions | ||
|  |  * | ||
|  |  * @final | ||
|  |  * @package  Joomla.Administrator | ||
|  |  * @since    1.5 | ||
|  |  */ | ||
|  | class JAdministrator extends JApplication | ||
|  | { | ||
|  | 	/** | ||
|  | 	 * Class constructor | ||
|  | 	 * | ||
|  | 	 * @param   array  An optional associative array of configuration settings. | ||
|  | 	 *                 Recognized key values include 'clientId' (this list is not meant to be comprehensive). | ||
|  | 	 * | ||
|  | 	 * @since   1.5 | ||
|  | 	 */ | ||
|  | 	public function __construct($config = array()) | ||
|  | 	{ | ||
|  | 		$config['clientId'] = 1; | ||
|  | 		parent::__construct($config); | ||
|  | 
 | ||
|  | 		//Set the root in the URI based on the application name
 | ||
|  | 		JUri::root(null, str_ireplace('/' . $this->getName(), '', JUri::base(true))); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Initialise the application. | ||
|  | 	 * | ||
|  | 	 * @param   array  $options    An optional associative array of configuration settings. | ||
|  | 	 * | ||
|  | 	 * @return  void | ||
|  | 	 * @since   1.5 | ||
|  | 	 */ | ||
|  | 	public function initialise($options = array()) | ||
|  | 	{ | ||
|  | 		$config = JFactory::getConfig(); | ||
|  | 		$user = JFactory::getUser(); | ||
|  | 
 | ||
|  | 		// If the user is a guest we populate it with the guest user group.
 | ||
|  | 		if ($user->guest) | ||
|  | 		{ | ||
|  | 			$guestUsergroup = JComponentHelper::getParams('com_users')->get('guest_usergroup', 1); | ||
|  | 			$user->groups = array($guestUsergroup); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// if a language was specified it has priority
 | ||
|  | 		// otherwise use user or default language settings
 | ||
|  | 		if (empty($options['language'])) | ||
|  | 		{ | ||
|  | 			$lang = $user->getParam('admin_language'); | ||
|  | 
 | ||
|  | 			// Make sure that the user's language exists
 | ||
|  | 			if ($lang && JLanguage::exists($lang)) | ||
|  | 			{ | ||
|  | 				$options['language'] = $lang; | ||
|  | 			} | ||
|  | 			else | ||
|  | 			{ | ||
|  | 				$params = JComponentHelper::getParams('com_languages'); | ||
|  | 				$client = JApplicationHelper::getClientInfo($this->getClientId()); | ||
|  | 				$options['language'] = $params->get($client->name, $config->get('language', 'en-GB')); | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// One last check to make sure we have something
 | ||
|  | 		if (!JLanguage::exists($options['language'])) | ||
|  | 		{ | ||
|  | 			$lang = $config->get('language', 'en-GB'); | ||
|  | 			if (JLanguage::exists($lang)) | ||
|  | 			{ | ||
|  | 				$options['language'] = $lang; | ||
|  | 			} | ||
|  | 			else | ||
|  | 			{ | ||
|  | 				$options['language'] = 'en-GB'; // as a last ditch fail to english
 | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// Execute the parent initialise method.
 | ||
|  | 		parent::initialise($options); | ||
|  | 
 | ||
|  | 		// Load Library language
 | ||
|  | 		$lang = JFactory::getLanguage(); | ||
|  | 		$lang->load('lib_joomla', JPATH_ADMINISTRATOR); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Route the application | ||
|  | 	 * | ||
|  | 	 * @return  void | ||
|  | 	 * @since   1.5 | ||
|  | 	 */ | ||
|  | 	public function route() | ||
|  | 	{ | ||
|  | 		$uri = JUri::getInstance(); | ||
|  | 
 | ||
|  | 		if ($this->getCfg('force_ssl') >= 1 && strtolower($uri->getScheme()) != 'https') | ||
|  | 		{ | ||
|  | 			//forward to https
 | ||
|  | 			$uri->setScheme('https'); | ||
|  | 			$this->redirect((string) $uri); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// Trigger the onAfterRoute event.
 | ||
|  | 		JPluginHelper::importPlugin('system'); | ||
|  | 		$this->triggerEvent('onAfterRoute'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Return a reference to the JRouter object. | ||
|  | 	 * | ||
|  | 	 * @return  JRouter | ||
|  | 	 * @since   1.5 | ||
|  | 	 */ | ||
|  | 	static public function getRouter($name = null, array $options = array()) | ||
|  | 	{ | ||
|  | 		$router = parent::getRouter('administrator'); | ||
|  | 		return $router; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Dispatch the application | ||
|  | 	 * | ||
|  | 	 * @param   string    $component    The component to dispatch. | ||
|  | 	 * | ||
|  | 	 * @return  void | ||
|  | 	 * @since   1.5 | ||
|  | 	 */ | ||
|  | 	public function dispatch($component = null) | ||
|  | 	{ | ||
|  | 		if ($component === null) | ||
|  | 		{ | ||
|  | 			$component = JAdministratorHelper::findOption(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		$document = JFactory::getDocument(); | ||
|  | 
 | ||
|  | 		switch ($document->getType()) | ||
|  | 		{ | ||
|  | 			case 'html': | ||
|  | 				$document->setMetaData('keywords', $this->getCfg('MetaKeys')); | ||
|  | 				break; | ||
|  | 
 | ||
|  | 			default: | ||
|  | 				break; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		$document->setTitle($this->getCfg('sitename') . ' - ' . JText::_('JADMINISTRATION')); | ||
|  | 		$document->setDescription($this->getCfg('MetaDesc')); | ||
|  | 		$document->setGenerator('Joomla! - Open Source Content Management'); | ||
|  | 
 | ||
|  | 		$contents = JComponentHelper::renderComponent($component); | ||
|  | 		$document->setBuffer($contents, 'component'); | ||
|  | 
 | ||
|  | 		// Trigger the onAfterDispatch event.
 | ||
|  | 		JPluginHelper::importPlugin('system'); | ||
|  | 		$this->triggerEvent('onAfterDispatch'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Display the application. | ||
|  | 	 * | ||
|  | 	 * @return  void | ||
|  | 	 * @since   1.5 | ||
|  | 	 */ | ||
|  | 	public function render() | ||
|  | 	{ | ||
|  | 		$component = $this->input->get('option', 'com_login'); | ||
|  | 		$template = $this->getTemplate(true); | ||
|  | 		$file = $this->input->get('tmpl', 'index'); | ||
|  | 
 | ||
|  | 		if ($component == 'com_login') | ||
|  | 		{ | ||
|  | 			$file = 'login'; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// Safety check for when configuration.php root_user is in use.
 | ||
|  | 		$config = JFactory::getConfig(); | ||
|  | 		$rootUser = $config->get('root_user'); | ||
|  | 		if (property_exists('JConfig', 'root_user') | ||
|  | 			&& (JFactory::getUser()->get('username') == $rootUser || JFactory::getUser()->id === (string) $rootUser) | ||
|  | 		) | ||
|  | 		{ | ||
|  | 			JError::raiseNotice(200, JText::sprintf('JWARNING_REMOVE_ROOT_USER', 'index.php?option=com_config&task=application.removeroot&' . JSession::getFormToken() . '=1')); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		$params = array( | ||
|  | 			'template' => $template->template, | ||
|  | 			'file' => $file . '.php', | ||
|  | 			'directory' => JPATH_THEMES, | ||
|  | 			'params' => $template->params | ||
|  | 		); | ||
|  | 
 | ||
|  | 		$document = JFactory::getDocument(); | ||
|  | 		$document->parse($params); | ||
|  | 		$this->triggerEvent('onBeforeRender'); | ||
|  | 		$data = $document->render(false, $params); | ||
|  | 		JResponse::setBody($data); | ||
|  | 		$this->triggerEvent('onAfterRender'); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Login authentication function
 | ||
|  | 	 * | ||
|  | 	 * @param   array  Array('username' => string, 'password' => string) | ||
|  | 	 * @param   array  Array('remember' => boolean) | ||
|  | 	 * | ||
|  | 	 * @return  boolean True on success. | ||
|  | 	 * @see     JApplication::login | ||
|  | 	 * @since   1.5 | ||
|  | 	 */ | ||
|  | 	public function login($credentials, $options = array()) | ||
|  | 	{ | ||
|  | 		//The minimum group
 | ||
|  | 		$options['group'] = 'Public Backend'; | ||
|  | 
 | ||
|  | 		//Make sure users are not autoregistered
 | ||
|  | 		$options['autoregister'] = false; | ||
|  | 
 | ||
|  | 		//Set the application login entry point
 | ||
|  | 		if (!array_key_exists('entry_url', $options)) | ||
|  | 		{ | ||
|  | 			$options['entry_url'] = JUri::base() . 'index.php?option=com_users&task=login'; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// Set the access control action to check.
 | ||
|  | 		$options['action'] = 'core.login.admin'; | ||
|  | 
 | ||
|  | 		$result = parent::login($credentials, $options); | ||
|  | 
 | ||
|  | 		if (!($result instanceof Exception)) | ||
|  | 		{ | ||
|  | 			$lang = $this->input->get('lang'); | ||
|  | 			$lang = preg_replace('/[^A-Z-]/i', '', $lang); | ||
|  | 			$this->setUserState('application.lang', $lang); | ||
|  | 
 | ||
|  | 			self::purgeMessages(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $result; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Get the template | ||
|  | 	 * | ||
|  | 	 * @return  string    The template name | ||
|  | 	 * @since   1.0 | ||
|  | 	 */ | ||
|  | 	public function getTemplate($params = false) | ||
|  | 	{ | ||
|  | 		static $template; | ||
|  | 
 | ||
|  | 		if (!isset($template)) | ||
|  | 		{ | ||
|  | 			$admin_style = JFactory::getUser()->getParam('admin_style'); | ||
|  | 			// Load the template name from the database
 | ||
|  | 			$db = JFactory::getDbo(); | ||
|  | 			$query = $db->getQuery(true) | ||
|  | 				->select('template, s.params') | ||
|  | 				->from('#__template_styles as s') | ||
|  | 				->join('LEFT', '#__extensions as e ON e.type=' . $db->quote('template') . ' AND e.element=s.template AND e.client_id=s.client_id'); | ||
|  | 			if ($admin_style) | ||
|  | 			{ | ||
|  | 				$query->where('s.client_id = 1 AND id = ' . (int) $admin_style . ' AND e.enabled = 1', 'OR'); | ||
|  | 			} | ||
|  | 			$query->where('s.client_id = 1 AND home = ' . $db->quote('1'), 'OR') | ||
|  | 				->order('home'); | ||
|  | 			$db->setQuery($query); | ||
|  | 			$template = $db->loadObject(); | ||
|  | 
 | ||
|  | 			$template->template = JFilterInput::getInstance()->clean($template->template, 'cmd'); | ||
|  | 			$template->params = new JRegistry($template->params); | ||
|  | 
 | ||
|  | 			if (!file_exists(JPATH_THEMES . '/' . $template->template . '/index.php')) | ||
|  | 			{ | ||
|  | 				$this->enqueueMessage(JText::_('JERROR_ALERTNOTEMPLATE'), 'error'); | ||
|  | 				$template->params = new JRegistry; | ||
|  | 				$template->template = 'isis'; | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (!file_exists(JPATH_THEMES . '/' . $template->template . '/index.php')) | ||
|  | 		{ | ||
|  | 			throw new InvalidArgumentException(JText::sprintf('JERROR_COULD_NOT_FIND_TEMPLATE', $template->template)); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if ($params) | ||
|  | 		{ | ||
|  | 			return $template; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $template->template; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Purge the jos_messages table of old messages | ||
|  | 	 * | ||
|  | 	 * @return  void | ||
|  | 	 * @since   1.5 | ||
|  | 	 */ | ||
|  | 	public static function purgeMessages() | ||
|  | 	{ | ||
|  | 		$db = JFactory::getDbo(); | ||
|  | 		$user = JFactory::getUser(); | ||
|  | 
 | ||
|  | 		$userid = $user->get('id'); | ||
|  | 
 | ||
|  | 		$query = 'SELECT *' | ||
|  | 			. ' FROM #__messages_cfg' | ||
|  | 			. ' WHERE user_id = ' . (int) $userid | ||
|  | 			. ' AND cfg_name = ' . $db->quote('auto_purge'); | ||
|  | 
 | ||
|  | 		$db->setQuery($query); | ||
|  | 		$config = $db->loadObject(); | ||
|  | 
 | ||
|  | 		// check if auto_purge value set
 | ||
|  | 		if (is_object($config) and $config->cfg_name == 'auto_purge') | ||
|  | 		{ | ||
|  | 			$purge = $config->cfg_value; | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			// if no value set, default is 7 days
 | ||
|  | 			$purge = 7; | ||
|  | 		} | ||
|  | 		// calculation of past date
 | ||
|  | 
 | ||
|  | 		// if purge value is not 0, then allow purging of old messages
 | ||
|  | 		if ($purge > 0) | ||
|  | 		{ | ||
|  | 			// purge old messages at day set in message configuration
 | ||
|  | 			$past = JFactory::getDate(time() - $purge * 86400); | ||
|  | 			$pastStamp = $past->toSql(); | ||
|  | 
 | ||
|  | 			$query = 'DELETE FROM #__messages' | ||
|  | 				. ' WHERE date_time < ' . $db->quote($pastStamp) | ||
|  | 				. ' AND user_id_to = ' . (int) $userid; | ||
|  | 
 | ||
|  | 			$db->setQuery($query); | ||
|  | 			$db->execute(); | ||
|  | 		} | ||
|  | 	} | ||
|  | } |