From 9dd2dc31dd3b75ce3c6d5e09aa8f859c863111a2 Mon Sep 17 00:00:00 2001 From: philipp lang Date: Thu, 27 Aug 2026 21:27:35 +0200 Subject: [PATCH] WIP: Add cleanup for forms @todo add cleanup icon as svg (broom.svg) --- app/Form/Actions/FormCleanupAction.php | 28 ++++ app/Form/Models/Form.php | 3 +- app/Form/Resources/FormResource.php | 1 + resources/img/svg/broom.svg | 3 + resources/js/views/form/Index.vue | 143 ++++++++++++------- routes/web.php | 2 + tests/Feature/Form/FormCleanupActionTest.php | 98 +++++++++++++ 7 files changed, 224 insertions(+), 54 deletions(-) create mode 100644 app/Form/Actions/FormCleanupAction.php create mode 100644 resources/img/svg/broom.svg create mode 100644 tests/Feature/Form/FormCleanupActionTest.php diff --git a/app/Form/Actions/FormCleanupAction.php b/app/Form/Actions/FormCleanupAction.php new file mode 100644 index 00000000..5db1de84 --- /dev/null +++ b/app/Form/Actions/FormCleanupAction.php @@ -0,0 +1,28 @@ +participants()->get()->each->delete(); + $form->save(); + ClearFrontendCacheAction::run(); + } + + public function asController(Form $form): JsonResponse + { + $this->handle($form); + + Succeeded::message('Teilnehmende gelöscht.')->dispatch(); + return response()->json([]); + } +} diff --git a/app/Form/Models/Form.php b/app/Form/Models/Form.php index d42bb451..68f2e1a3 100644 --- a/app/Form/Models/Form.php +++ b/app/Form/Models/Form.php @@ -190,7 +190,8 @@ class Form extends Model implements HasMedia return Sorting::from($this->meta['sorting']); } - public function isInDates(): bool { + public function isInDates(): bool + { if ($this->registration_from && $this->registration_from->gt(now())) { return false; } diff --git a/app/Form/Resources/FormResource.php b/app/Form/Resources/FormResource.php index 36d06ca8..6af05b24 100644 --- a/app/Form/Resources/FormResource.php +++ b/app/Form/Resources/FormResource.php @@ -65,6 +65,7 @@ class FormResource extends JsonResource 'participant_root_index' => route('form.participant.index', ['form' => $this->getModel(), 'parent' => -1]), 'update' => route('form.update', $this->getModel()), 'destroy' => route('form.destroy', $this->getModel()), + 'cleanup' => route('form.cleanup', $this->getModel()), 'is_dirty' => route('form.is-dirty', $this->getModel()), 'frontend' => str(app(FormSettings::class)->registerUrl)->replace('{slug}', $this->slug), 'export' => route('form.export', $this->getModel()), diff --git a/resources/img/svg/broom.svg b/resources/img/svg/broom.svg new file mode 100644 index 00000000..a5201093 --- /dev/null +++ b/resources/img/svg/broom.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/js/views/form/Index.vue b/resources/js/views/form/Index.vue index 8639a6d1..13eef04e 100644 --- a/resources/js/views/form/Index.vue +++ b/resources/js/views/form/Index.vue @@ -23,33 +23,54 @@
- - + +
- - + -
@@ -61,9 +82,9 @@
- Hier kannst du die E-Mail anpassen, die nach der Anmeldung an den Teilnehmer verschickt wird.
- Es gibt dafür einen ersten E-Mail-Teil und einen zweiten E-Mail-Teil. Dazwischen werden die Daten des Teilnehmers aufgelistet.
- Die Anrede ("Hallo Max Mustermann") wird automatisch an den Anfang gesetzt.
+ Hier kannst du die E-Mail anpassen, die nach der Anmeldung an den Teilnehmer verschickt wird.
+ Es gibt dafür einen ersten E-Mail-Teil und einen zweiten E-Mail-Teil. Dazwischen werden die Daten des Teilnehmers aufgelistet.
+ Die Anrede ("Hallo Max Mustermann") wird automatisch an den Anfang gesetzt.
Außerdem kannst du Dateien hochladen, die automatisch mit angehangen werden.
@@ -79,14 +100,15 @@
-