user->isAdmin()) { throw new Forbidden(); } return parent::getActionList($request, $response); } /** * @throws BadRequest * @throws Forbidden * @throws Error */ public function postActionGetAttachmentFromImageUrl(Request $request): stdClass { $data = $request->getParsedBody(); $url = $data->url ?? null; $field = $data->field ?? null; $parentType = $data->parentType ?? null; $relatedType = $data->relatedType ?? null; if (!$url || !$field) { throw new BadRequest("No `url` or `field`."); } try { $fieldData = new FieldData( $field, $parentType, $relatedType ); } catch (Error $e) { throw new BadRequest($e->getMessage()); } return $this->injectableFactory ->create(UploadUrlService::class) ->uploadImage($url, $fieldData) ->getValueMap(); } /** * @throws BadRequest * @throws Forbidden * @throws NotFound */ public function postActionGetCopiedAttachment(Request $request): stdClass { $data = $request->getParsedBody(); $id = $data->id ?? null; $field = $data->field ?? null; $parentType = $data->parentType ?? null; $relatedType = $data->relatedType ?? null; if (!$id || !$field) { throw new BadRequest("No `id` or `field`."); } try { $fieldData = new FieldData( $field, $parentType, $relatedType ); } catch (Error $e) { throw new BadRequest($e->getMessage()); } return $this->getAttachmentService() ->copy($id, $fieldData) ->getValueMap(); } /** * @throws BadRequest * @throws Forbidden * @throws NotFound */ public function getActionFile(Request $request, Response $response): void { $id = $request->getRouteParam('id'); if (!$id) { throw new BadRequest(); } $fileData = $this->getAttachmentService()->getFileData($id); if ($fileData->getType()) { $response->setHeader('Content-Type', $fileData->getType()); } $response ->setHeader('Content-Disposition', 'attachment; filename="' . $fileData->getName() . '"') ->setHeader('Content-Length', (string) $fileData->getSize()) ->setBody($fileData->getStream()); } /** * @throws BadRequest * @throws Forbidden * @throws Error * @throws NotFound */ public function postActionChunk(Request $request, Response $response): void { $id = $request->getRouteParam('id'); $body = $request->getBodyContents(); if (!$id || !$body) { throw new BadRequest(); } $this->injectableFactory ->create(UploadService::class) ->uploadChunk($id, $body); $response->writeBody('true'); } private function getAttachmentService(): Service { return $this->injectableFactory->create(Service::class); } }