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"); }
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"); }
/** * @see interface_admin_systemtask::executeTask() * @return string */ public function executeTask() { if (!class_module_system_module::getModuleByName("system")->rightRight2()) { return $this->getLang("commons_error_permissions"); } $strFilename = "/backup_" . time() . ".zip"; $objZip = new class_zip(); $objZip->openArchiveForWriting($strFilename); foreach ($this->arrFoldersToInclude as $strOneFolder) { $objZip->addFolder($strOneFolder); } foreach ($this->arrFilesToInclude as $strOneFile) { $objZip->addFile($strOneFile); } if ($objZip->closeArchive()) { return $this->getLang("systemtask_filedump_success") . $strFilename; } else { return $this->getLang("systemtask_filedump_error"); } }
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"); }
/** * Renders the summary of a single package * * @param interface_packagemanager_packagemanager $objHandler * @param bool $bitIncludeRequiredBy * * @return string */ public function renderPackageDetails(interface_packagemanager_packagemanager $objHandler, $bitIncludeRequiredBy = false) { $objManager = new class_module_packagemanager_manager(); $strReturn = $this->objToolkit->formHeadline($objHandler->getObjMetadata()->getStrTitle()); $strReturn .= $this->objToolkit->getTextRow($objHandler->getObjMetadata()->getStrDescription()); $arrRows = array(); $arrRows[] = array($this->getLang("package_type"), $this->getLang("type_" . $objHandler->getObjMetadata()->getStrType())); $arrRows[] = array($this->getLang("package_version"), $objHandler->getObjMetadata()->getStrVersion()); if ($objHandler->getVersionInstalled() != null) { $arrRows[] = array($this->getLang("package_version_installed"), $objHandler->getVersionInstalled()); } $arrRows[] = array($this->getLang("package_author"), $objHandler->getObjMetadata()->getStrAuthor()); $arrRequiredRows = array(); foreach ($objHandler->getObjMetadata()->getArrRequiredModules() as $strOneModule => $strVersion) { $strStatus = ""; //validate the status $objRequired = $objManager->getPackage($strOneModule); if ($objRequired == null) { $strStatus = "<span class=\"label label-important\">" . $this->getLang("package_missing") . "</span>"; } else { if (version_compare($objRequired->getStrVersion(), $strVersion, ">=")) { $strStatus = "<span class=\"label label-success\">" . $this->getLang("package_version_available") . "</span>"; } else { $strStatus = "<span class=\"label label-important\">" . $this->getLang("package_version_low") . "</span>"; } } $arrRequiredRows[] = array($strOneModule, " >= " . $strVersion, $strStatus); } $arrRows[] = array($this->getLang("package_modules"), $this->objToolkit->dataTable(null, $arrRequiredRows)); if ($bitIncludeRequiredBy) { $arrRequiredBy = $objManager->getArrRequiredBy($objHandler->getObjMetadata()); array_walk($arrRequiredBy, function (&$strOneModule) { $strOneModule = array($strOneModule); }); $arrRows[] = array($this->getLang("package_required_by"), $this->objToolkit->dataTable(null, $arrRequiredBy)); } $strImages = ""; foreach ($objHandler->getObjMetadata()->getArrScreenshots() as $strOneScreenshot) { $strImage = ""; if (uniSubstr($objHandler->getObjMetadata()->getStrPath(), 0, -4) == ".zip") { $objZip = new class_zip(); $objImage = $objZip->getFileFromArchive($objHandler->getObjMetadata()->getStrPath(), $strOneScreenshot); if ($objImage !== false) { $strImage = _images_cachepath_ . "/" . generateSystemid() . uniSubstr($strOneScreenshot, -4); file_put_contents(_realpath_ . $strImage, $objImage); } } else { $strImage = $objHandler->getObjMetadata()->getStrPath() . "/" . $strOneScreenshot; } if ($strImage != "") { $strImages .= "<img src='" . _webpath_ . "/image.php?image=" . urlencode($strImage) . "&maxWidth=300&maxHeight=200' alt='" . $strOneScreenshot . "' /> "; } } $arrRows[] = array($this->getLang("package_screenshots"), $strImages); $strReturn .= $this->objToolkit->dataTable(null, $arrRows); return $strReturn; }
/** * Updates the internal information of the file based on the metadata.xml */ private function updatePackageInformation() { $objZip = new class_zip(); $strMetadata = $objZip->getFileFromArchive($this->getStrFilename(), "/metadata.xml"); if ($strMetadata !== false) { $objMetadata = new class_module_packagemanager_metadata(); $objMetadata->autoInit($this->getStrFilename()); $this->setBitIspackage(1); $this->setStrCat($objMetadata->getStrType()); } else { $this->setBitIspackage(0); } }
/** * Reads the metadata-file from a zipped package. * * @param string $strPackagePath * @throws class_exception * @return void */ private function initFromPackage($strPackagePath) { if (!is_file(_realpath_ . $strPackagePath)) { throw new class_exception("file not found: " . _realpath_ . $strPackagePath, class_exception::$level_ERROR); } $objZip = new class_zip(); $strMetadata = $objZip->getFileFromArchive($strPackagePath, "/metadata.xml"); if ($strMetadata === false) { throw new class_exception("error reading metadata from " . $strPackagePath, class_exception::$level_ERROR); } $this->parseXMLDocument($strMetadata); }
/** * Copies the metadata.xml content into the files properties. * @permissions edit * @xml * @return string */ protected function actionUpdateDataFromMetadata() { $objPackage = new class_module_mediamanager_file($this->getSystemid()); $objZip = new class_zip(); $strMetadata = $objZip->getFileFromArchive($objPackage->getStrFilename(), "/metadata.xml"); if ($strMetadata !== false) { $objMetadata = new class_module_packagemanager_metadata(); $objMetadata->autoInit($objPackage->getStrFilename()); $objPackage->setStrName($objMetadata->getStrTitle()); $objPackage->setStrDescription($objMetadata->getStrDescription()); //updateObjectToDb triggers the update of the isPackage and the category flags $objPackage->updateObjectToDb(); return "<message><success /></message>"; } return "<message><error /></message>"; }
/** * Extracts the zip-archive into a temp-folder. * The matching packagemanager is returned. * * @param string $strPackagePath * * @return interface_packagemanager_packagemanager */ public function extractPackage($strPackagePath) { $strTargetFolder = generateSystemid(); class_logger::getInstance(class_logger::PACKAGEMANAGEMENT)->addLogRow("extracting package " . $strPackagePath . " to " . _projectpath_ . "/temp/" . $strTargetFolder, class_logger::$levelInfo); $objZip = new class_zip(); $objZip->extractArchive($strPackagePath, _projectpath_ . "/temp/" . $strTargetFolder); return $this->getPackageManagerForPath(_projectpath_ . "/temp/" . $strTargetFolder); }