From fed54514c8250307cf3f8fbabe107c68b0204f1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=BCnther?= Date: Sun, 21 Jun 2026 18:00:20 +0200 Subject: [PATCH] Admin function for tenant --- .../TenantContactGetController.php | 20 +++ .../TenantContactUpdateController.php | 25 +++ .../Controllers/TenantGdprGetController.php | 17 ++ .../TenantGdprUpdateController.php | 22 +++ .../TenantImpressGetController.php | 17 ++ .../TenantImpressUpdateController.php | 22 +++ .../Controllers/TenantPageController.php | 24 +++ .../TenantPaymentGetController.php | 19 +++ .../TenantPaymentUpdateController.php | 24 +++ app/Domains/Admin/Routes/api.php | 26 ++++ .../Admin/Views/Partials/TenantContact.vue | 145 ++++++++++++++++++ .../Admin/Views/Partials/TenantGdpr.vue | 86 +++++++++++ .../Admin/Views/Partials/TenantImpress.vue | 55 +++++++ .../Admin/Views/Partials/TenantPayment.vue | 139 +++++++++++++++++ app/Domains/Admin/Views/TenantData.vue | 109 +++++++++++++ ...alter_tenants_gdpr_impress_to_longtext.php | 23 +++ resources/templates/gdpr-template.html | 54 +++++++ 17 files changed, 827 insertions(+) create mode 100644 app/Domains/Admin/Controllers/TenantContactGetController.php create mode 100644 app/Domains/Admin/Controllers/TenantContactUpdateController.php create mode 100644 app/Domains/Admin/Controllers/TenantGdprGetController.php create mode 100644 app/Domains/Admin/Controllers/TenantGdprUpdateController.php create mode 100644 app/Domains/Admin/Controllers/TenantImpressGetController.php create mode 100644 app/Domains/Admin/Controllers/TenantImpressUpdateController.php create mode 100644 app/Domains/Admin/Controllers/TenantPageController.php create mode 100644 app/Domains/Admin/Controllers/TenantPaymentGetController.php create mode 100644 app/Domains/Admin/Controllers/TenantPaymentUpdateController.php create mode 100644 app/Domains/Admin/Routes/api.php create mode 100644 app/Domains/Admin/Views/Partials/TenantContact.vue create mode 100644 app/Domains/Admin/Views/Partials/TenantGdpr.vue create mode 100644 app/Domains/Admin/Views/Partials/TenantImpress.vue create mode 100644 app/Domains/Admin/Views/Partials/TenantPayment.vue create mode 100644 app/Domains/Admin/Views/TenantData.vue create mode 100644 database/migrations/2026_06_21_000001_alter_tenants_gdpr_impress_to_longtext.php create mode 100644 resources/templates/gdpr-template.html diff --git a/app/Domains/Admin/Controllers/TenantContactGetController.php b/app/Domains/Admin/Controllers/TenantContactGetController.php new file mode 100644 index 0000000..f69f58e --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantContactGetController.php @@ -0,0 +1,20 @@ +json([ + 'email' => $this->tenant->email, + 'email_finance' => $this->tenant->email_finance, + 'postcode' => $this->tenant->postcode, + 'city' => $this->tenant->city, + ]); + } +} diff --git a/app/Domains/Admin/Controllers/TenantContactUpdateController.php b/app/Domains/Admin/Controllers/TenantContactUpdateController.php new file mode 100644 index 0000000..8acf166 --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantContactUpdateController.php @@ -0,0 +1,25 @@ +tenant->update([ + 'email' => $request->input('email'), + 'email_finance' => $request->input('email_finance'), + 'postcode' => $request->input('postcode'), + 'city' => $request->input('city'), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Kontaktdaten wurden gespeichert.', + ]); + } +} diff --git a/app/Domains/Admin/Controllers/TenantGdprGetController.php b/app/Domains/Admin/Controllers/TenantGdprGetController.php new file mode 100644 index 0000000..c0017b1 --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantGdprGetController.php @@ -0,0 +1,17 @@ +json([ + 'gdpr_text' => $this->tenant->gdpr_text ?? '', + ]); + } +} diff --git a/app/Domains/Admin/Controllers/TenantGdprUpdateController.php b/app/Domains/Admin/Controllers/TenantGdprUpdateController.php new file mode 100644 index 0000000..974495b --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantGdprUpdateController.php @@ -0,0 +1,22 @@ +tenant->update([ + 'gdpr_text' => $request->input('gdpr_text'), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Datenschutzerklärung wurde gespeichert.', + ]); + } +} diff --git a/app/Domains/Admin/Controllers/TenantImpressGetController.php b/app/Domains/Admin/Controllers/TenantImpressGetController.php new file mode 100644 index 0000000..e18b835 --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantImpressGetController.php @@ -0,0 +1,17 @@ +json([ + 'impress_text' => $this->tenant->impress_text ?? '', + ]); + } +} diff --git a/app/Domains/Admin/Controllers/TenantImpressUpdateController.php b/app/Domains/Admin/Controllers/TenantImpressUpdateController.php new file mode 100644 index 0000000..e2feaac --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantImpressUpdateController.php @@ -0,0 +1,22 @@ +tenant->update([ + 'impress_text' => $request->input('impress_text'), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Impressum wurde gespeichert.', + ]); + } +} diff --git a/app/Domains/Admin/Controllers/TenantPageController.php b/app/Domains/Admin/Controllers/TenantPageController.php new file mode 100644 index 0000000..72bd738 --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantPageController.php @@ -0,0 +1,24 @@ + [ + 'name' => $this->tenant->name, + 'slug' => $this->tenant->slug, + 'url' => $this->tenant->url, + 'is_active_local_group' => $this->tenant->is_active_local_group, + ], + ]); + return $inertiaProvider->render(); + } +} diff --git a/app/Domains/Admin/Controllers/TenantPaymentGetController.php b/app/Domains/Admin/Controllers/TenantPaymentGetController.php new file mode 100644 index 0000000..0f38df1 --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantPaymentGetController.php @@ -0,0 +1,19 @@ +json([ + 'account_iban' => $this->tenant->account_iban, + 'account_bic' => $this->tenant->account_bic, + 'account_name' => $this->tenant->account_name, + ]); + } +} diff --git a/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php b/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php new file mode 100644 index 0000000..7bf6fef --- /dev/null +++ b/app/Domains/Admin/Controllers/TenantPaymentUpdateController.php @@ -0,0 +1,24 @@ +tenant->update([ + 'account_iban' => $request->input('account_iban'), + 'account_bic' => $request->input('account_bic'), + 'account_name' => $request->input('account_name'), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Bezahldaten wurden gespeichert.', + ]); + } +} diff --git a/app/Domains/Admin/Routes/api.php b/app/Domains/Admin/Routes/api.php new file mode 100644 index 0000000..81a4241 --- /dev/null +++ b/app/Domains/Admin/Routes/api.php @@ -0,0 +1,26 @@ +group(function () { + Route::prefix('api/v1/admin/tenant')->group(function () { + Route::get('/contact', TenantContactGetController::class); + Route::post('/contact', TenantContactUpdateController::class); + Route::get('/payment', TenantPaymentGetController::class); + Route::post('/payment', TenantPaymentUpdateController::class); + Route::get('/impress', TenantImpressGetController::class); + Route::post('/impress', TenantImpressUpdateController::class); + Route::get('/gdpr', TenantGdprGetController::class); + Route::post('/gdpr', TenantGdprUpdateController::class); + }); +}); diff --git a/app/Domains/Admin/Views/Partials/TenantContact.vue b/app/Domains/Admin/Views/Partials/TenantContact.vue new file mode 100644 index 0000000..d6bf63a --- /dev/null +++ b/app/Domains/Admin/Views/Partials/TenantContact.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/app/Domains/Admin/Views/Partials/TenantGdpr.vue b/app/Domains/Admin/Views/Partials/TenantGdpr.vue new file mode 100644 index 0000000..2fdf97a --- /dev/null +++ b/app/Domains/Admin/Views/Partials/TenantGdpr.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/app/Domains/Admin/Views/Partials/TenantImpress.vue b/app/Domains/Admin/Views/Partials/TenantImpress.vue new file mode 100644 index 0000000..628d311 --- /dev/null +++ b/app/Domains/Admin/Views/Partials/TenantImpress.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/app/Domains/Admin/Views/Partials/TenantPayment.vue b/app/Domains/Admin/Views/Partials/TenantPayment.vue new file mode 100644 index 0000000..0b385ae --- /dev/null +++ b/app/Domains/Admin/Views/Partials/TenantPayment.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/app/Domains/Admin/Views/TenantData.vue b/app/Domains/Admin/Views/TenantData.vue new file mode 100644 index 0000000..5622db5 --- /dev/null +++ b/app/Domains/Admin/Views/TenantData.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/database/migrations/2026_06_21_000001_alter_tenants_gdpr_impress_to_longtext.php b/database/migrations/2026_06_21_000001_alter_tenants_gdpr_impress_to_longtext.php new file mode 100644 index 0000000..5f26e73 --- /dev/null +++ b/database/migrations/2026_06_21_000001_alter_tenants_gdpr_impress_to_longtext.php @@ -0,0 +1,23 @@ +longText('gdpr_text')->nullable()->change(); + $table->longText('impress_text')->nullable()->change(); + }); + } + + public function down(): void + { + Schema::table('tenants', function (Blueprint $table) { + $table->string('gdpr_text')->nullable()->change(); + $table->string('impress_text')->nullable()->change(); + }); + } +}; diff --git a/resources/templates/gdpr-template.html b/resources/templates/gdpr-template.html new file mode 100644 index 0000000..39402af --- /dev/null +++ b/resources/templates/gdpr-template.html @@ -0,0 +1,54 @@ +

