<?php
/**
* @version		$Id: legacy.php 10066 2008-02-26 04:20:57Z ian $
* @package		Joomla
* @copyright	Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
* @license		GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.plugin.plugin' );

/**
 * Joomla! Debug plugin
 *
 * @author		Johan Janssens <johan.janssens@joomla.org>
 * @package		Joomla
 * @subpackage	System
 */
class  plgSystemLegacy extends JPlugin
{
	/**
	 * Constructor
	 *
	 * For php4 compatability we must not use the __constructor as a constructor for plugins
	 * because func_get_args ( void ) returns a copy of all passed arguments NOT references.
	 * This causes problems with cross-referencing necessary for the observer design pattern.
	 *
	 * @param	object		$subject The object to observe
	  * @param 	array  		$config  An array that holds the plugin configuration
	 * @since	1.0
	 */
	function plgSystemLegacy(& $subject, $config)
	{
		parent::__construct($subject, $config);

		global $mainframe;

		// Define the 1.0 legacy mode constant
		define('_JLEGACY', '1.0');

		// Set global configuration var for legacy mode
		$config = &JFactory::getConfig();
		$config->setValue('config.legacy', 1);

		// Import library dependencies
		require_once(dirname(__FILE__).DS.'legacy'.DS.'classes.php');
		require_once(dirname(__FILE__).DS.'legacy'.DS.'functions.php');

		// Register legacy classes for autoloading
		JLoader::register('mosAdminMenus'   , dirname(__FILE__).DS.'legacy'.DS.'adminmenus.php');
		JLoader::register('mosCache'        , dirname(__FILE__).DS.'legacy'.DS.'cache.php');
		JLoader::register('mosCategory'     , dirname(__FILE__).DS.'legacy'.DS.'category.php');
		JLoader::register('mosCommonHTML'   , dirname(__FILE__).DS.'legacy'.DS.'commonhtml.php');
		JLoader::register('mosComponent'    , dirname(__FILE__).DS.'legacy'.DS.'component.php');
		JLoader::register('mosContent'      , dirname(__FILE__).DS.'legacy'.DS.'content.php');
		JLoader::register('mosDBTable'      , dirname(__FILE__).DS.'legacy'.DS.'dbtable.php');
		JLoader::register('mosHTML'         , dirname(__FILE__).DS.'legacy'.DS.'html.php');
		JLoader::register('mosInstaller'    , dirname(__FILE__).DS.'legacy'.DS.'installer.php');
		JLoader::register('mosMainFrame'    , dirname(__FILE__).DS.'legacy'.DS.'mainframe.php');
		JLoader::register('mosMambot'       , dirname(__FILE__).DS.'legacy'.DS.'mambot.php');
		JLoader::register('mosMambotHandler', dirname(__FILE__).DS.'legacy'.DS.'mambothandler.php');
		JLoader::register('mosMenu'         , dirname(__FILE__).DS.'legacy'.DS.'menu.php');
		JLoader::register('mosMenuBar'      , dirname(__FILE__).DS.'legacy'.DS.'menubar.php');
		JLoader::register('mosModule'       , dirname(__FILE__).DS.'legacy'.DS.'module.php');
		//JLoader::register('mosPageNav'    , dirname(__FILE__).DS.'legacy'.DS.'pagination.php');
		JLoader::register('mosParameters'   , dirname(__FILE__).DS.'legacy'.DS.'parameters.php');
		JLoader::register('patFactory'      , dirname(__FILE__).DS.'legacy'.DS.'patfactory.php');
		JLoader::register('mosProfiler'     , dirname(__FILE__).DS.'legacy'.DS.'profiler.php');
		JLoader::register('mosSection'      , dirname(__FILE__).DS.'legacy'.DS.'section.php');
		JLoader::register('mosSession'      , dirname(__FILE__).DS.'legacy'.DS.'session.php');
		JLoader::register('mosToolbar'      , dirname(__FILE__).DS.'legacy'.DS.'toolbar.php');
		JLoader::register('mosUser'         , dirname(__FILE__).DS.'legacy'.DS.'user.php');

		// Register class for the database, depends on which db type has been selected for use
		$dbtype	= $config->getValue('config.dbtype', 'mysql');
		JLoader::register('database'        , dirname(__FILE__).DS.'legacy'.DS.$dbtype.'.php');

		/**
		 * Legacy define, _ISO define not used anymore. All output is forced as utf-8.
		 * @deprecated	As of version 1.5
		 */
		define('_ISO','charset=utf-8');

		/**
		 * Legacy constant, use _JEXEC instead
		 * @deprecated	As of version 1.5
		 */
		define( '_VALID_MOS', 1 );

		/**
		 * Legacy constant, use _JEXEC instead
		 * @deprecated	As of version 1.5
		 */
		define( '_MOS_MAMBO_INCLUDED', 1 );

		/**
		 * Legacy constant, use DATE_FORMAT_LC instead
		 * @deprecated	As of version 1.5
		 */
		DEFINE('_DATE_FORMAT_LC', JText::_('DATE_FORMAT_LC1') ); //Uses PHP's strftime Command Format

		/**
		 * Legacy constant, use DATE_FORMAT_LC2 instead
		 * @deprecated	As of version 1.5
		 */
		DEFINE('_DATE_FORMAT_LC2', JText::_('DATE_FORMAT_LC2'));

		/**
		 * Legacy constant, use JFilterInput instead
		 * @deprecated	As of version 1.5
		 */
		DEFINE( "_MOS_NOTRIM", 0x0001 );

		/**
		 * Legacy constant, use JFilterInput instead
		 * @deprecated	As of version 1.5
		 */
		DEFINE( "_MOS_ALLOWHTML", 0x0002 );

		/**
		 * Legacy constant, use JFilterInput instead
		 * @deprecated	As of version 1.5
		 */
		DEFINE( "_MOS_ALLOWRAW", 0x0004 );

		/**
		 * Legacy global, use JVersion->getLongVersion() instead
		 * @name $_VERSION
		 * @deprecated	As of version 1.5
		 */
		 $GLOBALS['_VERSION']	= new JVersion();
		 $version				= $GLOBALS['_VERSION']->getLongVersion();

		/**
		 * Legacy global, use JFactory::getDBO() instead
		 * @name $database
		 * @deprecated	As of version 1.5
		 */
		$conf =& JFactory::getConfig();
		$GLOBALS['database'] = new database($conf->getValue('config.host'), $conf->getValue('config.user'), $conf->getValue('config.password'), $conf->getValue('config.db'), $conf->getValue('config.dbprefix'));
		$GLOBALS['database']->debug($conf->getValue('config.debug'));

		/**
		 * Legacy global, use JFactory::getUser() [JUser object] instead
		 * @name $my
		 * @deprecated	As of version 1.5
		 */
		$user	=& JFactory::getUser();

		$GLOBALS['my']      = (object)$user->getProperties();
		$GLOBALS['my']->gid	= $user->get('aid', 0);

		/**
		 * Insert configuration values into global scope (for backwards compatibility)
		 * @deprecated	As of version 1.5
		 */

		$temp = new JConfig;
		foreach (get_object_vars($temp) as $k => $v) {
			$name = 'mosConfig_'.$k;
			$GLOBALS[$name] = $v;
		}

		$GLOBALS['mosConfig_live_site']		= substr_replace(JURI::root(), '', -1, 1);
		$GLOBALS['mosConfig_absolute_path']	= JPATH_SITE;
		$GLOBALS['mosConfig_cachepath']	= JPATH_BASE.DS.'cache';

		$GLOBALS['mosConfig_offset_user']	= 0;

		$lang =& JFactory::getLanguage();
		$GLOBALS['mosConfig_lang']          = $lang->getBackwardLang();

		$config->setValue('config.live_site', 		$GLOBALS['mosConfig_live_site']);
		$config->setValue('config.absolute_path', 	$GLOBALS['mosConfig_absolute_path']);
		$config->setValue('config.lang', 			$GLOBALS['mosConfig_lang']);

		/**
		 * Legacy global, use JFactory::getUser() instead
		 * @name $acl
		 * @deprecated	As of version 1.5
		 */
		$acl =& JFactory::getACL();

		// Legacy ACL's for backward compat
		$acl->addACL( 'administration', 'edit', 'users', 'super administrator', 'components', 'all' );
		$acl->addACL( 'administration', 'edit', 'users', 'administrator', 'components', 'all' );
		$acl->addACL( 'administration', 'edit', 'users', 'super administrator', 'user properties', 'block_user' );
		$acl->addACL( 'administration', 'manage', 'users', 'super administrator', 'components', 'com_users' );
		$acl->addACL( 'administration', 'manage', 'users', 'administrator', 'components', 'com_users' );
		$acl->addACL( 'administration', 'config', 'users', 'super administrator' );
		//$acl->addACL( 'administration', 'config', 'users', 'administrator' );

		$acl->addACL( 'action', 'add', 'users', 'author', 'content', 'all' );
		$acl->addACL( 'action', 'add', 'users', 'editor', 'content', 'all' );
		$acl->addACL( 'action', 'add', 'users', 'publisher', 'content', 'all' );
		$acl->addACL( 'action', 'edit', 'users', 'author', 'content', 'own' );
		$acl->addACL( 'action', 'edit', 'users', 'editor', 'content', 'all' );
		$acl->addACL( 'action', 'edit', 'users', 'publisher', 'content', 'all' );
		$acl->addACL( 'action', 'publish', 'users', 'publisher', 'content', 'all' );

		$acl->addACL( 'action', 'add', 'users', 'manager', 'content', 'all' );
		$acl->addACL( 'action', 'edit', 'users', 'manager', 'content', 'all' );
		$acl->addACL( 'action', 'publish', 'users', 'manager', 'content', 'all' );

		$acl->addACL( 'action', 'add', 'users', 'administrator', 'content', 'all' );
		$acl->addACL( 'action', 'edit', 'users', 'administrator', 'content', 'all' );
		$acl->addACL( 'action', 'publish', 'users', 'administrator', 'content', 'all' );

		$acl->addACL( 'action', 'add', 'users', 'super administrator', 'content', 'all' );
		$acl->addACL( 'action', 'edit', 'users', 'super administrator', 'content', 'all' );
		$acl->addACL( 'action', 'publish', 'users', 'super administrator', 'content', 'all' );

		$acl->addACL( 'com_syndicate', 'manage', 'users', 'super administrator' );
		$acl->addACL( 'com_syndicate', 'manage', 'users', 'administrator' );
		$acl->addACL( 'com_syndicate', 'manage', 'users', 'manager' );

		$GLOBALS['acl'] =& $acl;

		/**
		 * Legacy global
		 * @name $task
		 * @deprecated	As of version 1.5
		 */
		$GLOBALS['task'] = JRequest::getString('task');

		/**
		 * Load the site language file (the old way - to be deprecated)
		 * @deprecated	As of version 1.5
		 */
		global $mosConfig_lang;
		$mosConfig_lang = JFilterInput::clean($mosConfig_lang, 'cmd');
		$file = JPATH_SITE.DS.'language'.DS.$mosConfig_lang.'.php';
		if (file_exists( $file )) {
			require_once( $file);
		} else {
			$file = JPATH_SITE.DS.'language'.DS.'english.php';
			if (file_exists( $file )) {
				require_once( $file );
			}
		}

		/**
		 *  Legacy global
		 * 	use JApplicaiton->registerEvent and JApplication->triggerEvent for event handling
		 *  use JPlugingHelper::importPlugin to load bot code
		 *  @deprecated As of version 1.5
		 */
		$GLOBALS['_MAMBOTS'] = new mosMambotHandler();
	}

