/** * Checks if an update is available for a list of packages. * Renders the matching icon and tooltip or the link to update a package. * * @xml * @permissions view,edit * @return string */ protected function actionGetUpdateIcons() { $strPackages = $this->getParam("packages"); $arrPackagesToCheck = explode(",", $strPackages); $objManager = new class_module_packagemanager_manager(); //close session to avoid blocking $this->objSession->sessionClose(); $arrLatestVersion = $objManager->scanForUpdates(); $arrReturn = array(); foreach ($arrPackagesToCheck as $strOnePackage) { $objMetadata = $objManager->getPackage($strOnePackage); if ($objMetadata == null || !isset($arrLatestVersion[$strOnePackage])) { $arrReturn[$strOnePackage] = class_adminskin_helper::getAdminImage("icon_updateError", $this->getLang("package_noversion")); continue; } $objHandler = $objManager->getPackageManagerForPath($objMetadata->getStrPath()); $bitUpdateAvailable = $objManager->updateAvailable($objHandler, $arrLatestVersion[$strOnePackage]); if ($bitUpdateAvailable === null) { $arrReturn[$strOnePackage] = class_adminskin_helper::getAdminImage("icon_updateError", $this->getLang("package_noversion")); } else { //compare the version to trigger additional actions $strLatestVersion = $arrLatestVersion[$strOnePackage]; if ($bitUpdateAvailable) { $arrReturn[$strOnePackage] = class_link::getLinkAdminDialog($this->getArrModule("modul"), "initPackageUpdate", "&package=" . $objHandler->getObjMetadata()->getStrPath(), $this->getLang("package_updatefound") . " " . $strLatestVersion, $this->getLang("package_updatefound") . " " . $strLatestVersion, "icon_update", $objHandler->getObjMetadata()->getStrTitle()); } else { $arrReturn[$strOnePackage] = class_adminskin_helper::getAdminImage("icon_updateDisabled", $this->getLang("package_noupdate") . " " . $strLatestVersion); } } } class_response_object::getInstance()->setStrResponseType(class_http_responsetypes::STR_TYPE_JSON); return json_encode($arrReturn); }
/** * Scans all packages available and tries to load the latest version available. * All packages found are returned in a list like * array(packagename => version) * In addition, the update-available messages are triggered internally. * * @return array */ public function scanForUpdates() { $objManager = new class_module_packagemanager_manager(); $arrVersions = $objManager->getArrLatestVersion(); foreach ($arrVersions as $strOneModule => $strOneVersion) { $objMetadata = $objManager->getPackage($strOneModule); if ($objMetadata != null) { $objManager->updateAvailable($objManager->getPackageManagerForPath($objMetadata->getStrPath()), $strOneVersion); } } return $arrVersions; }