예제 #1
0
 /**
  * Method to run before an install/update/uninstall method
  *
  * @param   object             $type    type of change (install, update or discover_install)
  * @param   JInstallerAdapter  $parent  class calling this method
  *
  * @return bool
  */
 public function preflight($type, $parent)
 {
     $this->installRedcore($type, $parent);
     $this->loadRedcoreLibrary();
     $this->loadRedcoreLanguage();
     $manifest = $this->getManifest($parent);
     $extensionType = $manifest->attributes()->type;
     $this->extensionElement = $this->getElement($parent, $manifest);
     if ($extensionType == 'component' && in_array($type, array('install', 'update', 'discover_install'))) {
         // Update SQL pre-processing
         if ($type == 'update') {
             // Reads current (old) version from manifest
             $db = JFactory::getDbo();
             $version = $db->setQuery($db->getQuery(true)->select($db->qn('s.version_id'))->from($db->qn('#__schemas', 's'))->join('inner', $db->qn('#__extensions', 'e') . ' ON ' . $db->qn('e.extension_id') . ' = ' . $db->qn('s.extension_id'))->where('e.element = ' . $db->q($this->extensionElement)))->loadResult();
             if (!empty($version)) {
                 $this->oldVersion = (string) $version;
             }
             if (!$this->preprocessUpdates($parent)) {
                 return false;
             }
         }
         // In case we are installing redcore
         if (get_called_class() == 'Com_RedcoreInstallerScript') {
             if (!$this->checkComponentVersion($this->getRedcoreComponentFolder(), dirname(__FILE__), 'redcore.xml')) {
                 JFactory::getApplication()->enqueueMessage(JText::_('COM_REDCORE_INSTALL_ERROR_OLDER_VERSION'), 'error');
                 return false;
             }
             if (!class_exists('RComponentHelper')) {
                 $searchPaths = array(JPATH_LIBRARIES . '/redcore/component', dirname(__FILE__) . '/redCORE/libraries/redcore/component', dirname(__FILE__) . '/libraries/redcore/component');
                 if ($componentHelper = JPath::find($searchPaths, 'helper.php')) {
                     require_once $componentHelper;
                 }
             }
         }
         $requirements = array();
         if (method_exists('RComponentHelper', 'checkComponentRequirements')) {
             $requirements = RComponentHelper::checkComponentRequirements($manifest->requirements);
         }
         if (!empty($requirements)) {
             foreach ($requirements as $key => $requirement) {
                 foreach ($requirement as $checked) {
                     if (!$checked['status']) {
                         // In case redCORE cannot be installed we do not have the language string
                         if (get_called_class() == 'Com_RedcoreInstallerScript') {
                             $this->loadRedcoreLanguage(dirname(__FILE__));
                             $checked['name'] = JText::_($checked['name']);
                         }
                         $messageKey = $key == 'extensions' ? 'COM_REDCORE_INSTALL_ERROR_REQUIREMENTS_EXTENSIONS' : 'COM_REDCORE_INSTALL_ERROR_REQUIREMENTS';
                         JFactory::getApplication()->enqueueMessage(JText::sprintf($messageKey, $checked['name'], $checked['required'], $checked['current']), 'error');
                         return false;
                     }
                 }
             }
         }
     }
     return true;
 }