user->isAdmin()) { throw new Forbidden(); } } public function postActionGetAttachmentFromImageUrl(Request $request): stdClass { $data = $request->getParsedBody(); if (empty($data->url)) { throw new BadRequest(); } if (empty($data->field)) { throw new BadRequest('postActionGetAttachmentFromImageUrl: No field specified.'); } return $this->getAttachmentService() ->getAttachmentFromImageUrl($data) ->getValueMap(); } public function postActionGetCopiedAttachment(Request $request): stdClass { $data = $request->getParsedBody(); if (empty($data->id)) { throw new BadRequest(); } if (empty($data->field)) { throw new BadRequest('postActionGetCopiedAttachment copy: No field specified.'); } return $this->getAttachmentService() ->getCopiedAttachment($data) ->getValueMap(); } public function getActionFile(Request $request, Response $response): void { $id = $request->getRouteParam('id'); if (!$id) { throw new BadRequest(); } $fileData = $this->getAttachmentService()->getFileData($id); $response ->setHeader('Content-Type', $fileData->type) ->setHeader('Content-Disposition', 'attachment; filename="' . $fileData->name . '"') ->setHeader('Content-Length', (string) $fileData->size) ->setBody($fileData->stream); } private function getAttachmentService(): Service { /** @var Service */ return $this->getRecordService(); } }