diff options
author | Vincent Petry <pvince81@owncloud.com> | 2016-05-11 19:41:36 +0200 |
---|---|---|
committer | Thomas Müller <DeepDiver1975@users.noreply.github.com> | 2016-05-11 19:41:36 +0200 |
commit | ceaac03bb5512f925e43bdf8574977ea8e056e62 (patch) | |
tree | 109cec3643fe8d4aa8cb7c6ef7254ac8db6f88a2 /apps/files/controller/viewcontroller.php | |
parent | bc1d70f08c4042c457dc3e1bf25c5a34412ac2fb (diff) | |
download | nextcloud-server-ceaac03bb5512f925e43bdf8574977ea8e056e62.tar.gz nextcloud-server-ceaac03bb5512f925e43bdf8574977ea8e056e62.zip |
Make permalinks work for trashed files (#24537)
Opening a permalink that points to a trashed file will now display the
file within the "Deleted Files" section in the files web UI.
Diffstat (limited to 'apps/files/controller/viewcontroller.php')
-rw-r--r-- | apps/files/controller/viewcontroller.php | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/apps/files/controller/viewcontroller.php b/apps/files/controller/viewcontroller.php index 6ee924e2f0b..7539a3ab649 100644 --- a/apps/files/controller/viewcontroller.php +++ b/apps/files/controller/viewcontroller.php @@ -39,6 +39,7 @@ use OCP\IUserSession; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use OCP\AppFramework\Http\NotFoundResponse; use OCP\Files\Folder; +use OCP\App\IAppManager; /** * Class ViewController @@ -62,8 +63,10 @@ class ViewController extends Controller { protected $eventDispatcher; /** @var IUserSession */ protected $userSession; + /** @var IAppManager */ + protected $appManager; /** @var \OCP\Files\Folder */ - protected $userFolder; + protected $rootFolder; /** * @param string $appName @@ -74,7 +77,8 @@ class ViewController extends Controller { * @param IConfig $config * @param EventDispatcherInterface $eventDispatcherInterface * @param IUserSession $userSession - * @param Folder $userFolder + * @param IAppManager $appManager + * @param Folder $rootFolder */ public function __construct($appName, IRequest $request, @@ -84,7 +88,8 @@ class ViewController extends Controller { IConfig $config, EventDispatcherInterface $eventDispatcherInterface, IUserSession $userSession, - Folder $userFolder + IAppManager $appManager, + Folder $rootFolder ) { parent::__construct($appName, $request); $this->appName = $appName; @@ -95,7 +100,8 @@ class ViewController extends Controller { $this->config = $config; $this->eventDispatcher = $eventDispatcherInterface; $this->userSession = $userSession; - $this->userFolder = $userFolder; + $this->appManager = $appManager; + $this->rootFolder = $rootFolder; } /** @@ -265,21 +271,33 @@ class ViewController extends Controller { * @NoAdminRequired */ public function showFile($fileId) { - $files = $this->userFolder->getById($fileId); - $params = []; + try { + $uid = $this->userSession->getUser()->getUID(); + $baseFolder = $this->rootFolder->get($uid . '/files/'); + $files = $baseFolder->getById($fileId); + $params = []; + + if (empty($files) && $this->appManager->isEnabledForUser('files_trashbin')) { + $baseFolder = $this->rootFolder->get($uid . '/files_trashbin/files/'); + $files = $baseFolder->getById($fileId); + $params['view'] = 'trashbin'; + } - if (!empty($files)) { - $file = current($files); - if ($file instanceof Folder) { - // set the full path to enter the folder - $params['dir'] = $this->userFolder->getRelativePath($file->getPath()); - } else { - // set parent path as dir - $params['dir'] = $this->userFolder->getRelativePath($file->getParent()->getPath()); - // and scroll to the entry - $params['scrollto'] = $file->getName(); + if (!empty($files)) { + $file = current($files); + if ($file instanceof Folder) { + // set the full path to enter the folder + $params['dir'] = $baseFolder->getRelativePath($file->getPath()); + } else { + // set parent path as dir + $params['dir'] = $baseFolder->getRelativePath($file->getParent()->getPath()); + // and scroll to the entry + $params['scrollto'] = $file->getName(); + } + return new RedirectResponse($this->urlGenerator->linkToRoute('files.view.index', $params)); } - return new RedirectResponse($this->urlGenerator->linkToRoute('files.view.index', $params)); + } catch (\OCP\Files\NotFoundException $e) { + return new NotFoundResponse(); } return new NotFoundResponse(); } |