⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 installer.php

📁 简介:一款免费开源的内容管理系统(CMS)
💻 PHP
📖 第 1 页 / 共 3 页
字号:
<?php/** * @version		$Id: installer.php 10381 2008-06-01 03:35:53Z pasamio $ * @package		Joomla.Framework * @subpackage	Installer * @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. */// Check to ensure this file is within the rest of the frameworkdefined('JPATH_BASE') or die();jimport('joomla.filesystem.file');jimport('joomla.filesystem.folder');jimport('joomla.filesystem.archive');jimport('joomla.filesystem.path');/** * Joomla base installer class * * @author		Louis Landry <louis.landry@joomla.org> * @package		Joomla.Framework * @subpackage	Installer * @since		1.5 */class JInstaller extends JObject{	/**	 * Array of paths needed by the installer	 * @var array	 */	var $_paths = array();	/**	 * The installation manifest XML object	 * @var object	 */	var $_manifest = null;	/**	 * True if existing files can be overwritten	 * @var boolean	 */	var $_overwrite = false;	/**	 * A database connector object	 * @var object	 */	var $_db = null;	/**	 * Associative array of package installer handlers	 * @var array	 */	var $_adapters = array();	/**	 * Stack of installation steps	 * 	- Used for installation rollback	 * @var array	 */	var $_stepStack = array();	/**	 * The output from the install/uninstall scripts	 * @var string	 */	var $message = null;	/**	 * Constructor	 *	 * @access protected	 */	function __construct()	{		$this->_db =& JFactory::getDBO();	}	/**	 * Returns a reference to the global Installer object, only creating it	 * if it doesn't already exist.	 *	 * @static	 * @return	object	An installer object	 * @since 1.5	 */	function &getInstance()	{		static $instance;		if (!isset ($instance)) {			$instance = new JInstaller();		}		return $instance;	}	/**	 * Get the allow overwrite switch	 *	 * @access	public	 * @return	boolean	Allow overwrite switch	 * @since	1.5	 */	function getOverwrite()	{		return $this->_overwrite;	}	/**	 * Set the allow overwrite switch	 *	 * @access	public	 * @param	boolean	$state	Overwrite switch state	 * @return	boolean	Previous value	 * @since	1.5	 */	function setOverwrite($state=false)	{		$tmp = $this->_overwrite;		if ($state) {			$this->_overwrite = true;		} else {			$this->_overwrite = false;		}		return $tmp;	}	/**	 * Get the database connector object	 *	 * @access	public	 * @return	object	Database connector object	 * @since	1.5	 */	function &getDBO()	{		return $this->_db;	}	/**	 * Get the installation manifest object	 *	 * @access	public	 * @return	object	Manifest object	 * @since	1.5	 */	function &getManifest()	{		if (!is_object($this->_manifest)) {			$this->_findManifest();		}		return $this->_manifest;	}	/**	 * Get an installer path by name	 *	 * @access	public	 * @param	string	$name		Path name	 * @param	string	$default	Default value	 * @return	string	Path	 * @since	1.5	 */	function getPath($name, $default=null)	{		return (!empty($this->_paths[$name])) ? $this->_paths[$name] : $default;	}	/**	 * Sets an installer path by name	 *	 * @access	public	 * @param	string	$name	Path name	 * @param	string	$value	Path	 * @return	void	 * @since	1.5	 */	function setPath($name, $value)	{		$this->_paths[$name] = $value;	}	/**	 * Pushes a step onto the installer stack for rolling back steps	 *	 * @access	public	 * @param	array	$step	Installer step	 * @return	void	 * @since	1.5	 */	function pushStep($step)	{		$this->_stepStack[] = $step;	}	/**	 * Set an installer adapter by name	 *	 * @access	public	 * @param	string	$name		Adapter name	 * @param	object	$adapter	Installer adapter object	 * @return	boolean True if successful	 * @since	1.5	 */	function setAdapter($name, $adapter = null)	{		if (!is_object($adapter))		{			// Try to load the adapter object			require_once(dirname(__FILE__).DS.'adapters'.DS.strtolower($name).'.php');			$class = 'JInstaller'.ucfirst($name);			if (!class_exists($class)) {				return false;			}			$adapter = new $class($this);			$adapter->parent =& $this;		}		$this->_adapters[$name] =& $adapter;		return true;	}	/**	 * Installation abort method	 *	 * @access	public	 * @param	string	$msg	Abort message from the installer	 * @param	string	$type	Package type if defined	 * @return	boolean	True if successful	 * @since	1.5	 */	function abort($msg=null, $type=null)	{		// Initialize variables		$retval = true;		$step = array_pop($this->_stepStack);		// Raise abort warning		if ($msg) {			JError::raiseWarning(100, $msg);		}		while ($step != null)		{			switch ($step['type'])			{				case 'file' :					// remove the file					$stepval = JFile::delete($step['path']);					break;				case 'folder' :					// remove the folder					$stepval = JFolder::delete($step['path']);					break;				case 'query' :					// placeholder in case this is necessary in the future					break;				default :					if ($type && is_object($this->_adapters[$type])) {						// Build the name of the custom rollback method for the type						$method = '_rollback_'.$step['type'];						// Custom rollback method handler						if (method_exists($this->_adapters[$type], $method)) {							$stepval = $this->_adapters[$type]->$method($step);						}					}					break;			}			// Only set the return value if it is false			if ($stepval === false) {				$retval = false;			}			// Get the next step and continue			$step = array_pop($this->_stepStack);		}		return $retval;	}	/**	 * Package installation method	 *	 * @access	public	 * @param	string	$path	Path to package source folder	 * @return	boolean	True if successful	 * @since	1.5	 */	function install($path=null)	{		if ($path && JFolder::exists($path)) {			$this->setPath('source', $path);		} else {			$this->abort(JText::_('Install path does not exist'));			return false;		}		if (!$this->setupInstall()) {			$this->abort(JText::_('Unable to detect manifest file'));			return false;		}		/*		 * LEGACY CHECK		 */		$root		=& $this->_manifest->document;		$version	= $root->attributes('version');		$rootName	= $root->name();		$config		= &JFactory::getConfig();		if ((version_compare($version, '1.5', '<') || $rootName == 'mosinstall') && !$config->getValue('config.legacy')) {			$this->abort(JText::_('MUSTENABLELEGACY'));			return false;		}		$type = $root->attributes('type');		// Needed for legacy reasons ... to be deprecated in next minor release		if ($type == 'mambot') {			$type = 'plugin';		}		if (is_object($this->_adapters[$type])) {			return $this->_adapters[$type]->install();		}		return false;	}	/**	 * Package update method	 *	 * @access	public	 * @param	string	$path	Path to package source folder	 * @return	boolean	True if successful	 * @since	1.5	 */	function update($path=null)	{		if ($path && JFolder::exists($path)) {			$this->setPath('source', $path);		} else {			$this->abort(JText::_('Update path does not exist'));		}		if (!$this->setupInstall()) {			return $this->abort(JText::_('Unable to detect manifest file'));		}		/*		 * LEGACY CHECK		 */		$root		=& $this->_manifest->document;		$version	= $root->attributes('version');		$rootName	= $root->name();		$config		= &JFactory::getConfig();		if ((version_compare($version, '1.5', '<') || $rootName == 'mosinstall') && !$config->getValue('config.legacy')) {			return $this->abort(JText::_('MUSTENABLELEGACY'));		}		$type = $root->attributes('type');		// Needed for legacy reasons ... to be deprecated in next minor release		if ($type == 'mambot') {			$type = 'plugin';		}		if (is_object($this->_adapters[$type])) {			return $this->_adapters[$type]->update();		}		return false;	}	/**	 * Package uninstallation method	 *	 * @access	public	 * @param	string	$type	Package type	 * @param	mixed	$identifier	Package identifier for adapter	 * @param	int		$cid	Application ID	 * @return	boolean	True if successful	 * @since	1.5	 */	function uninstall($type, $identifier, $cid=0)	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -