You've already forked wc-licensed-product
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a93381dce6 | |||
| a522455a0a | |||
| 2de6abe133 | |||
| 8d60758f23 |
11
CHANGELOG.md
11
CHANGELOG.md
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.3.8] - 2026-01-24
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed duplicate German translation string causing `ArgumentCountError` in settings page
|
||||||
|
- The notification settings description had duplicated text with two `%s` placeholders
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated `magdev/wc-licensed-product-client` to latest version (64d215c)
|
||||||
|
|
||||||
## [0.3.7] - 2026-01-24
|
## [0.3.7] - 2026-01-24
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|||||||
68
CLAUDE.md
68
CLAUDE.md
@@ -36,14 +36,9 @@ This project is proudly **"vibe-coded"** using Claude.AI - the entire codebase w
|
|||||||
|
|
||||||
No known bugs at the moment.
|
No known bugs at the moment.
|
||||||
|
|
||||||
### Version 0.3.7
|
### Version 0.3.8
|
||||||
|
|
||||||
- Fixed: Dashboard widget "View All Licenses" link used wrong page slug
|
No changes at the moment.
|
||||||
- Fixed: Download links in customer account resulted in 404 errors (missing query var registration)
|
|
||||||
- Removed: Redundant "Status Breakdown" section from dashboard widget (info already in stat cards)
|
|
||||||
- Changed: License Types section now uses card style matching the stats row above
|
|
||||||
- Added: Download counter for licensed product versions (tracked per version)
|
|
||||||
- Added: Download Statistics admin dashboard widget showing total downloads, top products, and top versions
|
|
||||||
|
|
||||||
### Version 0.4.0
|
### Version 0.4.0
|
||||||
|
|
||||||
@@ -1037,3 +1032,62 @@ define('WC_LICENSE_TRUSTED_PROXIES', '10.0.0.1,192.168.1.0/24');
|
|||||||
- Created release package: `releases/wc-licensed-product-0.3.6.zip` (818 KB)
|
- Created release package: `releases/wc-licensed-product-0.3.6.zip` (818 KB)
|
||||||
- SHA256: `b0063f0312759f090e12faba83de730baf4114139d763e46fad2b781d4b38270`
|
- SHA256: `b0063f0312759f090e12faba83de730baf4114139d763e46fad2b781d4b38270`
|
||||||
- Tagged as `v0.3.6` and pushed to `main` branch
|
- Tagged as `v0.3.6` and pushed to `main` branch
|
||||||
|
|
||||||
|
### 2026-01-24 - Version 0.3.7 - Dashboard Improvements & Download Counter
|
||||||
|
|
||||||
|
**Overview:**
|
||||||
|
|
||||||
|
Fixed dashboard widget bugs, improved UI consistency, and added download tracking functionality with a new statistics widget.
|
||||||
|
|
||||||
|
**Bug Fixes:**
|
||||||
|
|
||||||
|
- Fixed: Dashboard widget "View All Licenses" link used wrong page slug (`wc-licensed-product-licenses` instead of `wc-licenses`)
|
||||||
|
- Fixed: Download links in customer account resulted in 404 errors due to missing query var registration
|
||||||
|
- Added `license-download` endpoint registration during plugin activation in `Installer::activate()`
|
||||||
|
- Added `addDownloadQueryVar()` method to `DownloadController` for proper WordPress endpoint recognition
|
||||||
|
|
||||||
|
**UI Improvements:**
|
||||||
|
|
||||||
|
- Removed redundant "Status Breakdown" section from license statistics widget (info already shown in stat cards above)
|
||||||
|
- Changed License Types section to use card-style layout matching the stats row above
|
||||||
|
- Cleaned up unused CSS for status badges
|
||||||
|
|
||||||
|
**New Features:**
|
||||||
|
|
||||||
|
- Download counter for licensed product versions (tracked per version in database)
|
||||||
|
- New Download Statistics admin dashboard widget showing:
|
||||||
|
- Total downloads count
|
||||||
|
- Top 5 products by downloads
|
||||||
|
- Top 5 versions by downloads
|
||||||
|
|
||||||
|
**New files:**
|
||||||
|
|
||||||
|
- `src/Admin/DownloadWidgetController.php` - Dashboard widget for download statistics
|
||||||
|
|
||||||
|
**New methods in VersionManager:**
|
||||||
|
|
||||||
|
- `incrementDownloadCount()` - Atomically increment download count for a version
|
||||||
|
- `getTotalDownloadCount()` - Get total downloads across all versions
|
||||||
|
- `getDownloadStatistics()` - Get download stats grouped by product and version
|
||||||
|
|
||||||
|
**Modified files:**
|
||||||
|
|
||||||
|
- `src/Installer.php` - Added `download_count` column to versions table, added `license-download` endpoint registration
|
||||||
|
- `src/Product/ProductVersion.php` - Added `downloadCount` property and `getDownloadCount()` method
|
||||||
|
- `src/Product/VersionManager.php` - Added download counting methods
|
||||||
|
- `src/Frontend/DownloadController.php` - Added query var registration, increment download count on file serve
|
||||||
|
- `src/Admin/DashboardWidgetController.php` - Fixed URL, removed Status Breakdown, changed License Types to cards
|
||||||
|
- `src/Plugin.php` - Added DownloadWidgetController instantiation
|
||||||
|
|
||||||
|
**Technical notes:**
|
||||||
|
|
||||||
|
- Download count is incremented atomically using SQL `download_count = download_count + 1`
|
||||||
|
- Statistics queries use SQL aggregation with product name enrichment via `wc_get_product()`
|
||||||
|
- WordPress endpoints require both `add_rewrite_endpoint()` AND `query_vars` filter registration
|
||||||
|
- Existing installations need to flush rewrite rules (Settings > Permalinks > Save) or reactivate plugin
|
||||||
|
|
||||||
|
**Release v0.3.7:**
|
||||||
|
|
||||||
|
- Created release package: `releases/wc-licensed-product-0.3.7.zip` (827 KB)
|
||||||
|
- SHA256: `e93b2ab06f6d43c2179167090e07eda5db6809df6e391baece4ceba321cf33f6`
|
||||||
|
- Tagged as `v0.3.7` and pushed to `main` branch
|
||||||
|
|||||||
16
composer.lock
generated
16
composer.lock
generated
@@ -12,7 +12,7 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://src.bundespruefstelle.ch/magdev/wc-licensed-product-client.git",
|
"url": "https://src.bundespruefstelle.ch/magdev/wc-licensed-product-client.git",
|
||||||
"reference": "9f513a819e8218a0e8e16f0be8f7edbf0f30245e"
|
"reference": "64d215cb265a64ff318cfbb954dd128b0076dc1d"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.3",
|
"php": "^8.3",
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
"issues": "https://src.bundespruefstelle.ch/magdev/wc-licensed-product-client/issues",
|
"issues": "https://src.bundespruefstelle.ch/magdev/wc-licensed-product-client/issues",
|
||||||
"source": "https://src.bundespruefstelle.ch/magdev/wc-licensed-product-client"
|
"source": "https://src.bundespruefstelle.ch/magdev/wc-licensed-product-client"
|
||||||
},
|
},
|
||||||
"time": "2026-01-23T15:45:59+00:00"
|
"time": "2026-01-24T13:32:11+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/cache",
|
"name": "psr/cache",
|
||||||
@@ -894,16 +894,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "twig/twig",
|
"name": "twig/twig",
|
||||||
"version": "v3.22.2",
|
"version": "v3.23.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/twigphp/Twig.git",
|
"url": "https://github.com/twigphp/Twig.git",
|
||||||
"reference": "946ddeafa3c9f4ce279d1f34051af041db0e16f2"
|
"reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/twigphp/Twig/zipball/946ddeafa3c9f4ce279d1f34051af041db0e16f2",
|
"url": "https://api.github.com/repos/twigphp/Twig/zipball/a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9",
|
||||||
"reference": "946ddeafa3c9f4ce279d1f34051af041db0e16f2",
|
"reference": "a64dc5d2cc7d6cafb9347f6cd802d0d06d0351c9",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -957,7 +957,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/twigphp/Twig/issues",
|
"issues": "https://github.com/twigphp/Twig/issues",
|
||||||
"source": "https://github.com/twigphp/Twig/tree/v3.22.2"
|
"source": "https://github.com/twigphp/Twig/tree/v3.23.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -969,7 +969,7 @@
|
|||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2025-12-14T11:28:47+00:00"
|
"time": "2026-01-23T21:00:41+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [],
|
"packages-dev": [],
|
||||||
|
|||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
BIN
releases/wc-licensed-product-0.3.7.zip
Normal file
BIN
releases/wc-licensed-product-0.3.7.zip
Normal file
Binary file not shown.
1
releases/wc-licensed-product-0.3.7.zip.sha256
Normal file
1
releases/wc-licensed-product-0.3.7.zip.sha256
Normal file
@@ -0,0 +1 @@
|
|||||||
|
e93b2ab06f6d43c2179167090e07eda5db6809df6e391baece4ceba321cf33f6 wc-licensed-product-0.3.7.zip
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
* Plugin Name: WooCommerce Licensed Product
|
* Plugin Name: WooCommerce Licensed Product
|
||||||
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-licensed-product
|
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-licensed-product
|
||||||
* Description: WooCommerce plugin to sell software products using license keys with domain-based validation.
|
* Description: WooCommerce plugin to sell software products using license keys with domain-based validation.
|
||||||
* Version: 0.3.7
|
* Version: 0.3.8
|
||||||
* Author: Marco Graetsch
|
* Author: Marco Graetsch
|
||||||
* Author URI: https://src.bundespruefstelle.ch/magdev
|
* Author URI: https://src.bundespruefstelle.ch/magdev
|
||||||
* License: GPL-2.0-or-later
|
* License: GPL-2.0-or-later
|
||||||
@@ -28,7 +28,7 @@ if (!defined('ABSPATH')) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Plugin constants
|
// Plugin constants
|
||||||
define('WC_LICENSED_PRODUCT_VERSION', '0.3.7');
|
define('WC_LICENSED_PRODUCT_VERSION', '0.3.8');
|
||||||
define('WC_LICENSED_PRODUCT_PLUGIN_FILE', __FILE__);
|
define('WC_LICENSED_PRODUCT_PLUGIN_FILE', __FILE__);
|
||||||
define('WC_LICENSED_PRODUCT_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
define('WC_LICENSED_PRODUCT_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
||||||
define('WC_LICENSED_PRODUCT_PLUGIN_URL', plugin_dir_url(__FILE__));
|
define('WC_LICENSED_PRODUCT_PLUGIN_URL', plugin_dir_url(__FILE__));
|
||||||
|
|||||||
Reference in New Issue
Block a user