예제 #1
0
 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");
     }
 }
예제 #4
0
 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 . "' />&nbsp;";
         }
     }
     $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);
 }