v1.2.0
- E-mail intake (IMAP), optional and off by default: clients can create a ticket or reply to an existing one just by sending/replying to an e-mail. Configure any number of mailboxes in the new Admin > Poczta page (SMTP + IMAP together, replacing the old "E-MAIL" tab), each routed to a specific subcategory or a whole category (new tickets.category_id column). Replies are matched to their ticket via the number/checksum already in every notification subject; autoresponders/bounces are detected and rejected; "restrict tickets to LDAP" is enforced for e-mail like the guest web form. Manual "Pobierz teraz" per-mailbox fetch button; dedicated storage/logs/imap-*.log regardless of the app's log level; mail-icon badges on e-mail-originated tickets/messages in the operator queue and ticket view. - Operator queue: "select all" checkbox in the table header for every currently visible ticket under the active filter/tab. - Fixed: scheduled commands (SLA breach check, automation rules, and now IMAP fetch) always sent notifications through .env's default mailer instead of the configured SMTP server, because AppServiceProvider's Settings override used to skip itself for any console command, not just migrate. - Fixed: visiting a ticket that no longer exists (deleted mid-session, or a stale background refresh) showed a raw 404 instead of redirecting back to the operator queue / client dashboard. - Docs: README/ARCHITECTURE/CLAUDE/install/wiki updated for all of the above, including the previously-missing host crontab entry for schedule:run. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
20
README.md
20
README.md
@@ -99,6 +99,18 @@ and **[wiki/admin](wiki/admin/README.md)** for role-specific how-to guides.
|
||||
- **Attachments** — drag-and-drop upload (in addition to the file picker); every
|
||||
attachment shows in the message thread as just its filename, opening in a new
|
||||
tab on click (no inline image preview).
|
||||
- **E-mail intake (IMAP)** *(optional, off by default)* — clients can create
|
||||
tickets or reply to an existing one just by sending/replying to an e-mail;
|
||||
configure any number of mailboxes in Admin > Poczta (e.g. one address per
|
||||
team), each routed to a specific subcategory or a whole category. A reply
|
||||
is matched back to its ticket via the number/checksum already present in
|
||||
every notification's subject; automatic replies (autoresponders, bounces)
|
||||
are detected and rejected instead of creating junk tickets, and the
|
||||
"restrict tickets to LDAP" setting is enforced for e-mail exactly like the
|
||||
guest web form. A manual "Pobierz teraz" button fetches immediately
|
||||
outside the 5-minute schedule; all activity is logged separately to
|
||||
`storage/logs/imap-*.log`. Tickets/messages that came in by e-mail show a
|
||||
small mail-icon badge in the operator queue and ticket view.
|
||||
- **Configurable ticket numbering** (Admin > Konfiguracja) — a custom prefix and
|
||||
minimum zero-padded length for the ticket number, plus an optional "hide
|
||||
ticket order" mode that displays a stable per-ticket checksum instead of the
|
||||
@@ -131,7 +143,8 @@ and **[wiki/admin](wiki/admin/README.md)** for role-specific how-to guides.
|
||||
- **Backend**: Laravel, Livewire (server-driven UI, no SPA build beyond Tailwind/Vite
|
||||
for CSS), LdapRecord for directory auth, Sanctum for API tokens, L5-Swagger for
|
||||
API docs, Laravel Reverb for WebSocket broadcasting (real-time queue/chat
|
||||
updates — see [ARCHITECTURE.md](ARCHITECTURE.md)).
|
||||
updates — see [ARCHITECTURE.md](ARCHITECTURE.md)), webklex/php-imap for the
|
||||
optional e-mail intake fetcher (pure-PHP IMAP client, no `ext-imap` needed).
|
||||
- **Frontend**: Blade + Livewire + a little Alpine.js for local UI state; Tailwind
|
||||
v4 via Vite for `resources/css/app.css`; Laravel Echo + Pusher-protocol client
|
||||
(`resources/js/echo.js`) for Reverb. No JS charting library — the statistics
|
||||
@@ -179,8 +192,9 @@ src/ Laravel application
|
||||
app/Livewire/ Client/Operator/Admin Livewire components
|
||||
app/Models/ Eloquent models
|
||||
app/Events/ Broadcast events (TicketQueueChanged, TicketMessagePosted)
|
||||
app/Console/Commands/ Scheduled commands (SLA breach check, automation rules)
|
||||
app/Services/ TicketService (ticket lifecycle + notifications), BookStackClient
|
||||
app/Console/Commands/ Scheduled commands (SLA breach check, automation rules, IMAP fetch)
|
||||
app/Services/ TicketService (ticket lifecycle + notifications), BookStackClient,
|
||||
ImapMailboxFetcher (I/O) + ImapMessageClassifier (pure logic)
|
||||
app/Ldap/ LDAP user model + sync handlers
|
||||
database/migrations/ Schema (one file per table group, final shape)
|
||||
database/seeders/ DatabaseSeeder — reference data, no ticket data
|
||||
|
||||
Reference in New Issue
Block a user