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