v1.1.3
- Triggers (Admin > Wyzwalacze): event-driven rules that fire immediately on a ticket lifecycle event (created/updated/status/priority/assignee/team/ category changed, new reply), with AND-conditions and ordered actions (set status/priority/team/assignee, send e-mail). Ships its own dedicated, freely add/edit/delete-able e-mail templates, kept separate from the fixed system templates. - Ticket watching: operators can star/"Obserwuj" any ticket to follow it regardless of assignment/team. - Real-time notification bell (private per-user broadcast channel, 30s fallback poll) with an opt-in in-tab browser push notification. - Per-user notification preferences (/settings/notifications): scope (mine/unassigned/watched/all) and e-mail toggle per event category. - Admin > Integracje: new tab for LDAP/AD + BookStack config, split out of Konfiguracja. - Operator queue: Podkategoria/Zespół/Utworzono columns (off by default). - Obserwuj button moved next to the auto-refresh countdown; trigger condition builder shows subcategory/zgłaszający as name dropdowns instead of raw IDs; /settings/notifications got a back link, full-width push card, and a bordered table container; admin panel tab and operator queue view now persist across a plain page refresh. - Docs: README/ARCHITECTURE/wiki updated for all of the above. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -99,7 +99,8 @@ attributes.
|
||||
`App\Support\Settings` (`app/Support/Settings.php`) is a cached key/value reader
|
||||
over the `settings` table, with hardcoded defaults for every key (company name,
|
||||
LDAP/SMTP connection details, attachment limits, session lifetime, timezone,
|
||||
branding/email HTML, etc.). Admin > Konfiguracja writes to this table, and
|
||||
branding/email HTML, etc.). Admin > Konfiguracja (general/attachments/session),
|
||||
E-MAIL (SMTP) and Integracje (LDAP, BookStack) all write to this same table, and
|
||||
`AppServiceProvider::boot()` re-applies the relevant subset of it over
|
||||
`config()` on every request — meaning **`Setting` rows win over `.env`** for
|
||||
LDAP, mail, session lifetime and timezone once they're non-empty. This is by
|
||||
@@ -192,6 +193,20 @@ themselves every 30–60 seconds via a small Alpine countdown calling
|
||||
`$wire.refreshQueue()` / `$wire.refreshTicketData()` — broadcasting is
|
||||
best-effort, not the only way these views ever update.
|
||||
|
||||
A third private channel, **`App.Models.User.{id}`** (Laravel's default
|
||||
per-notifiable convention, kept verbatim rather than a shorter alias),
|
||||
carries realtime bell delivery: `AppServiceProvider::broadcastBellNotifications()`
|
||||
listens for the framework's own `NotificationSent` event, and — only for the
|
||||
`database` channel of a `TicketNotification` — dispatches `NotificationCreated`
|
||||
on the recipient's own channel. This is a single choke point rather than
|
||||
threading a broadcast call into every `TicketService` notification call site
|
||||
(including the Trigger engine's `send_notification` action, below).
|
||||
`resources/js/echo.js` bridges it into a `bell-notification-received` Livewire
|
||||
event (refreshing `NotificationBell` instantly) and, if the viewer opted in via
|
||||
the toggle on `/settings/notifications`, also raises a native in-tab
|
||||
`Notification` popup — no service worker or push subscription, so this only
|
||||
fires while the tab is open, same limitation as the other Echo listeners here.
|
||||
|
||||
## SLA
|
||||
|
||||
`SlaRule` holds per-priority response/resolution targets in minutes. The
|
||||
|
||||
Reference in New Issue
Block a user