コード例 #1
0
 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");
 }
コード例 #2
0
 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.";
     }
 }
コード例 #3
0
ファイル: test_zipTest.php プロジェクト: jinshana/kajonacms
 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();
     }
 }
コード例 #5
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");
 }
コード例 #6
0
 /**
  * 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;
 }
コード例 #8
0
 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;
 }
コード例 #9
0
 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;
 }