From b96a1df68e91e623c7b700f8107ae91ed96bb149 Mon Sep 17 00:00:00 2001 From: Elizabeth Danzberger Date: Mon, 16 Dec 2024 10:59:53 -0500 Subject: [PATCH] feat: create asset from task output file Signed-off-by: Elizabeth Danzberger --- appinfo/routes.php | 1 + lib/Controller/AssetsController.php | 37 +++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index 7a6afb4880..7b531f775b 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -42,6 +42,7 @@ // Direct Editing: Assets ['name' => 'assets#create', 'url' => 'assets', 'verb' => 'POST'], + ['name' => 'assets#createFromTaskOutput', 'url' => 'assets/tasks', 'verb' => 'POST'], ['name' => 'assets#get', 'url' => 'assets/{token}', 'verb' => 'GET'], // templates diff --git a/lib/Controller/AssetsController.php b/lib/Controller/AssetsController.php index b99f0d4b31..62a34d6427 100644 --- a/lib/Controller/AssetsController.php +++ b/lib/Controller/AssetsController.php @@ -77,15 +77,36 @@ public function create($path) { ]); } + public function createFromTaskOutput(int $fileId): JSONResponse { + $node = $this->rootFolder->getFirstNodeById($fileId); + if (is_null($node)) { + $node = $this->rootFolder->getFirstNodeByIdInPath($fileId, '/' . $this->rootFolder->getAppDataDirectoryName() . '/'); + } + + if (!($node instanceof File)) { + return new JSONResponse([], Http::STATUS_NOT_FOUND); + } + + $asset = $this->assetMapper->newAsset($this->userId, $node->getId()); + + return new JSONResponse([ + 'url' => $this->urlGenerator->linkToRouteAbsolute('richdocuments.assets.get', [ + 'token' => $asset->getToken(), + 'fromTask' => true, + ]) + ]); + } + /** * @PublicPage * @NoCSRFRequired * * @param string $token + * @param boolean $fromTask * @return Http\Response */ #[RestrictToWopiServer] - public function get($token) { + public function get($token, $fromTask = false) { try { $asset = $this->assetMapper->getAssetByToken($token); } catch (DoesNotExistException) { @@ -98,10 +119,17 @@ public function get($token) { $this->assetMapper->delete($asset); } - $this->userScopeService->setUserScope($asset->getUid()); - $userFolder = $this->rootFolder->getUserFolder($asset->getUid()); - $node = $userFolder->getFirstNodeById($asset->getFileid()); + + if ($fromTask) { + $node = $this->rootFolder->getFirstNodeById($asset->getFileid()); + if (is_null($node)) { + $node = $this->rootFolder->getFirstNodeByIdInPath($asset->getFileid(), '/' . $this->rootFolder->getAppDataDirectoryName() . '/'); + } + } else { + $userFolder = $this->rootFolder->getUserFolder($asset->getUid()); + $node = $userFolder->getFirstNodeById($asset->getFileid()); + } if ($node === null) { return new DataResponse([], Http::STATUS_NOT_FOUND); @@ -114,6 +142,7 @@ public function get($token) { $response = new StreamResponse($node->fopen('rb')); $response->addHeader('Content-Disposition', 'attachment'); $response->addHeader('Content-Type', 'application/octet-stream'); + return $response; } }