/** * Update a specific extension * * @param common_ext_Extension $ext * @return common_report_Report */ protected function updateExtension(common_ext_Extension $ext) { helpers_ExtensionHelper::checkRequiredExtensions($ext); $installed = common_ext_ExtensionsManager::singleton()->getInstalledVersion($ext->getId()); $codeVersion = $ext->getVersion(); if ($installed !== $codeVersion) { $report = new common_report_Report(common_report_Report::TYPE_INFO, $ext->getName() . ' requires update from ' . $installed . ' to ' . $codeVersion); $updaterClass = $ext->getManifest()->getUpdateHandler(); if (is_null($updaterClass)) { $report = new common_report_Report(common_report_Report::TYPE_WARNING, 'No Updater found for ' . $ext->getName()); } elseif (!class_exists($updaterClass)) { $report = new common_report_Report(common_report_Report::TYPE_ERROR, 'Updater ' . $updaterClass . ' not found'); } else { $updater = new $updaterClass($ext); $returnedVersion = $updater->update($installed); $currentVersion = common_ext_ExtensionsManager::singleton()->getInstalledVersion($ext->getId()); if (!is_null($returnedVersion) && $returnedVersion != $currentVersion) { common_ext_ExtensionsManager::singleton()->updateVersion($ext, $returnedVersion); $report->add(new common_report_Report(common_report_Report::TYPE_WARNING, 'Manually saved extension version')); $currentVersion = $returnedVersion; } if ($currentVersion == $codeVersion) { $report->add(new common_report_Report(common_report_Report::TYPE_SUCCESS, 'Successfully updated ' . $ext->getName() . ' to ' . $currentVersion)); } else { $report->add(new common_report_Report(common_report_Report::TYPE_WARNING, 'Update of ' . $ext->getName() . ' exited with version ' . $currentVersion)); } common_cache_FileCache::singleton()->purge(); } } else { $report = new common_report_Report(common_report_Report::TYPE_INFO, $ext->getName() . ' already up to data'); } return $report; }
/** * install an extension * * @access public * @author Jerome Bogaerts, <*****@*****.**> * @return void */ public function install() { common_Logger::i('Installing extension ' . $this->extension->getId(), 'INSTALL'); if ($this->extension->getId() == 'generis') { throw new common_ext_ForbiddenActionException('Tried to install generis using the ExtensionInstaller', $this->extension->getId()); } if (common_ext_ExtensionsManager::singleton()->isInstalled($this->extension->getId())) { throw new common_ext_AlreadyInstalledException('Problem installing extension ' . $this->extension->getId() . ' : Already installed', $this->extension->getId()); } // we purge the whole cache. $cache = common_cache_FileCache::singleton(); $cache->purge(); // check reuired extensions, throws exception if failed helpers_ExtensionHelper::checkRequiredExtensions($this->getExtension()); $this->installLoadDefaultConfig(); $this->installOntology(); $this->installRegisterExt(); common_Logger::d('Installing custom script for extension ' . $this->extension->getId()); $this->installCustomScript(); common_Logger::d('Done installing custom script for extension ' . $this->extension->getId()); if ($this->getLocalData() == true) { common_Logger::d('Installing local data for extension ' . $this->extension->getId()); $this->installLocalData(); common_Logger::d('Done installing local data for extension ' . $this->extension->getId()); } common_Logger::d('Extended install for extension ' . $this->extension->getId()); // Method to be overriden by subclasses // to extend the installation mechanism. $this->extendedInstall(); common_Logger::d('Done extended install for extension ' . $this->extension->getId()); $eventManager = ServiceManager::getServiceManager()->get(EventManager::CONFIG_ID); $eventManager->trigger(new common_ext_event_ExtensionInstalled($this->extension)); }