179 lines
8.2 KiB
Markdown
179 lines
8.2 KiB
Markdown
# 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) statt `backend_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 ... %}` auf `tailwind_formtheme.html.twig` setzen
|
|
|
|
### 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
|
|
1. **Allgemein** - Username, Email, Enable, Level, Shops, PriceFactor
|
|
2. **Adressdaten** - Adresstabelle (existierende Tailwind-Tabelle nutzen)
|
|
3. **Individualisierung** - Custom fields
|
|
4. **Kalkulationsvariablen** - Preisanpassungen
|
|
5. **Variablenfelder** - basketfield1/2, Freefields
|
|
6. **Zugriffsrechte** - Rollen, Berechtigungen
|
|
7. **Erweitert** - Zusätzliche Einstellungen
|
|
8. **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.twig` implementiert
|
|
- 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:
|
|
1. `src/PSC/Shop/ContactBundle/Controller/Backend/EditController.php` - Reset-Action hinzufügen
|
|
2. `src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig` - Tailwind + Passwort-Button statt Passwort-Feld
|
|
3. `src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig` - Tailwind (Passwort-Feld bleibt)
|
|
4. `src/PSC/Shop/ContactBundle/Resources/views/backend/edit/anonymisieren.html.twig` - Tailwind
|
|
5. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/edit.html.twig` - Tailwind
|
|
6. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/create.html.twig` - Tailwind
|
|
7. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressdetail/delete.html.twig` - Tailwind
|
|
8. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step1.html.twig` - Tailwind
|
|
9. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step2.html.twig` - Tailwind
|
|
10. `src/PSC/Shop/ContactBundle/Resources/views/backend/addressimport/step3.html.twig` - Tailwind
|
|
11. `src/PSC/Shop/ContactBundle/Resources/views/backend/upload/deleteAll.html.twig` - Tailwind
|
|
|
|
### Neu erstellen:
|
|
12. `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
|
|
|
|
1. **Kundenliste**: `/backend/contact/list/index` laden - funktioniert bereits
|
|
2. **Kunde bearbeiten**: `/backend/contact/edit/edit/{uuid}` - Tailwind-Layout prüfen
|
|
3. **Kunde anlegen**: `/backend/contact/edit/create` - Tailwind-Layout prüfen
|
|
4. **Passwort-Reset**: "Passwort neu setzen" Button klicken → Reset-Seite → Neues Passwort anzeigen
|
|
5. **Adresse bearbeiten**: `/backend/contact/address/detail/edit/{uuid}` - Tailwind prüfen
|
|
6. **Adresse anlegen**: `/backend/contact/address/detail/create/{uuid}` - Tailwind prüfen
|
|
7. **Löschen/Anonymisieren**: Bestätigungsdialoge prüfen
|
|
8. **Tabs**: Alle Tabs durchklicken, Inhalte sichtbar/versteckt korrekt
|
|
9. **Formulare speichern**: Alle Formulare testweise absenden
|