/**
  * Copies the extracted(!) package from the temp-folder
  * to the target-folder.
  * In most cases, this is either located at /core or at /templates.
  * The original should be deleted afterwards.
  *
  * @throws class_exception
  * @return void
  */
 public function move2Filesystem()
 {
     $strSource = $this->objMetadata->getStrPath();
     if (!is_dir(_realpath_ . $strSource)) {
         throw new class_exception("current package " . $strSource . " is not a folder.", class_exception::$level_ERROR);
     }
     $objFilesystem = new class_filesystem();
     $objFilesystem->chmod($this->getStrTargetPath(), 0777);
     class_logger::getInstance(class_logger::PACKAGEMANAGEMENT)->addLogRow("moving " . $strSource . " to " . $this->getStrTargetPath(), class_logger::$levelInfo);
     $objFilesystem->folderCopyRecursive($strSource, $this->getStrTargetPath(), true);
     $this->objMetadata->setStrPath($this->getStrTargetPath());
     $objFilesystem->chmod($this->getStrTargetPath());
     $objFilesystem->folderDeleteRecursive($strSource);
     //shift the cache buster
     $objSetting = class_module_system_setting::getConfigByName("_system_browser_cachebuster_");
     if ($objSetting != null) {
         $objSetting->setStrValue((int) $objSetting->getStrValue() + 1);
         $objSetting->updateObjectToDb();
     }
 }
 /**
  * Internal helper, fetches all installers located within the passed package
  *
  * @param class_module_packagemanager_metadata $objMetadata
  *
  * @return interface_installer[]
  */
 private function getInstaller(class_module_packagemanager_metadata $objMetadata)
 {
     $objFilesystem = new class_filesystem();
     $arrInstaller = $objFilesystem->getFilelist($objMetadata->getStrPath() . "/installer/", array(".php"));
     if ($arrInstaller === false) {
         return array();
     }
     $arrReturn = array();
     //start with modules
     foreach ($arrInstaller as $strOneInstaller) {
         //skip samplecontent files
         if (uniStrpos($strOneInstaller, "class_") === false || uniStrpos($strOneInstaller, "installer") === false || uniStrpos($strOneInstaller, "_sc_") !== false) {
             continue;
         }
         $strName = uniSubstr($strOneInstaller, 0, -4);
         /** @var $objInstaller interface_installer */
         $objInstaller = new $strName();
         $arrReturn[] = $objInstaller;
     }
     return $arrReturn;
 }
 /**
  * @param class_module_packagemanager_metadata $objMetadata
  *
  * @throws class_exception
  * @return string
  */
 public function removePackage(class_module_packagemanager_metadata $objMetadata)
 {
     $strLog = "";
     class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::INCLUDED());
     $objHandler = $this->getPackageManagerForPath($objMetadata->getStrPath());
     if ($objHandler->isRemovable()) {
         $objHandler->remove($strLog);
     }
     class_orm_base::setObjHandleLogicalDeletedGlobal(class_orm_deletedhandling_enum::EXCLUDED());
     class_resourceloader::getInstance()->flushCache();
     return $strLog;
 }