Files
wc-licensed-product/CHANGELOG.md
magdev 45531f86d6 Implement version 0.0.11 features
- Add Created date column to admin license overview
- Add License Statistics page under WooCommerce menu
- Add REST API endpoints for analytics data with time-series support
- WooCommerce Analytics integration via submenu page

New files:
- src/Admin/AnalyticsController.php
- templates/admin/statistics.html.twig

REST API endpoints:
- GET /wc-licensed-product/v1/analytics/stats
- GET /wc-licensed-product/v1/analytics/products

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 23:50:57 +01:00

12 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

0.0.11 - 2026-01-21

Added

  • Created date column in admin license overview
  • License Statistics page under WooCommerce menu
  • REST API endpoints for analytics data:
    • GET /wp-json/wc-licensed-product/v1/analytics/stats - License statistics with time-series data
    • GET /wp-json/wc-licensed-product/v1/analytics/products - License counts by product
  • WooCommerce Analytics integration via submenu page

Technical Details

  • New AnalyticsController class for WooCommerce Analytics integration
  • Statistics page accessible via WooCommerce > License Statistics
  • Time-series data supports day, week, month, quarter, year intervals
  • REST API endpoints for external analytics integrations
  • Statistics template templates/admin/statistics.html.twig

0.0.10 - 2026-01-21

Added

  • License meta box on WooCommerce order edit pages
  • Editable order domain field with AJAX save
  • Editable license domains directly from order page
  • View licenses table showing all licenses for an order
  • Link to full licenses management page from order view
  • Support for both classic orders and HPOS (High-Performance Order Storage)
  • Inline editing for license fields (status, expiry date, domain) in admin
  • Copy license key button in admin licenses overview
  • Live search for licenses in admin overview
  • Settings link in plugin actions

Fixed

  • Fixed 404 error on licenses menu item
  • Fixed Twig template cache issues with auto_reload

Technical Details

  • New OrderLicenseController class for order page integration
  • New getLicensesByOrder() method in LicenseManager
  • New updateLicenseExpiry() method in LicenseManager
  • JavaScript file order-licenses.js for inline domain editing
  • JavaScript file admin-licenses.js for live search and inline editing
  • AJAX handlers for updating order domain and license domains
  • AJAX handlers for inline editing (status, expiry, domain updates)

0.0.9 - 2026-01-21

Added

  • API client examples for multiple programming languages
  • cURL command examples (docs/client-examples/curl.sh)
  • PHP client class (docs/client-examples/php-client.php)
  • Python client class (docs/client-examples/python-client.py)
  • JavaScript/Node.js client (docs/client-examples/javascript-client.js)
  • C# client class (docs/client-examples/csharp-client.cs)
  • Client examples documentation (docs/client-examples/README.md)

Technical Details

  • All clients include rate limiting handling (HTTP 429)
  • Examples demonstrate validate, status, and activate endpoints
  • JavaScript client works in both browser and Node.js environments
  • Python client uses dataclasses for type-safe responses
  • C# client uses async/await patterns

0.0.8 - 2026-01-21

Changed

  • Current version now automatically derived from latest product version
  • Email system refactored to use WooCommerce transactional emails
  • License expiration warning email now configurable via WooCommerce email settings

Removed

  • "Current Version" field from product license settings panel

Technical Details

  • New LicenseExpirationEmail class extends WC_Email
  • LicensedProduct's get_current_version() queries VersionManager
  • Uses WooCommerce email header/footer templates
  • Warning days configurable in plugin settings

0.0.7 - 2026-01-21

Added

  • License Dashboard moved to WooCommerce Reports section (Reports > Licenses)
  • License search and filtering in admin (by license key, domain, status, product)
  • Customer-facing license transfer request with AJAX-based modal
  • Email notifications for license expiration warnings (7 days and 1 day before)
  • Bulk import licenses from CSV functionality
  • Import page with detailed format instructions
  • Scheduled cron job for daily expiration checks

Changed

  • Dashboard now accessible via WooCommerce > Reports > Licenses tab
  • License list page includes search box and filter dropdowns
  • Pagination preserves filter state
  • Import CSV button added to licenses page header

Technical Details

  • AccountController extended with customer transfer AJAX handler and domain normalization
  • LicenseEmailController extended with expiration warning scheduling and email templates
  • LicenseManager extended with getLicensesExpiringSoon(), markExpirationNotified(), wasExpirationNotified(), importLicense() methods
  • AdminController extended with CSV import handling and import page rendering
  • Installer clears cron events on plugin deactivation
  • Frontend JavaScript extended for transfer modal handling
  • Frontend CSS extended with modal and transfer button styles

0.0.6 - 2026-01-21

Added

  • License usage statistics/analytics dashboard (WooCommerce > License Dashboard)
  • License transfer functionality to change domain from admin
  • Export licenses to CSV functionality
  • OpenAPI 3.1 specification for REST API documentation (openapi.json)
  • Monthly license creation chart on dashboard
  • Top products and top domains statistics
  • Expiring soon alerts on dashboard

Removed

  • API endpoint /deactivate removed (license deactivation is now admin-only)

