Centre d'Aide & Base de Connaissances pour Larapen — Journal des versions
1.0.10
14 juil. 2026- New helpdesk_kb_collection_article pivot: an article can be listed under additional (secondary) collections on top of its primary collection_id
- A collection page now lists articles whose primary collection is that collection OR that are linked to it through the pivot
- Admin article form gains an 'Additional collections' multi-select to manage the secondary collections
- Idempotent: the pivot table is only created when missing
1.0.9
06 juil. 2026- New helpdesk attachments are now stored under a date-based layout: reply attachments in helpdesk/replies/{Y}/{m}/{d}/ and custom-field uploads in helpdesk/custom-fields/{Y}/{m}/{d}/, mirroring the media library
- Migration relocates existing helpdesk attachment files (and their generated thumbnails) into the date-based layout, keeping the replies / custom-fields sub-category and deriving the date from each file's upload time
- Rewrote media.file_path and helpdesk_custom_field_values.value to point at the new paths
- Idempotent: files already sitting in a date sub-folder are left untouched
1.0.8
01 juin 2026- Added helpdesk_tickets.last_activity_at (nullable, indexed) timestamp
- Backfilled last_activity_at from the latest reply (any author) per ticket
- TicketService now stamps last_activity_at when a reply is created, edited, posted by the system, or ingested from inbound mail — never on reads or status/priority/department changes
- The 'Updated At' column on the active/resolved/closed/all/no-response lists now reflects last_activity_at; the open list and dashboard keep the customer-reply-based 'Last Updated' column
- getAllPaginated() sorts these lists by COALESCE(last_activity_at, created_at) DESC so the displayed column matches the row order
1.0.7
28 mai 2026- Added helpdesk_tickets.customer_last_replied_at (nullable, indexed) timestamp
- Backfilled customer_last_replied_at from the latest non-admin, non-internal-note reply per ticket
- TicketService::addReply() and TicketService::create() now stamp customer_last_replied_at when the reply author is a customer (non-admin, non-internal-note)
- Replaced the 'Created' column with 'Updated' on the admin ticket dashboard and list views (uses customer_last_replied_at with created_at as fallback)
- Updated getAllPaginated() ordering to sort by COALESCE(customer_last_replied_at, created_at) DESC so the displayed column matches the row order
1.0.6
28 avr. 2026- Added TicketStatus::NoResponse case (red badge, included in openStatuses) for tickets whose customer posted the latest reply and the agent hasn't responded since
- Added setting helpdesk_no_response_days (default 90, validated to be >= configured Response Time converted to days)
- Added 'Apply now' button on the HelpDesk Settings > Display & Behavior tab that runs the No-Response sweep on demand (AJAX)
- Added artisan command helpdesk:apply-no-response (--days, --dry-run); scheduled daily at 02:45 with withoutOverlapping + runInBackground + onOneServer when the delay setting is > 0
- Added soft-delete (deleted_at) to helpdesk_tickets so deletes go to a trash bin instead of being permanent
- Added inline AJAX delete button per row on the admin ticket list pages
- Added bulk-delete bar (checkbox column + select-all) on admin ticket list pages
- Added 'Delete older than…' dropdown with periods 1 month, 3 months, 6 months, 1 year, 2 years, 3 years, 4 years and 5+ years (AJAX with loading indicator)
- Added Trash page (/admin/helpdesk/tickets/trash) with single/bulk Restore, single/bulk Force-Delete and Empty Trash actions
- Added media cleanup on force-delete: ticket-level attachments and reply attachments are removed from disk via MediaService before the row is hard-deleted
- Added new admin sidebar entry 'No Response' under HelpDesk > Tickets, and a new dedicated route /admin/helpdesk/tickets/no-response
- Updated mergeTicket() to forceDelete() the source ticket so a merge does not leave a soft-deleted ghost in the trash
- Updated HasTrash trait to return JSON for restore/forceDelete/emptyTrash when the request expects it (full AJAX flow)
1.0.5
24 avr. 2026- Renamed setting helpdesk_auto_close_days to helpdesk_auto_close_resolved_days for clarity (label: 'Auto-Close resolved tickets After (Days)')
- Added setting helpdesk_auto_close_no_response_days: closes open tickets when the author has not replied to the last agent message for N days; posts the '/auto-close' canned reply first, triggering the new-reply notification
- Added setting helpdesk_followup_no_response_days: posts the '/followup' canned reply as a reminder N days after the last agent message; validation enforces it to be strictly less than the no-response auto-close delay
- Added artisan command helpdesk:auto-close (daily at 02:15) handling both resolved and no-response closures
- Added artisan command helpdesk:send-followups (daily at 02:30) handling the follow-up reminder
- Added CannedMessageResolver that reads canned response bodies by shortcut ('/auto-close', '/followup') and falls back to translation keys so the commands keep working if the canned responses are deleted
1.0.4
22 avr. 2026- Added Email ↔ Ticket Bridge feature with master toggle on HelpDesk Settings page
- Added embedded-reply-body option so notification emails carry the agent's reply inline (no click required to read)
- Added RFC 5322 threading headers (Message-ID, In-Reply-To, References) on outbound replies so customer mail clients thread them correctly
- Added four-layer inbound correlation cascade: In-Reply-To / References → plus-addressing → subject token → HD-xxxx regex fallback
- Added configurable correlation strategy (header, plus_addressing, subject_tag) controlling which hints outbound mails emit
- Added IMAP / POP3 mailbox polling via webklex/laravel-imap with separate credentials from the outbound sender
- Added 'Test connection' button on the settings page to validate IMAP credentials without saving
- Added helpdesk:fetch-inbound Artisan command registered under the schedule (cron built from the poll interval setting, withoutOverlapping + onOneServer)
- Added unknown-sender autoresponder that replies once per hour per sender with the ticket-creation link when no ticket match is found (never auto-creates tickets from email)
- Added abuse hardening: RFC auto-reply detection, own-email loop guard, sha256 raw-hash dedupe, per-sender hourly rate limit, attachment size/count caps
- Added email_subject_token to helpdesk_tickets and message_id / in_reply_to / email_references / inbound_raw_hash / source columns to helpdesk_replies
1.0.3
18 avr. 2026- Added customer_last_read_at timestamp column to helpdesk_tickets table
- Added POST support/tickets/{reference}/read endpoint: marks a ticket as read by the customer 3 seconds after the front-end ticket view loads
- Added read receipt icon (bi-check2-all) under the last agent message on the admin ticket detail page (both chat and list view modes)
- Added polling on the admin ticket detail page to refresh the read status without a page reload (interval configurable in settings)
- Added read receipt icon next to ticket subject on admin ticket list pages (active, open, resolved, closed, dashboard) when the customer has read the agent's last message
- Added Read Receipt Polling Interval setting to HelpDesk Settings page (0 = disabled, default 15 seconds)
1.0.2
15 avr. 2026
Rename add-on from HelpCenter to HelpDesk (tables, settings, permissions, routes)
- Renamed the add-on from HelpCenter to HelpDesk
- Renamed database tables: helpcenter_* → helpdesk_*
- Renamed settings group and keys: helpcenter → helpdesk
- Migrated permissions: helpcenter.* → helpdesk.* (including role assignments)
- Updated addons registry row name and display name
- Updated menu items route names (helpcenter.* / admin.helpcenter.* → helpdesk.* / admin.helpdesk.*)
- Cleaned up legacy helpcenter_* entries from the migrations table
- Changed front-end URL prefix from /help to /support (ticket routes and knowledge base)
1.0.1
05 avr. 2026- Added Canned Responses feature for pre-written ticket reply templates
- Added admin management page with fully AJAX CRUD (create/edit via modals)
- Added AI Assistant integration on canned response create/edit forms
- Added canned response picker modal on ticket reply page with AJAX search
- Added usage tracking to surface most popular responses first
- Added shortcut codes for quick identification (e.g. /greeting)
- Added category-based organization with filtering
- Inserted content is appended to the reply editor (not replacing existing text)
- Added sidebar menu item under HelpDesk for Canned Responses management