/** * Traverses the folder and adds the folder recursively. * * @param string $strFolder * * @return bool */ public function addFolder($strFolder) { $bitReturn = true; if (is_dir(_realpath_ . $strFolder)) { $objFilesystem = new class_filesystem(); $arrFiles = $objFilesystem->getCompleteList($strFolder, array(), array(), array(".", "..")); foreach ($arrFiles["files"] as $arrOneFile) { $bitReturn = $bitReturn && $this->addFile($arrOneFile["filepath"]); } foreach ($arrFiles["folders"] as $strOneFolder) { $bitReturn = $bitReturn && $this->addFolder($strFolder . "/" . $strOneFolder); } return $bitReturn; } return false; }
/** * Returns a list of installed packages, so a single metadata-entry * for each package. * * @return class_module_packagemanager_metadata[] */ public function getInstalledPackages() { $arrReturn = array(); //loop all packages found $objFilesystem = new class_filesystem(); $arrFolders = $objFilesystem->getCompleteList("/templates"); foreach ($arrFolders["folders"] as $strOneFolder) { try { $objMetadata = new class_module_packagemanager_metadata(); $objMetadata->autoInit("/templates/" . $strOneFolder); $arrReturn[] = $objMetadata; } catch (class_exception $objEx) { } } return $arrReturn; }
/** * @param $strPath * @return void */ private function recursiveImageProcessing($strPath) { $objFilesystem = new class_filesystem(); $arrFilesFolders = $objFilesystem->getCompleteList($strPath, array(".jpg", ".jpeg", ".png", ".gif"), array(), array(".", "..", ".svn")); $this->intFilesTotal += $arrFilesFolders["nrFiles"]; foreach ($arrFilesFolders["folders"] as $strOneFolder) { $this->recursiveImageProcessing($strPath . "/" . $strOneFolder); } foreach ($arrFilesFolders["files"] as $arrOneFile) { $strImagePath = $strPath . "/" . $arrOneFile["filename"]; $objImage = new class_image2(); $objImage->setUseCache(false); $objImage->load($strImagePath); $objImage->addOperation(new class_image_scale($this->intMaxWidth, $this->intMaxHeight)); if ($objImage->save($strImagePath)) { $this->intFilesProcessed++; } } }
function walkFolderRecursive($strStartFolder) { $objFilesystem = new class_filesystem(); $arrFilesAndFolders = $objFilesystem->getCompleteList($strStartFolder, array(".php"), array(), array(".", "..", ".svn")); foreach ($arrFilesAndFolders["files"] as $arrOneFile) { $strFilename = $arrOneFile["filename"]; //include the filecontent $strContent = file_get_contents($strStartFolder . "/" . $strFilename); if (uniSubstr($strContent, 0, 5) != "<?php") { echo "Whitespace at the beginning of file >> " . $strStartFolder . "/" . $strFilename . " is:>" . uniSubstr($strContent, 0, 1) . "< << \n"; } if (uniSubstr($strContent, -2) != "?>") { echo "Whitespace at the end of file >> " . $strStartFolder . "/" . $strFilename . " << \n"; } } foreach ($arrFilesAndFolders["folders"] as $strOneFolder) { walkFolderRecursive($strStartFolder . "/" . $strOneFolder); } }
/** * Checks if all content of the passed folder is writable * @param string $strFolder * @param string[] $arrErrors */ private function checkWritableRecursive($strFolder, &$arrErrors) { if (!is_writable(_realpath_ . $strFolder)) { $arrErrors[] = $strFolder; } $objFilesystem = new class_filesystem(); $arrContent = $objFilesystem->getCompleteList($strFolder); foreach ($arrContent["files"] as $arrOneFile) { if (!is_writable(_realpath_ . $strFolder . "/" . $arrOneFile["filename"])) { $arrErrors[] = $strFolder . "/" . $arrOneFile["filename"]; } } foreach ($arrContent["folders"] as $strOneFolder) { $this->checkWritableRecursive($strFolder . "/" . $strOneFolder, $arrErrors); } }
/** * Synchronized the list of template-packs available in the filesystem * with the list of packs stored at the database. * * @return void * @static */ public static function syncTemplatepacks() { //scan the list of packs available in the filesystem $objFilesystem = new class_filesystem(); $arrFolders = $objFilesystem->getCompleteList("/templates"); //scan packs installed /** @var class_module_packagemanager_template[] $arrPacksInstalled */ $arrPacksInstalled = self::getObjectList(); foreach ($arrFolders["folders"] as $strOneFolder) { $bitFolderFound = false; //search the pack in the list of available ones foreach ($arrPacksInstalled as $objOnePack) { if ($objOnePack->getStrName() == $strOneFolder) { $bitFolderFound = true; break; } } if (!$bitFolderFound) { $objPack = new class_module_packagemanager_template(); $objPack->setStrName($strOneFolder); $objPack->setIntRecordStatus(0); $objPack->updateObjectToDb(); } } //scan folders not existing any more foreach ($arrPacksInstalled as $objOnePack) { if (!in_array($objOnePack->getStrName(), $arrFolders["folders"])) { $objOnePack->deleteObjectFromDatabase(); } } }
/** * 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; }
/** * Generates a view to browse the filesystem directly. * By default, the methods takes two params into account: folder and form_element * * @return string * @autoTestable */ protected function actionFolderListFolderview() { $this->setArrModuleEntry("template", "/folderview.tpl"); $strReturn = ""; //param inits $strFolder = "/files"; if ($this->getParam("folder") != "") { $strFolder = $this->getParam("folder"); } $arrExcludeFolder = array(0 => ".", 1 => ".."); $strFormElement = $this->getParam("form_element"); $objFilesystem = new class_filesystem(); $arrContent = $objFilesystem->getCompleteList($strFolder, array(), array(), $arrExcludeFolder, true, false); $strReturn .= $this->objToolkit->listHeader(); $strReturn .= $this->objToolkit->genericAdminList(generateSystemid(), $this->getLang("commons_path"), "", $strFolder, 1); $strReturn .= $this->objToolkit->listFooter(); $strReturn .= $this->objToolkit->divider(); $intCounter = 0; //Show Folders //Folder to jump one back up $arrFolderStart = array("/files"); $strReturn .= $this->objToolkit->listHeader(); $bitHit = false; if (!in_array($strFolder, $arrFolderStart) && $bitHit == false) { $strAction = $this->objToolkit->listButton(class_link::getLinkAdmin($this->getArrModule("modul"), "folderListFolderview", "&folder=" . uniSubstr($strFolder, 0, uniStrrpos($strFolder, "/")) . "&form_element=" . $strFormElement, $this->getLang("commons_one_level_up"), $this->getLang("commons_one_level_up"), "icon_folderActionLevelup")); $strReturn .= $this->objToolkit->genericAdminList(generateSystemid(), "..", class_adminskin_helper::getAdminImage("icon_folderOpen"), $strAction, $intCounter++); } if ($arrContent["nrFolders"] != 0) { foreach ($arrContent["folders"] as $strFolderCur) { $strAction = $this->objToolkit->listButton(class_link::getLinkAdmin($this->getArrModule("modul"), "folderListFolderview", "&folder=" . $strFolder . "/" . $strFolderCur . "&form_element=" . $strFormElement, $this->getLang("action_open_folder"), $this->getLang("action_open_folder"), "icon_folderActionOpen")); $strAction .= $this->objToolkit->listButton("<a href=\"#\" title=\"" . $this->getLang("commons_accept") . "\" rel=\"tooltip\" onclick=\"KAJONA.admin.folderview.selectCallback([['" . $strFormElement . "', '" . $strFolder . "/" . $strFolderCur . "']]);\">" . class_adminskin_helper::getAdminImage("icon_accept")); $strReturn .= $this->objToolkit->genericAdminList(generateSystemid(), $strFolderCur, class_adminskin_helper::getAdminImage("icon_folderOpen"), $strAction, $intCounter++); } } if ($bitHit) { $strReturn .= $this->objToolkit->listFooter(); } return $strReturn; }