You've already forked wc-tier-and-package-prices
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 74cc56005e | |||
| 136eed2bdd | |||
| 178f86f3e6 | |||
| 7286459ff2 | |||
| cbe758267e |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -37,3 +37,6 @@ wp-core
|
|||||||
|
|
||||||
# Releases (not tracked in git)
|
# Releases (not tracked in git)
|
||||||
/releases/
|
/releases/
|
||||||
|
|
||||||
|
# Claude Code local settings
|
||||||
|
.claude/settings.json
|
||||||
|
|||||||
40
CHANGELOG.md
40
CHANGELOG.md
@@ -5,6 +5,46 @@ All notable changes to WooCommerce Tier and Package Prices will be documented in
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [1.3.1] - 2026-01-27
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- **Switched to SecureLicenseClient**: Upgraded from basic `LicenseClient` to `SecureLicenseClient` with HMAC-SHA256 response signature verification for enhanced security against tampering and replay attacks
|
||||||
|
|
||||||
|
- **Added Server Secret Configuration**: New "Server Secret" field in License settings for secure communication with the license server
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- **Rate Limit Handling**: Added proper handling of `RateLimitExceededException` with user-friendly messages showing retry wait time
|
||||||
|
- **Signature Verification Error Handling**: Added dedicated handling for `SignatureException` when response signatures fail verification
|
||||||
|
- **URL Validation Error Handling**: Added handling for `InvalidArgumentException` from SSRF protection in the license client
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Response signatures are now verified using HMAC-SHA256 with license-specific derived keys (RFC 5869 HKDF)
|
||||||
|
- The license client now validates server URLs to prevent SSRF attacks (blocks private IP ranges)
|
||||||
|
- HTTP connections require HTTPS unless explicitly allowed for localhost testing
|
||||||
|
|
||||||
|
### Technical Details
|
||||||
|
|
||||||
|
**License Client Upgrade**:
|
||||||
|
|
||||||
|
- Changed from `LicenseClient` to `SecureLicenseClient`
|
||||||
|
- Added `serverSecret` parameter for signature verification
|
||||||
|
- Library updated from `v0.1.0` to `dev-main` with new security features
|
||||||
|
|
||||||
|
**New Exception Handling**:
|
||||||
|
|
||||||
|
- `RateLimitExceededException` - shows retry time to user
|
||||||
|
- `SignatureException` - indicates server secret mismatch
|
||||||
|
- `InvalidArgumentException` - invalid/blocked URL detected
|
||||||
|
|
||||||
|
**New Settings Field**:
|
||||||
|
|
||||||
|
- `wc_tpp_license_server_secret` (password type) for the shared secret
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [1.3.0] - 2026-01-25
|
## [1.3.0] - 2026-01-25
|
||||||
|
|
||||||
### Breaking Changes
|
### Breaking Changes
|
||||||
|
|||||||
94
CLAUDE.md
94
CLAUDE.md
@@ -1,7 +1,7 @@
|
|||||||
# WooCommerce Tier and Package Prices - AI Context Document
|
# WooCommerce Tier and Package Prices - AI Context Document
|
||||||
|
|
||||||
**Last Updated:** 2026-01-25
|
**Last Updated:** 2026-01-27
|
||||||
**Current Version:** 1.3.0
|
**Current Version:** 1.3.1
|
||||||
**Author:** Marco Graetsch
|
**Author:** Marco Graetsch
|
||||||
**Project Status:** Production-ready WordPress plugin
|
**Project Status:** Production-ready WordPress plugin
|
||||||
|
|
||||||
@@ -20,9 +20,9 @@ This project is proudly **"vibe-coded"** using Claude.AI - the entire codebase w
|
|||||||
|
|
||||||
**Note for AI Assistants:** Clean this section after the specific features are done or new releases are made. Effective changes are tracked in `CHANGELOG.md`. Do not add completed versions here - document them in the Session History section at the end of this file. Always keep the `Known Bugs` section and create a section with the next bugfix and minor version after a release.
|
**Note for AI Assistants:** Clean this section after the specific features are done or new releases are made. Effective changes are tracked in `CHANGELOG.md`. Do not add completed versions here - document them in the Session History section at the end of this file. Always keep the `Known Bugs` section and create a section with the next bugfix and minor version after a release.
|
||||||
|
|
||||||
### Version 1.3.1
|
### Version 1.3.2
|
||||||
|
|
||||||
- TBD
|
- No planned changes yet
|
||||||
|
|
||||||
## Technical Stack
|
## Technical Stack
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ This project is proudly **"vibe-coded"** using Claude.AI - the entire codebase w
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"twig/twig": "^3.0",
|
"twig/twig": "^3.0",
|
||||||
"magdev/wc-licensed-product-client": "^0.1",
|
"magdev/wc-licensed-product-client": "dev-main",
|
||||||
"symfony/http-client": "^7.0",
|
"symfony/http-client": "^7.0",
|
||||||
"psr/log": "^3.0",
|
"psr/log": "^3.0",
|
||||||
"psr/cache": "^3.0",
|
"psr/cache": "^3.0",
|
||||||
@@ -1101,8 +1101,8 @@ if (!empty($tiers)) {
|
|||||||
|
|
||||||
### PHP
|
### PHP
|
||||||
|
|
||||||
- Minimum: 7.4
|
- Minimum: 8.3 (breaking change in v1.3.0)
|
||||||
- Uses modern PHP features (type hints acceptable in new code)
|
- Uses modern PHP features (type hints, named arguments, etc.)
|
||||||
- Composer autoloader handles namespacing
|
- Composer autoloader handles namespacing
|
||||||
|
|
||||||
### Browsers
|
### Browsers
|
||||||
@@ -1138,4 +1138,84 @@ The plugin architecture is solid and well-tested. Most bugs arise from:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Session History
|
||||||
|
|
||||||
|
### v1.3.0 Release Session (2026-01-25)
|
||||||
|
|
||||||
|
**Accomplished:**
|
||||||
|
|
||||||
|
1. Fixed known bugs from CLAUDE.md:
|
||||||
|
- Removed all releases from git tracking (`git rm --cached -r releases/`)
|
||||||
|
- Deleted all MD5 checksum files, keeping only SHA256
|
||||||
|
- Updated `.gitignore` to exclude `/releases/`
|
||||||
|
|
||||||
|
2. Implemented v1.3.0 features:
|
||||||
|
- Bumped PHP requirement from 7.4 to 8.3 (breaking change)
|
||||||
|
- Added PHP version check with admin notice for incompatible servers
|
||||||
|
- Added `magdev/wc-licensed-product-client` library integration
|
||||||
|
- Refactored settings page to use WooCommerce modern sub-tabs pattern (`get_own_sections()`)
|
||||||
|
- Created "General" and "License" sub-tabs
|
||||||
|
- Implemented license management with AJAX validation/activation
|
||||||
|
- Added license status caching via WordPress transients
|
||||||
|
- Added CSS styling for license status display
|
||||||
|
|
||||||
|
3. Updated all translation files:
|
||||||
|
- Added 28 new translation strings for license management
|
||||||
|
- Updated .pot template and all 7 .po files
|
||||||
|
- Compiled all .mo files
|
||||||
|
|
||||||
|
4. Created release package:
|
||||||
|
- Package size: 737KB (increased due to new dependencies)
|
||||||
|
- 642 files included (more due to license client library)
|
||||||
|
- SHA256 checksum generated
|
||||||
|
|
||||||
|
**Key Learnings:**
|
||||||
|
|
||||||
|
- WooCommerce settings sub-tabs use `get_own_sections()` and `get_settings_for_{section}_section()` pattern
|
||||||
|
- License client library `magdev/wc-licensed-product-client` is from private Gitea repo - requires `repositories` config in composer.json
|
||||||
|
- Package version was `^0.1` not `^1.0` - always check available versions before setting constraint
|
||||||
|
- Release package size increased from ~430KB to ~737KB due to new Composer dependencies
|
||||||
|
|
||||||
|
### v1.3.1 Release Session (2026-01-27)
|
||||||
|
|
||||||
|
**Accomplished:**
|
||||||
|
|
||||||
|
1. Reviewed server-implementation.md from license client library
|
||||||
|
2. Upgraded from `LicenseClient` to `SecureLicenseClient`:
|
||||||
|
- Added "Server Secret" configuration field in License settings tab
|
||||||
|
- Updated `get_license_client()` to use `SecureLicenseClient` with HMAC-SHA256 signature verification
|
||||||
|
- Updated JavaScript to pass `server_secret` in AJAX requests
|
||||||
|
|
||||||
|
3. Added comprehensive exception handling:
|
||||||
|
- `RateLimitExceededException` - Shows retry time to user
|
||||||
|
- `SignatureException` - Reports signature verification failures
|
||||||
|
- `InvalidArgumentException` - SSRF protection for private IP blocking
|
||||||
|
|
||||||
|
4. Updated Composer dependencies:
|
||||||
|
- Changed `magdev/wc-licensed-product-client` from `^0.1` to `dev-main`
|
||||||
|
- Library includes new security features (SSRF protection, response signatures)
|
||||||
|
|
||||||
|
5. Updated translations:
|
||||||
|
- Added 7 new translation strings for v1.3.1
|
||||||
|
- All 7 language files updated and compiled
|
||||||
|
|
||||||
|
6. Created release package:
|
||||||
|
- Package size: 745KB
|
||||||
|
- 642 files included
|
||||||
|
- SHA256 checksum generated
|
||||||
|
|
||||||
|
7. Updated README.md:
|
||||||
|
- Documented license management feature
|
||||||
|
- Updated PHP requirement to 8.3
|
||||||
|
- Added v1.3.0 and v1.3.1 changelog entries
|
||||||
|
|
||||||
|
**Key Learnings:**
|
||||||
|
|
||||||
|
- `SecureLicenseClient` requires `serverSecret` parameter for HMAC verification
|
||||||
|
- The library's exception classes are in `Magdev\WcLicensedProductClient\Exception\` and `Magdev\WcLicensedProductClient\Security\` namespaces
|
||||||
|
- `RateLimitExceededException` has a `retryAfter` property (int seconds)
|
||||||
|
- Always check library documentation in `docs/server-implementation.md` for implementation requirements
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
Always refer to this document when starting work on this project. Good luck!
|
Always refer to this document when starting work on this project. Good luck!
|
||||||
|
|||||||
50
README.md
50
README.md
@@ -20,10 +20,11 @@ A powerful WooCommerce plugin that adds tier pricing and package pricing functio
|
|||||||
|
|
||||||
### Admin Features
|
### Admin Features
|
||||||
- Easy-to-use product meta boxes for adding tiers and packages
|
- Easy-to-use product meta boxes for adding tiers and packages
|
||||||
- Global settings page under WooCommerce menu
|
- Global settings page under WooCommerce menu with sub-tabs
|
||||||
- Configure display position (before/after add to cart, after price)
|
- Configure display position (before/after add to cart, after price)
|
||||||
- Enable/disable tier or package pricing independently
|
- Enable/disable tier or package pricing independently
|
||||||
- Sortable pricing rules
|
- Sortable pricing rules
|
||||||
|
- License management with secure HMAC signature verification
|
||||||
|
|
||||||
### Frontend Features
|
### Frontend Features
|
||||||
- Beautiful pricing tables on product pages
|
- Beautiful pricing tables on product pages
|
||||||
@@ -110,7 +111,7 @@ When editing a product, scroll to the **Product data** panel:
|
|||||||
|
|
||||||
```
|
```
|
||||||
wc-tier-and-package-prices/
|
wc-tier-and-package-prices/
|
||||||
├── wc-tier-and-package-prices.php # Main plugin file (v1.1.20)
|
├── wc-tier-and-package-prices.php # Main plugin file (v1.3.1)
|
||||||
├── includes/
|
├── includes/
|
||||||
│ ├── class-wc-tpp-admin.php # Admin settings integration
|
│ ├── class-wc-tpp-admin.php # Admin settings integration
|
||||||
│ ├── class-wc-tpp-settings.php # WooCommerce settings page
|
│ ├── class-wc-tpp-settings.php # WooCommerce settings page
|
||||||
@@ -149,7 +150,7 @@ wc-tier-and-package-prices/
|
|||||||
|
|
||||||
- WordPress 6.0 or higher (tested up to 6.9.x)
|
- WordPress 6.0 or higher (tested up to 6.9.x)
|
||||||
- WooCommerce 8.0 or higher (tested up to 10.x)
|
- WooCommerce 8.0 or higher (tested up to 10.x)
|
||||||
- PHP 7.4 or higher
|
- PHP 8.3 or higher (required since v1.3.0)
|
||||||
|
|
||||||
### Compatibility
|
### Compatibility
|
||||||
|
|
||||||
@@ -183,9 +184,32 @@ This plugin is licensed under the GPL v2 or later.
|
|||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
|
### Version 1.3.1 - 2026-01-27
|
||||||
|
|
||||||
|
__Current Release__ - Secure License Client
|
||||||
|
|
||||||
|
- __Changed__: Switched to `SecureLicenseClient` with HMAC-SHA256 response signature verification
|
||||||
|
- __New__: Server Secret configuration field for secure communication with license server
|
||||||
|
- __New__: Rate limit exception handling with retry time display
|
||||||
|
- __New__: Signature verification and URL validation error handling
|
||||||
|
- __Security__: Response signatures verified using HMAC-SHA256 with license-specific derived keys
|
||||||
|
|
||||||
|
See [CHANGELOG.md](CHANGELOG.md) for complete details.
|
||||||
|
|
||||||
|
### Version 1.3.0 - 2026-01-25
|
||||||
|
|
||||||
|
__Breaking Changes__ - PHP 8.3+ Required
|
||||||
|
|
||||||
|
- __Breaking__: Minimum PHP version increased from 7.4 to 8.3
|
||||||
|
- __New__: License management via `magdev/wc-licensed-product-client` library
|
||||||
|
- __New__: Settings page split into "General" and "License" sub-tabs
|
||||||
|
- __New__: AJAX-based license validation and activation with visual feedback
|
||||||
|
- __New__: License status caching with daily auto-refresh
|
||||||
|
- __New__: PHP version check with admin notice for incompatible servers
|
||||||
|
|
||||||
### Version 1.2.0 - 2025-12-29
|
### Version 1.2.0 - 2025-12-29
|
||||||
|
|
||||||
__Current Release__ - Variable Product Support
|
Variable Product Support
|
||||||
|
|
||||||
- __New__: Full support for WooCommerce variable products with variation-level pricing
|
- __New__: Full support for WooCommerce variable products with variation-level pricing
|
||||||
- __New__: Each variation can have independent tier and package pricing configuration
|
- __New__: Each variation can have independent tier and package pricing configuration
|
||||||
@@ -194,24 +218,6 @@ __Current Release__ - Variable Product Support
|
|||||||
- __Fixed__: Quantity restrictions now work correctly per-variation
|
- __Fixed__: Quantity restrictions now work correctly per-variation
|
||||||
- 100% backward compatible - no breaking changes
|
- 100% backward compatible - no breaking changes
|
||||||
|
|
||||||
See [CHANGELOG.md](CHANGELOG.md) for complete details.
|
|
||||||
|
|
||||||
### Version 1.1.22 - 2025-12-23
|
|
||||||
|
|
||||||
- Increased width of label input fields in admin interface
|
|
||||||
|
|
||||||
#### Fixed
|
|
||||||
- **CRITICAL:** WooCommerce Blocks fatal error in mini-cart and cart blocks
|
|
||||||
- Fixed `woocommerce_store_api_product_quantity_editable` filter signature mismatch
|
|
||||||
- Filter now correctly accepts `WC_Product` object instead of cart item array
|
|
||||||
- Resolves "Cannot use object of type WC_Product_Simple as array" fatal error
|
|
||||||
|
|
||||||
#### Technical Details
|
|
||||||
- Updated `block_quantity_editable()` method signature to accept product object
|
|
||||||
- Changed parameter from `$cart_item` array to `WC_Product $product`
|
|
||||||
- Uses `$product->get_id()` instead of array access for product ID
|
|
||||||
- Full compatibility with WooCommerce Store API and block-based cart/checkout
|
|
||||||
|
|
||||||
### Recent Major Updates
|
### Recent Major Updates
|
||||||
|
|
||||||
#### Version 1.1.7 - Enhanced Tier Pricing
|
#### Version 1.1.7 - Enhanced Tier Pricing
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "magdev/wc-tier-package-prices",
|
"name": "magdev/wc-tier-package-prices",
|
||||||
"description": "WooCommerce plugin for tier pricing and package prices with Twig templates",
|
"description": "WooCommerce plugin for tier pricing and package prices with Twig templates",
|
||||||
"version": "1.3.0",
|
"version": "1.3.1",
|
||||||
"type": "wordpress-plugin",
|
"type": "wordpress-plugin",
|
||||||
"license": "GPL-2.0-or-later",
|
"license": "GPL-2.0-or-later",
|
||||||
"authors": [
|
"authors": [
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": ">=8.3",
|
"php": ">=8.3",
|
||||||
"twig/twig": "^3.0",
|
"twig/twig": "^3.0",
|
||||||
"magdev/wc-licensed-product-client": "^0.1"
|
"magdev/wc-licensed-product-client": "dev-main"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
"classmap": [
|
||||||
|
|||||||
@@ -154,6 +154,16 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
'desc_tip' => true,
|
'desc_tip' => true,
|
||||||
),
|
),
|
||||||
|
|
||||||
|
array(
|
||||||
|
'title' => __('Server Secret', 'wc-tier-package-prices'),
|
||||||
|
'desc' => __('The shared secret for secure communication with the license server.', 'wc-tier-package-prices'),
|
||||||
|
'id' => 'wc_tpp_license_server_secret',
|
||||||
|
'type' => 'password',
|
||||||
|
'default' => '',
|
||||||
|
'css' => 'min-width:400px;',
|
||||||
|
'desc_tip' => true,
|
||||||
|
),
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'title' => __('License Status', 'wc-tier-package-prices'),
|
'title' => __('License Status', 'wc-tier-package-prices'),
|
||||||
'type' => 'wc_tpp_license_status',
|
'type' => 'wc_tpp_license_status',
|
||||||
@@ -188,13 +198,14 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
|
|
||||||
$license_key = sanitize_text_field(wp_unslash($_POST['license_key'] ?? ''));
|
$license_key = sanitize_text_field(wp_unslash($_POST['license_key'] ?? ''));
|
||||||
$server_url = esc_url_raw(wp_unslash($_POST['server_url'] ?? ''));
|
$server_url = esc_url_raw(wp_unslash($_POST['server_url'] ?? ''));
|
||||||
|
$server_secret = sanitize_text_field(wp_unslash($_POST['server_secret'] ?? ''));
|
||||||
|
|
||||||
if (empty($license_key) || empty($server_url)) {
|
if (empty($license_key) || empty($server_url) || empty($server_secret)) {
|
||||||
wp_send_json_error(array('message' => __('License key and server URL are required.', 'wc-tier-package-prices')));
|
wp_send_json_error(array('message' => __('License key, server URL, and server secret are required.', 'wc-tier-package-prices')));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$client = $this->get_license_client($server_url);
|
$client = $this->get_license_client($server_url, $server_secret);
|
||||||
$domain = $this->get_current_domain();
|
$domain = $this->get_current_domain();
|
||||||
$result = $client->validate($license_key, $domain);
|
$result = $client->validate($license_key, $domain);
|
||||||
|
|
||||||
@@ -212,16 +223,37 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
'status' => $this->get_cached_license_status(),
|
'status' => $this->get_cached_license_status(),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
} catch (\Magdev\WcLicensedProductClient\Exception\RateLimitExceededException $e) {
|
||||||
|
wp_send_json_error(array(
|
||||||
|
'message' => sprintf(
|
||||||
|
/* translators: %d: Number of seconds to wait */
|
||||||
|
__('Rate limit exceeded. Please try again in %d seconds.', 'wc-tier-package-prices'),
|
||||||
|
$e->retryAfter ?? 60
|
||||||
|
),
|
||||||
|
'code' => 'rate_limit_exceeded',
|
||||||
|
'retry_after' => $e->retryAfter,
|
||||||
|
));
|
||||||
|
} catch (\Magdev\WcLicensedProductClient\Security\SignatureException $e) {
|
||||||
|
delete_transient('wc_tpp_license_status');
|
||||||
|
wp_send_json_error(array(
|
||||||
|
'message' => __('Response signature verification failed. Please check your server secret.', 'wc-tier-package-prices'),
|
||||||
|
'code' => 'signature_error',
|
||||||
|
));
|
||||||
} catch (\Magdev\WcLicensedProductClient\Exception\LicenseException $e) {
|
} catch (\Magdev\WcLicensedProductClient\Exception\LicenseException $e) {
|
||||||
delete_transient('wc_tpp_license_status');
|
delete_transient('wc_tpp_license_status');
|
||||||
wp_send_json_error(array(
|
wp_send_json_error(array(
|
||||||
'message' => $e->getMessage(),
|
'message' => $e->getMessage(),
|
||||||
'code' => $e->errorCode ?? 'unknown',
|
'code' => $e->errorCode ?? 'unknown',
|
||||||
));
|
));
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
wp_send_json_error(array(
|
||||||
|
'message' => $e->getMessage(),
|
||||||
|
'code' => 'invalid_url',
|
||||||
|
));
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
delete_transient('wc_tpp_license_status');
|
delete_transient('wc_tpp_license_status');
|
||||||
wp_send_json_error(array(
|
wp_send_json_error(array(
|
||||||
'message' => $e->getMessage(),
|
'message' => __('An unexpected error occurred. Please try again.', 'wc-tier-package-prices'),
|
||||||
'code' => 'exception',
|
'code' => 'exception',
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -239,13 +271,14 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
|
|
||||||
$license_key = sanitize_text_field(wp_unslash($_POST['license_key'] ?? ''));
|
$license_key = sanitize_text_field(wp_unslash($_POST['license_key'] ?? ''));
|
||||||
$server_url = esc_url_raw(wp_unslash($_POST['server_url'] ?? ''));
|
$server_url = esc_url_raw(wp_unslash($_POST['server_url'] ?? ''));
|
||||||
|
$server_secret = sanitize_text_field(wp_unslash($_POST['server_secret'] ?? ''));
|
||||||
|
|
||||||
if (empty($license_key) || empty($server_url)) {
|
if (empty($license_key) || empty($server_url) || empty($server_secret)) {
|
||||||
wp_send_json_error(array('message' => __('License key and server URL are required.', 'wc-tier-package-prices')));
|
wp_send_json_error(array('message' => __('License key, server URL, and server secret are required.', 'wc-tier-package-prices')));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$client = $this->get_license_client($server_url);
|
$client = $this->get_license_client($server_url, $server_secret);
|
||||||
$domain = $this->get_current_domain();
|
$domain = $this->get_current_domain();
|
||||||
$result = $client->activate($license_key, $domain);
|
$result = $client->activate($license_key, $domain);
|
||||||
|
|
||||||
@@ -269,14 +302,34 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
|
|
||||||
wp_send_json_error(array('message' => $result->message));
|
wp_send_json_error(array('message' => $result->message));
|
||||||
|
|
||||||
|
} catch (\Magdev\WcLicensedProductClient\Exception\RateLimitExceededException $e) {
|
||||||
|
wp_send_json_error(array(
|
||||||
|
'message' => sprintf(
|
||||||
|
/* translators: %d: Number of seconds to wait */
|
||||||
|
__('Rate limit exceeded. Please try again in %d seconds.', 'wc-tier-package-prices'),
|
||||||
|
$e->retryAfter ?? 60
|
||||||
|
),
|
||||||
|
'code' => 'rate_limit_exceeded',
|
||||||
|
'retry_after' => $e->retryAfter,
|
||||||
|
));
|
||||||
|
} catch (\Magdev\WcLicensedProductClient\Security\SignatureException $e) {
|
||||||
|
wp_send_json_error(array(
|
||||||
|
'message' => __('Response signature verification failed. Please check your server secret.', 'wc-tier-package-prices'),
|
||||||
|
'code' => 'signature_error',
|
||||||
|
));
|
||||||
} catch (\Magdev\WcLicensedProductClient\Exception\LicenseException $e) {
|
} catch (\Magdev\WcLicensedProductClient\Exception\LicenseException $e) {
|
||||||
wp_send_json_error(array(
|
wp_send_json_error(array(
|
||||||
'message' => $e->getMessage(),
|
'message' => $e->getMessage(),
|
||||||
'code' => $e->errorCode ?? 'unknown',
|
'code' => $e->errorCode ?? 'unknown',
|
||||||
));
|
));
|
||||||
} catch (\Exception $e) {
|
} catch (\InvalidArgumentException $e) {
|
||||||
wp_send_json_error(array(
|
wp_send_json_error(array(
|
||||||
'message' => $e->getMessage(),
|
'message' => $e->getMessage(),
|
||||||
|
'code' => 'invalid_url',
|
||||||
|
));
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
wp_send_json_error(array(
|
||||||
|
'message' => __('An unexpected error occurred. Please try again.', 'wc-tier-package-prices'),
|
||||||
'code' => 'exception',
|
'code' => 'exception',
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -285,14 +338,18 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
/**
|
/**
|
||||||
* Get license client instance
|
* Get license client instance
|
||||||
*
|
*
|
||||||
* @param string $server_url License server URL.
|
* Uses SecureLicenseClient for HMAC signature verification.
|
||||||
|
*
|
||||||
|
* @param string $server_url License server URL.
|
||||||
|
* @param string $server_secret Shared secret for signature verification.
|
||||||
* @return \Magdev\WcLicensedProductClient\LicenseClientInterface
|
* @return \Magdev\WcLicensedProductClient\LicenseClientInterface
|
||||||
*/
|
*/
|
||||||
private function get_license_client(string $server_url): \Magdev\WcLicensedProductClient\LicenseClientInterface {
|
private function get_license_client(string $server_url, string $server_secret): \Magdev\WcLicensedProductClient\LicenseClientInterface {
|
||||||
$httpClient = \Symfony\Component\HttpClient\HttpClient::create();
|
$httpClient = \Symfony\Component\HttpClient\HttpClient::create();
|
||||||
return new \Magdev\WcLicensedProductClient\LicenseClient(
|
return new \Magdev\WcLicensedProductClient\SecureLicenseClient(
|
||||||
httpClient: $httpClient,
|
httpClient: $httpClient,
|
||||||
baseUrl: $server_url,
|
baseUrl: $server_url,
|
||||||
|
serverSecret: $server_secret,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,6 +459,7 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
return {
|
return {
|
||||||
license_key: $('#wc_tpp_license_key').val(),
|
license_key: $('#wc_tpp_license_key').val(),
|
||||||
server_url: $('#wc_tpp_license_server_url').val(),
|
server_url: $('#wc_tpp_license_server_url').val(),
|
||||||
|
server_secret: $('#wc_tpp_license_server_secret').val(),
|
||||||
nonce: '<?php echo esc_js($nonce); ?>'
|
nonce: '<?php echo esc_js($nonce); ?>'
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -420,8 +478,8 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
|
|
||||||
$validateBtn.on('click', function() {
|
$validateBtn.on('click', function() {
|
||||||
var data = getLicenseData();
|
var data = getLicenseData();
|
||||||
if (!data.license_key || !data.server_url) {
|
if (!data.license_key || !data.server_url || !data.server_secret) {
|
||||||
alert('<?php echo esc_js(__('Please enter both license server URL and license key.', 'wc-tier-package-prices')); ?>');
|
alert('<?php echo esc_js(__('Please enter license server URL, license key, and server secret.', 'wc-tier-package-prices')); ?>');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -443,8 +501,8 @@ if (!class_exists('WC_TPP_Settings')) {
|
|||||||
|
|
||||||
$activateBtn.on('click', function() {
|
$activateBtn.on('click', function() {
|
||||||
var data = getLicenseData();
|
var data = getLicenseData();
|
||||||
if (!data.license_key || !data.server_url) {
|
if (!data.license_key || !data.server_url || !data.server_secret) {
|
||||||
alert('<?php echo esc_js(__('Please enter both license server URL and license key.', 'wc-tier-package-prices')); ?>');
|
alert('<?php echo esc_js(__('Please enter license server URL, license key, and server secret.', 'wc-tier-package-prices')); ?>');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -359,12 +359,33 @@ msgid "Permission denied."
|
|||||||
msgstr "Zugriff verweigert."
|
msgstr "Zugriff verweigert."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "License key and server URL are required."
|
msgid "Server Secret"
|
||||||
msgstr "Lizenzschlüssel und Server-URL sind erforderlich."
|
msgstr "Server-Geheimnis"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Please enter both license server URL and license key."
|
msgid "The shared secret for secure communication with the license server."
|
||||||
msgstr "Bitte geben Sie sowohl die Lizenzserver-URL als auch den Lizenzschlüssel ein."
|
msgstr "Das gemeinsame Geheimnis für die sichere Kommunikation mit dem Lizenzserver."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "License key, server URL, and server secret are required."
|
||||||
|
msgstr "Lizenzschlüssel, Server-URL und Server-Geheimnis sind erforderlich."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
#. translators: %d: Number of seconds to wait
|
||||||
|
msgid "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
msgstr "Anfragelimit überschritten. Bitte versuchen Sie es in %d Sekunden erneut."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Response signature verification failed. Please check your server secret."
|
||||||
|
msgstr "Überprüfung der Antwortsignatur fehlgeschlagen. Bitte überprüfen Sie Ihr Server-Geheimnis."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "An unexpected error occurred. Please try again."
|
||||||
|
msgstr "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es erneut."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Please enter license server URL, license key, and server secret."
|
||||||
|
msgstr "Bitte geben Sie die Lizenzserver-URL, den Lizenzschlüssel und das Server-Geheimnis ein."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Validation failed."
|
msgid "Validation failed."
|
||||||
|
|||||||
Binary file not shown.
@@ -359,12 +359,33 @@ msgid "Permission denied."
|
|||||||
msgstr "Zugriff verweigert."
|
msgstr "Zugriff verweigert."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "License key and server URL are required."
|
msgid "Server Secret"
|
||||||
msgstr "Lizenzschlüssel und Server-URL sind erforderlich."
|
msgstr "Server-Geheimnis"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Please enter both license server URL and license key."
|
msgid "The shared secret for secure communication with the license server."
|
||||||
msgstr "Bitte gib sowohl die Lizenzserver-URL als auch den Lizenzschlüssel ein."
|
msgstr "Das gemeinsame Geheimnis für die sichere Kommunikation mit dem Lizenzserver."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "License key, server URL, and server secret are required."
|
||||||
|
msgstr "Lizenzschlüssel, Server-URL und Server-Geheimnis sind erforderlich."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
#. translators: %d: Number of seconds to wait
|
||||||
|
msgid "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
msgstr "Anfragelimit überschritten. Bitte versuche es in %d Sekunden erneut."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Response signature verification failed. Please check your server secret."
|
||||||
|
msgstr "Überprüfung der Antwortsignatur fehlgeschlagen. Bitte überprüfe dein Server-Geheimnis."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "An unexpected error occurred. Please try again."
|
||||||
|
msgstr "Ein unerwarteter Fehler ist aufgetreten. Bitte versuche es erneut."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Please enter license server URL, license key, and server secret."
|
||||||
|
msgstr "Bitte gib die Lizenzserver-URL, den Lizenzschlüssel und das Server-Geheimnis ein."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Validation failed."
|
msgid "Validation failed."
|
||||||
|
|||||||
Binary file not shown.
@@ -359,12 +359,33 @@ msgid "Permission denied."
|
|||||||
msgstr "Zugriff verweigert."
|
msgstr "Zugriff verweigert."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "License key and server URL are required."
|
msgid "Server Secret"
|
||||||
msgstr "Lizenzschlüssel und Server-URL sind erforderlich."
|
msgstr "Server-Geheimnis"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Please enter both license server URL and license key."
|
msgid "The shared secret for secure communication with the license server."
|
||||||
msgstr "Bitte geben Sie sowohl die Lizenzserver-URL als auch den Lizenzschlüssel ein."
|
msgstr "Das gemeinsame Geheimnis für die sichere Kommunikation mit dem Lizenzserver."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "License key, server URL, and server secret are required."
|
||||||
|
msgstr "Lizenzschlüssel, Server-URL und Server-Geheimnis sind erforderlich."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
#. translators: %d: Number of seconds to wait
|
||||||
|
msgid "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
msgstr "Anfragelimit überschritten. Bitte versuchen Sie es in %d Sekunden erneut."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Response signature verification failed. Please check your server secret."
|
||||||
|
msgstr "Überprüfung der Antwortsignatur fehlgeschlagen. Bitte überprüfen Sie Ihr Server-Geheimnis."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "An unexpected error occurred. Please try again."
|
||||||
|
msgstr "Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es erneut."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Please enter license server URL, license key, and server secret."
|
||||||
|
msgstr "Bitte geben Sie die Lizenzserver-URL, den Lizenzschlüssel und das Server-Geheimnis ein."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Validation failed."
|
msgid "Validation failed."
|
||||||
|
|||||||
Binary file not shown.
@@ -359,12 +359,33 @@ msgid "Permission denied."
|
|||||||
msgstr "Zugriff verweigert."
|
msgstr "Zugriff verweigert."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "License key and server URL are required."
|
msgid "Server Secret"
|
||||||
msgstr "Lizenzschlüssel und Server-URL sind erforderlich."
|
msgstr "Server-Geheimnis"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Please enter both license server URL and license key."
|
msgid "The shared secret for secure communication with the license server."
|
||||||
msgstr "Bitte gib sowohl die Lizenzserver-URL als auch den Lizenzschlüssel ein."
|
msgstr "Das gemeinsame Geheimnis für die sichere Kommunikation mit dem Lizenzserver."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "License key, server URL, and server secret are required."
|
||||||
|
msgstr "Lizenzschlüssel, Server-URL und Server-Geheimnis sind erforderlich."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
#. translators: %d: Number of seconds to wait
|
||||||
|
msgid "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
msgstr "Anfragelimit überschritten. Bitte versuche es in %d Sekunden erneut."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Response signature verification failed. Please check your server secret."
|
||||||
|
msgstr "Überprüfung der Antwortsignatur fehlgeschlagen. Bitte überprüfe dein Server-Geheimnis."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "An unexpected error occurred. Please try again."
|
||||||
|
msgstr "Ein unerwarteter Fehler ist aufgetreten. Bitte versuche es erneut."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Please enter license server URL, license key, and server secret."
|
||||||
|
msgstr "Bitte gib die Lizenzserver-URL, den Lizenzschlüssel und das Server-Geheimnis ein."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Validation failed."
|
msgid "Validation failed."
|
||||||
|
|||||||
Binary file not shown.
@@ -359,12 +359,33 @@ msgid "Permission denied."
|
|||||||
msgstr "Permission denied."
|
msgstr "Permission denied."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "License key and server URL are required."
|
msgid "Server Secret"
|
||||||
msgstr "License key and server URL are required."
|
msgstr "Server Secret"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Please enter both license server URL and license key."
|
msgid "The shared secret for secure communication with the license server."
|
||||||
msgstr "Please enter both license server URL and license key."
|
msgstr "The shared secret for secure communication with the license server."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "License key, server URL, and server secret are required."
|
||||||
|
msgstr "License key, server URL, and server secret are required."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
#. translators: %d: Number of seconds to wait
|
||||||
|
msgid "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
msgstr "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Response signature verification failed. Please check your server secret."
|
||||||
|
msgstr "Response signature verification failed. Please check your server secret."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "An unexpected error occurred. Please try again."
|
||||||
|
msgstr "An unexpected error occurred. Please try again."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Please enter license server URL, license key, and server secret."
|
||||||
|
msgstr "Please enter license server URL, license key, and server secret."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Validation failed."
|
msgid "Validation failed."
|
||||||
|
|||||||
Binary file not shown.
@@ -359,12 +359,33 @@ msgid "Permission denied."
|
|||||||
msgstr "Accès refusé."
|
msgstr "Accès refusé."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "License key and server URL are required."
|
msgid "Server Secret"
|
||||||
msgstr "La clé de licence et l'URL du serveur sont requises."
|
msgstr "Secret serveur"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Please enter both license server URL and license key."
|
msgid "The shared secret for secure communication with the license server."
|
||||||
msgstr "Veuillez entrer l'URL du serveur de licence et la clé de licence."
|
msgstr "Le secret partagé pour la communication sécurisée avec le serveur de licence."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "License key, server URL, and server secret are required."
|
||||||
|
msgstr "La clé de licence, l'URL du serveur et le secret serveur sont requis."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
#. translators: %d: Number of seconds to wait
|
||||||
|
msgid "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
msgstr "Limite de requêtes dépassée. Veuillez réessayer dans %d secondes."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Response signature verification failed. Please check your server secret."
|
||||||
|
msgstr "La vérification de la signature a échoué. Veuillez vérifier votre secret serveur."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "An unexpected error occurred. Please try again."
|
||||||
|
msgstr "Une erreur inattendue s'est produite. Veuillez réessayer."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Please enter license server URL, license key, and server secret."
|
||||||
|
msgstr "Veuillez entrer l'URL du serveur de licence, la clé de licence et le secret serveur."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Validation failed."
|
msgid "Validation failed."
|
||||||
|
|||||||
Binary file not shown.
@@ -359,12 +359,33 @@ msgid "Permission denied."
|
|||||||
msgstr "Accesso negato."
|
msgstr "Accesso negato."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "License key and server URL are required."
|
msgid "Server Secret"
|
||||||
msgstr "La chiave di licenza e l'URL del server sono obbligatori."
|
msgstr "Segreto del server"
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Please enter both license server URL and license key."
|
msgid "The shared secret for secure communication with the license server."
|
||||||
msgstr "Inserisci sia l'URL del server di licenza che la chiave di licenza."
|
msgstr "Il segreto condiviso per la comunicazione sicura con il server di licenza."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "License key, server URL, and server secret are required."
|
||||||
|
msgstr "La chiave di licenza, l'URL del server e il segreto del server sono obbligatori."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
#. translators: %d: Number of seconds to wait
|
||||||
|
msgid "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
msgstr "Limite di richieste superato. Per favore riprova tra %d secondi."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Response signature verification failed. Please check your server secret."
|
||||||
|
msgstr "Verifica della firma della risposta fallita. Per favore controlla il tuo segreto del server."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "An unexpected error occurred. Please try again."
|
||||||
|
msgstr "Si è verificato un errore imprevisto. Per favore riprova."
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Please enter license server URL, license key, and server secret."
|
||||||
|
msgstr "Inserisci l'URL del server di licenza, la chiave di licenza e il segreto del server."
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Validation failed."
|
msgid "Validation failed."
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
# This file is distributed under the GPL v2 or later.
|
# This file is distributed under the GPL v2 or later.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: WooCommerce Tier and Package Prices 1.2.7\n"
|
"Project-Id-Version: WooCommerce Tier and Package Prices 1.3.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
"Report-Msgid-Bugs-To: https://src.bundespruefstelle.ch/wc-tier-package-prices\n"
|
||||||
"POT-Creation-Date: 2025-12-30 00:00+0000\n"
|
"POT-Creation-Date: 2026-01-27 00:00+0000\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
@@ -332,11 +332,32 @@ msgid "Permission denied."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "License key and server URL are required."
|
msgid "Server Secret"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
msgid "Please enter both license server URL and license key."
|
msgid "The shared secret for secure communication with the license server."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "License key, server URL, and server secret are required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
#. translators: %d: Number of seconds to wait
|
||||||
|
msgid "Rate limit exceeded. Please try again in %d seconds."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Response signature verification failed. Please check your server secret."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "An unexpected error occurred. Please try again."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
msgid "Please enter license server URL, license key, and server secret."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class-wc-tpp-settings.php
|
#: includes/class-wc-tpp-settings.php
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
* Plugin Name: WooCommerce Tier and Package Prices
|
* Plugin Name: WooCommerce Tier and Package Prices
|
||||||
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-tier-package-prices
|
* Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-tier-package-prices
|
||||||
* Description: Add tier pricing and package prices to WooCommerce products with configurable quantities at fixed prices
|
* Description: Add tier pricing and package prices to WooCommerce products with configurable quantities at fixed prices
|
||||||
* Version: 1.3.0
|
* Version: 1.3.1
|
||||||
* Author: Marco Graetsch
|
* Author: Marco Graetsch
|
||||||
* Author URI: https://src.bundespruefstelle.ch/magdev
|
* Author URI: https://src.bundespruefstelle.ch/magdev
|
||||||
* Text Domain: wc-tier-package-prices
|
* Text Domain: wc-tier-package-prices
|
||||||
@@ -46,7 +46,7 @@ if (!function_exists('wc_tpp_php_version_notice')) {
|
|||||||
|
|
||||||
// Define plugin constants
|
// Define plugin constants
|
||||||
if (!defined('WC_TPP_VERSION')) {
|
if (!defined('WC_TPP_VERSION')) {
|
||||||
define('WC_TPP_VERSION', '1.3.0');
|
define('WC_TPP_VERSION', '1.3.1');
|
||||||
}
|
}
|
||||||
if (!defined('WC_TPP_PLUGIN_DIR')) {
|
if (!defined('WC_TPP_PLUGIN_DIR')) {
|
||||||
define('WC_TPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
define('WC_TPP_PLUGIN_DIR', plugin_dir_path(__FILE__));
|
||||||
|
|||||||
Reference in New Issue
Block a user