component.class.php

来自「mambo的cms源代码」· PHP 代码 · 共 340 行

PHP
340
字号
<?php/*** @version $Id: component.class.php,v 1.6 2005/01/23 22:10:43 eddieajau Exp $* @package Mambo* @subpackage Installer* @copyright (C) 2000 - 2005 Miro International Pty Ltd* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL* Mambo is Free Software*//** ensure this file is being included by a parent file */defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );/*** Component installer* @package Mambo* @subpackage Installer*/class mosInstallerComponent extends mosInstaller {	var $i_componentadmindir = "";	var $i_hasinstallfile = false;	var $i_installfile = "";	function componentAdminDir($p_dirname = null) {		if(!is_null($p_dirname)) {			$this->i_componentadmindir = mosPathName($p_dirname);		}		return $this->i_componentadmindir;	}	/**	* Custom install method	* @param boolean True if installing from directory	*/	function install($p_fromdir = null) {		global $mosConfig_absolute_path,$database;		if (!$this->preInstallCheck( $p_fromdir, 'component' )) {			return false;		}		// aje moved down to here. ??  seemed to be some referencing problems		$xml = $this->xmlDoc();		// Set some vars		$e = &$xml->getElementsByPath('name', 1);		$this->elementName($e->getText());		$this->elementDir( mosPathName( $mosConfig_absolute_path . "/components/"			. strtolower("com_" . str_replace(" ","",$this->elementName())) . "/" )		);		$this->componentAdminDir( mosPathName( $mosConfig_absolute_path . "/administrator/components/"			. strtolower( "com_" . str_replace( " ","",$this->elementName() ) ) )		);    if (file_exists($this->elementDir())) {      $this->setError( 1, 'Another component is already using directory: "' . $this->elementDir() . '"' );			return false;    }		if(!file_exists($this->elementDir()) && !mosMakePath($this->elementDir())) {			$this->setError( 1, 'Failed to create directory "' . $this->elementDir() . '"' );			return false;		}		if(!file_exists($this->componentAdminDir()) && !mosMakePath($this->componentAdminDir())) {			$this->setError( 1, 'Failed to create directory "' . $this->componentAdminDir() . '"' );			return false;		}		// Find files to copy		if ($this->parseFiles( 'files' ) === false) {		    return false;		}		$this->parseFiles( 'images' );		$this->parseFiles( 'administration/files','','',1 );		$this->parseFiles( 'administration/images','','',1 );		// Are there any SQL queries??		$query_element = &$xml->getElementsByPath('install/queries', 1);		if (!is_null($query_element)) {			$queries = $query_element->childNodes;			foreach($queries as $query)			{				$database->setQuery( $query->getText());				if (!$database->query())				{					$this->setError( 1, "SQL Error " . $database->stderr( true ) );					return false;				}			}		}		// Is there an installfile		$installfile_elemet = &$xml->getElementsByPath('installfile', 1);		if (!is_null($installfile_elemet)) {	        // check if parse files has already copied the install.component.php file (error in 3rd party xml's!)	        if (!file_exists($this->componentAdminDir().$installfile_elemet->getText())) {	            if(!$this->copyFiles($this->installDir(), $this->componentAdminDir(), array($installfile_elemet->getText())))  			{	                $this->setError( 1, 'Could not copy PHP install file.' );	                return false;	            }	        }	        $this->hasInstallfile(true);	        $this->installFile($installfile_elemet->getText());		}		// Is there an uninstallfile		$uninstallfile_elemet = &$xml->getElementsByPath('uninstallfile',1);	    if(!is_null($uninstallfile_elemet)) {	        if (!file_exists($this->componentAdminDir().$uninstallfile_elemet->getText())) {	            if(!$this->copyFiles($this->installDir(), $this->componentAdminDir(), array($uninstallfile_elemet->getText()))) {	                $this->setError( 1, 'Could not copy PHP uninstall file' );	                return false;	            }	        }	    }		// Is the menues ?		$adminmenu_element = &$xml->getElementsByPath('administration/menu',1);		if(!is_null($adminmenu_element))		{			$adminsubmenu_element	= &$xml->getElementsByPath('administration/submenu',1);			$com_name				= strtolower("com_" . str_replace(" ","",$this->elementName()));			$com_admin_menuname		= $adminmenu_element->getText();			if(!is_null($adminsubmenu_element))			{				$com_admin_menu_id	= $this->createParentMenu($com_admin_menuname,$com_name);				if($com_admin_menu_id === false)				{					return false;				}				$com_admin_submenus = $adminsubmenu_element->childNodes;				$submenuordering = 0;				foreach($com_admin_submenus as $admin_submenu)				{					$com = new mosComponent( $database );					$com->name		= $admin_submenu->getText();					$com->link		= '';					$com->menuid	= 0;					$com->parent	= $com_admin_menu_id;					$com->iscore	= 0;					if ( $admin_submenu->getAttribute("act"))					{						$com->admin_menu_link = "option=$com_name&act=" . $admin_submenu->getAttribute("act");					}					else if ($admin_submenu->getAttribute("task"))					{						$com->admin_menu_link = "option=$com_name&task=" . $admin_submenu->getAttribute("task");					}					else if ($admin_submenu->getAttribute("link"))					{						$com->admin_menu_link = $admin_submenu->getAttribute("link");					}					else					{						$com->admin_menu_link = "option=$com_name";					}					$com->admin_menu_alt = $admin_submenu->getText();					$com->option = $com_name;					$com->ordering = $submenuordering++;					$com->admin_menu_img = "js/ThemeOffice/component.png";					if (!$com->store())					{						$this->setError( 1, $database->stderr( true ) );						return false;					}				}			}			else			{				$this->createParentMenu($com_admin_menuname,$com_name);			}		}		$desc= '';		if ($e = &$xml->getElementsByPath( 'description', 1 )) {			$desc = $this->elementName() . '<p>' . $e->getText() . '</p>';		}		$this->setError( 0, $desc );		if ($this->hasInstallfile()) {			if (is_file($this->componentAdminDir() . '/' . $this->installFile())) {				require_once($this->componentAdminDir() . "/" . $this->installFile());				$ret = com_install();				if ($ret != '') {					$this->setError( 0, $desc . $ret );				}			}		}		return $this->copySetupFile();	}	function createParentMenu($_menuname,$_comname, $_image = "js/ThemeOffice/component.png") {		global $database;		$db_name		= $_menuname;		$db_link		= "option=$_comname";		$db_menuid		= 0;		$db_parent		= 0;		$db_admin_menu_link	= "option=$_comname";		$db_admin_menu_alt	= $_menuname;		$db_option		= $_comname;		$db_ordering		= 0;		$db_admin_menu_img	= $_image;		$db_iscore		= 0;		$db_params		= '';		$sql = "INSERT INTO #__components ";		$sql .=" VALUES('','$db_name','$db_link','$db_menuid','$db_parent','$db_admin_menu_link','$db_admin_menu_alt','$db_option','$db_ordering','$db_admin_menu_img',$db_iscore,'')";		$database->setQuery($sql);		if(!$database->query())		{			$this->setError( 1, $database->stderr( true ) );			return false;		}		$menuid = $database->insertid();		return $menuid;	}	/**	* Custom install method	* @param int The id of the module	* @param string The URL option	* @param int The client id	*/	function uninstall( $cid, $option, $client=0 ) {		global $database,$mosConfig_absolute_path;		$uninstallret = "";		$sql = "SELECT * FROM #__components WHERE id=$cid";		$database->setQuery($sql);		$row = null;		if (!$database->loadObject( $row )) {			HTML_installer::showInstallMessage($database->stderr(true),'Uninstall -  error',				$this->returnTo( $option, 'component', $client ) );			exit();		}		if ($row->iscore) {			HTML_installer::showInstallMessage("Component $row->name is a core component, and can not be uninstalled.<br />You need to unpublish it if you don't want to use it", 'Uninstall -  error',				$this->returnTo( $option, 'component', $client ) );			exit();		}		// Delete entries in the DB		$sql = "DELETE FROM #__components WHERE parent=$row->id";		$database->setQuery($sql);		if (!$database->query()) {			HTML_installer::showInstallMessage($database->stderr(true),'Uninstall -  error',				$this->returnTo( $option, 'component', $client ) );			exit();		}		$sql = "DELETE FROM #__components WHERE id=$row->id";		$database->setQuery($sql);		if (!$database->query()) {			HTML_installer::showInstallMessage($database->stderr(true),'Uninstall -  error',				$this->returnTo( $option, 'component', $client ) );			exit();		}		// Try to find the uninstall file		$filesindir = mosReadDirectory( $mosConfig_absolute_path.'/administrator/components/'.$row->option, 'uninstall' );		if (count( $filesindir ) > 0) {			$uninstall_file = $filesindir[0];			if(file_exists($mosConfig_absolute_path.'/administrator/components/'.$row->option .'/'.$uninstall_file))			{				require_once($mosConfig_absolute_path.'/administrator/components/'.$row->option .'/'.$uninstall_file );				$uninstallret = com_uninstall();			}		}		// Try to find the XML file		$filesindir = mosReadDirectory( mosPathName( $mosConfig_absolute_path.'/administrator/components/'.$row->option ), '.xml$');		if (count($filesindir) > 0) {			$ismosinstall = false;			foreach ($filesindir as $file) {				$xmlDoc =& new DOMIT_Lite_Document();				$xmlDoc->resolveErrors( true );				if (!$xmlDoc->loadXML( $mosConfig_absolute_path."/administrator/components/".$row->option . "/" . $file, false, true )) {					return false;				}				$element = &$xmlDoc->documentElement;				if ($element->getTagName() != 'mosinstall') {					HTML_installer::showInstallMessage('XML File invalid','Uninstall -  error',						$this->returnTo( $option, 'component', $client ) );					exit();				}				$query_element = &$xmlDoc->getElementsbyPath( 'uninstall/queries', 1 );				if(!is_null($query_element))				{					$queries = $query_element->childNodes;					foreach($queries as $query)					{						$database->setQuery( $query->getText());						if (!$database->query())						{							HTML_installer::showInstallMessage($database->stderr(true),'Uninstall -  error',								$this->returnTo( $option, 'component', $client ) );							exit();						}					}				}			}		} else {		    /*			HTML_installer::showInstallMessage( 'Could not find XML Setup file in '.$mosConfig_absolute_path.'/administrator/components/'.$row->option,				'Uninstall -  error', $option, 'component' );			exit();			*/		}		// Delete directories		if (trim( $row->option )) {		    $result = 0;		    $path = mosPathName( $mosConfig_absolute_path.'/administrator/components/' . $row->option );		    if (is_dir( $path )) {		        $result |= deldir( $path );			}		    $path = mosPathName( $mosConfig_absolute_path.'/components/'.$row->option );		    if (is_dir( $path )) {		        $result |= deldir( $path );			}			return $result;		} else {			HTML_installer::showInstallMessage( 'Option field empty, cannot remove files', 'Uninstall -  error', $option,'component');			exit();		}		return $uninstallret;	}}?>

⌨️ 快捷键说明

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