1.0.7
06 juil. 2026
  • Fixed a 500 error (Unknown column 'license_product_id') when clicking 'Create license product' on a shop product that occurred when the licenses add-on had been installed before the Shop add-on
  • The shop_products.license_product_id column is now added on upgrade if it is missing, regardless of the order in which the licenses and Shop add-ons were installed
  • The licenses add-on now self-heals this column at boot whenever the Shop add-on is active but the column is absent
  • Consolidated the licenses_activations.is_local column: it is now part of the create-table migration for fresh installs and reconciled by an update migration for existing installs (the standalone alter migration was removed)
1.0.6
20 juin 2026
  • Shop digital products now expose a 'Create/Update license product' button (products list + edit page) that links the product to a license product (button only shown when the licenses add-on is active)
  • License keys issued for a shop order are now disabled (suspended) automatically when the order is refunded, the payment fails or reverts to unpaid, or the order is cancelled
  • Disabled keys are re-enabled automatically if the order is confirmed (paid/completed) again
  • Added the LicenseKeyDisabledNotification: buyers are emailed their affected key(s) when keys are disabled due to an order change (new notification type 'licenses_license_key_disabled')
  • Added translation keys (en, fr, ar): license_disabled_*, shop_link.*, notification_type_license_key_disabled*
1.0.5
28 avr. 2026
  • Added slug_aliases JSON column on licenses_products to expose alternate identifiers (slug, sku, item_id, or any alias) accepted by the API verify endpoint
  • Added UniqueProductSlugAliases validation rule enforcing global uniqueness across slug + every product's slug_aliases (no two products can share an identifier)
  • Extended UniqueProductSlug rule to also reject collisions with other products' slug_aliases
  • Added LicenseProductService::findByAnySlug() (cached) — used by resolveProductFromProviderData so an Envato verify no longer creates a duplicate product when the primary slug was renamed but the original slug is kept as an alias
  • Updated LicenseKeyProviderService::productMatches() to accept slug, slug_aliases, sku, or metadata->item_id
  • Renamed verify() / findOrCreateFromProvider() parameter from $productSlug to $productIdentifier to reflect the broader matching semantics
  • Locked the slug field as read-only in the admin product edit modal when the product is linked to an Envato item, with an inline hint suggesting to add a slug alias instead; UpdateLicenseProductRequest also strips any submitted slug for Envato-linked products to defend against hand-crafted POSTs
  • Added LicenseProduct::isLinkedToEnvato() helper (metadata.source=envato OR envato_id OR item_id)
  • Added slug aliases input to product create/edit modals (comma-separated; trimmed, lowercased, deduped, primary slug stripped before validation) and chips display in the product list table
  • Added new translation keys (en + fr): slug_alias, slug_aliases, slug_aliases_help, slug_locked_envato_help, slug_alias_taken, slug_alias_duplicate_in_list
1.0.4
25 avr. 2026
  • Added Addons\Licenses\Http\Controllers\Admin\LicenseCustomerController with index (search, product, status, provider filters) and show actions; index returns a partial for AJAX refreshes
  • Added admin routes admin.licenses.customers.index and admin.licenses.customers.show
  • Added admin views admin/customers/index.blade.php, _table.blade.php, and show.blade.php
  • Added Customers entry to the Licenses admin sub-menu
  • Added new permission licenses.customers.view (granted to the admin role on update)
  • Added a 'View Customer' button to the helpdesk ticket sidebar 'Customer Licenses' card footer (mirrors the Envato pattern)
1.0.3
23 avr. 2026
  • Added licenses_entity_links polymorphic table linking license products to helpdesk departments, KB collections, and forum categories
  • Added Addons\Licenses\Enums\LinkableType enum (HelpdeskDepartment, HelpdeskKbCollection, ForumCategory)
  • Added Addons\Licenses\Services\LicensesAccessService with getUserLicensedProductIds(), getAccessibleEntityIds(), syncLinkedLicenseProducts(), and isRequired() — drop-in replacement for EnvatoPurchaseValidator semantics
  • Renamed settings: envato_helpdesk_require_purchase → licenses_helpdesk_require_purchase, envato_kb_restrict_by_purchase → licenses_kb_restrict_by_purchase, envato_forum_require_purchase → licenses_forum_require_purchase
  • Backfill: created LicenseKey rows from envato_user_purchases so users with verified purchases retain access after the cutover
1.0.2
16 avr. 2026
  • Added licenses_banned_domains table to block domains at the API edge
  • Added licenses_banned_ips table to block IP addresses at the API edge
  • Added domain and IP ban/unban buttons in the API log details modal
  • Added Banned Domains and Banned IPs tabs on the Blocklist admin page
  • Updated CheckBannedKey middleware to check IPs, keys, and domains (including legacy parameters)
1.0.1
15 avr. 2026
  • Added licenses_api_logs table and LogApiCalls middleware to record every verify/activate/deactivate/callback call
  • Added API Call Logging card in the licenses settings page (enable/disable, retention period, maximum entries cap)
  • Added admin API Logs page with filters, bulk delete, clear all, prune old, and full AJAX pagination
  • Added daily scheduled task (licenses:prune-api-logs) that enforces both retention period and max entries cap
  • Added licenses_banned_keys table and CheckBannedKey middleware to block banned license keys at the API edge
  • Added Ban/Unban buttons in the API log details modal for quick blocklist management
  • Added new permissions: licenses.api-logs.view, licenses.api-logs.delete, licenses.banned-keys.manage