Changed

  • Licenses admin page header now includes Export CSV button
  • Actions column widened to accommodate Transfer link
  • Dashboard link added to licenses page

Technical Details

  • New admin page: License Dashboard with statistics overview
  • LicenseManager extended with transferLicense(), getStatistics(), exportLicensesForCsv() methods
  • AdminController extended with dashboard rendering, CSV export, and transfer handling
  • Transfer modal with form for domain change
  • REST API now only has three endpoints: /validate, /status, /activate
  • OpenAPI 3.1 specification documents all API endpoints with examples

0.0.5 - 2026-01-21

Added

  • Bulk license operations in admin (activate, deactivate, revoke, extend, delete)
  • License renewal/extension functionality (extend by 30/90/365 days)
  • Set license to lifetime (remove expiration)
  • Quick action buttons per license row (+30d, ∞, Revoke, Delete)
  • Checkbox selection for bulk operations with select-all functionality
  • Improved admin notices for bulk operation results

Changed

  • Licenses admin page redesigned with WordPress list table styling
  • License actions use row-actions pattern for cleaner UI
  • Bulk action dropdowns at top and bottom of table (synchronized)

Technical Details

  • LicenseManager extended with extendLicense(), setLicenseLifetime(), bulkUpdateStatus(), bulkDelete(), bulkExtend() methods
  • AdminController extended with bulk action handling and extend/lifetime actions
  • Twig template functions for generating action URLs with nonces
  • JavaScript for checkbox sync and bulk action handling

0.0.4 - 2026-01-21

Added

  • WooCommerce settings tab "Licensed Products" for default license settings
  • Default settings for Max Activations, License Validity, and Bind to Major Version
  • Per-product settings now override global defaults (empty = use default)
  • Settings link in product edit page pointing to WooCommerce settings

Changed

  • Product license settings now show placeholder with default values
  • LicensedProduct class now falls back to global defaults when product settings are empty

Technical Details

  • New class: SettingsController for WooCommerce settings integration
  • LicensedProduct model extended with has_custom_* methods for checking overrides
  • Settings stored using WooCommerce options API

0.0.3 - 2026-01-21

Added

  • File attachment support for product versions (WordPress Media Library integration)
  • Version auto-detection from uploaded filenames (e.g., plugin-v1.2.3.zip)
  • Customer download page for purchased licenses with secure authenticated downloads
  • License key copy-to-clipboard functionality on account page and emails
  • New card-based UI for customer licenses page with download section
  • DownloadController for secure file delivery with hash-based URL verification

Changed

  • Product versions meta box now hidden for non-licensed product types (dynamic show/hide)
  • Redesigned customer licenses page with modern card layout
  • Frontend JavaScript and CSS enhancements for better UX

Technical Details

  • New class: DownloadController for secure file downloads
  • Database schema updated: attachment_id column added to versions table
  • ProductVersion model extended with getEffectiveDownloadUrl() and getDownloadFilename()
  • Secure download URLs use hash verification (license_id-version_id-hash format)

0.0.2 - 2026-01-21

Added

  • Product version management UI in admin (meta box on product edit page)
  • AJAX-based version CRUD operations (add, delete, toggle active status)
  • ProductVersion model and VersionManager for version data handling
  • Email notifications with license keys on order completion
  • License information included in WooCommerce order completed emails
  • Rate limiting for REST API endpoints (30 requests/minute per IP)
  • Cloudflare and proxy-aware IP detection for rate limiting
  • JavaScript for version management interactions

Changed

  • Declared WooCommerce HPOS and cart/checkout blocks compatibility
  • Plugin name changed from "WC Licensed Product" to "WooCommerce Licensed Product"

Technical Details

  • New classes: ProductVersion, VersionManager, VersionAdminController, LicenseEmailController
  • Rate limiting uses WordPress transients for request counting
  • HTTP 429 response with Retry-After header when rate limited

0.0.1 - 2026-01-21

Added

  • Initial plugin structure with WordPress Plugin API integration
  • New WooCommerce product type "Licensed Product" for selling software licenses
  • License key generation with format XXXX-XXXX-XXXX-XXXX on order completion
  • Domain-based license validation (licenses bound to specific domains)
  • REST API endpoints for license management:
    • POST /wp-json/wc-licensed-product/v1/validate - Validate license for domain
    • POST /wp-json/wc-licensed-product/v1/status - Check license status
    • POST /wp-json/wc-licensed-product/v1/activate - Activate license on domain
  • Checkout domain field for licensed products
  • Customer account page "Licenses" to view purchased licenses
  • Admin interface for license management (WooCommerce > Licenses)
  • License settings per product:
    • Maximum activations per license
    • License validity period (days or lifetime)
    • Optional binding to major software version
    • Current version tracking
  • Custom database tables for licenses and product versions
  • Twig template engine integration for views
  • Full internationalization support (i18n)
  • German (Switzerland, formal) translation (de_CH)
  • WooCommerce HPOS compatibility
  • Responsive frontend license table

Technical

  • PHP 8.3+ required
  • WooCommerce 10.0+ required
  • PSR-4 autoloading via Composer
  • Twig 3.0 template engine
  • WordPress REST API integration
  • Custom WooCommerce product type extending WC_Product