/** * Generates an entry in the logbook an increases the hits-counter * * @param \class_module_mediamanager_file $objFile */ public static function generateDlLog(class_module_mediamanager_file $objFile) { $objDB = class_carrier::getInstance()->getObjDB(); $strQuery = "INSERT INTO " . _dbprefix_ . "mediamanager_dllog\n\t (downloads_log_id, downloads_log_date, downloads_log_file, downloads_log_user, downloads_log_ip) VALUES\n\t (?, ?, ?, ?, ?)"; $objDB->_pQuery($strQuery, array(generateSystemid(), (int) time(), basename($objFile->getStrFilename()), class_carrier::getInstance()->getObjSession()->getUsername(), getServer("REMOTE_ADDR"))); $objFile->increaseHits(); }
public function testFileSync() { echo "test mediamanager...\n"; if (class_module_system_module::getModuleByName("samplecontent") == null || !is_file(_realpath_ . "/files/images/samples/IMG_3000.JPG")) { return; } $objFilesystem = new class_filesystem(); $objFilesystem->folderCreate(_filespath_ . "/images/autotest"); $objFilesystem->fileCopy(_filespath_ . "/images/samples/IMG_3000.JPG", _filespath_ . "/images/autotest/IMG_3000.jpg"); $objFilesystem->fileCopy(_filespath_ . "/images/samples/IMG_3000.JPG", _filespath_ . "/images/autotest/IMG_3000.png"); $objFilesystem->fileCopy(_filespath_ . "/images/samples/IMG_3000.JPG", _filespath_ . "/images/autotest/PA021805.JPG"); $objFilesystem->fileCopy(_filespath_ . "/images/samples/IMG_3000.JPG", _filespath_ . "/images/autotest/test.txt"); $objRepo = new class_module_mediamanager_repo(); $objRepo->setStrPath(_filespath_ . "/images/autotest"); $objRepo->setStrTitle("autotest repo"); $objRepo->setStrViewFilter(".jpg,.png"); $objRepo->updateObjectToDb(); $objRepo->syncRepo(); $arrFiles = class_module_mediamanager_file::loadFilesDB($objRepo->getSystemid()); $this->assertEquals(3, count($arrFiles)); foreach ($arrFiles as $objOneFile) { $objOneFile->deleteObjectFromDatabase(); } $objRepo->deleteObjectFromDatabase(); $arrFiles = $objFilesystem->getFilelist(_filespath_ . "/images/autotest"); $this->assertEquals(1, count($arrFiles)); $this->assertEquals("test.txt", array_values($arrFiles)[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"); }
/** * Internal helper, triggers the counting of packages available for the current request * * @param $strParentId * @param bool $strCategoryFilterFilter * @param bool $strNameFilter * * @return int */ private function getAllPackagesCount($strParentId, $strCategoryFilterFilter = false, $strNameFilter = false) { if (validateSystemid($strParentId)) { return count($this->getAllPackages($strParentId, $strCategoryFilterFilter, null, null, $strNameFilter)); } else { return class_module_mediamanager_file::getFlatPackageListCount($strCategoryFilterFilter, true, $strNameFilter); } }
/** * Syncs the repo partially * * @return string * @permissions edit */ protected function actionPartialSyncRepo() { $strReturn = ""; $strResult = ""; /** @var class_module_mediamanager_repo|class_module_mediamanager_file $objInstance */ $objInstance = class_objectfactory::getInstance()->getObject($this->getSystemid()); if ($objInstance instanceof class_module_mediamanager_file) { $arrSyncs = class_module_mediamanager_file::syncRecursive($objInstance->getSystemid(), $objInstance->getStrFilename()); } else { if ($objInstance instanceof class_module_mediamanager_repo) { $arrSyncs = $objInstance->syncRepo(); } else { return ""; } } $strResult .= $this->getLang("sync_end") . "<br />"; $strResult .= $this->getLang("sync_add") . $arrSyncs["insert"] . "<br />" . $this->getLang("sync_del") . $arrSyncs["delete"]; $strReturn .= "<repo>" . xmlSafeString(strip_tags($strResult)) . "</repo>"; class_logger::getInstance()->addLogRow("synced gallery partially >" . $this->getSystemid() . ": " . $strResult, class_logger::$levelInfo); return $strReturn; }
/** * Syncs the complete repo with the filesystem. Adds new files and removes delete files to and * from the db. * * @return array [insert, delete] */ public function syncRepo() { return class_module_mediamanager_file::syncRecursive($this->getSystemid(), $this->getStrPath()); }
/** * Wrapper to load a single element and generate the image * @return void */ private function generateMediamanagerImage() { if (class_module_system_module::getModuleByName("mediamanager") !== null) { $objElement = new class_module_pages_pageelement($this->strElementId); $objPortalElement = $objElement->getConcretePortalInstance(); $objFile = new class_module_mediamanager_file($this->strSystemid); if (!$objFile->rightView()) { class_response_object::getInstance()->setStrStatusCode(class_http_statuscodes::SC_FORBIDDEN); class_response_object::getInstance()->sendHeaders(); return; } $arrElementData = $objPortalElement->getElementContent($objElement->getSystemid()); class_session::getInstance()->sessionClose(); if (is_file(_realpath_ . $objFile->getStrFilename())) { $objImage = new class_image2(); $objImage->load($objFile->getStrFilename()); $objImage->addOperation(new class_image_scale($arrElementData["gallery_maxw_d"], $arrElementData["gallery_maxh_d"])); $objImage->addOperation(new class_image_text($arrElementData["gallery_text"], $arrElementData["gallery_text_x"], $arrElementData["gallery_text_y"], 10, "#ffffff")); if (is_file(_realpath_ . $arrElementData["gallery_overlay"])) { $objImageOverlay = new class_image2(); $objImageOverlay->load($arrElementData["gallery_overlay"]); $objImage->addOperation(new class_image_overlay($arrElementData["gallery_overlay"], $arrElementData["gallery_text_x"], $arrElementData["gallery_text_y"])); } $objImage->setJpegQuality((int) $this->intQuality); $objImage->sendToBrowser(); return; } } class_response_object::getInstance()->setStrStatusCode(class_http_statuscodes::SC_NOT_FOUND); class_response_object::getInstance()->sendHeaders(); }
/** * @param string $strParentId * * @return array */ private function getNavigationNodesHelper($strParentId) { $arrFoldersDB = class_module_mediamanager_file::loadFilesDB($strParentId, class_module_mediamanager_file::$INT_TYPE_FOLDER, true); $arrReturn = array(); foreach ($arrFoldersDB as $objOneFolder) { $objPoint = new class_module_navigation_point(); $objPoint->setIntRecordStatus(1); $objPoint->setStrName($objOneFolder->getStrName()); $objPoint->setStrPageI($this->getPagename()); $objPoint->setSystemid($objOneFolder->getSystemid()); $objPoint->setStrLinkSystemid($objOneFolder->getSystemid()); $objPoint->setStrLinkAction("mediaFolder"); $objPoint->setBitIsForeignNode(true); $arrTemp = array("node" => $objPoint, "subnodes" => $this->getNavigationNodesHelper($objOneFolder->getSystemid())); $arrReturn[] = $arrTemp; } return $arrReturn; }
/** * Will be kept for legacy compatibility * * @param bool $bitJsonResponse * * @return string */ private function doUpload($bitJsonResponse = false) { $strReturn = ""; //prepare the folder to be used as a target-folder for the upload $objFilemanagerRepo = new class_module_mediamanager_repo($this->arrElementData["char2"]); $objDownloadfolder = null; //add a special subfolder? $strPath = $objFilemanagerRepo->getStrPath(); if ($this->getParam("portaluploadDlfolder") != "") { /** @var $objDownloadfolder class_module_mediamanager_file */ $objDownloadfolder = class_objectfactory::getInstance()->getObject($this->getParam("portaluploadDlfolder")); //check if the folder is within the current repo /** @var $objTemp class_module_mediamanager_file */ $objTemp = $objDownloadfolder; while (validateSystemid($objTemp->getSystemid()) && ($objTemp instanceof class_module_mediamanager_file || $objTemp instanceof class_module_mediamanager_repo)) { if ($objTemp->getSystemid() == $this->arrElementData["char2"]) { $strPath = $objDownloadfolder->getStrFilename(); break; } $objTemp = class_objectfactory::getInstance()->getObject($objTemp->getPrevId()); } } //upload the file... if ($objFilemanagerRepo->rightRight1()) { //Handle the fileupload $arrSource = $this->getParam("portaluploadFile"); $strTarget = $strPath . "/" . createFilename($arrSource["name"]); $objFilesystem = new class_filesystem(); if ($objFilesystem->isWritable($strPath)) { //Check file for correct filters $arrAllowed = explode(",", $objFilemanagerRepo->getStrUploadFilter()); $strSuffix = uniStrtolower(uniSubstr($arrSource["name"], uniStrrpos($arrSource["name"], "."))); if ($objFilemanagerRepo->getStrUploadFilter() == "" || in_array($strSuffix, $arrAllowed)) { if ($objFilesystem->copyUpload($strTarget, $arrSource["tmp_name"])) { //upload was successfull. try to sync the downloads-archive. if ($objDownloadfolder != null && $objDownloadfolder instanceof class_module_mediamanager_file) { class_module_mediamanager_file::syncRecursive($objDownloadfolder->getSystemid(), $objDownloadfolder->getStrFilename()); } else { $objFilemanagerRepo->syncRepo(); } $this->flushCompletePagesCache(); if ($bitJsonResponse) { return true; } //reload the site to display the new file if (validateSystemid($this->getParam("portaluploadDlfolder"))) { $this->portalReload(class_link::getLinkPortalHref($this->getPagename(), "", "mediaFolder", "uploadSuccess=1", $this->getParam("portaluploadDlfolder"))); } else { $this->portalReload(class_link::getLinkPortalHref($this->getPagename(), "", "", $this->getAction(), "uploadSuccess=1", $this->getSystemid())); } } else { $strReturn .= $this->uploadForm($this->getLang("portaluploadCopyUploadError")); } } else { @unlink($arrSource["tmp_name"]); $strReturn .= $this->uploadForm($this->getLang("portaluploadFilterError")); } } else { $strReturn .= $this->uploadForm($this->getLang("portaluploadNotWritableError")); } } else { $strReturn .= $this->getLang("commons_error_permissions"); } return $strReturn; }
/** * Syncs the files in the db with the files in the filesystem * * @param string $strPrevID * @param string $strPath * @param bool $bitRecursive * @param \class_module_mediamanager_repo|null $objRepo * * @return array [insert, delete] */ public static function syncRecursive($strPrevID, $strPath, $bitRecursive = true, class_module_mediamanager_repo $objRepo = null) { $arrReturn = array(); $arrReturn["insert"] = 0; $arrReturn["delete"] = 0; if ($objRepo == null) { $objRepo = class_objectfactory::getInstance()->getObject($strPrevID); while ($objRepo != null && !$objRepo instanceof class_module_mediamanager_repo) { $objRepo = class_objectfactory::getInstance()->getObject($objRepo->getPrevId()); } } //Load the files in the DB $arrObjDB = class_module_mediamanager_file::loadFilesDB($strPrevID); //Load files and folder from filesystem $objFilesystem = new class_filesystem(); //if the repo defines a view-filter, take that one into account $arrViewFilter = array(); if ($objRepo->getStrViewFilter() != "") { $arrViewFilter = explode(",", $objRepo->getStrViewFilter()); } $arrFilesystem = $objFilesystem->getCompleteList($strPath, $arrViewFilter, array(), array(".", "..", ".svn")); //So, lets sync those two arrays //At first the files foreach ($arrFilesystem["files"] as $intKeyFS => $arrOneFileFilesystem) { //search the db-array for this file foreach ($arrObjDB as $intKeyDB => $objOneFileDB) { //File or folder if ($objOneFileDB->getintType() == self::$INT_TYPE_FILE) { //compare if ($objOneFileDB->getStrFilename() == str_replace(_realpath_, "", $arrOneFileFilesystem["filepath"])) { //And unset from both arrays unset($arrFilesystem["files"][$intKeyFS]); unset($arrObjDB[$intKeyDB]); } } } } //And loop the folders foreach ($arrFilesystem["folders"] as $intKeyFolder => $strFolder) { //search the array for folders foreach ($arrObjDB as $intKeyDB => $objOneFolderDB) { //file or folder? if ($objOneFolderDB->getIntType() == self::$INT_TYPE_FOLDER) { //compare if ($objOneFolderDB->getStrFilename() == $strPath . "/" . $strFolder) { //Unset from both unset($arrFilesystem["folders"][$intKeyFolder]); unset($arrObjDB[$intKeyDB]); } } } } //the remaining records from the database have to be deleted! if (count($arrObjDB) > 0) { foreach ($arrObjDB as $objOneFileDB) { $objOneFileDB->deleteObjectFromDatabase(); $arrReturn["delete"]++; } } //the remaining records from the filesystem have to be added foreach ($arrFilesystem["files"] as $arrOneFileFilesystem) { $strFileName = $arrOneFileFilesystem["filename"]; $strFileFilename = str_replace(_realpath_, "", $arrOneFileFilesystem["filepath"]); $objFile = new class_module_mediamanager_file(); $objFile->setStrFilename($strFileFilename); $objFile->setStrName($strFileName); $objFile->setIntType(self::$INT_TYPE_FILE); $objFile->updateObjectToDb($strPrevID); $arrReturn["insert"]++; } foreach ($arrFilesystem["folders"] as $strFolder) { $strFileName = $strFolder; $strFileFilename = $strPath . "/" . $strFolder; $objFile = new class_module_mediamanager_file(); $objFile->setStrFilename($strFileFilename); $objFile->setStrName($strFileName); $objFile->setIntType(self::$INT_TYPE_FOLDER); $objFile->updateObjectToDb($strPrevID); $arrReturn["insert"]++; } //Load subfolders class_carrier::getInstance()->getObjDB()->flushQueryCache(); if ($bitRecursive) { $objFolders = class_module_mediamanager_file::loadFilesDB($strPrevID, self::$INT_TYPE_FOLDER); foreach ($objFolders as $objOneFolderDB) { $arrTemp = class_module_mediamanager_file::syncRecursive($objOneFolderDB->getSystemid(), $objOneFolderDB->getStrFilename(), $bitRecursive, $objRepo); $arrReturn["insert"] += $arrTemp["insert"]; $arrReturn["delete"] += $arrTemp["delete"]; } } return $arrReturn; }
/** * Loads the content of a folder * If requested, loads subactions,too * * SPECIAL MODE FOR MODULE FOLDERVIEW * * @return string * @permissions view * @autoTestable */ protected function actionFolderContentFolderviewMode() { $strReturn = "<script type='text/javascript'>KAJONA.admin.loader.loadFile('" . class_resourceloader::getInstance()->getCorePathForModule("module_mediamanager") . "/module_mediamanager/admin/scripts/mediamanager.js');</script>"; //if set, save CKEditors CKEditorFuncNum parameter to read it again in KAJONA.admin.folderview.selectCallback() //so we don't have to pass through the param with all requests if ($this->getParam("CKEditorFuncNum") != "") { $strReturn .= "<script type=\"text/javascript\">window.opener.KAJONA.admin.folderview.selectCallbackCKEditorFuncNum = " . (int) $this->getParam("CKEditorFuncNum") . ";</script>"; } $strTargetfield = $this->getParam("form_element"); $this->setArrModuleEntry("template", "/folderview.tpl"); //list repos or contents? if ($this->getSystemid() == "") { //Load the repos $arrObjRepos = class_module_mediamanager_repo::getObjectList(); $intI = 0; //Print every repo /** @var class_module_mediamanager_repo $objOneRepo */ foreach ($arrObjRepos as $objOneRepo) { //check rights if ($objOneRepo->rightView()) { $strActions = ""; $strActions .= $this->objToolkit->listButton(class_link::getLinkAdmin($this->getArrModule("modul"), "folderContentFolderviewMode", "&form_element=" . $strTargetfield . "&systemid=" . $objOneRepo->getSystemid(), "", $this->getLang("action_open_folder"), "icon_folderActionOpen")); $strReturn .= $this->objToolkit->simpleAdminList($objOneRepo, $strActions, $intI++); } } if (uniStrlen($strReturn) != 0) { $strReturn = $this->objToolkit->listHeader() . $strReturn . $this->objToolkit->listFooter(); } if (count($arrObjRepos) == 0) { $strReturn .= $this->getLang("commons_list_empty"); } } else { $objFile = class_objectfactory::getInstance()->getObject($this->getSystemid()); if ($objFile === null || !$objFile->rightView()) { return $this->getLang("commons_error_permissions"); } $objIterator = new class_array_section_iterator(class_module_mediamanager_file::getFileCount($this->getSystemid())); $objIterator->setPageNumber($this->getParam("pv")); $objIterator->setArraySection(class_module_mediamanager_file::loadFilesDB($this->getSystemid(), false, false, $objIterator->calculateStartPos(), $objIterator->calculateEndPos())); $strReturn .= $this->actionUploadFileInternal(); $strReturn .= $this->generateNewFolderDialogCode(); $strReturn .= $this->renderFloatingGrid($objIterator, class_module_mediamanager_admin::INT_LISTTYPE_FOLDERVIEW, "&form_element=" . $this->getParam("form_element"), false); } return $strReturn; }
private function updateGalleryLevel($strNewPrevid, $strOldPrevid) { $arrFiles = class_module_mediamanager_file::loadFilesDB($strNewPrevid); $arrOldFiles = $this->objDB->getPArray("SELECT * FROM " . _dbprefix_ . "system, " . _dbprefix_ . "gallery_pic WHERE system_id = pic_id AND system_prev_id = ?", array($strOldPrevid)); foreach ($arrFiles as $objOneFile) { $strNewFilename = basename($objOneFile->getStrFilename()); echo " searching image/folder " . $strNewFilename . "\n"; foreach ($arrOldFiles as $arrOneOldFile) { if (basename($arrOneOldFile["pic_filename"]) == $strNewFilename) { $objOneFile->setStrName($arrOneOldFile["pic_name"]); $objOneFile->setStrDescription($arrOneOldFile["pic_description"]); $objOneFile->setStrSubtitle($arrOneOldFile["pic_subtitle"]); $objOneFile->setIntHits((int) $arrOneOldFile["pic_hits"]); $objOneFile->updateObjectToDb(); $this->moveComments($arrOneOldFile["pic_id"], $objOneFile->getSystemid()); $this->migrateRatings($arrOneOldFile["pic_id"], $objOneFile->getSystemid()); echo "...update succeeded\n"; if ($objOneFile->getIntType() == class_module_mediamanager_file::$INT_TYPE_FOLDER) { $this->updateGalleryLevel($objOneFile->getSystemid(), $arrOneOldFile["pic_id"]); } } } } }
/** * 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>"; }