1. Verantwortlicher

+

Verantwortlich für die Datenverarbeitung auf dieser Website ist:
+[Name des Vereins]
+[Straße und Hausnummer]
+[PLZ Ort]
+E-Mail: [E-Mail-Adresse]

+ +

Der Verein hat keinen Datenschutzbeauftragten bestellt, da die Voraussetzungen nach Art. 37 DSGVO nicht vorliegen.

+ +

2. Erhebung und Speicherung personenbezogener Daten

+

Beim Besuch dieser Website werden durch den Webserver automatisch folgende Daten in Server-Logfiles gespeichert:

+ +

Diese Daten sind nicht bestimmten Personen zuordenbar. Eine Zusammenführung mit anderen Datenquellen findet nicht statt. Die Daten werden nach einer statistischen Auswertung gelöscht.

+ +

3. Registrierung und Nutzerkonto

+

Zur Nutzung bestimmter Funktionen ist eine Registrierung erforderlich. Dabei werden folgende Daten erhoben:

+ +

Die Verarbeitung erfolgt auf Grundlage von Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung bzw. vorvertragliche Maßnahmen) sowie Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse an der Vereinsverwaltung).

+ +

4. Cookies

+

Diese Website verwendet ausschließlich technisch notwendige Cookies, die für den Betrieb der Seite erforderlich sind (z. B. Session-Cookies zur Authentifizierung). Diese Cookies werden nach Ende der Browser-Sitzung automatisch gelöscht.

