public function testExtractAndMove() { $objFilesystem = new class_filesystem(); $objFilesystem->folderCreate(_projectpath_ . "/temp/moduletest"); file_put_contents(_realpath_ . _projectpath_ . "/temp/moduletest/metadata.xml", $this->getStrMetadata()); $objFilesystem->folderCreate(_projectpath_ . "/temp/moduletest/system"); file_put_contents(_realpath_ . _projectpath_ . "/temp/moduletest/system/test.txt", $this->getStrMetadata()); $objZip = new class_zip(); $objZip->openArchiveForWriting(_projectpath_ . "/temp/autotest.zip"); $objZip->addFile(_projectpath_ . "/temp/moduletest/metadata.xml", "/metadata.xml"); $objZip->addFile(_projectpath_ . "/temp/moduletest/system/test.txt", "/system/test.txt"); $objZip->closeArchive(); $objFilesystem->folderDeleteRecursive(_projectpath_ . "/temp/moduletest/"); $objManager = new class_module_packagemanager_manager(); $objPackageManager = $objManager->getPackageManagerForPath(_projectpath_ . "/temp/autotest.zip"); $this->assertEquals(get_class($objPackageManager), "class_module_packagemanager_packagemanager_module"); $objPackageManager = $objManager->extractPackage(_projectpath_ . "/temp/autotest.zip"); $this->assertEquals(get_class($objPackageManager), "class_module_packagemanager_packagemanager_module"); $objPackageManager->move2Filesystem(); $this->assertFileExists(_realpath_ . "/core/module_autotest/metadata.xml"); $this->assertFileExists(_realpath_ . "/core/module_autotest/system/test.txt"); $objMetadata = new class_module_packagemanager_metadata(); $objMetadata->autoInit("/core/module_autotest/"); $this->assertEquals("Autotest", $objMetadata->getStrTitle()); $this->assertEquals("", $objMetadata->getStrDescription()); $this->assertEquals("3.9.1", $objMetadata->getStrVersion()); $this->assertEquals("Kajona Team", $objMetadata->getStrAuthor()); $this->assertEquals("module_autotest", $objMetadata->getStrTarget()); $this->assertEquals(class_module_packagemanager_manager::STR_TYPE_MODULE, $objMetadata->getStrType()); $this->assertEquals(false, $objMetadata->getBitProvidesInstaller()); $arrRequired = $objMetadata->getArrRequiredModules(); $arrModules = array_keys($arrRequired); $arrVersion = array_values($arrRequired); $this->assertEquals("system", $arrModules[0]); $this->assertEquals("3.4.1", $arrVersion[0]); $this->assertEquals("pages", $arrModules[1]); $this->assertEquals("3.4.2", $arrVersion[1]); $arrImages = $objMetadata->getArrScreenshots(); $this->assertEquals(1, count($arrImages)); $this->assertEquals("/test.jpg", $arrImages[0]); $objFilesystem->folderDeleteRecursive("/core/module_autotest"); $objFilesystem->fileDelete(_projectpath_ . "/temp/autotest.zip"); }
public function deleteFolder(class_filesystem $objFilesystem, $strDirName) { if (is_dir(_realpath_ . $strDirName)) { echo "\n Found existing folder " . $strDirName . ", delete it..."; $boolDeleteAction = @$objFilesystem->folderDeleteRecursive($strDirName); if ($boolDeleteAction === false) { die("\n\n ERROR: Folder " . $strDirName . " can not be deleted! Permission denied!"); } } else { echo "\n Ok, " . $strDirName . " does not already exist."; } }
public function testZipFileread() { $objFileSystem = new class_filesystem(); echo "\ttesting class_zip file-reading...\n"; $objZip = new class_zip(); echo "\topening " . _realpath_ . "/test.zip\n"; $this->assertTrue($objZip->openArchiveForWriting("/files/cache/test.zip"), __FILE__ . " openArchive"); $this->assertTrue($objZip->addFile(class_resourceloader::getInstance()->getCorePathForModule("module_system") . "/module_system/metadata.xml"), __FILE__ . " addFile"); $this->assertTrue($objZip->closeArchive(), __FILE__ . " closeArchive"); $this->assertFileExists(_realpath_ . "/files/cache/test.zip", __FILE__ . " checkFileExists"); echo "\treading files\n"; $strContent = $objZip->getFileFromArchive("/files/cache/test.zip", class_resourceloader::getInstance()->getCorePathForModule("module_system") . "/module_system/metadata.xml"); $this->assertTrue(uniStrpos($strContent, "xsi:noNamespaceSchemaLocation=\"https://apidocs.kajona.de/xsd/package.xsd\"") !== false); echo "\tremoving testfile\n"; $this->assertTrue($objFileSystem->fileDelete("/files/cache/test.zip"), __FILE__ . " deleteFile"); $this->assertFileNotExists(_realpath_ . "/files/cache/test.zip", __FILE__ . " checkFileNotExists"); $objFileSystem->folderDeleteRecursive("/files/cache/zipextract"); $this->assertFileNotExists(_realpath_ . "/files/cache/zipextract", __FILE__ . " checkFileNotExists"); }
/** * 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(); } }
public function testJsonList() { $objFilesystem = new class_filesystem(); $objFilesystem->folderCreate("/files/packageservertest"); $objFilesystem->folderCreate("/files/packageservertest/t"); file_put_contents(_realpath_ . "/files/packageservertest/t/metadata.xml", $this->getStrMetadata()); $objFilesystem->folderCreate("/files/packageservertest/t/system"); file_put_contents(_realpath_ . "/files/packageservertest/t/system/test.txt", $this->getStrMetadata()); $objZip = new class_zip(); $objZip->openArchiveForWriting("/files/packageservertest/autotest.zip"); $objZip->addFile("/files/packageservertest/t/metadata.xml", "/metadata.xml"); $objZip->addFile("/files/packageservertest/t/system/test.txt", "/system/test.txt"); $objZip->closeArchive(); $objFilesystem->folderDeleteRecursive("/files/packageservertest/t"); $objMediamanagerRepo = new class_module_mediamanager_repo(); $objMediamanagerRepo->setStrPath("/files/packageservertest"); $objMediamanagerRepo->setStrTitle("autotest packages"); $objMediamanagerRepo->updateObjectToDb(); class_module_mediamanager_file::syncRecursive($objMediamanagerRepo->getSystemid(), $objMediamanagerRepo->getStrPath()); /** @var $objPortalServer class_module_packageserver_portal */ $objPortalServer = class_module_system_module::getModuleByName("packageserver")->getPortalInstanceOfConcreteModule(); $strJson = $objPortalServer->action("list"); $this->assertNotNull($strJson); $arrData = json_decode($strJson, true); $this->assertTrue(isset($arrData["numberOfTotalItems"])); $this->assertTrue(isset($arrData["items"])); $this->assertTrue(isset($arrData["protocolVersion"])); $this->assertEquals(1, count($arrData["items"])); $arrItem = $arrData["items"][0]; $this->assertTrue(isset($arrItem["systemid"])); $this->assertTrue(isset($arrItem["title"])); $this->assertTrue(isset($arrItem["version"])); $this->assertTrue(isset($arrItem["description"])); $this->assertTrue(isset($arrItem["type"])); $this->assertEquals("Autotest", $arrItem["title"]); $this->assertEquals("3.9.1", $arrItem["version"]); $this->assertEquals("demo", $arrItem["description"]); $this->assertEquals("MODULE", $arrItem["type"]); $objMediamanagerRepo->deleteObjectFromDatabase(); $objFilesystem->fileDelete("/files/packageservertest/autotest.zip"); }
/** * Deletes the tag with the given systemid from the system * * @return bool */ public function deleteObjectFromDatabase() { //delete all files from the filesystem $objFilesystem = new class_filesystem(); $objFilesystem->folderDeleteRecursive(_templatepath_ . "/" . $this->getStrName()); return parent::deleteObjectFromDatabase(); }
/** * Removes the current package, if possible, from the system * * @param string &$strLog * * @return bool */ public function remove(&$strLog) { if (!$this->isRemovable()) { return false; } $bitReturn = true; //if we reach up until here, each installer should be an instance of interface_installer_removable foreach ($this->getInstaller($this->getObjMetadata()) as $objOneInstaller) { if ($objOneInstaller instanceof interface_installer_removable) { $bitReturn = $bitReturn && $objOneInstaller->remove($strLog); } } //finally: delete the the module on file-system level if ($bitReturn) { $strLog .= "Deleting file-system parts...\n"; $objFilesystem = new class_filesystem(); $bitReturn = $objFilesystem->folderDeleteRecursive($this->getObjMetadata()->getStrPath()); if (!$bitReturn) { $strLog .= "Error deleting file-system parts!. Please remove manually: " . $this->getObjMetadata()->getStrPath() . ""; } } $strLog .= "\n\nRemoval finished " . ($bitReturn ? "successfully" : " with errors") . "\n"; return $bitReturn; }
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; }
private function update_401_41() { $strReturn = "Updating 4.0.1 to 4.1...\n"; $strReturn .= "Altering page_properties-table...\n"; $strQuery = "ALTER TABLE " . $this->objDB->encloseTableName(_dbprefix_ . "page_properties") . "\n ADD " . $this->objDB->encloseColumnName("pageproperties_target") . " " . $this->objDB->getDatatype("char254") . " NULL"; if (!$this->objDB->_query($strQuery)) { $strReturn .= "An error occurred! ...\n"; } $strReturn .= "Deleting legacy js-scripts...\n"; $objFilesystem = new class_filesystem(); $objFilesystem->folderDeleteRecursive("/core/module_pages/admin/scripts/halloeditor"); $objFilesystem->folderDeleteRecursive("/core/module_pages/admin/scripts/rangy"); $strReturn .= "Updating module-versions...\n"; $this->updateModuleVersion("", "4.1"); $strReturn .= "Updating element-version...\n"; $this->updateElementVersion("row", "4.1"); $this->updateElementVersion("paragraph", "4.1"); $this->updateElementVersion("image", "4.1"); return $strReturn; }