public function testRequiredBy()
 {
     $objManager = new class_module_packagemanager_manager();
     $objSystem = $objManager->getPackage("system");
     $arrRequiredBy = $objManager->getArrRequiredBy($objSystem);
     $this->assertTrue(in_array("packagemanager", $arrRequiredBy));
     $this->assertFalse(in_array("system", $arrRequiredBy));
 }
 /**
  * Triggers the removal of a single package
  *
  * @permissions edit,delete
  * @throws class_exception
  * @return string
  */
 protected function actionDeletePackage()
 {
     $strReturn = "";
     //fetch the package
     $objManager = new class_module_packagemanager_manager();
     $objPackage = $objManager->getPackage($this->getParam("package"));
     if ($objPackage == null) {
         throw new class_exception("package not found", class_exception::$level_ERROR);
     }
     $strLog = $objManager->removePackage($objPackage);
     if ($strLog == "") {
         $this->adminReload(class_link::getLinkAdminHref($this->getArrModule("modul"), "list"));
         return "";
     }
     $strReturn .= $this->objToolkit->formHeadline($this->getLang("package_removal_header"));
     $strReturn .= $this->objToolkit->getPreformatted(array($strLog));
     $strReturn .= $this->objToolkit->formHeader(class_link::getLinkAdminHref($this->getArrModule("modul"), "list"), "", "");
     $strReturn .= $this->objToolkit->formInputSubmit($this->getLang("commons_ok"));
     $strReturn .= $this->objToolkit->formClose();
     return $strReturn;
 }
 private function update_451_452()
 {
     $strReturn = "";
     $objPackageManager = new class_module_packagemanager_manager();
     if ($objPackageManager->getPackage("pages") !== null) {
         $strReturn .= "Updating search_element tables...\n";
         $strQuery = "ALTER TABLE " . $this->objDB->encloseTableName(_dbprefix_ . "element_search") . "\n                                ADD " . $this->objDB->encloseColumnName("search_query_id") . " " . $this->objDB->getDatatype("char20") . " NULL";
         if (!$this->objDB->_pQuery($strQuery, array())) {
             $strReturn .= "An error occurred! ...\n";
         }
     }
     $strReturn .= "Updating module-versions...\n";
     $this->updateModuleVersion("search", "4.5.2");
     $this->updateElementVersion("search", "4.5.2");
     return $strReturn;
 }
 private function update_43_431()
 {
     $strReturn = "Updating 4.3 to 4.3.1...\n";
     $strReturn .= "This update removes the flot chart module and replaces it with the jqplot chart module...\n\n";
     //1. install module jqplot
     $strReturn .= "Installing module jqplot if not exist...\n";
     $objManager = new class_module_packagemanager_manager();
     $objExistingJqPlotPackage = $objManager->getPackage("jqplot");
     //if jqplot is not installed, install it
     if ($objExistingJqPlotPackage === null) {
         $objContentProvider = new class_module_packagemanager_contentprovider_kajona();
         $arrPackageMetaData = $objContentProvider->searchPackage("jqplot");
         //if a package was found
         if ($arrPackageMetaData !== null && count($arrPackageMetaData) == 1) {
             //upload the package to projects/temp
             class_carrier::getInstance()->setParam("systemid", $arrPackageMetaData[0]["systemid"]);
             $strFile = $objContentProvider->processPackageUpload();
             if ($objManager->validatePackage($strFile)) {
                 if (uniSubstr($strFile, -4) == ".zip") {
                     //now extract the zip file and......
                     $objHandler = $objManager->extractPackage($strFile);
                     $objFilesystem = new class_filesystem();
                     $objFilesystem->fileDelete($strFile);
                     //move the created folder to /core
                     $objHandler->move2Filesystem();
                 }
             } else {
                 $strReturn .= "Package file is not valid...\n";
                 $strReturn .= "Update to version 4.3.1 cancelled...\n";
                 return $strReturn;
             }
         } else {
             $strReturn = "Module jqplot was not found via the packagemanager...\n";
             $strReturn .= "Update to version 4.3.1 cancelled...\n";
             return $strReturn;
         }
     }
     //2. uninstall module flot
     $strReturn .= "Removing module flotchart if exists...\n";
     $objFlotPackage = $objManager->getPackage("flotchart");
     if ($objFlotPackage !== null) {
         //uninstall flot
         $class_filesystem = new class_filesystem();
         $class_filesystem->folderDeleteRecursive($objFlotPackage->getStrPath());
     }
     //3. set jqplot as standard chart library
     $strReturn .= "Set jqplot as standard chart library if flot was selected standard chart library...\n";
     $objSetting = class_module_system_setting::getConfigByName("_system_graph_type_");
     if ($objSetting->getStrValue() == "flot") {
         $objSetting->setStrValue("jqplot");
         $objSetting->updateObjectToDb();
     }
     //4. update version to 4.3.1
     $strReturn .= "Updating module-versions...\n";
     $this->updateModuleVersion("", "4.3.1");
     //5. reload classloader etc.
     class_resourceloader::getInstance()->flushCache();
     class_classloader::getInstance()->flushCache();
     class_reflection::flushCache();
     return $strReturn;
 }
 /**
  * Renders the list of changes for the passed systemrecord.
  * May be called from other modules in order to get the rendered list for a single record.
  * In most cases rendered as a overlay, so in folderview mode
  *
  * @param string $strSystemid sytemid to filter
  * @param string $strSourceModule source-module, required for a working pageview
  * @param string $strSourceAction source-action, required for a working pageview
  * @param bool $bitBlockFolderview
  *
  * @return string
  * @since 3.4.0
  * @autoTestable
  * @permissions changelog
  */
 public function actionGenericChangelog($strSystemid = "", $strSourceModule = "system", $strSourceAction = "genericChangelog", $bitBlockFolderview = false)
 {
     if (!$bitBlockFolderview && $this->getParam("bitBlockFolderview") == "") {
         $this->setArrModuleEntry("template", "/folderview.tpl");
     }
     if ($strSystemid == "") {
         $strSystemid = $this->getSystemid();
     }
     if (!validateSystemid($strSystemid) && $this->getObjModule()->rightChangelog()) {
         $strReturn = $this->objToolkit->warningBox($this->getLang("generic_changelog_no_systemid"));
         $strReturn .= $this->objToolkit->formHeader(getLinkAdminHref("system", "genericChangeLog", "bitBlockFolderview=1"));
         $strReturn .= $this->objToolkit->formInputText("systemid", "systemid");
         $strReturn .= $this->objToolkit->formInputSubmit();
         $strReturn .= $this->objToolkit->formClose();
         return $strReturn;
         //            return "asd";
     }
     $strReturn = "";
     //        check needed rights - done twice since public and callable by not only the controller
     //        if(!class_carrier::getInstance()->getObjRights()->validatePermissionString(class_rights::$STR_RIGHT_CHANGELOG, $this->getObjModule()))
     //            return $this->getLang("commons_error_permissions");
     //showing a list using the pageview
     $objArraySectionIterator = new class_array_section_iterator(class_module_system_changelog::getLogEntriesCount($strSystemid));
     $objArraySectionIterator->setPageNumber((int) ($this->getParam("pv") != "" ? $this->getParam("pv") : 1));
     $objArraySectionIterator->setArraySection(class_module_system_changelog::getLogEntries($strSystemid, $objArraySectionIterator->calculateStartPos(), $objArraySectionIterator->calculateEndPos()));
     $arrData = array();
     $arrHeader = array();
     $arrHeader[] = $this->getLang("commons_date");
     $arrHeader[] = $this->getLang("change_user");
     if ($strSystemid == "") {
         $arrHeader[] = $this->getLang("change_module");
     }
     if ($strSystemid == "") {
         $arrHeader[] = $this->getLang("change_record");
     }
     $arrHeader[] = $this->getLang("change_action");
     $arrHeader[] = $this->getLang("change_property");
     $arrHeader[] = $this->getLang("change_oldvalue");
     $arrHeader[] = $this->getLang("change_newvalue");
     /** @var $objOneEntry class_changelog_container */
     foreach ($objArraySectionIterator as $objOneEntry) {
         $arrRowData = array();
         /** @var interface_versionable|class_model $objTarget */
         $objTarget = $objOneEntry->getObjTarget();
         $strOldValue = $objOneEntry->getStrOldValue();
         $strNewValue = $objOneEntry->getStrNewValue();
         if ($objTarget != null) {
             $strOldValue = $objTarget->renderVersionValue($objOneEntry->getStrProperty(), $strOldValue);
             $strNewValue = $objTarget->renderVersionValue($objOneEntry->getStrProperty(), $strNewValue);
         }
         $strOldValue = htmlStripTags($strOldValue);
         $strNewValue = htmlStripTags($strNewValue);
         $arrRowData[] = dateToString($objOneEntry->getObjDate());
         $arrRowData[] = $this->objToolkit->getTooltipText(uniStrTrim($objOneEntry->getStrUsername(), 15), $objOneEntry->getStrUsername());
         if ($strSystemid == "") {
             $arrRowData[] = $objTarget != null ? $objTarget->getArrModule("modul") : "";
         }
         if ($strSystemid == "") {
             $arrRowData[] = $objTarget != null ? $this->objToolkit->getTooltipText(uniStrTrim($objTarget->getVersionRecordName(), 20), $objTarget->getVersionRecordName() . " " . $objOneEntry->getStrSystemid()) : "";
         }
         $arrRowData[] = $objTarget != null ? $this->objToolkit->getTooltipText(uniStrTrim($objTarget->getVersionActionName($objOneEntry->getStrAction()), 15), $objTarget->getVersionActionName($objOneEntry->getStrAction())) : "";
         $arrRowData[] = $objTarget != null ? $this->objToolkit->getTooltipText(uniStrTrim($objTarget->getVersionPropertyName($objOneEntry->getStrProperty()), 20), $objTarget->getVersionPropertyName($objOneEntry->getStrProperty())) : "";
         $arrRowData[] = $this->objToolkit->getTooltipText(uniStrTrim($strOldValue, 20), $strOldValue);
         $arrRowData[] = $this->objToolkit->getTooltipText(uniStrTrim($strNewValue, 20), $strNewValue);
         $arrData[] = $arrRowData;
     }
     $objManager = new class_module_packagemanager_manager();
     if ($objManager->getPackage("phpexcel") != null) {
         $strReturn .= $this->objToolkit->getContentToolbar(array(class_link::getLinkAdmin($this->getArrModule("modul"), "genericChangelogExportExcel", "&systemid=" . $strSystemid, class_adminskin_helper::getAdminImage("icon_excel") . " " . $this->getLang("change_export_excel"), "", "", false)));
     }
     $strReturn .= $this->objToolkit->dataTable($arrHeader, $arrData);
     $strReturn .= $this->objToolkit->getPageview($objArraySectionIterator, $strSourceModule, $strSourceAction, "&systemid=" . $strSystemid . "&bitBlockFolderview=" . $this->getParam("bitBlockFolderview"));
     return $strReturn;
 }
 /**
  * Renders the list of available packages or any other kind of gui-representation
  * of the packageprovider.
  *
  * Whenever the provider is capable of uploading new packages, the copy & and upload process
  * should be triggered by the admin-class again.
  * So make sure links or forms point to
  * module = packagemanager
  * action = uploadPackage
  * provider = class_name
  * The provider will be called using the processPackageUpload method.
  *
  * @throws class_exception
  * @return string
  */
 public function renderPackageList()
 {
     $objUser = new class_module_user_user(class_session::getInstance()->getUserID());
     $intStart = ($this->getPageNumber() - 1) * $objUser->getIntItemsPerPage();
     $intEnd = $intStart + $objUser->getIntItemsPerPage() - 1;
     $objToolkit = class_carrier::getInstance()->getObjToolkit("admin");
     $objLang = class_carrier::getInstance()->getObjLang();
     $objManager = new class_module_packagemanager_manager();
     $objRemoteloader = $this->getRemoteloader();
     $objRemoteloader->setStrQueryParams($this->buildQueryParams($intStart, $intEnd));
     $strResponse = "";
     try {
         $strResponse = $objRemoteloader->getRemoteContent();
     } catch (class_exception $objEx) {
         return $objLang->getLang("package_remote_errorloading", self::$STR_MODULE_NAME);
     }
     $arrResponse = json_decode($strResponse, true);
     if ($arrResponse === null) {
         throw new class_exception("Error loading the remote package list. Got: <br />" . htmlToString($strResponse, true), class_exception::$level_ERROR);
     }
     $objRemoteParser = class_module_packagemanager_remoteparser_factory::getRemoteParser($arrResponse, $this->getPageNumber(), $intStart, $intEnd, get_class($this), "&name=" . urlencode($this->getParam("name")) . "&type=" . $this->getParam("type"));
     $arrPackages = $objRemoteParser->getArrPackages();
     $strReturn = $this->createFilterCriteria();
     $strReturn .= $objToolkit->listHeader();
     if (!$this->containsItems($arrPackages)) {
         $strReturn .= $objToolkit->getTextRow($objLang->getLang("commons_list_empty", null));
     } else {
         $intI = 0;
         foreach ($arrPackages as $arrOnePackage) {
             //check if already installed locally
             if ($objManager->getPackage($arrOnePackage["title"]) !== null) {
                 $strAction = $objToolkit->listButton(getImageAdmin("icon_installDisabled", $objLang->getLang("package_noinstall_installed", self::$STR_MODULE_NAME)));
             } else {
                 $strAction = $objToolkit->listButton(getLinkAdmin(self::$STR_MODULE_NAME, "uploadPackage", "provider=" . get_class($this) . "&systemid=" . $arrOnePackage["systemid"], $objLang->getLang("package_install", self::$STR_MODULE_NAME), $objLang->getLang("package_install", self::$STR_MODULE_NAME), "icon_install"));
             }
             $strIcon = "icon_module";
             if ($arrOnePackage["type"] == "TEMPLATE") {
                 $strIcon = "icon_dot";
             }
             $arrOnePackage["version"] = $objLang->getLang("type_" . $arrOnePackage["type"], self::$STR_MODULE_NAME) . ", V " . $arrOnePackage["version"];
             $strReturn .= $objToolkit->genericAdminList($arrOnePackage["systemid"], $arrOnePackage["title"], getImageAdmin($strIcon), $strAction, $intI++, $arrOnePackage["version"], $arrOnePackage["description"]);
         }
     }
     $strReturn .= $objToolkit->listFooter();
     $strReturn .= $objRemoteParser->paginationFooter();
     return $strReturn;
 }
 /**
  * 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;
 }
Esempio n. 8
0
 /**
  * Loads all installers and requests a install / update link, if available
  */
 public function createModuleInstalls()
 {
     $strReturn = "";
     $strInstallLog = "";
     $objManager = new class_module_packagemanager_manager();
     //module-installs to loop?
     if (isset($_POST["moduleInstallBox"]) && is_array($_POST["moduleInstallBox"])) {
         $arrModulesToInstall = $_POST["moduleInstallBox"];
         foreach ($arrModulesToInstall as $strOneModule => $strValue) {
             //search the matching modules
             foreach ($this->arrMetadata as $objOneMetadata) {
                 if ($strOneModule == "installer_" . $objOneMetadata->getStrTitle()) {
                     $objHandler = $objManager->getPackageManagerForPath($objOneMetadata->getStrPath());
                     $strInstallLog .= $objHandler->installOrUpdate();
                 }
             }
         }
     }
     class_carrier::getInstance()->flushCache(class_carrier::INT_CACHE_TYPE_DBQUERIES | class_carrier::INT_CACHE_TYPE_ORMCACHE | class_carrier::INT_CACHE_TYPE_OBJECTFACTORY | class_carrier::INT_CACHE_TYPE_MODULES);
     $this->loadInstaller();
     $this->strLogfile = $strInstallLog;
     $strReturn .= $this->getLang("installer_modules_found");
     $strRows = "";
     $strTemplateID = $this->objTemplates->readTemplate(class_resourceloader::getInstance()->getCorePathForModule("module_installer") . "/module_installer/installer.tpl", "installer_modules_row", true);
     $strTemplateIDInstallable = $this->objTemplates->readTemplate(class_resourceloader::getInstance()->getCorePathForModule("module_installer") . "/module_installer/installer.tpl", "installer_modules_row_installable", true);
     //Loading each installer
     foreach ($this->arrMetadata as $objOneMetadata) {
         //skip samplecontent
         if ($objOneMetadata->getStrTitle() == "samplecontent") {
             continue;
         }
         $objHandler = $objManager->getPackageManagerForPath($objOneMetadata->getStrPath());
         $arrTemplate = array();
         $arrTemplate["module_name"] = $objHandler->getObjMetadata()->getStrTitle();
         $arrTemplate["module_nameShort"] = $objHandler->getObjMetadata()->getStrTitle();
         $arrTemplate["module_version"] = $objHandler->getObjMetadata()->getStrVersion();
         //generate the hint
         $arrTemplate["module_hint"] = "";
         if ($objHandler->getVersionInstalled() !== null) {
             $arrTemplate["module_hint"] .= $this->getLang("installer_versioninstalled") . $objHandler->getVersionInstalled() . "<br />";
         }
         //check missing modules
         $arrModules = $objHandler->getObjMetadata()->getArrRequiredModules();
         foreach ($arrModules as $strOneModule => $strVersion) {
             if (trim($strOneModule) != "" && class_module_system_module::getModuleByName(trim($strOneModule)) === null) {
                 //check if a corresponding module is available
                 $objPackagemanager = new class_module_packagemanager_manager();
                 $objPackage = $objPackagemanager->getPackage($strOneModule);
                 if ($objPackage === null || $objPackage->getBitProvidesInstaller() || version_compare($strVersion, $objPackage->getStrVersion(), ">")) {
                     $arrTemplate["module_hint"] .= $this->getLang("installer_systemversion_needed") . $strOneModule . " >= " . $strVersion . "<br />";
                 }
             } else {
                 if (version_compare($strVersion, class_module_system_module::getModuleByName(trim($strOneModule))->getStrVersion(), ">")) {
                     $arrTemplate["module_hint"] .= $this->getLang("installer_systemversion_needed") . $strOneModule . " >= " . $strVersion . "<br />";
                 }
             }
         }
         if ($objHandler->isInstallable()) {
             $strRows .= $this->objTemplates->fillTemplate($arrTemplate, $strTemplateIDInstallable);
         } else {
             $strRows .= $this->objTemplates->fillTemplate($arrTemplate, $strTemplateID);
         }
     }
     //wrap in form
     $strTemplateID = $this->objTemplates->readTemplate(class_resourceloader::getInstance()->getCorePathForModule("module_installer") . "/module_installer/installer.tpl", "installer_modules_form", true);
     $strReturn .= $this->objTemplates->fillTemplate(array("module_rows" => $strRows), $strTemplateID);
     $this->strOutput .= $strReturn;
     if ($this->isInstalled()) {
         $this->strBackwardLink = $this->getBackwardLink(_webpath_ . "/installer.php?step=loginData");
     } else {
         $this->strBackwardLink = $this->getBackwardLink(_webpath_ . "/installer.php?step=modeSelect");
     }
     $this->strForwardLink = $this->getForwardLink(_webpath_ . "/installer.php?step=samplecontent");
 }