getDefaultUploadFolderForUser($user); $uploadFolder = $this->getDefaultUploadFolderForPage($pid) ?? $uploadFolder; $uploadFolder = $this->eventDispatcher->dispatch( new AfterDefaultUploadFolderWasResolvedEvent($uploadFolder, $pid, $table, $field) )->getUploadFolder() ?? $uploadFolder; $uploadFolder = $uploadFolder ?? $this->getDefaultUploadFolder($user); return $uploadFolder instanceof Folder ? $uploadFolder : false; } public function getDefaultUploadFolderForUser(BackendUserAuthentication $backendUser): ?Folder { $uploadFolder = $backendUser->getTSConfig()['options.']['defaultUploadFolder'] ?? ''; return $this->resolveFolder($uploadFolder); } public function getDefaultUploadFolderForPage(?int $pid): ?Folder { $uploadFolder = BackendUtility::getPagesTSconfig($pid)['options.']['defaultUploadFolder'] ?? ''; return $this->resolveFolder($uploadFolder); } protected function resolveFolder(string $uploadPath): ?Folder { $uploadFolder = null; if ($uploadPath) { try { $uploadFolder = $this->resourceFactory->getFolderObjectFromCombinedIdentifier($uploadPath); } catch (FolderDoesNotExistException $e) { } } return $uploadFolder; } /** * Detects the first default folder of the first storage that the backend user has access to. * If the default storage is not available, all other storages are then checked as well. * * @param BackendUserAuthentication $backendUser * @return Folder|null */ protected function getDefaultUploadFolder(BackendUserAuthentication $backendUser): ?Folder { $uploadFolder = null; foreach ($backendUser->getFileStorages() as $storage) { if ($storage->isDefault() && $storage->isWritable()) { try { $uploadFolder = $storage->getDefaultFolder(); if ($uploadFolder->checkActionPermission('write')) { break; } $uploadFolder = null; } catch (Exception $folderAccessException) { // If the folder is not accessible (no permissions / does not exist) we skip this one. } break; } } if (!$uploadFolder instanceof Folder) { foreach ($backendUser->getFileStorages() as $storage) { if ($storage->isWritable()) { try { $uploadFolder = $storage->getDefaultFolder(); if ($uploadFolder->checkActionPermission('write')) { break; } $uploadFolder = null; } catch (Exception $folderAccessException) { // If the folder is not accessible (no permissions / does not exist) try the next one. } } } } return $uploadFolder; } }