From ddcb5ccbf9dc6be3be6a4e89c98781470c581c4f Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Sat, 18 Feb 2023 14:54:24 +0200 Subject: [PATCH] ref --- application/Espo/Controllers/Attachment.php | 104 +----------------- application/Espo/Resources/routes.json | 15 ++- .../Espo/Tools/Attachment/Api/PostChunk.php | 59 ++++++++++ .../Espo/Tools/Attachment/Api/PostCopy.php | 77 +++++++++++++ .../Tools/Attachment/Api/PostFromImageUrl.php | 72 ++++++++++++ client/src/views/email/detail.js | 3 +- client/src/views/note/fields/post.js | 5 +- 7 files changed, 223 insertions(+), 112 deletions(-) create mode 100644 application/Espo/Tools/Attachment/Api/PostChunk.php create mode 100644 application/Espo/Tools/Attachment/Api/PostCopy.php create mode 100644 application/Espo/Tools/Attachment/Api/PostFromImageUrl.php diff --git a/application/Espo/Controllers/Attachment.php b/application/Espo/Controllers/Attachment.php index 06a51669fe..4251fe9ae5 100644 --- a/application/Espo/Controllers/Attachment.php +++ b/application/Espo/Controllers/Attachment.php @@ -29,17 +29,11 @@ namespace Espo\Controllers; -use Espo\Core\Exceptions\Error; -use Espo\Core\Exceptions\NotFound; use Espo\Core\Api\Request; use Espo\Core\Api\Response; use Espo\Core\Controllers\RecordBase; -use Espo\Core\Exceptions\BadRequest; use Espo\Core\Exceptions\Forbidden; -use Espo\Tools\Attachment\FieldData; -use Espo\Tools\Attachment\Service; -use Espo\Tools\Attachment\UploadUrlService; -use Espo\Tools\Attachment\UploadService; + use stdClass; class Attachment extends RecordBase @@ -52,100 +46,4 @@ class Attachment extends RecordBase 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 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); - } } diff --git a/application/Espo/Resources/routes.json b/application/Espo/Resources/routes.json index 2914587d3f..0746e1ebcc 100644 --- a/application/Espo/Resources/routes.json +++ b/application/Espo/Resources/routes.json @@ -276,10 +276,17 @@ { "route": "/Attachment/chunk/:id", "method": "post", - "params": { - "controller": "Attachment", - "action": "chunk" - } + "actionClassName": "Espo\\Tools\\Attachment\\Api\\PostChunk" + }, + { + "route": "/Attachment/fromImageUrl", + "method": "post", + "actionClassName": "Espo\\Tools\\Attachment\\Api\\PostFromImageUrl" + }, + { + "route": "/Attachment/copy/:id", + "method": "post", + "actionClassName": "Espo\\Tools\\Attachment\\Api\\PostCopy" }, { "route": "/Oidc/authorizationData", diff --git a/application/Espo/Tools/Attachment/Api/PostChunk.php b/application/Espo/Tools/Attachment/Api/PostChunk.php new file mode 100644 index 0000000000..5c3e373bf9 --- /dev/null +++ b/application/Espo/Tools/Attachment/Api/PostChunk.php @@ -0,0 +1,59 @@ +getRouteParam('id'); + $body = $request->getBodyContents(); + + if (!$id || !$body) { + throw new BadRequest(); + } + + $this->uploadService->uploadChunk($id, $body); + + return ResponseComposer::json(true); + } +} diff --git a/application/Espo/Tools/Attachment/Api/PostCopy.php b/application/Espo/Tools/Attachment/Api/PostCopy.php new file mode 100644 index 0000000000..5ddb112796 --- /dev/null +++ b/application/Espo/Tools/Attachment/Api/PostCopy.php @@ -0,0 +1,77 @@ +getRouteParam('id'); + + if (!$id) { + throw new BadRequest(); + } + + $data = $request->getParsedBody(); + + $field = $data->field ?? null; + $parentType = $data->parentType ?? null; + $relatedType = $data->relatedType ?? null; + + if (!$field) { + throw new BadRequest("No `field`."); + } + + try { + $fieldData = new FieldData($field, $parentType, $relatedType); + } + catch (Error $e) { + throw new BadRequest($e->getMessage()); + } + + $attachment = $this->service->copy($id, $fieldData); + + return ResponseComposer::json($attachment->getValueMap()); + } +} diff --git a/application/Espo/Tools/Attachment/Api/PostFromImageUrl.php b/application/Espo/Tools/Attachment/Api/PostFromImageUrl.php new file mode 100644 index 0000000000..7f3c86eef2 --- /dev/null +++ b/application/Espo/Tools/Attachment/Api/PostFromImageUrl.php @@ -0,0 +1,72 @@ +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()); + } + + $attachment = $this->uploadUrlService->uploadImage($url, $fieldData); + + return ResponseComposer::json($attachment->getValueMap()); + } +} diff --git a/client/src/views/email/detail.js b/client/src/views/email/detail.js index 96f3bfa0ba..7494188cd6 100644 --- a/client/src/views/email/detail.js +++ b/client/src/views/email/detail.js @@ -598,8 +598,7 @@ define('views/email/detail', ['views/detail', 'email-helper'], function (Dep, Em Espo.Ui.notify(' ... '); - this.ajaxPostRequest('Attachment/action/getCopiedAttachment', { - id: id, + this.ajaxPostRequest('Attachment/copy/' + id, { relatedType: 'Document', field: 'file', }).then((attachment) => { diff --git a/client/src/views/note/fields/post.js b/client/src/views/note/fields/post.js index 8de6dc2b61..41afdd78cd 100644 --- a/client/src/views/note/fields/post.js +++ b/client/src/views/note/fields/post.js @@ -197,7 +197,7 @@ define('views/note/fields/post', ['views/fields/text', 'lib!Textcomplete'], func } Espo.Ajax - .postRequest('Attachment/action/getAttachmentFromImageUrl', { + .postRequest('Attachment/fromImageUrl', { url: url, parentType: 'Note', field: 'attachments', @@ -250,8 +250,7 @@ define('views/note/fields/post', ['views/fields/text', 'lib!Textcomplete'], func } Espo.Ajax - .postRequest('Attachment/action/getCopiedAttachment', { - id: id, + .postRequest('Attachment/copy/' + id, { parentType: 'Note', field: 'attachments', })