	function onAfterRoute()
	{
		global $mainframe;
		if ($mainframe->isAdmin()) {
			return;
		}

		switch(JRequest::getCmd('option'))
		{
			case 'com_content'   :
				$this->routeContent();
				break;
			case 'com_newsfeeds' :
				$this->routeNewsfeeds();
				break;
			case 'com_weblinks' :
				$this->routeWeblinks();
				break;
			case 'com_frontpage' :
				JRequest::setVar('option', 'com_content');
				JRequest::setVar('view', 'frontpage');
				break;
			case 'com_login'     :
				JRequest::setVar('option', 'com_user');
				JRequest::setVar('view', 'login');
				break;
			case 'com_registration'     :
				JRequest::setVar('option', 'com_user');
				JRequest::setVar('view', 'register');
				break;
 		}

		/**
		 * Legacy global, use JApplication::getTemplate() instead
		 * @name $cur_template
		 * @deprecated	As of version 1.5
		 */
		$GLOBALS['cur_template'] = $mainframe->getTemplate();
	}

	function routeContent()
	{
		$viewName	= JRequest::getCmd( 'view', 'article' );
		$layout		= JRequest::getCmd( 'layout', 'default' );

		// interceptors to support legacy urls
		switch( JRequest::getCmd('task'))
		{
			//index.php?option=com_content&task=x&id=x&Itemid=x
			case 'blogsection':
				$viewName	= 'section';
				$layout = 'blog';
				break;
			case 'section':
				$viewName	= 'section';
				break;
			case 'category':
				$viewName	= 'category';
				break;
			case 'blogcategory':
				$viewName	= 'category';
				$layout = 'blog';
				break;
			case 'archivesection':
			case 'archivecategory':
				$viewName	= 'archive';
				break;
			case 'frontpage' :
				$viewName = 'frontpage';
				break;
			case 'view':
				$viewName	= 'article';
				break;
		}

		JRequest::setVar('layout', $layout);
		JRequest::setVar('view', $viewName);
	}

	function routeNewsfeeds()
	{
		$viewName = JRequest::getCmd( 'view', 'categories' );

		// interceptors to support legacy urls
		switch( JRequest::getCmd('task'))
		{
			//index.php?option=com_newsfeeds&task=x&catid=xid=x&Itemid=x
			case 'view':
				$viewName	= 'newsfeed';
				break;

			default:
			{
				if(JRequest::getInt('catid') && !JRequest::getCmd('view')) {
					$viewName = 'category';
				}
			}
		}

		JRequest::setVar('view', $viewName);
	}

	function routeWeblinks()
	{
		$viewName = JRequest::getCmd( 'view', 'categories' );

		// interceptors to support legacy urls
		switch( JRequest::getCmd('task'))
		{
			//index.php?option=com_weblinks&task=x&catid=xid=x
			case 'view':
				$viewName	= 'weblink';
				break;

			default:
			{
				if(($catid = JRequest::getInt('catid')) && !JRequest::getCmd('view')) {
					$viewName = 'category';
					JRequest::setVar('id', $catid);
				}
			}
		}

		JRequest::setVar('view', $viewName);
	}
}