Skip to content

Commit

Permalink
feat: create asset from task output file
Browse files Browse the repository at this point in the history
Signed-off-by: Elizabeth Danzberger <[email protected]>
  • Loading branch information
elzody committed Dec 16, 2024
1 parent 1d229e9 commit b96a1df
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 4 deletions.
1 change: 1 addition & 0 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
37 changes: 33 additions & 4 deletions lib/Controller/AssetsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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);
Expand All @@ -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;
}
}

0 comments on commit b96a1df

Please sign in to comment.