+

Es werden keine Tracking-Cookies, Analyse-Cookies oder Cookies von Drittanbietern eingesetzt. Eine Einwilligung ist für technisch notwendige Cookies nicht erforderlich (§ 25 Abs. 2 TDDDG).

+ +

5. Keine Weitergabe an Dritte und keine externen Dienste

+

Es werden keine externen Tools, Analysedienste, Social-Media-Plugins oder Content-Delivery-Networks eingebunden. Sämtliche Daten werden ausschließlich auf unserem eigenen Server verarbeitet.

+

Eine Weitergabe personenbezogener Daten an Dritte erfolgt nur, wenn dies zur Vertragserfüllung erforderlich ist (z. B. Weitergabe von Teilnehmerdaten an Veranstaltungsorte) oder eine gesetzliche Verpflichtung besteht.

+ +

6. Deine Rechte

+

Du hast jederzeit das Recht auf:

+ +

Zur Ausübung deiner Rechte genügt eine formlose Mitteilung an die oben genannte E-Mail-Adresse.

+ +

7. Beschwerderecht

+

Du hast das Recht, dich bei einer Datenschutz-Aufsichtsbehörde über die Verarbeitung deiner personenbezogenen Daten zu beschweren.

+ +

8. Aktualität dieser Datenschutzerklärung

+

Diese Datenschutzerklärung ist aktuell gültig.
+Stand: [Datum]