146 lines
5.8 KiB
Markdown
146 lines
5.8 KiB
Markdown
---
|
|
phase: 51-email-html-layout
|
|
plan: 01
|
|
subsystem: email
|
|
tags: [quill, html-email, smtp, phpmailer]
|
|
|
|
requires:
|
|
- phase: 13-email-mailboxes
|
|
provides: email_mailboxes table, EmailMailboxRepository, EmailMailboxController
|
|
- phase: 14-email-templates
|
|
provides: email_templates table, Quill.js editor, VariableResolver
|
|
provides:
|
|
- HTML header/footer per mailbox (header_html, footer_html columns)
|
|
- Email composition: header + body + footer in EmailSendingService
|
|
- HTML source editor toggle + preview for header/footer
|
|
affects: []
|
|
|
|
tech-stack:
|
|
added: []
|
|
patterns: [html-source-toggle, iframe-preview, table-based-email-layout]
|
|
|
|
key-files:
|
|
created:
|
|
- database/migrations/20260328_000001_add_html_layout_to_email_mailboxes.sql
|
|
modified:
|
|
- src/Modules/Settings/EmailMailboxRepository.php
|
|
- src/Modules/Settings/EmailMailboxController.php
|
|
- resources/views/settings/email-mailboxes.php
|
|
- src/Modules/Email/EmailSendingService.php
|
|
|
|
key-decisions:
|
|
- "Header/footer na poziomie skrzynki (nie szablonu) — spojny branding bez duplikacji"
|
|
- "Tryb HTML source omija Quill — surowy HTML zachowany bez sanityzacji"
|
|
- "composeBody() jako reusable metoda w send() i preview()"
|
|
|
|
patterns-established:
|
|
- "HTML source toggle: textarea + Quill toggle z auto-detekcja rich HTML przy ladowaniu"
|
|
- "Iframe preview modal do podgladu surowego HTML"
|
|
|
|
duration: ~45min
|
|
started: 2026-03-28T16:00:00Z
|
|
completed: 2026-03-28T16:45:00Z
|
|
---
|
|
|
|
# Phase 51 Plan 01: Email HTML Layout Summary
|
|
|
|
**HTML header/footer per skrzynka pocztowa z dual-mode edytorem (Quill WYSIWYG + HTML source) i kompozycja email header+body+footer w EmailSendingService.**
|
|
|
|
## Performance
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| Duration | ~45min |
|
|
| Tasks | 3 completed + 2 scope additions |
|
|
| Files modified | 5 source + 3 docs |
|
|
|
|
## Acceptance Criteria Results
|
|
|
|
| Criterion | Status | Notes |
|
|
|-----------|--------|-------|
|
|
| AC-1: Kolumny DB header_html i footer_html | Pass | TEXT NULL, migracja zarejestrowana w migrations table |
|
|
| AC-2: Edycja header/footer w formularzu skrzynki | Pass | Quill + HTML source toggle + preview |
|
|
| AC-3: Kompozycja header + content + footer | Pass | composeBody() w send() i preview(), variable resolver na header/footer |
|
|
| AC-4: E-mail bez header/footer | Pass | NULL/pusty header/footer pomijany |
|
|
|
|
## Accomplishments
|
|
|
|
- Kolumny `header_html`/`footer_html` w `email_mailboxes` z pelnym CRUD (repository + controller)
|
|
- Dual-mode edytor: Quill WYSIWYG z email-safe toolbar + tryb HTML source (textarea) z auto-detekcja rich HTML
|
|
- Przycisk podgladu (iframe modal) dla header i footer
|
|
- Metoda `composeBody()` w EmailSendingService — skladanie header + body + footer z variable resolution
|
|
- Przykladowy szablon stopki (table-based, Outlook-safe) w `footer-template.html`
|
|
|
|
## Files Created/Modified
|
|
|
|
| File | Change | Purpose |
|
|
|------|--------|---------|
|
|
| `database/migrations/20260328_000001_add_html_layout_to_email_mailboxes.sql` | Created | ALTER TABLE — kolumny header_html, footer_html |
|
|
| `src/Modules/Settings/EmailMailboxRepository.php` | Modified | header_html/footer_html w save() INSERT/UPDATE |
|
|
| `src/Modules/Settings/EmailMailboxController.php` | Modified | Pobieranie header_html/footer_html z POST |
|
|
| `resources/views/settings/email-mailboxes.php` | Modified | Sekcja "Szablon wiadomosci": 2x Quill + HTML source toggle + preview modal |
|
|
| `src/Modules/Email/EmailSendingService.php` | Modified | composeBody() — skladanie header+body+footer w send() i preview() |
|
|
| `DOCS/DB_SCHEMA.md` | Modified | Dokumentacja nowych kolumn |
|
|
| `DOCS/TECH_CHANGELOG.md` | Modified | Wpis Phase 51 |
|
|
| `DOCS/ARCHITECTURE.md` | Modified | Opis kompozycji email |
|
|
|
|
## Decisions Made
|
|
|
|
| Decision | Rationale | Impact |
|
|
|----------|-----------|--------|
|
|
| Header/footer na poziomie skrzynki, nie szablonu | Spojny branding — jeden header/footer dla wszystkich szablonow danej skrzynki | Brak duplikacji w szablonach |
|
|
| Tryb HTML source omija Quill calkowicie | Quill sanityzuje HTML (usuwa inline style, div, table) — rich HTML musi byc zachowany | Surowy HTML wklejony w source mode trafia do DB bez strat |
|
|
| Auto-detekcja rich HTML przy ladowaniu | Jesli zapisany HTML zawiera div+style/table/meta, edytor startuje w source mode | Brak utraty danych przy ponownej edycji |
|
|
| composeBody() jako prywatna metoda | Reuse w send() i preview() bez duplikacji logiki | Spojnosc kompozycji |
|
|
|
|
## Deviations from Plan
|
|
|
|
### Summary
|
|
|
|
| Type | Count | Impact |
|
|
|------|-------|--------|
|
|
| Scope additions | 2 | Uzyteczne rozszerzenia UI na zyczenie uzytkownika |
|
|
| Auto-fixed | 1 | Rejestracja migracji w tabeli migrations |
|
|
|
|
### Scope Additions
|
|
|
|
**1. Tryb HTML source (</> HTML)**
|
|
- Dodany na zyczenie uzytkownika — Quill sanityzuje rich HTML
|
|
- Textarea toggle z zachowaniem surowego HTML przy submit
|
|
|
|
**2. Przycisk Podglad**
|
|
- Dodany na zyczenie uzytkownika
|
|
- Iframe modal renderujacy aktualny HTML z edytora
|
|
|
|
### Auto-fixed Issues
|
|
|
|
**1. Migracja nie zarejestrowana w tabeli migrations**
|
|
- Migracja uruchomiona recznym PDO::exec (kolumny dodane), ale brak wpisu w `migrations`
|
|
- Migrator probowal ponownie wykonac ALTER — Duplicate column error
|
|
- Fix: INSERT do tabeli migrations
|
|
|
|
## Issues Encountered
|
|
|
|
| Issue | Resolution |
|
|
|-------|------------|
|
|
| Lokalna baza niedostepna (XAMPP nie uruchomiony) | Uzyto DB_HOST_REMOTE do migracji |
|
|
| Migracja reczna nie zarejestrowala sie w migrations | Reczny INSERT do tabeli migrations |
|
|
|
|
## Next Phase Readiness
|
|
|
|
**Ready:**
|
|
- Email header/footer w pelni funkcjonalny
|
|
- Preview w formularzu skrzynki
|
|
- Kompozycja email dziala w send() i preview()
|
|
|
|
**Concerns:**
|
|
- Brak panelu zmiennych w formularzu skrzynki (header/footer zwykle statyczny)
|
|
- SonarQube scan nie uruchomiony (wymagany przez SPECIAL-FLOWS.md przed UNIFY)
|
|
|
|
**Blockers:**
|
|
- None
|
|
|
|
---
|
|
*Phase: 51-email-html-layout, Plan: 01*
|
|
*Completed: 2026-03-28*
|