Пример #1
0
 /**
  * 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);
 }
Пример #2
0
 /**
  * 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);
 }