/** * Method to parse through a files element of the installation manifest and take appropriate * action. * * @access public * @param JXMLElement $element The xml node to process * @param int $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 1.5 */ function parseFiles($element, $cid = 0, $oldFiles = null, $oldMD5 = null) { // Get the array of file nodes to process; we checked this had children above if (!$element || !count($element->children())) { // Either the tag does not exist or has no children (hence no files to process) therefore we return zero files processed. return 0; } // Initialise variables. $copyfiles = array(); // Get the client info jimport('joomla.application.helper'); $client = JApplicationHelper::getClientInfo($cid); /* * Here we set the folder we are going to remove the files from. */ if ($client) { $pathname = 'extension_' . $client->name; $destination = $this->getPath($pathname); } else { $pathname = 'extension_root'; $destination = $this->getPath($pathname); } /* * 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. */ $folder = (string) $element->attributes()->folder; if ($folder && file_exists($this->getPath('source') . DS . $folder)) { $source = $this->getPath('source') . DS . $folder; } else { $source = $this->getPath('source'); } // Process each file in the $files array (children of $tagName). foreach ($element->children() as $file) { $path['src'] = $source . DS . $file; $path['dest'] = $destination . DS . $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); }
/** * Method to parse through a media 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 * * @return boolean True on success * @since 11.1 */ public function parseMedia($element, $cid = 0) { if (!$element || !count($element->children())) { // Either the tag does not exist or has no children therefore we return zero files processed. return 0; } // Initialise variables. $copyfiles = array(); // Get the client info jimport('joomla.application.helper'); $client = JApplicationHelper::getClientInfo($cid); // Here we set the folder we are going to copy the files to. // Default 'media' Files are copied to the JPATH_BASE/media folder $folder = (string) $element->attributes()->destination ? DS . $element->attributes()->destination : null; $destination = JPath::clean(JPATH_ROOT . DS . 'media' . $folder); // 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. $folder = (string) $element->attributes()->folder; if ($folder && file_exists($this->getPath('source') . DS . $folder)) { $source = $this->getPath('source') . DS . $folder; } else { $source = $this->getPath('source'); } // Process each file in the $files array (children of $tagName). foreach ($element->children() as $file) { $path['src'] = $source . DS . $file; $path['dest'] = $destination . DS . $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); }