english/libraries/joomla/installer/installer.php
/**
	 * Method to parse through a files element of the installation manifest and take appropriate
	 * action.
	 *
	 * @param   JXMLElement  $element	The XML node to process
	 * @param   integer      $cid		Application ID of application to install to
	 * @param   array        $oldFiles	List of old files (JXMLElement's)
	 * @param   array        $oldMD5		List of old MD5 sums (indexed by filename with value as MD5)
	 *
	 * @return  boolean  True on success
	 * @since   11.1
	 */
Method to parse through a files element of the installation manifest and take appropriate
action.

@param   JXMLElement  $element       The XML node to process
@param   integer      $cid           Application ID of application to install to
@param   array        $oldFiles      List of old files (JXMLElement's)
@param   array        $oldMD5                List of old MD5 sums (indexed by filename with value as MD5)

@return  boolean  True on success
@since   11.1
Method to parse through a files element of the installation manifest and take appropriate action . @param JXMLElement $element The XML node to process @param integer $cid Application ID of application to install to @param array $oldFiles List of old files ( JXMLElement ' s ) @param array $oldMD5 List of old MD5 sums ( indexed by filename with value as MD5 ) @return boolean True on success @since 11 . 1
public function parseFiles($element, $cid=0, $oldFiles=null, $oldMD5=null)
	{
		if ( ! $element || ! count($element->children())) {
			return 0;
		}
		$copyfiles = array ();
		jimport('joomla.application.helper');
		$client = JApplicationHelper::getClientInfo($cid);
		if ($client) {
			$pathname = 'extension_'.$client->name;
			$destination = $this->getPath($pathname);
		}
		else {
			$pathname = 'extension_root';
			$destination = $this->getPath($pathname);
		}
		 If so this indicates that the files are in a subdirectory of the source
		 folder and we should append the folder attribute to the source path when
		 copying files.
		$folder = (string)$element->attributes()->folder;
		if ($folder && file_exists($this->getPath('source') . '/' . $folder)) {
			$source = $this->getPath('source') . '/' . $folder;
		}
		else {
			$source = $this->getPath('source');
		}
		 Work out what files have been deleted
		if ($oldFiles && ($oldFiles instanceof JXMLElement)) {
			$oldEntries = $oldFiles->children();
			if (count($oldEntries)) {
				$deletions = $this->findDeletedFiles($oldEntries, $element->children());
				foreach ($deletions['folders'] as $deleted_folder)
				{
					JFolder::delete($destination . '/' . $deleted_folder);
				}
				foreach ($deletions['files'] as $deleted_file) {
					JFile::delete($destination . '/' . $deleted_file);
				}
			}
		}
		 Copy the MD5SUMS file if it exists
		if (file_exists($source . '/MD5SUMS')) {
			$path['src'] = $source . '/MD5SUMS';
			$path['dest'] = $destination . '/MD5SUMS';
			$path['type'] = 'file';
			$copyfiles[] = $path;
		}
		 Process each file in the $files array (children of $tagName).
		foreach ($element->children() as $file)
		{
			$path['src']	= $source . '/' . $file;
			$path['dest']	= $destination . '/' . $file;
			 Is this path a file or folder?
			$path['type']	= ($file->getName() == 'folder') ? 'folder' : 'file';
			 Before we can add a file to the copyfiles array we need to ensure
			 that the folder we are copying our file to exits and if it doesn't,
			 we need to create it.
			if (basename($path['dest']) != $path['dest']) {
				$newdir = dirname($path['dest']);
				if (!JFolder::create($newdir)) {
					JError::raiseWarning(1, JText::sprintf('JLIB_INSTALLER_ERROR_CREATE_DIRECTORY', $newdir));
					return false;
				}
			}
			 Add the file to the copyfiles array
			$copyfiles[] = $path;
		}
		return $this->copyFiles($copyfiles);
	}
public function parseFiles ( $ element , $ cid = 0 , $ oldFiles = null , $ oldMD5 = null ) { if ( ! $ element || ! count ( $ element -> children ( ) ) ) { return 0 ; } $ copyfiles = array ( ) ; jimport ( 'joomla.application.helper' ) ; $ client = JApplicationHelper :: getClientInfo ( $ cid ) ; if ( $ client ) { $ pathname = 'extension_' . $ client -> name ; $ destination = $ this -> getPath ( $ pathname ) ; } else { $ pathname = 'extension_root' ; $ destination = $ this -> getPath ( $ pathname ) ; } $ folder = ( string ) $ element -> attributes ( ) -> folder ; if ( $ folder && file_exists ( $ this -> getPath ( 'source' ) . '/' . $ folder ) ) { $ source = $ this -> getPath ( 'source' ) . '/' . $ folder ; } else { $ source = $ this -> getPath ( 'source' ) ; } if ( $ oldFiles && ( $ oldFiles instanceof JXMLElement ) ) { $ oldEntries = $ oldFiles -> children ( ) ; if ( count ( $ oldEntries ) ) { $ deletions = $ this -> findDeletedFiles ( $ oldEntries , $ element -> children ( ) ) ; foreach ( $ deletions [ 'folders' ] as $ deleted_folder ) { JFolder :: delete ( $ destination . '/' . $ deleted_folder ) ; } foreach ( $ deletions [ 'files' ] as $ deleted_file ) { JFile :: delete ( $ destination . '/' . $ deleted_file ) ; } } } if ( file_exists ( $ source . '/MD5SUMS' ) ) { $ path [ 'src' ] = $ source . '/MD5SUMS' ; $ path [ 'dest' ] = $ destination . '/MD5SUMS' ; $ path [ 'type' ] = 'file' ; $ copyfiles [ ] = $ path ; } foreach ( $ element -> children ( ) as $ file ) { $ path [ 'src' ] = $ source . '/' . $ file ; $ path [ 'dest' ] = $ destination . '/' . $ file ; $ path [ 'type' ] = ( $ file -> getName ( ) == 'folder' ) ? 'folder' : 'file' ; if ( basename ( $ path [ 'dest' ] ) != $ path [ 'dest' ] ) { $ newdir = dirname ( $ path [ 'dest' ] ) ; if ( ! JFolder :: create ( $ newdir ) ) { JError :: raiseWarning ( 1 , JText :: sprintf ( 'JLIB_INSTALLER_ERROR_CREATE_DIRECTORY' , $ newdir ) ) ; return false ; } } $ copyfiles [ ] = $ path ; } return $ this -> copyFiles ( $ copyfiles ) ; }
Method to parse through a files element of the installation manifest and take appropriate
 action.
Method to parse through a files element of the installation manifest and take appropriate action .
// Get the array of file nodes to process; we checked whether this had children above. // Either the tag does not exist or has no children (hence no files to process) therefore we return zero files processed. // Initialise variables. // Get the client info /*
		 * Here we set the folder we are going to remove the files from.
		 */ // Here we set the folder we are going to copy the files from. // Does the element have a folder attribute?
 // // If so this indicates that the files are in a subdirectory of the source // folder and we should append the folder attribute to the source path when // copying files. // Work out what files have been deleted // Copy the MD5SUMS file if it exists // Process each file in the $files array (children of $tagName). // Is this path a file or folder?
 // Before we can add a file to the copyfiles array we need to ensure // that the folder we are copying our file to exits and if it doesn't, // we need to create it. // Add the file to the copyfiles array