Files
servicedesk/CHANGELOG.md
Kacper 90fae0a4de v1.1.0
- 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>
2026-07-22 15:18:09 +02:00

6.1 KiB
Raw Permalink Blame History

Changelog

All notable changes to this project are documented in this file. Format loosely follows Keep a Changelog.

[1.1.0] - 2026-07-22

Added

  • 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 (ticket creation, replies, internal notes), plus inline image thumbnails in the message thread instead of a plain download link.
  • Customer satisfaction (CSAT) rating — clients rate a closed ticket 15 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/MariaDB FULLTEXT search (portable LIKE fallback on sqlite) across ticket subject/body and reply message bodies, now also available on the client's own ticket list (previously operator-only, and previously subject/number/name/email only).
  • Stats CSV export — exports the currently filtered ticket set from the operator stats dashboard.
  • BookStack knowledge-base integration, optional and off by default — suggests relevant articles by category/subcategory while creating a ticket, and in a separate sidebar on an existing ticket for operators (with a copy-link button). Configurable from Admin > Konfiguracja: connection + API token (encrypted), optional SSL-verification bypass for self-signed instances, page/book search-type filter, and two independent per-shelf allow-lists (nothing is ever searched until specific shelves are opted in, separately for ticket-creation suggestions vs. the operator sidebar) with a manual refresh button for the shelf list.

Changed

  • Closed tickets are no longer shown in the "Moje zgłoszenia" / "Nieprzypisane" / per-team queue tabs — they now only ever appear under "Zamknięte", matching how the "Otwarte" tab already worked.
  • The operator ticket-view sidebar is ~50% wider (to fit the BookStack suggestions panel); the page itself grew to match, so the ticket content/thread column keeps its previous width.
  • The "Resetuj" work-timer button sits below the "Zgłoszenie zamknięte — zliczanie wstrzymane" notice instead of beside it.

Fixed

  • TicketService::setStatus() now checks a status's stage (via Status::stageFor()) rather than the literal key 'closed' to decide whether to fire the "ticket closed" notification/stop the timer — correct even if an admin renames or replaces which key maps to the closed stage.

[1.0.2] - 2026-07-22

  • Fixed .gitea/workflows/build.yml: registry login was failing with unauthorized because Gitea's auto-injected secrets.GITHUB_TOKEN isn't granted push access to its own container registry on this instance. Now uses a dedicated REGISTRY_TOKEN secret (a Gitea access token with write:package/read:package scope), and the workflow fails fast with a clear ::error:: message before attempting login if that secret isn't configured, instead of surfacing Docker's opaque unauthorized error.
  • Fixed: opening or manually resuming a closed ticket no longer starts its work timer, and closing a ticket (via the status dropdown, a reply "quick action" transition, the REST API, or merge) now checkpoints and stops any running timer. Time tracking only ever accrues while a ticket is open.
  • Fixed: the login form accepted an empty username/password, submitting them straight to the auth provider. The form fields are now required (blocks submission client-side) and Login::submit() also rejects blank/ whitespace-only credentials server-side before attempting authentication, showing "Podaj nazwę użytkownika i hasło." instead.
  • Fixed: closing a ticket sent two separate notification e-mails (status_changed and ticket_closed) for the same event. Closing now only fires ticket_closed; every other status transition still fires status_changed as before.

[1.0.1] - 2026-07-22

Documentation and deployment/CI overhaul — no application behavior changes.

  • Added project docs: TESTING.md, CONTRIBUTING.md, ARCHITECTURE.md, SECURITY.md, CLAUDE.md; removed the unmaintained stock Laravel src/README.md.
  • Added .gitea/workflows/build.yml: Gitea Actions now builds and pushes the servicedesk image to the Gitea container registry whenever Dockerfile changes on main.
  • compose.yaml now pulls image: gitea.kzbikowski.pl/kzbkowski/servicedesk:${IMAGE_TAG:-latest} instead of building locally; mariadb pinned to mariadb:12.3; added a mariadb healthcheck and depends_on: condition: service_healthy for servicedesk.
  • Added tracked templates compose.yaml.example and .env.example (root) for the previously-untracked compose.yaml/.env.
  • Documented the new pull-based deploy flow and one-time registry login in install.md.

[1.0.0] - 2026-07-21

Initial release.

  • Ticketing core: categories/subcategories with per-subcategory custom fields, statuses, priorities, teams, attachments, message threads (public replies + internal notes), history log, merge/delete.
  • SLA rules per priority with a scheduled breach check (tickets:check-sla-breaches, every 15 minutes).
  • Response templates, quick actions, and per-event HTML email templates/ notification toggles.
  • Operator statistics dashboard (/operator/stats) with KPI tiles and breakdowns.
  • Branding/config panel: company identity, LDAP connection + user sync, SMTP, attachment limits, session lifetime, timezone.
  • LDAP authentication (LdapRecord) with local-account fallback.
  • REST API (/api/v1/...) via Sanctum, ability-scoped (tickets:read, tickets:write, dictionaries:read, users:read), with Swagger docs at /admin/api-docs.
  • Installable PWA manifest/icons for the client-facing area.