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"); }
/** * 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; }
/** * 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); }
/** * 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); } }
/** * 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>"; }