PUQ Mautic Skip to main content

Changelog

Support by Time module WHMCS

Order now | Download | Community

v4.0.0 (2026-10-07)

  • Dynamic Ticket Service Selection & Status Guard:
    • Automatically pre-selects the first usable active service when opening a ticket, prioritizing packages with available quota.
    • Reactive service dropdown updates time forms and quota displays immediately without page reload, preserving entered notes.
    • Action buttons and live timer dynamically adapt to service lifecycle: non-active (Terminated/Suspended) services and depleted One Time packages are strictly locked.
    • Server-side validation rejecting timer start or time saves on non-active services.
  • One Time vs Recurring Package Architecture:
    • Detailed separation of billing mechanics: Recurring packages track billable overage, while One Time packages enforce hard quota limits.
    • Automated termination hook (AfterCronJob) that terminates One Time services upon 100% hour consumption.
  • Inline Package Ordering & Service Activation:
    • Direct order placement form embedded in ticket header for clients without an active support package.
    • One-click activation button for pending support services directly from the ticket view.
  • Modernized Client Area UI:
    • Card-based layout with visual progress bar and real-time overage indicators.
    • Interactive cost calculator with preset buttons (+30m, +1h, +2h, +5h, 0) and clean 2-decimal currency formatting.
    • Expandable per-ticket time entry accordions.
  • Full 26-Language Localization (i18n):
    • Canonical 146-key coverage across all 26 WHMCS languages with zero missing keys or English fallbacks.
    • Complete sync of ukranian.php and ukrainian.php.
    • Typographic apostrophe compliance (’ / \u2019) across all translation files.
  • Unencoded Hooks Architecture (v4.0.0+ / ionCube 15): hooks.php distributed as unencoded plain PHP wrapper for ionCube 15 and WHMCS dynamic hook loading.
  • Guzzle HTTP Client: API and license verification requests migrated to GuzzleHttp\Client with timeouts and robust error handling.

v3.0.1

  • Quieter migration logging: the schema migration runner no longer writes a "Migration N applied" entry to the WHMCS Module Log on every successful step (that log is reserved for provisioning / API calls). Success is now recorded only in the puq_module_versions table; failures are still logged.

v3.0 (2026-06-04)

  • Compatibility: supports PHP 7.4 / 8.1 / 8.2+ and WHMCS 8.x / 9.x. Published as a separate ionCube build per PHP version — php74, php81, php82 (use php82 for PHP 8.2 and any newer PHP). WHMCS 8 runs on PHP 7.4 / 8.1 / 8.2; WHMCS 9 runs on PHP 8.2.
  • Module rewritten on the new PUQ module skeleton:
    • License class moved into the main module file (puqSupportByTime.php)
    • New puqSupportByTimeModuleSettings class for product configuration with structured JSON in configoption24
    • Product configuration UI rendered through the AdminAreaFooterOutput hook
    • License alert added on the WHMCS admin homepage (AdminHomepage hook)
  • Schema versioning: new puq_module_versions table + migration runner so updates apply schema changes automatically and idempotently on first load.
  • Redesigned client area (cards, progress bar, modern stat panels)
  • Redesigned ticket header (Bootstrap panels, icons)
  • Redesigned admin product page (summary table, history navigator)
  • AJAX ticket header: the entire time-logging header on the admin ticket page is now rendered and driven by AJAX. Save / Close+Save / Reopen / Start-Stop timer / Order service no longer reload the page.
  • Multi-entry per ticket: every Save Time (and every timer stop) is recorded as its own entry instead of overwriting, so a ticket keeps a full breakdown of sessions. Each entry has its own note, operator and timestamp.
  • Per-entry notes + operator tracking: every time entry can carry an optional note (shown to the client when Show work log to client is enabled) and stores the WHMCS admin who logged it. Columns on puqSupportByTime_items: note, admin_id, created_at, ticket_record_id.
  • Parent ticket records: new puqSupportByTime_tickets table holds per-ticket billing state (one billable item per ticket) and a snapshot of package hours / hourly rate, while puqSupportByTime_items becomes a pure time log.
  • Live timer: Start / Stop / Cancel on the ticket page with a server-anchored running clock. New table puqSupportByTime_timers. Stop rounds up to the nearest minute and saves a regular time entry. A floating widget on every admin page lists all of the operator's running timers.
  • Audit trail: append-only log of every state change (time logged / updated / deleted, timer start / stop / cancel, service ordered, ticket billed). New table puqSupportByTime_audit. Shown on the ticket header and on the service page.
  • Operator report: per-operator hours and entry counts for the current and previous month on the service page.
  • Cost calculator in the client-area home screen — interactive "if I use ___ more hours" predictor.
  • Usage chart in the client-area history tab — last 12 months as a Google ComboChart with a package line and bars coloured by overage status.
  • Usage notifications: email the client when monthly usage crosses configured thresholds (e.g. 80 %, 100 %). New table puqSupportByTime_notifications for idempotent per-(month, threshold) tracking.
  • Show work log to client toggle per product — reveals the operator name + note per ticket in the client area.
  • Date filter rewritten to use Y-m-t instead of the literal -31
  • Custom admin path now read from configuration.php consistently
  • Backward-compatible settings migration: legacy values stored in configoption3 (hours / invoice action / item name) and configoption4 (per-currency hourly rate) are read transparently when the new configoption24 slot is empty, so existing v2.x products keep working without any reconfiguration. The first save through the v3.0 form moves everything into configoption24.

Note: No manual reconfiguration is required after updating to v3.0 — settings are migrated automatically on first read. Re-saving the product through the new form is recommended but not mandatory.


v2.1 (2025-09-20)

  • Support for custom admin path

v2.0 (2024-09-23)

  • Module coded with ionCube v13
  • Supported PHP versions: 7.4, 8.1, 8.2
  • Compatible with WHMCS 8.11.0+

v1.3 (2023-10-19)

  • Added the ability to delete reserved time positions from the admin panel
  • One-Time package validation moved from daily cron to every cron run

v1.2.5 (2023-10-11)

  • WHMCS 8.8.0 support
  • 25 language translations added/updated

v1.2 (2023-08-02)

  • One-Time support packages with hour limit
  • Human-readable time display in client and admin areas
  • Display and logic improvements

v1.1 (2023-03-21)

  • Client area redesign
  • Translation support
  • WHMCS 8.6, IonCube v12, PHP 8.1 and PHP 7.4 support
  • Invoice item description field

v1.0 (2022-10-01)

  • First release