From 91ecaa54ef8caae0d8afe88e050ed937dbaaddeb Mon Sep 17 00:00:00 2001 From: N-Feist Date: Tue, 14 Apr 2026 15:41:44 +0200 Subject: [PATCH 01/38] feat: endpoint and throtteling --- src/Api/Resources/CancellationResource.php | 52 ++++++++++++++++++++++ src/Providers/IORouteServiceProvider.php | 8 ++++ 2 files changed, 60 insertions(+) create mode 100644 src/Api/Resources/CancellationResource.php diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php new file mode 100644 index 000000000..e400f41c7 --- /dev/null +++ b/src/Api/Resources/CancellationResource.php @@ -0,0 +1,52 @@ +request->get('recaptchaToken', null))) { + /** @var NotificationService $notificationService */ + $notificationService = pluginApp(NotificationService::class); + $notificationService->addNotificationCode(LogLevel::ERROR, 13); + + return $this->response->create('', ResponseCode::BAD_REQUEST); + } + + $payload = $this->request->all(); + + // TODO: call shared cancellation service/repository + + return $this->response->create([], ResponseCode::OK); + } +} diff --git a/src/Providers/IORouteServiceProvider.php b/src/Providers/IORouteServiceProvider.php index 2ad99b963..ac4a4cc38 100644 --- a/src/Providers/IORouteServiceProvider.php +++ b/src/Providers/IORouteServiceProvider.php @@ -60,6 +60,14 @@ function (ApiRouter $api) { } ); + $api->version( + ['v1'], + ['namespace' => 'IO\Api\Resources', 'middleware' => ['throttleFrontend:cancellation-form']], + function (ApiRouter $api) { + $api->post('io/cancellation', 'CancellationResource@store'); + } + ); + $api->version(['v1'], ['namespace' => 'IO\Api\Resources'], function (ApiRouter $api) { $api->get('io/basket', 'BasketResource@index'); $api->resource('io/basket/items', 'BasketItemResource'); From 5b31310fe9e51bf171db6c9c3bda8e17b5ef3ab8 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Tue, 14 Apr 2026 15:46:33 +0200 Subject: [PATCH 02/38] fix: missing value --- src/Api/Resources/CancellationResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index e400f41c7..869288b3d 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -35,7 +35,7 @@ public function __construct(Request $request, ApiResponse $response) */ public function store(): Response { - if (!ReCaptcha::verify($this->request->get('recaptchaToken', null))) { + if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { /** @var NotificationService $notificationService */ $notificationService = pluginApp(NotificationService::class); $notificationService->addNotificationCode(LogLevel::ERROR, 13); From 6d04586af1861abd1916724508169b46d31c4f78 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Tue, 14 Apr 2026 15:47:02 +0200 Subject: [PATCH 03/38] . --- src/Api/Resources/CancellationResource.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 869288b3d..c5f703a22 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -43,10 +43,8 @@ public function store(): Response return $this->response->create('', ResponseCode::BAD_REQUEST); } - $payload = $this->request->all(); + $successMessage = []; - // TODO: call shared cancellation service/repository - - return $this->response->create([], ResponseCode::OK); + return $this->response->create($successMessage, ResponseCode::HTTP_CREATED); } } From 8a1dc3183b1cea83aa368098cad8fa5b4415ab01 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Tue, 14 Apr 2026 16:02:58 +0200 Subject: [PATCH 04/38] feat: use webshop repository --- src/Api/Resources/CancellationResource.php | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index c5f703a22..30511f6a6 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -8,6 +8,7 @@ use IO\Constants\LogLevel; use IO\Helper\ReCaptcha; use IO\Services\NotificationService; +use Plenty\Modules\Webshop\Storefront\Contracts\CancellationRepositoryContract; use Plenty\Plugin\Http\Request; use Plenty\Plugin\Http\Response; @@ -19,14 +20,21 @@ */ class CancellationResource extends ApiResource { + /** + * @var CancellationRepositoryContract + */ + private $cancellationRepository; + /** * CancellationResource constructor. * @param Request $request * @param ApiResponse $response + * @param CancellationRepositoryContract $cancellationRepository */ - public function __construct(Request $request, ApiResponse $response) + public function __construct(Request $request, ApiResponse $response, CancellationRepositoryContract $cancellationRepository) { parent::__construct($request, $response); + $this->cancellationRepository = $cancellationRepository; } /** @@ -43,8 +51,13 @@ public function store(): Response return $this->response->create('', ResponseCode::BAD_REQUEST); } - $successMessage = []; + try { + $successMessage = $this->cancellationRepository->submitCancellationRequest(); + } catch (\Exception $exception) { + $this->response->error($exception->getCode(), $exception->getMessage()); + return $this->response->create($exception->getMessage(), ResponseCode::INTERNAL_SERVER_ERROR); + } - return $this->response->create($successMessage, ResponseCode::HTTP_CREATED); + return $this->response->create($successMessage, ResponseCode::OK); } } From 8c945c89fce2379142eb90941cecfb0820a4a5d0 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 15 Apr 2026 12:36:24 +0200 Subject: [PATCH 05/38] feat: use dto --- src/Api/Resources/CancellationResource.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 30511f6a6..96f7bfa29 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -9,6 +9,7 @@ use IO\Helper\ReCaptcha; use IO\Services\NotificationService; use Plenty\Modules\Webshop\Storefront\Contracts\CancellationRepositoryContract; +use Plenty\Modules\Webshop\Storefront\DTOs\CancellationFormDTO; use Plenty\Plugin\Http\Request; use Plenty\Plugin\Http\Response; @@ -52,7 +53,14 @@ public function store(): Response } try { - $successMessage = $this->cancellationRepository->submitCancellationRequest(); + $cancellationFormDTO = new CancellationFormDTO( + $this->request->get('email', ''), + $this->request->get('name', ''), + $this->request->get('lang', ''), + (int) $this->request->get('orderId', 0) + ); + + $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); } catch (\Exception $exception) { $this->response->error($exception->getCode(), $exception->getMessage()); return $this->response->create($exception->getMessage(), ResponseCode::INTERNAL_SERVER_ERROR); From ce1990de888184e9beee21fd296e7ba02a885256 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 15 Apr 2026 16:48:08 +0200 Subject: [PATCH 06/38] feat: add cancellation reason --- src/Api/Resources/CancellationResource.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 96f7bfa29..b831a72fc 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -57,7 +57,8 @@ public function store(): Response $this->request->get('email', ''), $this->request->get('name', ''), $this->request->get('lang', ''), - (int) $this->request->get('orderId', 0) + (int) $this->request->get('orderId', 0), + $this->request->get('reason', '') ); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From addc12ff0f015a0944c7c7a3f82adc5c7ec4e245 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 16 Apr 2026 09:30:11 +0200 Subject: [PATCH 07/38] fix: working error handling --- src/Api/Resources/CancellationResource.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index b831a72fc..0f7832f44 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -10,6 +10,7 @@ use IO\Services\NotificationService; use Plenty\Modules\Webshop\Storefront\Contracts\CancellationRepositoryContract; use Plenty\Modules\Webshop\Storefront\DTOs\CancellationFormDTO; +use Plenty\Modules\Webshop\Storefront\Exceptions\StorefrontException; use Plenty\Plugin\Http\Request; use Plenty\Plugin\Http\Response; @@ -62,11 +63,15 @@ public function store(): Response ); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); + + return $this->response->create($successMessage, ResponseCode::OK); + } catch (StorefrontException $exception) { + $code = $exception->getCode() ?: ResponseCode::INTERNAL_SERVER_ERROR; + return $this->response->create($exception->getKey(), $code); } catch (\Exception $exception) { - $this->response->error($exception->getCode(), $exception->getMessage()); - return $this->response->create($exception->getMessage(), ResponseCode::INTERNAL_SERVER_ERROR); + $code = $exception->getCode() ?: ResponseCode::INTERNAL_SERVER_ERROR; + $this->response->error($code, $exception->getMessage()); + return $this->response->create($exception->getMessage(), $code); } - - return $this->response->create($successMessage, ResponseCode::OK); } } From 5358de1063ca356af06a2f7203c19df7150bf221 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 16 Apr 2026 11:04:44 +0200 Subject: [PATCH 08/38] feat: pass recipient from payload --- src/Api/Resources/CancellationResource.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 0f7832f44..579aaa3d2 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -59,7 +59,8 @@ public function store(): Response $this->request->get('name', ''), $this->request->get('lang', ''), (int) $this->request->get('orderId', 0), - $this->request->get('reason', '') + $this->request->get('reason', ''), + $this->request->get('recipient', '') ); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From b6bdbadaac5b478cc5d780bf363d71b541ed352a Mon Sep 17 00:00:00 2001 From: N-Feist Date: Fri, 17 Apr 2026 09:36:44 +0200 Subject: [PATCH 09/38] fix: bug --- src/Api/Resources/CancellationResource.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 579aaa3d2..f87977613 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -54,14 +54,14 @@ public function store(): Response } try { - $cancellationFormDTO = new CancellationFormDTO( - $this->request->get('email', ''), - $this->request->get('name', ''), - $this->request->get('lang', ''), - (int) $this->request->get('orderId', 0), - $this->request->get('reason', ''), - $this->request->get('recipient', '') - ); + $cancellationFormDTO = pluginApp(CancellationFormDTO::class, [ + 'email' => $this->request->get('email', ''), + 'name' => $this->request->get('name', ''), + 'lang' => $this->request->get('lang', ''), + 'orderId' => (int) $this->request->get('orderId', 0), + 'reason' => $this->request->get('reason', ''), + 'recipient' => $this->request->get('recipient', ''), + ]); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From 7b7c2d1b67b45e43d349f5f66b88746e50d01307 Mon Sep 17 00:00:00 2001 From: plentydev Date: Fri, 17 Apr 2026 15:05:01 +0300 Subject: [PATCH 10/38] test --- src/Api/Resources/ContactMailResource.php | 18 +++++++++--------- src/Services/ContactMailService.php | 6 ++++++ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/Api/Resources/ContactMailResource.php b/src/Api/Resources/ContactMailResource.php index cd03c7abe..a7565a85f 100644 --- a/src/Api/Resources/ContactMailResource.php +++ b/src/Api/Resources/ContactMailResource.php @@ -63,15 +63,15 @@ public function store(): Response $mailTemplate = TemplateContainer::get('tpl.mail.contact')->getTemplate(); - if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { - /** - * @var NotificationService $notificationService - */ - $notificationService = pluginApp(NotificationService::class); - $notificationService->addNotificationCode(LogLevel::ERROR, 13); - - return $this->response->create("", ResponseCode::BAD_REQUEST); - } +// if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { +// /** +// * @var NotificationService $notificationService +// */ +// $notificationService = pluginApp(NotificationService::class); +// $notificationService->addNotificationCode(LogLevel::ERROR, 13); +// +// return $this->response->create("", ResponseCode::BAD_REQUEST); +// } $response = $this->contactMailService->sendMail( $mailTemplate, diff --git a/src/Services/ContactMailService.php b/src/Services/ContactMailService.php index 56dc2cb29..b06df689e 100644 --- a/src/Services/ContactMailService.php +++ b/src/Services/ContactMailService.php @@ -32,6 +32,12 @@ class ContactMailService public function sendMail(string $mailTemplate, $mailData = []) { $recipient = $mailData['recipient']; + $this->getLogger(self::class)->info( + "IO::Debug.sendMail", + [ + "mailData" => $mailData, + ] + ); if (!strlen($recipient)) { $recipient = Utils::getTemplateConfig('contact.shop_mail'); From 65dbac2e2a0dd030aa8415a3d76d8d4ffa690990 Mon Sep 17 00:00:00 2001 From: plentydev Date: Fri, 17 Apr 2026 15:23:07 +0300 Subject: [PATCH 11/38] revert --- src/Api/Resources/ContactMailResource.php | 18 +++++++++--------- src/Services/ContactMailService.php | 6 ------ 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/Api/Resources/ContactMailResource.php b/src/Api/Resources/ContactMailResource.php index a7565a85f..cd03c7abe 100644 --- a/src/Api/Resources/ContactMailResource.php +++ b/src/Api/Resources/ContactMailResource.php @@ -63,15 +63,15 @@ public function store(): Response $mailTemplate = TemplateContainer::get('tpl.mail.contact')->getTemplate(); -// if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { -// /** -// * @var NotificationService $notificationService -// */ -// $notificationService = pluginApp(NotificationService::class); -// $notificationService->addNotificationCode(LogLevel::ERROR, 13); -// -// return $this->response->create("", ResponseCode::BAD_REQUEST); -// } + if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { + /** + * @var NotificationService $notificationService + */ + $notificationService = pluginApp(NotificationService::class); + $notificationService->addNotificationCode(LogLevel::ERROR, 13); + + return $this->response->create("", ResponseCode::BAD_REQUEST); + } $response = $this->contactMailService->sendMail( $mailTemplate, diff --git a/src/Services/ContactMailService.php b/src/Services/ContactMailService.php index b06df689e..56dc2cb29 100644 --- a/src/Services/ContactMailService.php +++ b/src/Services/ContactMailService.php @@ -32,12 +32,6 @@ class ContactMailService public function sendMail(string $mailTemplate, $mailData = []) { $recipient = $mailData['recipient']; - $this->getLogger(self::class)->info( - "IO::Debug.sendMail", - [ - "mailData" => $mailData, - ] - ); if (!strlen($recipient)) { $recipient = Utils::getTemplateConfig('contact.shop_mail'); From 27505e2530fee24a8059864ed8de841c8135f08d Mon Sep 17 00:00:00 2001 From: N-Feist Date: Mon, 20 Apr 2026 15:07:58 +0200 Subject: [PATCH 12/38] fix: right handling of payload from cancellation form --- src/Api/Resources/CancellationResource.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index f87977613..48be84ca3 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -7,6 +7,7 @@ use IO\Api\ResponseCode; use IO\Constants\LogLevel; use IO\Helper\ReCaptcha; +use IO\Helper\Utils; use IO\Services\NotificationService; use Plenty\Modules\Webshop\Storefront\Contracts\CancellationRepositoryContract; use Plenty\Modules\Webshop\Storefront\DTOs\CancellationFormDTO; @@ -54,13 +55,21 @@ public function store(): Response } try { + $requestData = $this->request->all(); + + $formData = []; + foreach ($requestData['data'] ?? [] as $key => $entry) { + $cleanKey = substr($key, strpos($key, '_') + 1); + $formData[$cleanKey] = $entry['value']; + } + $cancellationFormDTO = pluginApp(CancellationFormDTO::class, [ - 'email' => $this->request->get('email', ''), - 'name' => $this->request->get('name', ''), - 'lang' => $this->request->get('lang', ''), - 'orderId' => (int) $this->request->get('orderId', 0), - 'reason' => $this->request->get('reason', ''), - 'recipient' => $this->request->get('recipient', ''), + 'email' => $formData['mail'] ?? '', + 'name' => $formData['name'] ?? '', + 'lang' => Utils::getLang(), + 'orderId' => (int) ($formData['order'] ?? 0), + 'reason' => $formData['message'] ?? '', + 'recipient' => $formData['recipient'] ?? '', ]); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From 590f2b3f31eb232c340304f2f613a26384f73772 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Mon, 20 Apr 2026 15:31:14 +0200 Subject: [PATCH 13/38] fix: recipient usage --- src/Api/Resources/CancellationResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 48be84ca3..07826b484 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -69,7 +69,7 @@ public function store(): Response 'lang' => Utils::getLang(), 'orderId' => (int) ($formData['order'] ?? 0), 'reason' => $formData['message'] ?? '', - 'recipient' => $formData['recipient'] ?? '', + 'recipient' => $requestData['recipient'] ?? '', ]); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From 03539193dce518bd79661a9895f85bce03b9c9f5 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 23 Apr 2026 10:21:40 +0200 Subject: [PATCH 14/38] Revert "fix: recipient usage" This reverts commit 590f2b3f31eb232c340304f2f613a26384f73772. --- src/Api/Resources/CancellationResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 07826b484..48be84ca3 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -69,7 +69,7 @@ public function store(): Response 'lang' => Utils::getLang(), 'orderId' => (int) ($formData['order'] ?? 0), 'reason' => $formData['message'] ?? '', - 'recipient' => $requestData['recipient'] ?? '', + 'recipient' => $formData['recipient'] ?? '', ]); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From 44c5a4d1cd797fd328ec56c75a2fc50cad238232 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 23 Apr 2026 10:21:47 +0200 Subject: [PATCH 15/38] Revert "fix: right handling of payload from cancellation form" This reverts commit 27505e2530fee24a8059864ed8de841c8135f08d. --- src/Api/Resources/CancellationResource.php | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 48be84ca3..f87977613 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -7,7 +7,6 @@ use IO\Api\ResponseCode; use IO\Constants\LogLevel; use IO\Helper\ReCaptcha; -use IO\Helper\Utils; use IO\Services\NotificationService; use Plenty\Modules\Webshop\Storefront\Contracts\CancellationRepositoryContract; use Plenty\Modules\Webshop\Storefront\DTOs\CancellationFormDTO; @@ -55,21 +54,13 @@ public function store(): Response } try { - $requestData = $this->request->all(); - - $formData = []; - foreach ($requestData['data'] ?? [] as $key => $entry) { - $cleanKey = substr($key, strpos($key, '_') + 1); - $formData[$cleanKey] = $entry['value']; - } - $cancellationFormDTO = pluginApp(CancellationFormDTO::class, [ - 'email' => $formData['mail'] ?? '', - 'name' => $formData['name'] ?? '', - 'lang' => Utils::getLang(), - 'orderId' => (int) ($formData['order'] ?? 0), - 'reason' => $formData['message'] ?? '', - 'recipient' => $formData['recipient'] ?? '', + 'email' => $this->request->get('email', ''), + 'name' => $this->request->get('name', ''), + 'lang' => $this->request->get('lang', ''), + 'orderId' => (int) $this->request->get('orderId', 0), + 'reason' => $this->request->get('reason', ''), + 'recipient' => $this->request->get('recipient', ''), ]); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From dca769a6a39912ad50458ebb25a3ad0fd236b80b Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 23 Apr 2026 10:23:44 +0200 Subject: [PATCH 16/38] Reapply "fix: right handling of payload from cancellation form" This reverts commit 44c5a4d1cd797fd328ec56c75a2fc50cad238232. --- src/Api/Resources/CancellationResource.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index f87977613..48be84ca3 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -7,6 +7,7 @@ use IO\Api\ResponseCode; use IO\Constants\LogLevel; use IO\Helper\ReCaptcha; +use IO\Helper\Utils; use IO\Services\NotificationService; use Plenty\Modules\Webshop\Storefront\Contracts\CancellationRepositoryContract; use Plenty\Modules\Webshop\Storefront\DTOs\CancellationFormDTO; @@ -54,13 +55,21 @@ public function store(): Response } try { + $requestData = $this->request->all(); + + $formData = []; + foreach ($requestData['data'] ?? [] as $key => $entry) { + $cleanKey = substr($key, strpos($key, '_') + 1); + $formData[$cleanKey] = $entry['value']; + } + $cancellationFormDTO = pluginApp(CancellationFormDTO::class, [ - 'email' => $this->request->get('email', ''), - 'name' => $this->request->get('name', ''), - 'lang' => $this->request->get('lang', ''), - 'orderId' => (int) $this->request->get('orderId', 0), - 'reason' => $this->request->get('reason', ''), - 'recipient' => $this->request->get('recipient', ''), + 'email' => $formData['mail'] ?? '', + 'name' => $formData['name'] ?? '', + 'lang' => Utils::getLang(), + 'orderId' => (int) ($formData['order'] ?? 0), + 'reason' => $formData['message'] ?? '', + 'recipient' => $formData['recipient'] ?? '', ]); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From fd38ffff9a2779ff60ea4947b1a1f24a651e487f Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 23 Apr 2026 10:23:48 +0200 Subject: [PATCH 17/38] Reapply "fix: recipient usage" This reverts commit 03539193dce518bd79661a9895f85bce03b9c9f5. --- src/Api/Resources/CancellationResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 48be84ca3..07826b484 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -69,7 +69,7 @@ public function store(): Response 'lang' => Utils::getLang(), 'orderId' => (int) ($formData['order'] ?? 0), 'reason' => $formData['message'] ?? '', - 'recipient' => $formData['recipient'] ?? '', + 'recipient' => $requestData['recipient'] ?? '', ]); $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); From 3916b24255875b4b27903f9fc158c55279d8ab31 Mon Sep 17 00:00:00 2001 From: plentydev Date: Tue, 28 Apr 2026 12:55:20 +0300 Subject: [PATCH 18/38] testing --- src/Api/Resources/CancellationResource.php | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 07826b484..4b2541ffe 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -10,7 +10,6 @@ use IO\Helper\Utils; use IO\Services\NotificationService; use Plenty\Modules\Webshop\Storefront\Contracts\CancellationRepositoryContract; -use Plenty\Modules\Webshop\Storefront\DTOs\CancellationFormDTO; use Plenty\Modules\Webshop\Storefront\Exceptions\StorefrontException; use Plenty\Plugin\Http\Request; use Plenty\Plugin\Http\Response; @@ -46,13 +45,14 @@ public function __construct(Request $request, ApiResponse $response, Cancellatio */ public function store(): Response { - if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { - /** @var NotificationService $notificationService */ - $notificationService = pluginApp(NotificationService::class); - $notificationService->addNotificationCode(LogLevel::ERROR, 13); - - return $this->response->create('', ResponseCode::BAD_REQUEST); - } + //TODO this will be uncommented after testing +// if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { +// /** @var NotificationService $notificationService */ +// $notificationService = pluginApp(NotificationService::class); +// $notificationService->addNotificationCode(LogLevel::ERROR, 13); +// +// return $this->response->create('', ResponseCode::BAD_REQUEST); +// } try { $requestData = $this->request->all(); @@ -63,7 +63,7 @@ public function store(): Response $formData[$cleanKey] = $entry['value']; } - $cancellationFormDTO = pluginApp(CancellationFormDTO::class, [ + $successMessage = $this->cancellationRepository->submitCancellationRequest([ 'email' => $formData['mail'] ?? '', 'name' => $formData['name'] ?? '', 'lang' => Utils::getLang(), @@ -72,8 +72,6 @@ public function store(): Response 'recipient' => $requestData['recipient'] ?? '', ]); - $successMessage = $this->cancellationRepository->submitCancellationRequest($cancellationFormDTO); - return $this->response->create($successMessage, ResponseCode::OK); } catch (StorefrontException $exception) { $code = $exception->getCode() ?: ResponseCode::INTERNAL_SERVER_ERROR; From 267b29a09126faf2b8209771cb13a4e8a02657e7 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Tue, 28 Apr 2026 15:36:45 +0200 Subject: [PATCH 19/38] test disable recaptcha on contact mail --- src/Api/Resources/ContactMailResource.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Api/Resources/ContactMailResource.php b/src/Api/Resources/ContactMailResource.php index cd03c7abe..6457270f4 100644 --- a/src/Api/Resources/ContactMailResource.php +++ b/src/Api/Resources/ContactMailResource.php @@ -63,15 +63,15 @@ public function store(): Response $mailTemplate = TemplateContainer::get('tpl.mail.contact')->getTemplate(); - if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { - /** - * @var NotificationService $notificationService - */ - $notificationService = pluginApp(NotificationService::class); - $notificationService->addNotificationCode(LogLevel::ERROR, 13); - - return $this->response->create("", ResponseCode::BAD_REQUEST); - } + // if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { + // /** + // * @var NotificationService $notificationService + // */ + // $notificationService = pluginApp(NotificationService::class); + // $notificationService->addNotificationCode(LogLevel::ERROR, 13); + + // return $this->response->create("", ResponseCode::BAD_REQUEST); + // } $response = $this->contactMailService->sendMail( $mailTemplate, From 3fe5655e2773b06c2c23ad0b799bc30de4be6a5e Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 11:07:23 +0200 Subject: [PATCH 20/38] chore: adjust route to expected data and add error handling --- src/Api/Resources/CancellationResource.php | 33 ++++++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 4b2541ffe..002f1c417 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -13,6 +13,7 @@ use Plenty\Modules\Webshop\Storefront\Exceptions\StorefrontException; use Plenty\Plugin\Http\Request; use Plenty\Plugin\Http\Response; +use Plenty\Plugin\Log\Loggable; /** * Class CancellationResource @@ -22,6 +23,8 @@ */ class CancellationResource extends ApiResource { + use Loggable; + /** * @var CancellationRepositoryContract */ @@ -56,19 +59,37 @@ public function store(): Response try { $requestData = $this->request->all(); + $formData = $requestData['data'] ?? []; + $errors = []; + + if(!isset($formData['email'])) { + $errors[] = 'email'; + } + if(!isset($formData['name'])) { + $errors[] = 'name'; + } + if(!isset($formData['order'])) { + $errors[] = 'order'; + } + + if(!empty($errors)) { + $this->getLogger(self::class)->warning( + "IO::Debug.CancellationResource_missingFields", + [ + "code" => ResponseCode::BAD_REQUEST, + "message" => 'Keys ' . implode(', ', $errors) . " couldn't be mapped to the email template" + ] + ); - $formData = []; - foreach ($requestData['data'] ?? [] as $key => $entry) { - $cleanKey = substr($key, strpos($key, '_') + 1); - $formData[$cleanKey] = $entry['value']; + return $this->response->create('Missing required fields', ResponseCode::BAD_REQUEST); } $successMessage = $this->cancellationRepository->submitCancellationRequest([ - 'email' => $formData['mail'] ?? '', + 'email' => $formData['email'] ?? '', 'name' => $formData['name'] ?? '', 'lang' => Utils::getLang(), 'orderId' => (int) ($formData['order'] ?? 0), - 'reason' => $formData['message'] ?? '', + 'reason' => $formData['reason'] ?? '', 'recipient' => $requestData['recipient'] ?? '', ]); From f3ddd07098934467654341c40ef6b668d915c6df Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 11:08:15 +0200 Subject: [PATCH 21/38] Revert "test disable recaptcha on contact mail" This reverts commit 267b29a09126faf2b8209771cb13a4e8a02657e7. --- src/Api/Resources/ContactMailResource.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Api/Resources/ContactMailResource.php b/src/Api/Resources/ContactMailResource.php index 6457270f4..cd03c7abe 100644 --- a/src/Api/Resources/ContactMailResource.php +++ b/src/Api/Resources/ContactMailResource.php @@ -63,15 +63,15 @@ public function store(): Response $mailTemplate = TemplateContainer::get('tpl.mail.contact')->getTemplate(); - // if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { - // /** - // * @var NotificationService $notificationService - // */ - // $notificationService = pluginApp(NotificationService::class); - // $notificationService->addNotificationCode(LogLevel::ERROR, 13); - - // return $this->response->create("", ResponseCode::BAD_REQUEST); - // } + if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { + /** + * @var NotificationService $notificationService + */ + $notificationService = pluginApp(NotificationService::class); + $notificationService->addNotificationCode(LogLevel::ERROR, 13); + + return $this->response->create("", ResponseCode::BAD_REQUEST); + } $response = $this->contactMailService->sendMail( $mailTemplate, From 307bd15dc33915c0cc31bcd7e7470199787f61bb Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 11:10:53 +0200 Subject: [PATCH 22/38] chore: stricter checks --- src/Api/Resources/CancellationResource.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 002f1c417..a1c017d75 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -62,13 +62,13 @@ public function store(): Response $formData = $requestData['data'] ?? []; $errors = []; - if(!isset($formData['email'])) { + if(empty($formData['email'])) { $errors[] = 'email'; } - if(!isset($formData['name'])) { + if(empty($formData['name'])) { $errors[] = 'name'; } - if(!isset($formData['order'])) { + if(empty($formData['order'])) { $errors[] = 'order'; } From dd63a9daaa875a7bdeeeaa3939b1b919fb1a70e1 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 11:12:06 +0200 Subject: [PATCH 23/38] fix: remove redundant fallbacks --- src/Api/Resources/CancellationResource.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index a1c017d75..320c2ef6a 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -85,10 +85,10 @@ public function store(): Response } $successMessage = $this->cancellationRepository->submitCancellationRequest([ - 'email' => $formData['email'] ?? '', - 'name' => $formData['name'] ?? '', + 'email' => $formData['email'], + 'name' => $formData['name'], 'lang' => Utils::getLang(), - 'orderId' => (int) ($formData['order'] ?? 0), + 'orderId' => (int) ($formData['order']), 'reason' => $formData['reason'] ?? '', 'recipient' => $requestData['recipient'] ?? '', ]); From 7126c330c0f855d62ae83cc160df992e707cebce Mon Sep 17 00:00:00 2001 From: plentydev Date: Wed, 29 Apr 2026 12:53:49 +0300 Subject: [PATCH 24/38] refactoring --- src/Api/Resources/CancellationResource.php | 28 ++++++++-------------- 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 320c2ef6a..e40817338 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -58,18 +58,13 @@ public function store(): Response // } try { - $requestData = $this->request->all(); - $formData = $requestData['data'] ?? []; + $formData = $this->request->all()['data'] ?? []; $errors = []; - if(empty($formData['email'])) { - $errors[] = 'email'; - } - if(empty($formData['name'])) { - $errors[] = 'name'; - } - if(empty($formData['order'])) { - $errors[] = 'order'; + foreach (['email', 'name', 'order'] as $value) { + if(empty($formData[$value])) { + $errors[] = $value; + } } if(!empty($errors)) { @@ -85,18 +80,15 @@ public function store(): Response } $successMessage = $this->cancellationRepository->submitCancellationRequest([ - 'email' => $formData['email'], - 'name' => $formData['name'], + 'email' => $formData['email']['value'], + 'name' => $formData['name']['value'], 'lang' => Utils::getLang(), - 'orderId' => (int) ($formData['order']), - 'reason' => $formData['reason'] ?? '', + 'orderId' => (int) ($formData['order']['value']), + 'reason' => $formData['reason']['value'] ?? '', 'recipient' => $requestData['recipient'] ?? '', ]); - return $this->response->create($successMessage, ResponseCode::OK); - } catch (StorefrontException $exception) { - $code = $exception->getCode() ?: ResponseCode::INTERNAL_SERVER_ERROR; - return $this->response->create($exception->getKey(), $code); + return $this->response->create($successMessage); } catch (\Exception $exception) { $code = $exception->getCode() ?: ResponseCode::INTERNAL_SERVER_ERROR; $this->response->error($code, $exception->getMessage()); From 5580000aceb7e63245192479dc3392ed9985756e Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 12:09:21 +0200 Subject: [PATCH 25/38] test --- src/Api/Resources/CancellationResource.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index e40817338..2cf1b5add 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -58,21 +58,24 @@ public function store(): Response // } try { - $formData = $this->request->all()['data'] ?? []; + $requestData = $this->request->all(); + $formData = $requestData['data'] ?? []; $errors = []; - foreach (['email', 'name', 'order'] as $value) { - if(empty($formData[$value])) { - $errors[] = $value; + foreach (['email', 'name', 'order'] as $field) { + if(empty($formData[$field]['value'])) { + $errors[] = $field; } } if(!empty($errors)) { + $message = 'Keys ' . implode(', ', $errors) . " couldn't be mapped to the email template"; + $this->getLogger(self::class)->warning( "IO::Debug.CancellationResource_missingFields", [ "code" => ResponseCode::BAD_REQUEST, - "message" => 'Keys ' . implode(', ', $errors) . " couldn't be mapped to the email template" + "message" => $message ] ); @@ -88,7 +91,7 @@ public function store(): Response 'recipient' => $requestData['recipient'] ?? '', ]); - return $this->response->create($successMessage); + return $this->response->create($successMessage, ResponseCode::OK); } catch (\Exception $exception) { $code = $exception->getCode() ?: ResponseCode::INTERNAL_SERVER_ERROR; $this->response->error($code, $exception->getMessage()); From 4bf71f33cfd9e71eca9b51b7ef3fee83be298fab Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 13:17:24 +0200 Subject: [PATCH 26/38] Update Debug.properties --- resources/lang/en/Debug.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/lang/en/Debug.properties b/resources/lang/en/Debug.properties index 9087c8bb7..0e1e73cca 100644 --- a/resources/lang/en/Debug.properties +++ b/resources/lang/en/Debug.properties @@ -47,6 +47,9 @@ ContactMailService_noMailContent = "Cannot send mail: Mail content is empty." ; CountryService CountryService_noNameFound = "No names configured for the country with the given ID." +; CancellationResource +CancellationResource_missingFields = "Required fields are missing and couldn't be mapped to the email template." + ; CustomerAuthenticationResource CustomerAuthenticationResource_loginFailed = "Cannot perform login." From ad8686a739568163ad24ccb085a95e68b52fc727 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 13:31:39 +0200 Subject: [PATCH 27/38] chore: beautify logging message --- src/Api/Resources/CancellationResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 2cf1b5add..6dc22a110 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -69,7 +69,7 @@ public function store(): Response } if(!empty($errors)) { - $message = 'Keys ' . implode(', ', $errors) . " couldn't be mapped to the email template"; + $message = 'Keys "' . implode('", "', $errors) . '" couldn\'t be mapped to the email template'; $this->getLogger(self::class)->warning( "IO::Debug.CancellationResource_missingFields", From b509b629c3ea3e9a4728db58efeb1c2839326f0d Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 13:52:14 +0200 Subject: [PATCH 28/38] fix: uncomment recaptcha and set early return --- src/Api/Resources/CancellationResource.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 6dc22a110..fa7b41db5 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -48,20 +48,23 @@ public function __construct(Request $request, ApiResponse $response, Cancellatio */ public function store(): Response { - //TODO this will be uncommented after testing -// if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { -// /** @var NotificationService $notificationService */ -// $notificationService = pluginApp(NotificationService::class); -// $notificationService->addNotificationCode(LogLevel::ERROR, 13); -// -// return $this->response->create('', ResponseCode::BAD_REQUEST); -// } + if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { + /** @var NotificationService $notificationService */ + $notificationService = pluginApp(NotificationService::class); + $notificationService->addNotificationCode(LogLevel::ERROR, 13); + + return $this->response->create('', ResponseCode::BAD_REQUEST); + } try { $requestData = $this->request->all(); $formData = $requestData['data'] ?? []; $errors = []; + if(empty($formData)){ + return $this->response->create('Missing required fields', ResponseCode::BAD_REQUEST); + } + foreach (['email', 'name', 'order'] as $field) { if(empty($formData[$field]['value'])) { $errors[] = $field; From ebef81b7041f6667f7731501a695ef87ba53c7a6 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 13:55:56 +0200 Subject: [PATCH 29/38] chore: error msg in const --- src/Api/Resources/CancellationResource.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index fa7b41db5..b57c0174e 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -25,6 +25,8 @@ class CancellationResource extends ApiResource { use Loggable; + const ERROR_MSG = 'Missing required fields'; + /** * @var CancellationRepositoryContract */ @@ -62,7 +64,7 @@ public function store(): Response $errors = []; if(empty($formData)){ - return $this->response->create('Missing required fields', ResponseCode::BAD_REQUEST); + return $this->response->create(self::ERROR_MSG, ResponseCode::BAD_REQUEST); } foreach (['email', 'name', 'order'] as $field) { @@ -82,7 +84,7 @@ public function store(): Response ] ); - return $this->response->create('Missing required fields', ResponseCode::BAD_REQUEST); + return $this->response->create(self::ERROR_MSG, ResponseCode::BAD_REQUEST); } $successMessage = $this->cancellationRepository->submitCancellationRequest([ From 81ce8bb8f67cb112891e5736fe683b00188e1846 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 14:04:13 +0200 Subject: [PATCH 30/38] feat: update log message and level --- src/Api/Resources/CancellationResource.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index b57c0174e..34686432f 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -74,9 +74,9 @@ public function store(): Response } if(!empty($errors)) { - $message = 'Keys "' . implode('", "', $errors) . '" couldn\'t be mapped to the email template'; + $message = 'Keys "' . implode('", "', $errors) . '" of the contract withdrawal form couldn\'t be mapped to the email template.'; - $this->getLogger(self::class)->warning( + $this->getLogger(self::class)->error( "IO::Debug.CancellationResource_missingFields", [ "code" => ResponseCode::BAD_REQUEST, From 1226d59f74cd778494a3329216be6c6362e73ff8 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 15:32:28 +0200 Subject: [PATCH 31/38] test disable recaptcha check --- src/Api/Resources/CancellationResource.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 34686432f..2ff159618 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -50,13 +50,13 @@ public function __construct(Request $request, ApiResponse $response, Cancellatio */ public function store(): Response { - if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { - /** @var NotificationService $notificationService */ - $notificationService = pluginApp(NotificationService::class); - $notificationService->addNotificationCode(LogLevel::ERROR, 13); + // if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { + // /** @var NotificationService $notificationService */ + // $notificationService = pluginApp(NotificationService::class); + // $notificationService->addNotificationCode(LogLevel::ERROR, 13); - return $this->response->create('', ResponseCode::BAD_REQUEST); - } + // return $this->response->create('', ResponseCode::BAD_REQUEST); + // } try { $requestData = $this->request->all(); From be58aeff6c344508cd68dd3601e31cbcc728e221 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 16:10:02 +0200 Subject: [PATCH 32/38] Update CancellationResource.php --- src/Api/Resources/CancellationResource.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 2ff159618..0d3af5357 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -64,6 +64,7 @@ public function store(): Response $errors = []; if(empty($formData)){ + $this->response->error(ResponseCode::BAD_REQUEST, self::ERROR_MSG); return $this->response->create(self::ERROR_MSG, ResponseCode::BAD_REQUEST); } @@ -84,6 +85,7 @@ public function store(): Response ] ); + $this->response->error(ResponseCode::BAD_REQUEST, self::ERROR_MSG); return $this->response->create(self::ERROR_MSG, ResponseCode::BAD_REQUEST); } From 3b2f016e226df616613df1ef35de0c405aa2c239 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 16:15:17 +0200 Subject: [PATCH 33/38] Update CancellationResource.php --- src/Api/Resources/CancellationResource.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 0d3af5357..08b54a65d 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -65,7 +65,7 @@ public function store(): Response if(empty($formData)){ $this->response->error(ResponseCode::BAD_REQUEST, self::ERROR_MSG); - return $this->response->create(self::ERROR_MSG, ResponseCode::BAD_REQUEST); + return $this->response->create(null, ResponseCode::BAD_REQUEST); } foreach (['email', 'name', 'order'] as $field) { @@ -86,7 +86,7 @@ public function store(): Response ); $this->response->error(ResponseCode::BAD_REQUEST, self::ERROR_MSG); - return $this->response->create(self::ERROR_MSG, ResponseCode::BAD_REQUEST); + return $this->response->create(null, ResponseCode::BAD_REQUEST); } $successMessage = $this->cancellationRepository->submitCancellationRequest([ From f82cd9cf6793b062357f4841e9c1e2345884460b Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 16:15:59 +0200 Subject: [PATCH 34/38] chore: enable recaptcha again --- src/Api/Resources/CancellationResource.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 08b54a65d..1b1bbd442 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -50,13 +50,13 @@ public function __construct(Request $request, ApiResponse $response, Cancellatio */ public function store(): Response { - // if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { - // /** @var NotificationService $notificationService */ - // $notificationService = pluginApp(NotificationService::class); - // $notificationService->addNotificationCode(LogLevel::ERROR, 13); + if (!ReCaptcha::verify($this->request->get('recaptchaToken', null), true)) { + /** @var NotificationService $notificationService */ + $notificationService = pluginApp(NotificationService::class); + $notificationService->addNotificationCode(LogLevel::ERROR, 13); - // return $this->response->create('', ResponseCode::BAD_REQUEST); - // } + return $this->response->create('', ResponseCode::BAD_REQUEST); + } try { $requestData = $this->request->all(); From daedd2c46d197d77e02786d4fbdf9aea6757a4cc Mon Sep 17 00:00:00 2001 From: N-Feist Date: Wed, 29 Apr 2026 16:29:23 +0200 Subject: [PATCH 35/38] feat: add error message for general issues --- src/Api/Resources/CancellationResource.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 1b1bbd442..e36bfef47 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -26,6 +26,7 @@ class CancellationResource extends ApiResource use Loggable; const ERROR_MSG = 'Missing required fields'; + const GENERIC_ERROR_MSG = 'An error occurred while submitting the cancellation request. Please try again later.'; /** * @var CancellationRepositoryContract @@ -101,8 +102,8 @@ public function store(): Response return $this->response->create($successMessage, ResponseCode::OK); } catch (\Exception $exception) { $code = $exception->getCode() ?: ResponseCode::INTERNAL_SERVER_ERROR; - $this->response->error($code, $exception->getMessage()); - return $this->response->create($exception->getMessage(), $code); + $this->response->error($code, self::GENERIC_ERROR_MSG); + return $this->response->create(null, $code); } } } From 35630d406be5b8d3a699c70d309ec0c9ccad801d Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 30 Apr 2026 09:20:20 +0200 Subject: [PATCH 36/38] chore: change submit error message --- src/Api/Resources/CancellationResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index e36bfef47..41fe6d36a 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -26,7 +26,7 @@ class CancellationResource extends ApiResource use Loggable; const ERROR_MSG = 'Missing required fields'; - const GENERIC_ERROR_MSG = 'An error occurred while submitting the cancellation request. Please try again later.'; + const GENERIC_ERROR_MSG = 'Error submitting cancellation request'; /** * @var CancellationRepositoryContract From 9381785edec8b5d7cea88d1e4c378d537c422d2f Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 30 Apr 2026 11:18:23 +0200 Subject: [PATCH 37/38] fix: correct responses --- src/Api/Resources/CancellationResource.php | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 41fe6d36a..074580dd2 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -25,9 +25,6 @@ class CancellationResource extends ApiResource { use Loggable; - const ERROR_MSG = 'Missing required fields'; - const GENERIC_ERROR_MSG = 'Error submitting cancellation request'; - /** * @var CancellationRepositoryContract */ @@ -65,8 +62,7 @@ public function store(): Response $errors = []; if(empty($formData)){ - $this->response->error(ResponseCode::BAD_REQUEST, self::ERROR_MSG); - return $this->response->create(null, ResponseCode::BAD_REQUEST); + return $this->response->create(false, ResponseCode::BAD_REQUEST); } foreach (['email', 'name', 'order'] as $field) { @@ -87,10 +83,10 @@ public function store(): Response ); $this->response->error(ResponseCode::BAD_REQUEST, self::ERROR_MSG); - return $this->response->create(null, ResponseCode::BAD_REQUEST); + return $this->response->create(false, ResponseCode::BAD_REQUEST); } - $successMessage = $this->cancellationRepository->submitCancellationRequest([ + $this->cancellationRepository->submitCancellationRequest([ 'email' => $formData['email']['value'], 'name' => $formData['name']['value'], 'lang' => Utils::getLang(), @@ -99,11 +95,10 @@ public function store(): Response 'recipient' => $requestData['recipient'] ?? '', ]); - return $this->response->create($successMessage, ResponseCode::OK); + return $this->response->create(true, ResponseCode::OK); } catch (\Exception $exception) { $code = $exception->getCode() ?: ResponseCode::INTERNAL_SERVER_ERROR; - $this->response->error($code, self::GENERIC_ERROR_MSG); - return $this->response->create(null, $code); + return $this->response->create(false, $code); } } } From 915e005e98af870c9adc4595a47a270fdc2a6284 Mon Sep 17 00:00:00 2001 From: N-Feist Date: Thu, 30 Apr 2026 11:19:03 +0200 Subject: [PATCH 38/38] fix: remove error msg --- src/Api/Resources/CancellationResource.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Api/Resources/CancellationResource.php b/src/Api/Resources/CancellationResource.php index 074580dd2..b404eda94 100644 --- a/src/Api/Resources/CancellationResource.php +++ b/src/Api/Resources/CancellationResource.php @@ -82,7 +82,6 @@ public function store(): Response ] ); - $this->response->error(ResponseCode::BAD_REQUEST, self::ERROR_MSG); return $this->response->create(false, ResponseCode::BAD_REQUEST); }