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]);
 }
 /**
  * Generic list of all packages available on the local filesystem
  * @return string
  * @permissions view
  * @autoTestable
  */
 protected function actionOpenFolder()
 {
     if (validateSystemid(class_module_system_setting::getConfigValue("_packageserver_repo_id_"))) {
         if ($this->getSystemid() == "") {
             $this->setSystemid(class_module_system_setting::getConfigValue("_packageserver_repo_id_"));
         }
         $objIterator = new class_array_section_iterator(class_module_mediamanager_file::getFileCount($this->getSystemid(), false, false, true));
         $objIterator->setPageNumber($this->getParam("pv"));
         $objIterator->setArraySection(class_module_mediamanager_file::loadFilesDB($this->getSystemid(), false, false, $objIterator->calculateStartPos(), $objIterator->calculateEndPos(), true));
     } else {
         $objIterator = new class_array_section_iterator(class_module_mediamanager_file::getFlatPackageListCount(false, false));
         $objIterator->setPageNumber($this->getParam("pv"));
         $objIterator->setArraySection(class_module_mediamanager_file::getFlatPackageList(false, false, $objIterator->calculateStartPos(), $objIterator->calculateEndPos()));
     }
     return $this->renderList($objIterator);
 }
 /**
  * Internal helper, loads all files available including a traversal
  * of the nested folders.
  *
  * @param $strParentId
  * @param int|bool $strCategoryFilter
  * @param int $intStart
  * @param int $intEnd
  * @param bool $strNameFilter
  *
  * @return class_module_mediamanager_file[]
  */
 private function getAllPackages($strParentId, $strCategoryFilter = false, $intStart = null, $intEnd = null, $strNameFilter = false)
 {
     $arrReturn = array();
     if (validateSystemid($strParentId)) {
         $arrSubfiles = class_module_mediamanager_file::loadFilesDB($strParentId, false, true, null, null, true);
         foreach ($arrSubfiles as $objOneFile) {
             if ($objOneFile->getIntType() == class_module_mediamanager_file::$INT_TYPE_FILE) {
                 //filename based check if the file should be included
                 if ($strNameFilter !== false) {
                     if (uniStrpos($strNameFilter, ",") !== false) {
                         if (in_array($objOneFile->getStrName(), explode(",", $strNameFilter))) {
                             $arrReturn[] = $objOneFile;
                         }
                     } else {
                         if (uniSubstr($objOneFile->getStrName(), 0, uniStrlen($strNameFilter)) == $strNameFilter) {
                             $arrReturn[] = $objOneFile;
                         }
                     }
                 } else {
                     $arrReturn[] = $objOneFile;
                 }
             } else {
                 $arrReturn = array_merge($arrReturn, $this->getAllPackages($objOneFile->getSystemid()));
             }
         }
         if ($intStart !== null && $intEnd !== null && $intStart > 0 && $intEnd > $intStart) {
             if ($intEnd > count($arrReturn)) {
                 $intEnd = count($arrReturn);
             }
             $arrTemp = array();
             for ($intI = $intStart; $intI <= $intEnd; $intI++) {
                 $arrTemp[] = $arrReturn[$intI];
             }
             $arrReturn = $arrTemp;
         }
         //sort them by filename
         usort($arrReturn, function (class_module_mediamanager_file $objA, class_module_mediamanager_file $objB) {
             return strcmp($objA->getStrName(), $objB->getStrName());
         });
     } else {
         $arrReturn = class_module_mediamanager_file::getFlatPackageList($strCategoryFilter, true, $intStart, $intEnd, $strNameFilter);
     }
     return $arrReturn;
 }
 /**
  * @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;
 }
 /**
  * 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"]);
                 }
             }
         }
     }
 }