8.2 KiB
8.2 KiB
Plan: ContactBundle Tailwind-Migration + Passwort-Reset
Übersicht
Das ContactBundle (Kundenbereich) wird von Bootstrap 5 auf Tailwind CSS umgestellt, analog zur SettingsBundle-Referenz. Das Passwort-Feld wird aus dem Edit-Formular entfernt (bleibt im Create-Formular) und durch eine separate "Passwort neu setzen"-Seite ersetzt.
Aktueller Stand
- Bereits Tailwind:
list/index.html.twig,edit/delete.html.twig - Noch Bootstrap:
edit/edit.html.twig,edit/create.html.twig,edit/anonymisieren.html.twig,addressdetail/*,addressimport/*,upload/deleteAll.html.twig - Base Template:
backend_tailwind_base.html.twig(Tailwind) stattbackend_base.html.twig(Bootstrap) - Form Theme:
tailwind_formtheme.html.twig
Phase 1: Passwort-Feld entfernen + Reset-Seite erstellen
1.1 Passwort-Feld nur aus Edit-Template entfernen
- Edit-Template:
Resources/views/backend/edit/edit.html.twig(Zeilen ~91-107) - Passwort-Block mit data-pw-wrap entfernen - Create-Template: Passwort-Feld BLEIBT erhalten (Neuanlage mit Passwort möglich)
- ContactType.php:
->add('password', ...)bleibt (wird von Create noch benötigt)
1.2 Passwort-Logik im EditController
- Bestehende Logik bleibt:
if ($form->get('password')->getData() !== null) { ... }(Zeilen ~347-349) - Wird nur noch beim Create aufgerufen, da Edit das Feld nicht mehr hat
1.3 Neue "Passwort neu setzen"-Seite erstellen
Controller-Action in EditController hinzufügen
Datei: Controller/Backend/EditController.php
- Neue Action
resetPasswordAction(Request $request, Contact $contact, DocumentManager $dm) - Route:
/backend/contact/edit/reset-password/{uuid} - Name:
psc_shop_contact_backend_reset_password - GET: Zeigt Formular mit Passwort-Eingabefeld (mit Show/Hide Toggle)
- POST: Hasht das eingegebene Passwort mit
password_hash(PASSWORD_DEFAULT)und speichert es - Zeigt nach erfolgreichem Speichern eine Bestätigung
Neues Template erstellen
Datei: Resources/views/backend/edit/reset_password.html.twig
- Extends
backend_tailwind_base.html.twig - Formular mit Passwort-Eingabefeld (mit Show/Hide Toggle)
- Speichern-Button
- Bestätigungsmeldung nach erfolgreichem Speichern
- Zurück-Button zum Kunden
- Styling analog zu
delete.html.twig(Karte mit Kopfzeile)
1.4 "Passwort neu setzen"-Button in Edit-Formular
Datei: Resources/views/backend/edit/edit.html.twig (nach Tailwind-Migration)
- Statt Passwort-Feld: Button "Passwort neu setzen" der zur Reset-Seite führt
- Styling:
inline-flex items-center gap-1.5 px-3 py-2 rounded-sm text-sm font-medium text-gray-700 bg-white border border-gray-300 hover:bg-gray-50 shadow-sm
Phase 2: edit.html.twig Tailwind-Migration (1746 Zeilen)
2.1 Base-Template wechseln
{% extends 'backend_base.html.twig' %}→{% extends 'backend_tailwind_base.html.twig' %}- Form-Theme:
{% form_theme form ... %}auftailwind_formtheme.html.twigsetzen
2.2 Seitenstruktur
{% block header %}
Titel + Aktionsbuttons (Speichern, Löschen, Anonymisieren)
{% endblock %}
{% block body %}
<div class="w-full">
Tab-Navigation (sidebar links) + Tab-Inhalte (rechts)
</div>
{% endblock %}
2.3 Tab-System (aus SettingsBundle übernehmen)
- Tab-Sidebar:
tab-group flex-none md:flex w-full - Tab-Links:
tab-link flex items-center text-sm px-4 py-2 relative - Tab-Inhalte:
tab-content w-full text-stone-500 text-sm hidden/block
2.4 Tabs die migriert werden müssen
- Allgemein - Username, Email, Enable, Level, Shops, PriceFactor
- Adressdaten - Adresstabelle (existierende Tailwind-Tabelle nutzen)
- Individualisierung - Custom fields
- Kalkulationsvariablen - Preisanpassungen
- Variablenfelder - basketfield1/2, Freefields
- Zugriffsrechte - Rollen, Berechtigungen
- Erweitert - Zusätzliche Einstellungen
- Plugin-Tabs - Dynamisch aus Plugin-System
2.5 Bootstrap → Tailwind Klassen-Mapping
| Bootstrap | Tailwind |
|---|---|
panel panel-default > header/body |
rounded-md border bg-white px-7.5 py-6 shadow-lg |
row > col-md-* |
flex flex-wrap > w-full lg:w-6/12 px-4 |
form-control |
border-1 px-3 py-3 bg-white rounded text-sm shadow |
form-control-label |
block uppercase text-xs font-bold mb-2 |
btn btn-primary |
bg-psc-500 hover:bg-psc-600 text-white rounded-sm px-4 py-1 |
btn btn-danger |
bg-red-600 hover:bg-red-700 text-white rounded-sm px-4 py-2 |
btn btn-info |
bg-blue-600 hover:bg-blue-700 text-white rounded-sm px-4 py-2 |
nav nav-pills > nav-item > nav-link |
tab-link flex items-center text-sm px-4 py-2 relative |
table table-striped |
min-w-full text-sm mit hover:bg-gray-50 |
badge bg-success/danger |
text-green-600 / text-red-600 |
collapse |
Alpine.js x-show oder hidden Klasse |
2.6 JavaScript anpassen
- AJAX Username-Check: Muss weiter funktionieren
- Tab-Switching: Bereits in
backend_tailwind_base.html.twigimplementiert - jQuery durch Vanilla JS/Alpine.js ersetzen wo nötig
Phase 3: create.html.twig Tailwind-Migration (1617 Zeilen)
- Fast identisch zu edit.html.twig
- Keine Adresstabelle, kein Change-Log
- Keine Plugin-Tabs
- Preis-Tab (priceFactor) vorhanden
- Gleiche Bootstrap → Tailwind Konvertierung
Phase 4: Weitere Templates migrieren
4.1 anonymisieren.html.twig (38 Zeilen)
- Analog zu
delete.html.twig(bereits Tailwind) - Bestätigungsdialog mit Ja/Nein Buttons
4.2 addressdetail/edit.html.twig (320 Zeilen)
- Formularfelder: type, UUID, homepage, sort, email, KundenNr, company, salutation, name, street, zip, phone, fax, mobile, ustid, steuerid, lid, zusatz1/2
- Change-Log Tabelle
- 2-Spalten Layout mit
flex flex-wrap
4.3 addressdetail/create.html.twig (296 Zeilen)
- Wie edit aber ohne Change-Log
4.4 addressdetail/delete.html.twig (40 Zeilen)
- Analog zu bestehender delete.html.twig
4.5 addressimport/step1-3.html.twig (39+86+41 Zeilen)
- Step 1: Datei-Upload
- Step 2: Spalten-Mapping
- Step 3: Bestätigung
4.6 upload/deleteAll.html.twig (74 Zeilen)
- Tabelle mit Uploads + Bestätigung
Betroffene Dateien (Zusammenfassung)
Zu bearbeiten:
src/PSC/Shop/ContactBundle/Controller/Backend/EditController.php- Reset-Action hinzufügensrc/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig- Tailwind + Passwort-Button statt Passwort-Feldsrc/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig- Tailwind (Passwort-Feld bleibt)src/PSC/Shop/ContactBundle/Resources/views/backend/edit/anonymisieren.html.twig- Tailwindsrc/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/edit.html.twig- Tailwindsrc/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/create.html.twig- Tailwindsrc/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/delete.html.twig- Tailwindsrc/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step1.html.twig- Tailwindsrc/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step2.html.twig- Tailwindsrc/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step3.html.twig- Tailwindsrc/PSC/Shop/ContactBundle/Resources/views/backend/upload/deleteAll.html.twig- Tailwind
Neu erstellen:
src/PSC/Shop/ContactBundle/Resources/views/backend/edit/reset_password.html.twig- Neue Reset-Seite
NICHT bearbeiten:
src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php- bleibt unverändert (Passwort-Feld für Create benötigt)
Verifikation
- Kundenliste:
/backend/contact/list/indexladen - funktioniert bereits - Kunde bearbeiten:
/backend/contact/edit/edit/{uuid}- Tailwind-Layout prüfen - Kunde anlegen:
/backend/contact/edit/create- Tailwind-Layout prüfen - Passwort-Reset: "Passwort neu setzen" Button klicken → Reset-Seite → Neues Passwort anzeigen
- Adresse bearbeiten:
/backend/contact/address/detail/edit/{uuid}- Tailwind prüfen - Adresse anlegen:
/backend/contact/address/detail/create/{uuid}- Tailwind prüfen - Löschen/Anonymisieren: Bestätigungsdialoge prüfen
- Tabs: Alle Tabs durchklicken, Inhalte sichtbar/versteckt korrekt
- Formulare speichern: Alle Formulare testweise absenden