/** * 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; }