Co nowego:
- Podgląd logów w panelu admina (Admin > Logi) — pliki storage/logs/*.log
  bez potrzeby dostępu do kontenera, z filtrami poziomu/tekstu/liczby wpisów
  i auto-odświeżaniem.
- Filtr „Bez kategorii” w kolejce operatora — izoluje zgłoszenia bez
  przypisanej kategorii/podkategorii.
- Narzędzie importu z Heska: już nie tworzy automatycznie kont klientów dla
  nieznanych e-maili (pomija takie zgłoszenia zamiast zakładać konto),
  łączy odpowiedzi/właścicieli zgłoszeń z realnymi kontami operatorów po
  e-mailu, nowe flagi --assign-operators i --fix-closed-dates do
  donaprawiania wcześniejszych importów, dedykowany log
  storage/logs/hesk-import.log.
- Poprawka: pulpit statystyk operatora (rozkład wg kategorii/podkategorii i
  filtr kategorii) pomijał zgłoszenia przypisane do samej kategorii bez
  podkategorii (np. z poczty IMAP) — teraz liczone poprawnie.
- Poprawka: błąd JS i zawieszone w tle liczniki przy nawigacji z widoku z
  aktywnym licznikiem (najbardziej odczuwalne w liczniku czasu pracy
  operatora).
- Porządki w bazie: usunięte niewykorzystywane kolumny
  (users.remember_token, users.email_verified_at,
  email_templates.trigger_label); wartości pól dodatkowych, stan
  triage/podsumowania AI i powiązany sprzęt Snipe-IT przeniesione z tabeli
  tickets do osobnych tabel (ticket_field_values, ticket_ai_summaries,
  ticket_snipeit_assets) — bez zmiany zachowania, ale pola dodatkowe są
  teraz efektywnie przeszukiwalne; dodane brakujące indeksy na 4 tabelach
  pivot; tickets.source/ticket_messages.source walidowane względem znanego
  zestawu wartości.

Zaktualizowana dokumentacja: README, CLAUDE.md, ARCHITECTURE.md,
CHANGELOG.md, wiki/admin, wiki/operator.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-05 14:28:03 +02:00
parent 03c6ec7cae
commit 4b70b910a9
45 changed files with 2038 additions and 156 deletions

View File

@@ -3,6 +3,67 @@
All notable changes to this project are documented in this file. Format loosely
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [1.5.0] - 2026-08-05
### Added
- **Admin log viewer** (Admin > Logi) — browse `storage/logs/*.log` from the
admin panel without shell access to the container: a file picker (size +
last-modified, most recent first), level/free-text/entry-count filters, and
an optional 5s auto-refresh. Read-only, admin-only; reads only the tail of
large files to keep it fast.
- **"Bez kategorii" filter** in the operator queue's category dropdown —
isolates tickets with neither a category nor subcategory assigned (e.g. an
IMAP mailbox routed to nothing in particular), previously only reachable by
scanning the unfiltered list.
### Changed
- **Hesk import tool** (`scripts/hesk-import/`) no longer auto-creates client
accounts for unrecognized requester e-mails — the servicedesk user base is
now treated as authoritative, so a Hesk ticket whose requester has no
matching account is skipped instead (reported at the end, with the list of
skipped e-mails). Hesk staff replies/notes and ticket ownership are now
linked to real operator/admin accounts when the staff e-mail matches one.
Two new backfill flags cover tickets imported before these existed:
`--assign-operators` (sets `assignee_id` from Hesk's ticket owner, never
overwriting a manual reassignment) and `--fix-closed-dates` (corrects a
closed ticket's date to Hesk's own `closedat` column instead of the
drifting `lastchange`, and adds the missing "Zamknięte" history entry).
Every newly imported ticket also records its source Hesk id
(`tickets.hesk_ticket_id`, unique) as a second, DB-level guard against
duplicate imports on top of the existing state file. See
`scripts/hesk-import/README.md` for details.
- Internal database cleanup: removed three columns confirmed unused against
live data (`users.remember_token`, `users.email_verified_at`,
`email_templates.trigger_label`); moved custom field values, AI
triage/summary state, and the linked Snipe-IT asset off the `tickets` row
into three dedicated one-to-one tables (`ticket_field_values`,
`ticket_ai_summaries`, `ticket_snipeit_assets`) — no visible behavior
change, but custom field values are now efficiently queryable instead of
living only in a JSON blob, and the `tickets` row itself is narrower; added
missing reverse indexes on 4 pivot tables (`team_subcategory`, `role_user`,
`team_user`, `custom_field_subcategory`); `tickets.source` and
`ticket_messages.source` now validate against a known set of values
instead of silently accepting any string.
### Fixed
- The operator statistics dashboard's category/subcategory breakdown (and
its category filter) only counted tickets routed through a subcategory —
a ticket routed to a whole category with no subcategory (e.g. via an IMAP
mailbox routed to "całą kategorię") was silently excluded from those
charts and from filtering by that category. Now counted correctly, with
bare-category tickets shown as their own "(bez podkategorii)" row in the
subcategory breakdown.
- A JavaScript error (and stray background timers left running) could occur
when navigating away from a page with an active countdown/timer widget —
ticket/queue auto-refresh, the theme switcher, file-attachment
drag-and-drop. Most consequential in the operator ticket time tracker,
where it could throw console errors and momentarily break other UI
elements (e.g. dropdown menus) after leaving a ticket with the timer
running.
## [1.4.0] - 2026-08-05
### Added