v1.4.0
Co nowego: - Wsparcie Active Directory dla LDAP (obok LLDAP/OpenLDAP), przełącznik typu katalogu w Admin > Integracje. - Wyszukiwarka klientów dla operatora (Operator > Klienci). - Stronicowanie kolejki operatora (50/stronę) i dashboardu klienta (20/stronę). - Globalna wyszukiwarka zgłoszeń (Ctrl+K/Cmd+K) z operatorami w stylu Gmaila (od:, temat:, treść:, numer:), plus przycisk "Szukaj" w panelu bocznym. - Ostatnio przeglądane zgłoszenia w panelu bocznym operatora. - Przeprojektowany pasek nawigacji: suwak Klient/Operator/Administrator zamiast rozwijanego menu, bogatsze menu profilu (nazwa/e-mail/role), dynamiczne tytuły kart przeglądarki na każdej podstronie. - Narzędzie do jednorazowego importu historii zgłoszeń z Heska 3.x (scripts/hesk-import/). - Poprawka: paginacja pokazywała surowe klucze tłumaczeń zamiast tekstu (brakujący lang/pl/pagination.php). Zaktualizowana dokumentacja: README, CLAUDE.md, install.md, ARCHITECTURE.md, CHANGELOG.md, wiki/*. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
46
README.md
46
README.md
@@ -23,9 +23,22 @@ and **[wiki/admin](wiki/admin/README.md)** for role-specific how-to guides.
|
||||
|
||||
## Feature overview
|
||||
|
||||
- **Navigation** — a segmented Klient/Operator/Administrator switcher in the
|
||||
top bar (only the areas a user actually holds, current one highlighted,
|
||||
hover-previews the destination before you click) replaces the old dropdown
|
||||
role switcher; the profile menu shows name/e-mail/role badges above
|
||||
Powiadomienia/Wyloguj się; every page sets its own browser-tab title
|
||||
(ticket subject, selected queue, active admin tab, ...) anchored with the
|
||||
company name; and a command-palette global search (Ctrl+K/Cmd+K, or a
|
||||
"Szukaj" sidebar button) finds tickets from anywhere, scoped to what the
|
||||
searching user can see, with Gmail-style `od:`/`temat:`/`treść:`/`numer:`
|
||||
operators. The operator sidebar also lists the last 6 tickets they
|
||||
actually opened ("Ostatnio przeglądane").
|
||||
- **Tickets** — number, subject, body, category/subcategory, status, priority, team,
|
||||
assignee, custom fields (per subcategory), attachments, full message thread
|
||||
(public replies + internal notes), history log, merge, delete.
|
||||
(public replies + internal notes), history log, merge, delete. The operator
|
||||
queue (50/page) and client dashboard (20/page, current/archive tracked
|
||||
separately) paginate rather than rendering every matching ticket at once.
|
||||
- **SLA** — per-priority response/resolution time targets; a scheduled command
|
||||
(`tickets:check-sla-breaches`, every 15 min) flags overdue tickets and can notify
|
||||
the assigned operator.
|
||||
@@ -53,6 +66,10 @@ and **[wiki/admin](wiki/admin/README.md)** for role-specific how-to guides.
|
||||
team's queue (plus unrouted tickets and anything assigned to them) unless they're
|
||||
an admin. Reassigning a ticket to a team, though, is unrestricted — an operator
|
||||
can route a ticket to any team, not just one they belong to.
|
||||
- **Client search** (Operator > Klienci) — find any account by name or e-mail
|
||||
(not just role=client — a ticket's customer can be any user), see its role
|
||||
badges and ticket count, and jump straight into the queue pre-filtered to
|
||||
that customer.
|
||||
- **Templates** — canned response snippets for the reply box, admin-configurable
|
||||
"quick actions" (send + transition status in one click), and HTML e-mail
|
||||
templates for every ticket lifecycle event (created, status/priority/category/
|
||||
@@ -69,9 +86,12 @@ and **[wiki/admin](wiki/admin/README.md)** for role-specific how-to guides.
|
||||
e-mail layout/footer, SMTP connection (Admin > E-MAIL), attachment limits,
|
||||
session lifetime, timezone (Admin > Konfiguracja), and LDAP connection + user
|
||||
sync + BookStack (Admin > Integracje).
|
||||
- **LDAP auth** — logins bind against an LDAP/LLDAP directory (`config/auth.php`,
|
||||
- **LDAP auth** — logins bind against a directory (`config/auth.php`,
|
||||
`config/ldap.php`); local accounts (e.g. the emergency `admin` account) fall back
|
||||
to e-mail + local password when the LDAP bind doesn't match.
|
||||
to e-mail + local password when the LDAP bind doesn't match. A "Typ katalogu"
|
||||
toggle (Admin > Integracje) switches between LLDAP/OpenLDAP (default) and
|
||||
Active Directory, which auto-selects the right schema/login attribute
|
||||
(`sAMAccountName` + `objectGUID` for AD, vs. `uid` + `entryUUID`).
|
||||
- **Triggers** (Admin > Wyzwalacze) — event-driven business rules that fire
|
||||
immediately on a ticket lifecycle event (created, any field updated, status/
|
||||
priority/assignee/team/category changed, new public reply): AND-combined
|
||||
@@ -201,11 +221,13 @@ and **[wiki/admin](wiki/admin/README.md)** for role-specific how-to guides.
|
||||
dashboard is hand-rolled inline-styled bar/column charts, so it needs no client
|
||||
build step beyond the CSS bundle.
|
||||
- **Database**: MariaDB.
|
||||
- **Deployment**: `compose.yaml` — `servicedesk` (source bind-mounted from `./src`,
|
||||
- **Deployment**: `compose.yaml` — `app` (source bind-mounted from `./src`,
|
||||
no image rebuild needed for PHP/Blade/route changes) + `mariadb` + `reverb`
|
||||
(same image, `php artisan reverb:start`), fronted by Traefik with a private-CA
|
||||
TLS cert (the websocket path is routed to `reverb` by a higher-priority
|
||||
Traefik rule; everything else goes to `servicedesk`). The `servicedesk` image
|
||||
(same image, `php artisan reverb:start`) + `cron` (same image, `php artisan
|
||||
schedule:work` — runs the scheduled commands below without needing a host
|
||||
crontab), fronted by Traefik with a private-CA TLS cert (the websocket path
|
||||
is routed to `reverb` by a higher-priority Traefik rule; everything else
|
||||
goes to `app`). The `servicedesk` image
|
||||
itself is built and pushed by Gitea Actions (`.gitea/workflows/build.yml`) to
|
||||
the Gitea container registry whenever `Dockerfile` changes — `compose.yaml`
|
||||
just pulls a tag, it never builds locally.
|
||||
@@ -227,7 +249,7 @@ Compose-level and Laravel-level) and the LDAP/SMTP gotcha after a fresh seed.
|
||||
```
|
||||
- Fresh install / reset:
|
||||
```bash
|
||||
sudo docker exec servicedesk-servicedesk-1 php artisan migrate:fresh --seed
|
||||
sudo docker exec servicedesk-app-1 php artisan migrate:fresh --seed
|
||||
```
|
||||
Seeds real reference data (categories, custom fields, statuses/priorities/SLA,
|
||||
teams, quick actions, response/e-mail templates, branding/config with example
|
||||
@@ -243,12 +265,14 @@ src/ Laravel application
|
||||
app/Models/ Eloquent models
|
||||
app/Events/ Broadcast events (TicketQueueChanged, TicketMessagePosted)
|
||||
app/Console/Commands/ Scheduled commands (SLA breach check, automation rules, IMAP fetch,
|
||||
AI ticket triage/summary) + bookstack:tag-content
|
||||
AI ticket triage/summary) + bookstack:tag-content + hesk:import
|
||||
(one-time historical migration, see scripts/hesk-import/)
|
||||
app/Services/ TicketService (ticket lifecycle + notifications), BookStackClient,
|
||||
ImapMailboxFetcher (I/O) + ImapMessageClassifier (pure logic),
|
||||
AiClient (generic LLM client), BookStackContentTagger,
|
||||
TicketAiTriageService, TicketAiSummaryService, SnipeItClient
|
||||
app/Ldap/ LDAP user model + sync handlers
|
||||
app/Ldap/ LDAP user models — LldapUser (LLDAP/OpenLDAP, default) and
|
||||
AdUser (Active Directory) — plus sync handlers
|
||||
database/migrations/ Schema (one file per table group, final shape)
|
||||
database/seeders/ DatabaseSeeder — reference data, no ticket data
|
||||
resources/css/ Tailwind entrypoint (needs `npm run build` after edits)
|
||||
@@ -261,4 +285,6 @@ wiki/
|
||||
client/ How-to guide for the Client role
|
||||
operator/ How-to guide for the Operator role
|
||||
admin/ How-to guide for the Admin role
|
||||
scripts/
|
||||
hesk-import/ One-time Hesk 3.x ticket history import — see its own README.md
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user