Guru Support Desk Changelog

= 1.0 =
* Displays the linked WordPress user's Website on ticket Customer cards and beneath the email address in the backend Customers table.

* Uses a strict safe attachment allowlist for private uploads and legacy migration; executable, script, SVG, ZIP, and archive files are not stored.

* Moves private attachment, inline-image, and diagnostic log storage to the site uploads directory resolved by wp_upload_dir(), under uploads/guru-support-desk/private.
* Moves the top-level Guru Support Desk admin menu below the core WordPress menu area.
* Adds internal Support Agent roles: Main Agent, Manager, and Support Agent, with exactly one Main Agent.
* Adds per-agent Agent View controls for All Tickets or Only Assigned Tickets, with no saved view defaulting to All Tickets.
* Adds AJAX ticket reassignment dropdowns for Main Agents and Managers on the front-end agent desk and for WordPress administrators in the dashboard.
* Assigns every ticket manually created by a Support Agent to the agent who created it.
* Adds AJAX agent disabling with a ticket reassignment modal and the Main Agent selected as the default destination.
* Enforces assigned-ticket visibility server-side across front-end ticket lists, counts, searches, actions, messages, and private attachments.
* Makes the IMAP Inbox the source of truth with continuous server/database reconciliation, validates dedupe rows against real tickets, repairs orphaned message mappings, and forces a new full Inbox recovery pass.
* Repairs the CC database migration by advancing the internal schema version, verifies required support tables and columns, and automatically reruns dbDelta when schema health is incomplete.
* Adds polling heartbeat health checks, automatic cron repair, protected request-side polling fallback, resumable Inbox recovery batches, and a fresh safe recovery scan for mail skipped by earlier builds.
* Adds private diagnostic logging enabled by default with 10-day retention, an AJAX logging toggle under Settings > Logs, and a Download Logs button without rendering log contents in WordPress admin.
* Repairs automatic IMAP polling so a failed message cannot block newer Inbox mail, failed UIDs are retried automatically, previously skipped Inbox mail is recovered once after this maintenance update, mailbox checkpoint resets no longer discard current messages, and a missing polling cron event is recreated while automatic processing is enabled.
* Adds first-class ticket CC participants, per-reply CC selection, AJAX Add CC controls, inbound CC reply threading, and matching backend/front-end Agent desk behavior.
* Matches the front-end Agent queue filter pills to the backend Tickets desk and keeps Next Refresh / Current Time compact and right-aligned on the same toolbar row.
* Adds the full AJAX Tickets support desk to the front-end shortcode for assigned Support Agents, using the existing front-end styling, an agent-name heading, and a compact Next Refresh / Current Time queue status row.
* Reconciles the bundled PDF guide and WordPress.org readme.txt with the final v1.0 feature set and live-test workflow updates.
* Keeps Pending tickets Pending when a customer replies and displays Customer Replied until an agent responds or resets the status.
* Forces customer-facing ticket mail Reply-To to the configured support mailbox instead of allowing the WordPress administrator email to become the reply destination.
* Leaves fresh-install From Email and Send Test To fields blank; also clears the legacy auto-seeded From Email once when it still matches the WordPress administrator email.
* Restricts support-mailbox deletion and cleanup retries to Closed or Trashed tickets, protecting active New, Open, Pending, and Awaiting Reply mail.
* Simplifies Check Mail Now feedback to report only the number of new mailbox messages processed.
* Separates immediate Customer Responded activity from configured Needs Reply and Urgent aging indicators.
* Returns agents to the main Tickets page and smoothly scrolls to the top after sending a normal ticket reply; saving an internal Note remains on the ticket.
* Scopes setup onboarding so an incomplete setup redirects to Settings > General once after activation and whenever the Guru Support Desk dashboard menu is opened, without redirecting unrelated WordPress admin pages.
* Adds a View Documentation link directly below the Guru Support Desk dashboard title, opening the bundled PDF guide in a new tab.
* Allows legitimate first-time senders found in detected/configured Spam/Junk folders to create brand-new tickets, resets Spam/Junk checkpoints once so previously skipped messages are reconsidered, and keeps duplicate/loop/automated-mail safeguards intact.
* Full v1.0 functionality audit: corrects the System Status Next Mail Check display and prevents generic acknowledgment retries from being sent to staff-created New tickets.
* Reconciles the bundled Documentation PDF with the complete current v1.0 feature set, including agent notifications, quoted history, private storage, credential constants, Spam/Junk behavior, customer context, attachment rules, retry behavior, and data-retention details.
* Hardens Spam/Junk mailbox discovery across provider-specific folder names, adds a manual Spam/Junk Folder Override, and rescans current messages when Junk/Spam discovery is initialized or reset.
* Adds automatic Spam/Junk mailbox polling for known customers and existing support conversations, with independent per-folder IMAP checkpoints and duplicate protection.
* Removes the active-mailbox attachment recheck/redownload safeguard after confirming inbound attachments were already being stored; keeps the corrected CID-based attachment display behavior.
* Removes the redundant top Back to Tickets link from Edit Ticket while keeping the bottom Back to Tickets navigation.
* Fixes inbound attachment display so only CID files actually referenced in the email body are treated as inline; ordinary attachments with a Content-ID now remain visible on ticket messages.
* Improves inbound IMAP MIME filename handling for original customer emails and replies while keeping normal attachments stored once with the incoming message.
* Removes temporary emoji debug instrumentation, cleans up the All emoji grid, and adds explicit picker close controls.
* Fixes the emoji picker opening failure caused by jQuery UI interpreting the search input's autocomplete property as an autocomplete() method call; the picker now sets the native autocomplete attribute after input creation.
* Hardens the Reply / Add Note emoji toolbar click path for WordPress TinyMCE markup, adds an on-screen positioning fallback, and records focused emoji diagnostics in the browser console.
* Uses file-modification timestamps for plugin CSS and JavaScript cache versions so maintenance updates load fresh assets while the public plugin version remains 1.0.
* Fixes the Reply / Add Note emoji toolbar button so the picker opens reliably when clicked.
* Adds a complete searchable emoji picker to the shared Reply / Add Note editor, with a Most Used view that learns each agent's selections locally in the browser.
* Uses the matched WordPress or WooCommerce account name everywhere customer names are displayed, falling back to the email sender name only for email-only contacts.
* Prevents support-mail loops by ignoring inbound messages sent from any configured Support Desk mailbox address and blocking all customer-facing acknowledgments, replies, retries, and close notices to those addresses.
* Adjusts the Edit Ticket Customer card from 33% to 40% width while keeping the conversation/composer full width below it.
* Restores the clarified email-only Customer card wording: no WordPress or WooCommerce account association.
* Sets the Edit Ticket Customer card to 33% width at the top while keeping the conversation and composer full width below it.
* Smoothly scrolls to the top after a ticket number opens the Edit Ticket screen through AJAX.
* Reworks the Edit Ticket screen into a full-width single-column layout with the Customer card above the full-width conversation/composer, and moves Status and Agent controls below the ticket title on the left.
* Changes the WordPress admin menu icon from SOS to Tickets Alt for a clearer support-ticket visual.
* Clarifies the Reply-mode Close confirmation that no reply will be sent and the customer will only receive the ticket-closed email.
* Allows any WordPress user, regardless of role, to be enabled as a Support Agent while preserving the user's existing WordPress role and adding only the Guru Support Desk agent capabilities.
* Converts Search Tickets to a live debounced AJAX field with a Search Tickets label, no Search button, and inline loading feedback.
* Adds live AJAX WordPress-user lookup to the Support Agents Add Agent field with debounced suggestions and immediate loading feedback.
* Restores Reply-only close actions in the ticket composer: Send Reply & Close, Close, and Close / No Reply, while Add Note keeps only Save and its status selector.
* Rebalances the Tickets table so the Ticket number column is compact, Subject is the widest column, and Status, Customer, Agent, and Last Activity keep readable minimum widths.
* Restricts the Customers table and live AJAX search to customers with Guru Support Desk ticket history, deduplicates each customer to one row, and keeps ticket-bearing customers visible even when their remaining ticket is in Trash.
* Removes the redundant Customers Search button and places a Search Customers label directly before the live AJAX search field.
* Adds a Customers-table Actions column with a compact View Tickets button that opens the customer's permanent ticket-number history in an AJAX modal, newest first; existing tickets are clickable and permanently deleted ticket numbers remain plain text.
* Adds live AJAX customer search above the Customers table with immediate loading feedback and debounced results.
* Keeps the Customers tab Last Ticket value tied to the permanent ticket-number ledger, including permanently deleted tickets, and removes the ticket link when the underlying ticket record is no longer available.
* Adds an immediate inline spinner to the Add New Ticket customer-name lookup while the debounced AJAX search is pending or running.
* Adds a permanent ticket-number ledger so new ticket numbers only move forward and previously issued numbers are never reassigned to unrelated tickets.
* Recreates a new Open ticket with the original number when the verified original customer replies to a ticket that was permanently deleted after the ledger was installed; Needs Reply and Urgent still follow configured aging thresholds.
* Adds Working-view ticket selection and a disabled-until-selected Move to Trash bulk action using the existing AJAX ticket queue workflow.
* Extends mailbox cleanup to direct-to-Trash actions and searches all selectable IMAP folders for exact Message-ID matches across the full stored ticket email thread.
* Keeps staff-created tickets in New status and marks them with a Staff Created flag until customer activity requires a reply.
* Adds internal Notes directly to the chronological admin conversation with distinct styling and strict customer-side exclusion.
* Replaces the ticket Reply heading with a large Reply / Add Note selector and adds AJAX status selection to Send Reply and Save Note actions.
* Restricts Reply statuses to Awaiting Reply, Open, and Pending, while Notes default to the current status and also allow Open or Pending.
* Initial public release of Guru Support Desk.
* Adds bulk selection for Closed and Trash tickets, including Move Selected to Trash, Delete Selected, and Empty Trash actions.
* Returns customers to the main Support ticket list immediately after they close a ticket from the front end.
* Adds customer self-service ticket closing on the Support page with AJAX confirmation, no closure email, safe draft protection, and an audit message, and makes customer replies show Customer Responded immediately while Needs Reply follows the configured response-aging threshold.
* Simplifies the dashboard health bar by showing time only for Last check and Next refresh.
* Aligns automatic ticket-list refreshes to exact :00 second boundaries while keeping them about one minute after the scheduled CRON run.
* Disables both Close actions while an unsent reply exists so drafts cannot be discarded accidentally, and ensures confirmation modal action buttons remain clearly visible.
* Replaces native browser confirmation dialogs with a consistent Guru Support Desk modal and disables Close / No Response whenever the Reply editor contains content.
* Changes the dashboard Next check indicator to Next refresh and shows the scheduled ticket-list refresh target instead of the raw cron time.
* Adds a brief progress modal when the scheduled dashboard refresh updates a safe, idle ticket list.
* Adds Close / No Response for closing tickets without sending any customer email.
* Removes quoted email history from the customer-facing ticket transcript while retaining agent access to quoted history in the admin ticket view.
* Includes a complete PDF user manual linked from the WordPress Plugins screen.
* Adds configurable Needs Reply After and Urgent After response-aging thresholds.
* Combines General and Email configuration under one top-level Settings tab with AJAX-driven settings sections.
* Keeps the front-end reply controls synchronized when a closed ticket is reopened through AJAX.
* Includes customer email and web tickets, agent assignments, private attachments, WordPress user associations, and optional WooCommerce customer context.
* Includes IMAP email-to-ticket processing, WordPress mail and optional SMTP configuration, automatic mailbox checks, ticket reopening, AJAX ticket management, and the front-end customer Support page.
