/** * The selected Folder gets identified by its first file, * because folders don't have UIDs and the identifier contains slashes * which must not be GET params * * @param File $image * @param File $listFolder * @param File $categoryFolder * @param int $categoryPage * @param int $listPage * @return string */ public function categoryAction(File $image = null, File $listFolder = null, File $categoryFolder = null, $categoryPage = 1, $listPage = 1) { if ($this->configurationInvalid) { return $this->getErrorMessageForActionName('Category'); } $this->view->assign('currentCategoryFolder', $categoryFolder); $this->view->assign('currentListFolder', $listFolder); $this->view->assign('currentListPage', $listPage); $this->view->assign('currentImage', $image); $itemsToPaginate = null; if ($categoryFolder !== null) { /** @var Folder $parentFolder */ $parentFolder = $categoryFolder->getParentFolder(); if ($this->folderIsInsideSelectedStorage($parentFolder)) { /** @var Folder $folderUpwards */ $folderUpwards = $parentFolder->getParentFolder(); $itemsToPaginate = $this->getSubFoldersWithImage($parentFolder); if ($this->folderIsInsideSelectedStorage($folderUpwards)) { if ($folderUpwards->getHashedIdentifier() === $this->selectedFolder->getHashedIdentifier()) { $this->view->assign('upwardsIsSelectedFolder', true); } else { $this->view->assign('parentFolderImage', $this->getFolderImage($folderUpwards)); } } } } if ($itemsToPaginate === null) { $itemsToPaginate = $this->getSubFoldersWithImage($this->selectedFolder); } $this->assignPaginationParams($itemsToPaginate, $categoryPage); }
/** * Get folder configuration record * * @param Folder $folder * @return array */ public function getFolderRecord(Folder $folder) { if (!isset(self::$folderRecordCache[$folder->getCombinedIdentifier()]) || !array_key_exists($folder->getCombinedIdentifier(), self::$folderRecordCache)) { $record = $this->getDatabase()->exec_SELECTgetSingleRow('*', 'tx_falsecuredownload_folder', 'storage = ' . (int) $folder->getStorage()->getUid() . ' AND folder_hash = ' . $this->getDatabase()->fullQuoteStr($folder->getHashedIdentifier(), 'tx_falsecuredownload_folder')); // cache results self::$folderRecordCache[$folder->getCombinedIdentifier()] = $record; } return self::$folderRecordCache[$folder->getCombinedIdentifier()]; }
/** * Search for files with same onlineMediaId by content hash in indexed storage * * @param string $onlineMediaId * @param Folder $targetFolder * @param string $fileExtension * @return File|NULL */ protected function findExistingFileByOnlineMediaId($onlineMediaId, Folder $targetFolder, $fileExtension) { $file = null; $fileHash = sha1($onlineMediaId); $files = $this->getFileIndexRepository()->findByContentHash($fileHash); if (!empty($files)) { foreach ($files as $fileIndexEntry) { if ($fileIndexEntry['folder_hash'] === $targetFolder->getHashedIdentifier() && (int) $fileIndexEntry['storage'] === $targetFolder->getStorage()->getUid() && $fileIndexEntry['extension'] === $fileExtension) { $file = $this->getResourceFactory()->getFileObject($fileIndexEntry['uid'], $fileIndexEntry); break; } } } return $file; }
/** * Find all records for files in a Folder * * @param \TYPO3\CMS\Core\Resource\Folder $folder * @return array|NULL */ public function findByFolder(\TYPO3\CMS\Core\Resource\Folder $folder) { $resultRows = $this->getDatabaseConnection()->exec_SELECTgetRows(implode(',', $this->fields), $this->table, 'folder_hash = ' . $this->getDatabaseConnection()->fullQuoteStr($folder->getHashedIdentifier(), $this->table) . ' AND storage = ' . (int) $folder->getStorage()->getUid(), '', '', '', 'identifier'); return $resultRows; }
/** * Check if given FeGroups have enough rights to access given folder * * @param Folder $folder * @param bool|array $userFeGroups FALSE = no login, array() is the groups of the user * @return bool */ public function checkFolderRootLineAccess(Folder $folder, $userFeGroups) { $cacheIdentifier = sha1($folder->getHashedIdentifier() . serialize($userFeGroups)); if (!isset($this->checkFolderRootLineAccessCache[$cacheIdentifier])) { $this->checkFolderRootLineAccessCache[$cacheIdentifier] = true; // loop trough the root line of an folder and check the permissions of every folder foreach ($this->getFolderRootLine($folder) as $folder) { // fetch folder permissions record $folderRecord = $this->utilityService->getFolderRecord($folder); // if record found check permissions if ($folderRecord) { if (!$this->matchFeGroupsWithFeUser($folderRecord['fe_groups'], $userFeGroups)) { $this->checkFolderRootLineAccessCache[$cacheIdentifier] = false; break; } } } } return $this->checkFolderRootLineAccessCache[$cacheIdentifier]; }
/** * Update folder permissions records when a folder is renamed * * @param Folder $folder * @param string $newName */ public function postFolderRename(Folder $folder, $newName) { $newFolder = $folder->getParentFolder()->getSubfolder($newName); $oldStorageUid = $folder->getStorage()->getUid(); $newStorageUid = $newFolder->getStorage()->getUid(); $this->utilityService->updateFolderRecord($oldStorageUid, $folder->getHashedIdentifier(), $folder->getIdentifier(), array('storage' => $newStorageUid, 'folder_hash' => $newFolder->getHashedIdentifier(), 'folder' => $newFolder->getIdentifier())); if (!empty($this->folderMapping[$folder->getCombinedIdentifier()])) { $newMapping = $this->getSubFolderIdentifiers($newFolder); foreach ($this->folderMapping[$folder->getCombinedIdentifier()] as $key => $folderInfo) { $this->utilityService->updateFolderRecord($oldStorageUid, $folderInfo[0], $folderInfo[1], array('storage' => $newStorageUid, 'folder_hash' => $newMapping[$key][0], 'folder' => $newMapping[$key][1])); } } }