- Configurable ticket numbering (Admin > Konfiguracja > Ogólne): admin-set
prefix and minimum zero-padded length for the ticket number.
- "Ukryj kolejność zgłoszeń": an opt-in mode that displays a stable,
HMAC-derived checksum instead of the sequential ticket number, so it gives
no indication of ticket volume or creation order. Ticket URLs switch to
the same checksum when this is on, so a link and the number on the page it
points to always match. The REST API is unaffected — pinned to `id`
regardless of this setting. Search now also matches by checksum.
- Fixed: attachments no longer show an inline image thumbnail in the
message thread — every attachment (images included) shows as just its
filename, opening in a new tab on click.
- Docs: README/ARCHITECTURE/wiki updated for all of the above.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- 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>
- In-app notifications: a bell in the top bar backed by Laravel's database
notification channel, alongside existing e-mail notifications (same
per-trigger toggle drives both; ticket links now correctly point into the
recipient's own area instead of always linking to the client view).
- Drag-and-drop attachments on every upload form, plus inline image
thumbnails in the message thread instead of a plain download link.
- Customer satisfaction (CSAT) rating: clients rate a closed ticket 1-5 stars
with an optional comment; shown read-only to operators, surfaced as a KPI
on the stats dashboard, and linked from the "ticket closed" e-mail.
- Saved queue views: operators can save/apply/delete named filter+sort+
column presets in the ticket queue and mark one as their default.
- Full-text search (MySQL FULLTEXT, portable LIKE fallback) across ticket
subject/body and reply message bodies, now also on the client's own ticket
list.
- Stats CSV export for the currently filtered ticket set.
- Optional BookStack knowledge-base integration (off by default): suggests
articles by category/subcategory while creating a ticket and in a separate
sidebar for operators on an existing ticket (with a copy-link button).
Configurable connection/SSL bypass/search-type filter, plus two
independent per-shelf allow-lists so nothing is ever searched until an
admin opts specific shelves in.
- Closed tickets no longer show in "Moje zgłoszenia"/"Nieprzypisane"/team
queue tabs, only under "Zamknięte" (matching how "Otwarte" already worked).
- Wired up the Admin > About "Wersja" field to config('app.version')/VERSION
in .env instead of a stale hardcoded string.
- Fixed: TicketService::setStatus() now checks a status's stage rather than
the literal key 'closed' to decide whether to fire the "ticket closed"
notification/stop the timer.
- Updated README/ARCHITECTURE/CHANGELOG/install/SECURITY docs and all three
wiki/ role guides for the above; documented a root-vs-www-data file
ownership gotcha in CLAUDE.md (running artisan commands via a plain
`docker exec` can leave root-owned Blade cache files that later break
recompilation for the www-data Apache process).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>