public function install()
 {
     $strReturn = "";
     $objManager = new class_orm_schemamanager();
     $strReturn .= "Installing table templatepacks...\n";
     $objManager->createTable("class_module_packagemanager_template");
     //register the module
     $this->registerModule("packagemanager", _packagemanager_module_id_, "", "class_module_packagemanager_admin.php", $this->objMetadata->getStrVersion(), true);
     $strReturn .= "Registering system-constants...\n";
     $this->registerConstant("_packagemanager_defaulttemplate_", "default", class_module_system_setting::$int_TYPE_STRING, _packagemanager_module_id_);
     $strReturn .= "Initial templatepack sync...\n";
     class_module_packagemanager_template::syncTemplatepacks();
     $arrPacks = class_module_packagemanager_template::getObjectList();
     if (count($arrPacks) > 0) {
         //search the default package
         foreach ($arrPacks as $objOnePack) {
             if ($objOnePack->getStrName() == "default") {
                 $objOnePack->setIntRecordStatus(1);
                 $objOnePack->updateObjectToDb();
             }
         }
     }
     $strReturn .= "Setting aspect assignments...\n";
     if (class_module_system_aspect::getAspectByName("management") != null) {
         $objModule = class_module_system_module::getModuleByName($this->objMetadata->getStrTitle());
         $objModule->setStrAspect(class_module_system_aspect::getAspectByName("management")->getSystemid());
         $objModule->updateObjectToDb();
     }
     return $strReturn;
 }
 /**
  * @return string
  * @autoTestable
  * @permissions view
  */
 protected function actionListTemplates()
 {
     class_module_packagemanager_template::syncTemplatepacks();
     $objArraySectionIterator = new class_array_section_iterator(class_module_packagemanager_template::getObjectCount());
     $objArraySectionIterator->setPageNumber((int) ($this->getParam("pv") != "" ? $this->getParam("pv") : 1));
     $objArraySectionIterator->setArraySection(class_module_packagemanager_template::getObjectList("", $objArraySectionIterator->calculateStartPos(), $objArraySectionIterator->calculateEndPos()));
     return $this->renderList($objArraySectionIterator);
 }
 /**
  * Synchronized the list of template-packs available in the filesystem
  * with the list of packs stored at the database.
  *
  * @return void
  * @static
  */
 public static function syncTemplatepacks()
 {
     //scan the list of packs available in the filesystem
     $objFilesystem = new class_filesystem();
     $arrFolders = $objFilesystem->getCompleteList("/templates");
     //scan packs installed
     /** @var class_module_packagemanager_template[] $arrPacksInstalled */
     $arrPacksInstalled = self::getObjectList();
     foreach ($arrFolders["folders"] as $strOneFolder) {
         $bitFolderFound = false;
         //search the pack in the list of available ones
         foreach ($arrPacksInstalled as $objOnePack) {
             if ($objOnePack->getStrName() == $strOneFolder) {
                 $bitFolderFound = true;
                 break;
             }
         }
         if (!$bitFolderFound) {
             $objPack = new class_module_packagemanager_template();
             $objPack->setStrName($strOneFolder);
             $objPack->setIntRecordStatus(0);
             $objPack->updateObjectToDb();
         }
     }
     //scan folders not existing any more
     foreach ($arrPacksInstalled as $objOnePack) {
         if (!in_array($objOnePack->getStrName(), $arrFolders["folders"])) {
             $objOnePack->deleteObjectFromDatabase();
         }
     }
 }
 /**
  * Removes the current package, if possible, from the system
  *
  * @param string &$strLog
  *
  * @return bool
  */
 public function remove(&$strLog)
 {
     class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED());
     if (!$this->isRemovable()) {
         return false;
     }
     /** @var class_module_packagemanager_template[] $arrTemplates */
     $arrTemplates = class_module_packagemanager_template::getObjectList();
     foreach ($arrTemplates as $objOneTemplate) {
         if ($objOneTemplate->getStrName() == $this->getObjMetadata()->getStrTitle()) {
             return $objOneTemplate->deleteObjectFromDatabase();
         }
     }
     class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED());
     return false;
 }
 private function activateTemplate()
 {
     echo "Searching for a v3 template to activate...\n";
     if (!is_dir(_realpath_ . "/templates/v3template")) {
         echo "no template found, nothing to do.\n";
         return true;
     }
     echo "Templatepack v3template found\n";
     class_module_packagemanager_template::syncTemplatepacks();
     $arrPackages = class_module_packagemanager_template::getObjectList();
     /** @var class_module_packagemanager_template $objOnePackage */
     foreach ($arrPackages as $objOnePackage) {
         if ($objOnePackage->getStrName() == "v3template") {
             echo "setting the template-pack active...\n";
             $objOnePackage->setIntRecordStatus(1);
             $objOnePackage->updateObjectToDb();
             echo "If you didn't change the templates in v3, delete the unmodified ones from /templates/v3template/tpl.\n";
             echo "Otherwise make sure to update the references to js and css files and consider to upgrade your js-implementation to the now-standard jQuery instead of YUI.\n";
             echo "For css-files, the new path would be:\n";
             echo "  _webpath_/templates/v3template/css/filename.css\n";
             echo "For js-files, the new path would be:\n";
             echo "  _webpath_/templates/v3template/js/filename.js\n";
             return true;
         }
     }
     echo "ERROR: no matching template-pack found in the database. set up your templates manually.\n";
     return true;
 }
 private function update_42_43()
 {
     $strReturn = "Updating 4.2 to 4.3...\n";
     $strReturn .= "Changing placeholder column data-type...\n";
     $strReturn .= "Creating temp-table...\n";
     $strReturn .= "Installing table page_element...\n";
     $arrFields = array();
     $arrFields["page_element_id"] = array("char20", false);
     $arrFields["page_element_ph_placeholder"] = array("text", true);
     $arrFields["page_element_ph_name"] = array("char254", true);
     $arrFields["page_element_ph_element"] = array("char254", true);
     $arrFields["page_element_ph_title"] = array("char254", true);
     $arrFields["page_element_ph_language"] = array("char20", true);
     if (!$this->objDB->createTable("page_element_temp", $arrFields, array("page_element_id"), array("page_element_ph_language", "page_element_ph_element"))) {
         $strReturn .= "An error occurred! ...\n";
     }
     $strReturn .= "Copying table content...\n";
     $strQuery = "INSERT INTO " . _dbprefix_ . "page_element_temp\n                        (page_element_id, page_element_ph_placeholder, page_element_ph_name, page_element_ph_element, page_element_ph_title, page_element_ph_language)\n                       SELECT page_element_id, page_element_ph_placeholder, page_element_ph_name, page_element_ph_element, page_element_ph_title, page_element_ph_language FROM " . _dbprefix_ . "page_element";
     if (!$this->objDB->_query($strQuery)) {
         $strReturn .= "An error occurred! ...\n";
     }
     $strReturn .= "Dropping old table...\n";
     $strQuery = "DROP TABLE " . $this->objDB->encloseTableName(_dbprefix_ . "page_element") . "";
     if (!$this->objDB->_query($strQuery)) {
         $strReturn .= "An error occurred! ...\n";
     }
     $strReturn .= "Renaming new table...\n";
     $strQuery = "ALTER TABLE " . $this->objDB->encloseTableName(_dbprefix_ . "page_element_temp") . " RENAME TO " . $this->objDB->encloseTableName(_dbprefix_ . "page_element") . "";
     if (!$this->objDB->_query($strQuery)) {
         $strReturn .= "An error occurred! ...\n";
     }
     $strReturn .= "Copying default-template, if in use. Placeholders changed in 4.3\n";
     if (class_module_system_setting::getConfigValue("_packagemanager_defaulttemplate_") == "default") {
         $objFS = new class_filesystem();
         $objFS->folderCreate("/templates/kajona42/tpl/module_pages", true);
         $objFS->fileCopy("/core/module_pages/installer/standard.tpl.42", "/templates/kajona42/tpl/module_pages/standard.tpl");
         class_module_packagemanager_template::syncTemplatepacks();
         /** @var $objOnePack class_module_packagemanager_template */
         foreach (class_module_packagemanager_template::getObjectList() as $objOnePack) {
             if ($objOnePack->getStrName() == "kajona42") {
                 $objOnePack->setIntRecordStatus(1);
                 $objOnePack->updateObjectToDb();
             }
         }
         $objSetting = class_module_system_setting::getConfigByName("_packagemanager_defaulttemplate_");
         $objSetting->setStrValue("kajona42");
         $objSetting->updateObjectToDb();
     }
     $strReturn .= "Updating module-versions...\n";
     $this->updateModuleVersion("", "4.3");
     $strReturn .= "Updating element-version...\n";
     $this->updateElementVersion("row", "4.3");
     $this->updateElementVersion("paragraph", "4.3");
     $this->updateElementVersion("image", "4.3");
     return $strReturn;
 }