user->isAdmin()) { throw new Forbidden(); } return parent::getActionList($request, $response); } /** * @throws BadRequest * @throws Forbidden * @throws \Espo\Core\Exceptions\Error */ 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(); } /** * @throws BadRequest * @throws Forbidden * @throws \Espo\Core\Exceptions\Error * @throws \Espo\Core\Exceptions\NotFound */ 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(); } /** * @throws BadRequest * @throws Forbidden * @throws \Espo\Core\Exceptions\NotFound */ 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); } /** * @throws BadRequest * @throws Forbidden * @throws \Espo\Core\Exceptions\Error * @throws \Espo\Core\Exceptions\NotFound */ public function postActionChunk(Request $request, Response $response): void { $id = $request->getRouteParam('id'); $body = $request->getBodyContents(); if (!$id || !$body) { throw new BadRequest(); } $this->getAttachmentService()->uploadChunk($id, $body); $response->writeBody('true'); } private function getAttachmentService(): Service { /** @var Service */ return $this->getRecordService(); } }