5 Commits

Author SHA1 Message Date
dcf3a03598 Update translations for v0.3.3
Added German translations for license test feature:
- Test license against API
- License Validation Test modal strings
- Valid/Invalid status messages
- Error code and message labels

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 11:44:43 +01:00
38a9f0d90f Add Test and Transfer actions to PHP fallback template
The PHP fallback template (used when Twig fails) was missing the Test
license action and Transfer modal that were present in the Twig template.

- Added Test license link to row actions in PHP fallback
- Added Transfer link to row actions in PHP fallback
- Added Test License modal with AJAX validation
- Added Transfer License modal
- Added JavaScript handlers for both modals

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 11:41:05 +01:00
8b87c954eb Add license test action to admin overview
Added a "Test" action button in the license overview that validates
licenses against the /validate REST API endpoint. Results are shown
in a modal with validation status, error codes, and license details.

- Added Test link in row actions for each license
- Created AJAX handler handleAjaxTestLicense() in AdminController
- Added test result modal with loading state and result display
- Shows valid/invalid status with detailed error information

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 11:37:06 +01:00
1bc643408e Fix version deactivation button not working (v0.3.3)
The toggle version button in the admin product versions table was not
deactivating versions due to incorrect parameter order in the
updateVersion() call. The isActive value was being passed to the
attachmentId parameter position instead.

- Fixed parameter order: updateVersion($id, null, !$active, null)
- Bumped version to 0.3.3
- Updated CHANGELOG.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:39:26 +01:00
875c8dd1c1 Update CLAUDE.md with v0.3.2 release information
- Added release package details and SHA256 checksum
- Documented composer.json change to use git repository URL
- Noted vendor .git directory exclusion in release packaging

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:22:27 +01:00
9 changed files with 835 additions and 403 deletions

View File

@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
## [0.3.3] - 2026-01-22
### Fixed
- Fixed version deactivation button not working in admin product versions table
- Corrected parameter order in `updateVersion()` call - `isActive` was being passed to `attachmentId` parameter
### Technical Details
- Bug in `VersionAdminController::ajaxToggleVersion()` - parameters were in wrong order
- Changed from `updateVersion($versionId, null, null, !$currentlyActive)` to `updateVersion($versionId, null, !$currentlyActive, null)`
## [0.3.2] - 2026-01-22 ## [0.3.2] - 2026-01-22
### Changed ### Changed
@@ -425,7 +437,8 @@ define('WC_LICENSE_SERVER_SECRET', 'your-secure-random-string-min-32-chars');
- WordPress REST API integration - WordPress REST API integration
- Custom WooCommerce product type extending WC_Product - Custom WooCommerce product type extending WC_Product
[Unreleased]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.3.2...HEAD [Unreleased]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.3.3...HEAD
[0.3.3]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.3.2...v0.3.3
[0.3.2]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.3.1...v0.3.2 [0.3.2]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.3.1...v0.3.2
[0.3.1]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.3.0...v0.3.1 [0.3.1]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.3.0...v0.3.1
[0.3.0]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.2.2...v0.3.0 [0.3.0]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.2.2...v0.3.0

View File

@@ -869,3 +869,12 @@ Updated OpenAPI specification to document response signing feature added in v0.2
- All endpoint 200 responses now reference optional signature headers - All endpoint 200 responses now reference optional signature headers
- Header definitions added to components section - Header definitions added to components section
- API description explains SecureLicenseClient usage for signature verification - API description explains SecureLicenseClient usage for signature verification
- Changed `magdev/wc-licensed-product-client` from local path to git repository URL
- Composer now fetches from: `https://src.bundespruefstelle.ch/magdev/wc-licensed-product-client.git`
- Release package excludes vendor `.git` directories
**Release v0.3.2:**
- Created release package: `releases/wc-licensed-product-0.3.2.zip` (810 KB)
- SHA256: `ca33c81516b5dcf4a80b3192d8ae4ad39a7bf67196a1f729b563c5ae01b1d39c`
- Tagged as `v0.3.2` and pushed to `main` branch

View File

@@ -5,7 +5,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WC Licensed Product 0.3.1\n" "Project-Id-Version: WC Licensed Product 0.3.1\n"
"Report-Msgid-Bugs-To: magdev3.0@gmail.com\n" "Report-Msgid-Bugs-To: magdev3.0@gmail.com\n"
"POT-Creation-Date: 2026-01-22 19:11+0100\n" "POT-Creation-Date: 2026-01-23 11:41+0100\n"
"PO-Revision-Date: 2026-01-22T17:15:00+00:00\n" "PO-Revision-Date: 2026-01-22T17:15:00+00:00\n"
"Last-Translator: Marco Graetsch <magdev3.0@gmail.com>\n" "Last-Translator: Marco Graetsch <magdev3.0@gmail.com>\n"
"Language-Team: German (Switzerland) <de_CH@li.org>\n" "Language-Team: German (Switzerland) <de_CH@li.org>\n"
@@ -47,16 +47,16 @@ msgid "example.com"
msgstr "beispiel.ch" msgstr "beispiel.ch"
#: src/Admin/OrderLicenseController.php:118 #: src/Admin/OrderLicenseController.php:118
#: src/Admin/OrderLicenseController.php:182 src/Admin/AdminController.php:147 #: src/Admin/OrderLicenseController.php:182 src/Admin/AdminController.php:150
#: src/Admin/AdminController.php:1302 src/Admin/AdminController.php:1322 #: src/Admin/AdminController.php:1329 src/Admin/AdminController.php:1349
#: src/Admin/AdminController.php:1343 #: src/Admin/AdminController.php:1370
msgid "Save" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
#: src/Admin/OrderLicenseController.php:127 #: src/Admin/OrderLicenseController.php:127
#: src/Admin/OrderLicenseController.php:222 src/Admin/AdminController.php:73 #: src/Admin/OrderLicenseController.php:222 src/Admin/AdminController.php:76
#: src/Admin/AdminController.php:74 src/Admin/AdminController.php:87 #: src/Admin/AdminController.php:77 src/Admin/AdminController.php:90
#: src/Admin/AdminController.php:1162 src/Frontend/AccountController.php:90 #: src/Admin/AdminController.php:1189 src/Frontend/AccountController.php:90
msgid "Licenses" msgid "Licenses"
msgstr "Lizenzen" msgstr "Lizenzen"
@@ -79,39 +79,42 @@ msgstr ""
"Lizenzen werden generiert, sobald die Bestellung als bezahlt/abgeschlossen " "Lizenzen werden generiert, sobald die Bestellung als bezahlt/abgeschlossen "
"markiert wird." "markiert wird."
#: src/Admin/OrderLicenseController.php:144 src/Admin/AdminController.php:1253 #: src/Admin/OrderLicenseController.php:144 src/Admin/AdminController.php:1280
#: src/Admin/AdminController.php:1391 src/Admin/SettingsController.php:142 #: src/Admin/AdminController.php:1431 src/Admin/AdminController.php:1480
#: src/Admin/SettingsController.php:142
#: src/Email/LicenseEmailController.php:230 #: src/Email/LicenseEmailController.php:230
msgid "License Key" msgid "License Key"
msgstr "Lizenzschlüssel" msgstr "Lizenzschlüssel"
#: src/Admin/OrderLicenseController.php:145 src/Admin/AdminController.php:1254 #: src/Admin/OrderLicenseController.php:145 src/Admin/AdminController.php:1281
#: src/Admin/AdminController.php:1392 src/Email/LicenseEmailController.php:229 #: src/Admin/AdminController.php:1432 src/Admin/AdminController.php:1597
#: src/Email/LicenseEmailController.php:229
msgid "Product" msgid "Product"
msgstr "Produkt" msgstr "Produkt"
#: src/Admin/OrderLicenseController.php:146 src/Admin/AdminController.php:1256 #: src/Admin/OrderLicenseController.php:146 src/Admin/AdminController.php:1283
#: src/Admin/AdminController.php:1394 #: src/Admin/AdminController.php:1434 src/Admin/AdminController.php:1484
msgid "Domain" msgid "Domain"
msgstr "Domain" msgstr "Domain"
#: src/Admin/OrderLicenseController.php:147 src/Admin/AdminController.php:1257 #: src/Admin/OrderLicenseController.php:147 src/Admin/AdminController.php:1284
#: src/Admin/AdminController.php:1395 src/Admin/VersionAdminController.php:140 #: src/Admin/AdminController.php:1435 src/Admin/VersionAdminController.php:140
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
#: src/Admin/OrderLicenseController.php:148 src/Admin/AdminController.php:1259 #: src/Admin/OrderLicenseController.php:148 src/Admin/AdminController.php:1286
#: src/Admin/AdminController.php:1397 src/Email/LicenseEmailController.php:231 #: src/Admin/AdminController.php:1437 src/Admin/AdminController.php:1600
#: src/Admin/AdminController.php:1602 src/Email/LicenseEmailController.php:231
msgid "Expires" msgid "Expires"
msgstr "Läuft ab" msgstr "Läuft ab"
#: src/Admin/OrderLicenseController.php:149 src/Admin/AdminController.php:1260 #: src/Admin/OrderLicenseController.php:149 src/Admin/AdminController.php:1287
#: src/Admin/AdminController.php:1398 src/Admin/VersionAdminController.php:142 #: src/Admin/AdminController.php:1438 src/Admin/VersionAdminController.php:142
msgid "Actions" msgid "Actions"
msgstr "Aktionen" msgstr "Aktionen"
#: src/Admin/OrderLicenseController.php:168 src/Admin/AdminController.php:192 #: src/Admin/OrderLicenseController.php:168 src/Admin/AdminController.php:195
#: src/Admin/AdminController.php:987 #: src/Admin/AdminController.php:1014
msgid "Unknown" msgid "Unknown"
msgstr "Unbekannt" msgstr "Unbekannt"
@@ -119,15 +122,17 @@ msgstr "Unbekannt"
msgid "Edit domain" msgid "Edit domain"
msgstr "Domain bearbeiten" msgstr "Domain bearbeiten"
#: src/Admin/OrderLicenseController.php:185 src/Admin/AdminController.php:146 #: src/Admin/OrderLicenseController.php:185 src/Admin/AdminController.php:149
#: src/Admin/AdminController.php:1303 src/Admin/AdminController.php:1323 #: src/Admin/AdminController.php:1330 src/Admin/AdminController.php:1350
#: src/Admin/AdminController.php:1344 src/Frontend/AccountController.php:271 #: src/Admin/AdminController.php:1371 src/Admin/AdminController.php:1526
#: src/Frontend/AccountController.php:271
msgid "Cancel" msgid "Cancel"
msgstr "Abbrechen" msgstr "Abbrechen"
#: src/Admin/OrderLicenseController.php:201 src/Admin/AdminController.php:148 #: src/Admin/OrderLicenseController.php:201 src/Admin/AdminController.php:151
#: src/Admin/AdminController.php:263 src/Admin/AdminController.php:1335 #: src/Admin/AdminController.php:266 src/Admin/AdminController.php:1362
#: src/Admin/SettingsController.php:192 src/Product/LicensedProductType.php:104 #: src/Admin/AdminController.php:1602 src/Admin/SettingsController.php:192
#: src/Product/LicensedProductType.php:104
#: src/Product/LicensedProductType.php:152 #: src/Product/LicensedProductType.php:152
msgid "Lifetime" msgid "Lifetime"
msgstr "Lebenslang" msgstr "Lebenslang"
@@ -143,7 +148,7 @@ msgstr ""
"Für weitere Aktionen (widerrufen, verlängern, löschen), gehen Sie zur Seite " "Für weitere Aktionen (widerrufen, verlängern, löschen), gehen Sie zur Seite "
"%s." "%s."
#: src/Admin/OrderLicenseController.php:285 src/Admin/AdminController.php:141 #: src/Admin/OrderLicenseController.php:285 src/Admin/AdminController.php:144
msgid "Saving..." msgid "Saving..."
msgstr "Speichere..." msgstr "Speichere..."
@@ -162,10 +167,10 @@ msgid "Please enter a valid domain."
msgstr "Bitte geben Sie eine gültige Domain ein." msgstr "Bitte geben Sie eine gültige Domain ein."
#: src/Admin/OrderLicenseController.php:301 #: src/Admin/OrderLicenseController.php:301
#: src/Admin/OrderLicenseController.php:340 src/Admin/AdminController.php:170 #: src/Admin/OrderLicenseController.php:340 src/Admin/AdminController.php:173
#: src/Admin/AdminController.php:210 src/Admin/AdminController.php:246 #: src/Admin/AdminController.php:213 src/Admin/AdminController.php:249
#: src/Admin/AdminController.php:298 src/Admin/AdminController.php:336 #: src/Admin/AdminController.php:301 src/Admin/AdminController.php:339
#: src/Admin/VersionAdminController.php:259 #: src/Admin/AdminController.php:369 src/Admin/VersionAdminController.php:259
#: src/Admin/VersionAdminController.php:328 #: src/Admin/VersionAdminController.php:328
#: src/Admin/VersionAdminController.php:354 #: src/Admin/VersionAdminController.php:354
msgid "Permission denied." msgid "Permission denied."
@@ -184,13 +189,13 @@ msgstr "Ungültiges Domain-Format."
msgid "Order domain updated." msgid "Order domain updated."
msgstr "Bestellungs-Domain aktualisiert." msgstr "Bestellungs-Domain aktualisiert."
#: src/Admin/OrderLicenseController.php:347 src/Admin/AdminController.php:217 #: src/Admin/OrderLicenseController.php:347 src/Admin/AdminController.php:220
#: src/Admin/AdminController.php:253 src/Admin/AdminController.php:305 #: src/Admin/AdminController.php:256 src/Admin/AdminController.php:308
#: src/Admin/AdminController.php:342 #: src/Admin/AdminController.php:345
msgid "Invalid license ID." msgid "Invalid license ID."
msgstr "Ungültige Lizenz-ID." msgstr "Ungültige Lizenz-ID."
#: src/Admin/OrderLicenseController.php:351 src/Admin/AdminController.php:309 #: src/Admin/OrderLicenseController.php:351 src/Admin/AdminController.php:312
msgid "Domain cannot be empty." msgid "Domain cannot be empty."
msgstr "Domain darf nicht leer sein." msgstr "Domain darf nicht leer sein."
@@ -208,456 +213,533 @@ msgstr "Lizenz-Domain aktualisiert."
msgid "Failed to update license domain." msgid "Failed to update license domain."
msgstr "Lizenz-Domain konnte nicht aktualisiert werden." msgstr "Lizenz-Domain konnte nicht aktualisiert werden."
#: src/Admin/AdminController.php:90 #: src/Admin/AdminController.php:93
msgid "Overview" msgid "Overview"
msgstr "Übersicht" msgstr "Übersicht"
#: src/Admin/AdminController.php:138 #: src/Admin/AdminController.php:141
msgid "No licenses found" msgid "No licenses found"
msgstr "Keine Lizenzen gefunden" msgstr "Keine Lizenzen gefunden"
#: src/Admin/AdminController.php:139 #: src/Admin/AdminController.php:142
msgid "Searching..." msgid "Searching..."
msgstr "Suche..." msgstr "Suche..."
#: src/Admin/AdminController.php:140 #: src/Admin/AdminController.php:143
msgid "Search failed" msgid "Search failed"
msgstr "Suche fehlgeschlagen" msgstr "Suche fehlgeschlagen"
#: src/Admin/AdminController.php:142 #: src/Admin/AdminController.php:145
msgid "Saved" msgid "Saved"
msgstr "Gespeichert" msgstr "Gespeichert"
#: src/Admin/AdminController.php:143 #: src/Admin/AdminController.php:146
msgid "Save failed" msgid "Save failed"
msgstr "Speichern fehlgeschlagen" msgstr "Speichern fehlgeschlagen"
#: src/Admin/AdminController.php:144 #: src/Admin/AdminController.php:147
msgid "" msgid ""
"Are you sure you want to revoke this license? This action cannot be undone." "Are you sure you want to revoke this license? This action cannot be undone."
msgstr "" msgstr ""
"Sind Sie sicher, dass Sie diese Lizenz widerrufen möchten? Diese Aktion kann " "Sind Sie sicher, dass Sie diese Lizenz widerrufen möchten? Diese Aktion kann "
"nicht rückgängig gemacht werden." "nicht rückgängig gemacht werden."
#: src/Admin/AdminController.php:145 src/Admin/AdminController.php:1297 #: src/Admin/AdminController.php:148 src/Admin/AdminController.php:1324
#: src/Admin/AdminController.php:1312 src/Admin/AdminController.php:1338 #: src/Admin/AdminController.php:1339 src/Admin/AdminController.php:1365
msgid "Edit" msgid "Edit"
msgstr "Bearbeiten" msgstr "Bearbeiten"
#: src/Admin/AdminController.php:149 src/Frontend/AccountController.php:309 #: src/Admin/AdminController.php:152 src/Frontend/AccountController.php:309
msgid "Copied!" msgid "Copied!"
msgstr "Kopiert!" msgstr "Kopiert!"
#: src/Admin/AdminController.php:150 src/Frontend/AccountController.php:310 #: src/Admin/AdminController.php:153 src/Frontend/AccountController.php:310
msgid "Copy failed" msgid "Copy failed"
msgstr "Kopieren fehlgeschlagen" msgstr "Kopieren fehlgeschlagen"
#: src/Admin/AdminController.php:153 src/Admin/AdminController.php:875 #: src/Admin/AdminController.php:156 src/Admin/AdminController.php:902
#: src/Admin/AdminController.php:1194 src/Admin/AdminController.php:1317 #: src/Admin/AdminController.php:1221 src/Admin/AdminController.php:1344
#: src/Admin/VersionAdminController.php:182 #: src/Admin/VersionAdminController.php:182
#: src/Admin/VersionAdminController.php:413 #: src/Admin/VersionAdminController.php:413
msgid "Active" msgid "Active"
msgstr "Aktiv" msgstr "Aktiv"
#: src/Admin/AdminController.php:154 src/Admin/AdminController.php:882 #: src/Admin/AdminController.php:157 src/Admin/AdminController.php:909
#: src/Admin/AdminController.php:1195 src/Admin/AdminController.php:1318 #: src/Admin/AdminController.php:1222 src/Admin/AdminController.php:1345
#: src/Admin/VersionAdminController.php:182 #: src/Admin/VersionAdminController.php:182
#: src/Admin/VersionAdminController.php:413 #: src/Admin/VersionAdminController.php:413
msgid "Inactive" msgid "Inactive"
msgstr "Inaktiv" msgstr "Inaktiv"
#: src/Admin/AdminController.php:155 src/Admin/AdminController.php:889 #: src/Admin/AdminController.php:158 src/Admin/AdminController.php:916
#: src/Admin/AdminController.php:1196 src/Admin/AdminController.php:1319 #: src/Admin/AdminController.php:1223 src/Admin/AdminController.php:1346
msgid "Expired" msgid "Expired"
msgstr "Abgelaufen" msgstr "Abgelaufen"
#: src/Admin/AdminController.php:156 src/Admin/AdminController.php:896 #: src/Admin/AdminController.php:159 src/Admin/AdminController.php:923
#: src/Admin/AdminController.php:1197 src/Admin/AdminController.php:1320 #: src/Admin/AdminController.php:1224 src/Admin/AdminController.php:1347
msgid "Revoked" msgid "Revoked"
msgstr "Widerrufen" msgstr "Widerrufen"
#: src/Admin/AdminController.php:193 src/Admin/AdminController.php:991 #: src/Admin/AdminController.php:196 src/Admin/AdminController.php:1018
msgid "Guest" msgid "Guest"
msgstr "Gast" msgstr "Gast"
#: src/Admin/AdminController.php:222 #: src/Admin/AdminController.php:225
msgid "Invalid status." msgid "Invalid status."
msgstr "Ungültiger Status." msgstr "Ungültiger Status."
#: src/Admin/AdminController.php:229 #: src/Admin/AdminController.php:232
msgid "Status updated successfully." msgid "Status updated successfully."
msgstr "Status erfolgreich aktualisiert." msgstr "Status erfolgreich aktualisiert."
#: src/Admin/AdminController.php:234 #: src/Admin/AdminController.php:237
msgid "Failed to update status." msgid "Failed to update status."
msgstr "Status konnte nicht aktualisiert werden." msgstr "Status konnte nicht aktualisiert werden."
#: src/Admin/AdminController.php:261 #: src/Admin/AdminController.php:264
msgid "License set to lifetime." msgid "License set to lifetime."
msgstr "Lizenz auf lebenslang gesetzt." msgstr "Lizenz auf lebenslang gesetzt."
#: src/Admin/AdminController.php:266 src/Admin/AdminController.php:283 #: src/Admin/AdminController.php:269 src/Admin/AdminController.php:286
msgid "Failed to update expiry date." msgid "Failed to update expiry date."
msgstr "Ablaufdatum konnte nicht aktualisiert werden." msgstr "Ablaufdatum konnte nicht aktualisiert werden."
#: src/Admin/AdminController.php:278 #: src/Admin/AdminController.php:281
msgid "Expiry date updated successfully." msgid "Expiry date updated successfully."
msgstr "Ablaufdatum erfolgreich aktualisiert." msgstr "Ablaufdatum erfolgreich aktualisiert."
#: src/Admin/AdminController.php:286 #: src/Admin/AdminController.php:289
msgid "Invalid date format." msgid "Invalid date format."
msgstr "Ungültiges Datumsformat." msgstr "Ungültiges Datumsformat."
#: src/Admin/AdminController.php:320 #: src/Admin/AdminController.php:323
msgid "Domain updated successfully." msgid "Domain updated successfully."
msgstr "Domain erfolgreich aktualisiert." msgstr "Domain erfolgreich aktualisiert."
#: src/Admin/AdminController.php:324 #: src/Admin/AdminController.php:327
msgid "Failed to update domain." msgid "Failed to update domain."
msgstr "Domain konnte nicht aktualisiert werden." msgstr "Domain konnte nicht aktualisiert werden."
#: src/Admin/AdminController.php:349 src/Admin/AdminController.php:1056 #: src/Admin/AdminController.php:352 src/Admin/AdminController.php:1083
msgid "License revoked successfully." msgid "License revoked successfully."
msgstr "Lizenz erfolgreich widerrufen." msgstr "Lizenz erfolgreich widerrufen."
#: src/Admin/AdminController.php:354 #: src/Admin/AdminController.php:357
msgid "Failed to revoke license." msgid "Failed to revoke license."
msgstr "Lizenz konnte nicht widerrufen werden." msgstr "Lizenz konnte nicht widerrufen werden."
#: src/Admin/AdminController.php:428 src/Admin/AdminController.php:448 #: src/Admin/AdminController.php:376
#: src/Admin/AdminController.php:466 src/Admin/AdminController.php:484 msgid "License key and domain are required."
#: src/Admin/AdminController.php:504 src/Admin/AdminController.php:522 msgstr "Lizenzschlüssel und Domain sind erforderlich."
#: src/Admin/AdminController.php:589 src/Admin/AdminController.php:779
#: src/Admin/AdminController.php:455 src/Admin/AdminController.php:475
#: src/Admin/AdminController.php:493 src/Admin/AdminController.php:511
#: src/Admin/AdminController.php:531 src/Admin/AdminController.php:549
#: src/Admin/AdminController.php:616 src/Admin/AdminController.php:806
#: src/Admin/SettingsController.php:454 src/Frontend/AccountController.php:326 #: src/Admin/SettingsController.php:454 src/Frontend/AccountController.php:326
msgid "Security check failed." msgid "Security check failed."
msgstr "Sicherheitsüberprüfung fehlgeschlagen." msgstr "Sicherheitsüberprüfung fehlgeschlagen."
#: src/Admin/AdminController.php:549 #: src/Admin/AdminController.php:576
msgid "You do not have permission to export licenses." msgid "You do not have permission to export licenses."
msgstr "Sie haben keine Berechtigung, Lizenzen zu exportieren." msgstr "Sie haben keine Berechtigung, Lizenzen zu exportieren."
#: src/Admin/AdminController.php:593 #: src/Admin/AdminController.php:620
msgid "You do not have permission to import licenses." msgid "You do not have permission to import licenses."
msgstr "Sie haben keine Berechtigung, Lizenzen zu importieren." msgstr "Sie haben keine Berechtigung, Lizenzen zu importieren."
#: src/Admin/AdminController.php:713 #: src/Admin/AdminController.php:740
msgid "Row missing domain" msgid "Row missing domain"
msgstr "Zeile ohne Domain" msgstr "Zeile ohne Domain"
#: src/Admin/AdminController.php:717 #: src/Admin/AdminController.php:744
msgid "Row missing valid product ID" msgid "Row missing valid product ID"
msgstr "Zeile ohne gültige Produkt-ID" msgstr "Zeile ohne gültige Produkt-ID"
#: src/Admin/AdminController.php:770 #: src/Admin/AdminController.php:797
#, php-format #, php-format
msgid "Failed to import license for domain %s" msgid "Failed to import license for domain %s"
msgstr "Import der Lizenz für Domain %s fehlgeschlagen" msgstr "Import der Lizenz für Domain %s fehlgeschlagen"
#: src/Admin/AdminController.php:860 #: src/Admin/AdminController.php:887
msgid "License Dashboard" msgid "License Dashboard"
msgstr "Lizenz-Dashboard" msgstr "Lizenz-Dashboard"
#: src/Admin/AdminController.php:868 #: src/Admin/AdminController.php:895
msgid "Total Licenses" msgid "Total Licenses"
msgstr "Lizenzen insgesamt" msgstr "Lizenzen insgesamt"
#: src/Admin/AdminController.php:905 #: src/Admin/AdminController.php:932
msgid "Attention:" msgid "Attention:"
msgstr "Achtung:" msgstr "Achtung:"
#: src/Admin/AdminController.php:910 #: src/Admin/AdminController.php:937
#, php-format #, php-format
msgid "%d license is expiring within the next 30 days." msgid "%d license is expiring within the next 30 days."
msgid_plural "%d licenses are expiring within the next 30 days." msgid_plural "%d licenses are expiring within the next 30 days."
msgstr[0] "%d Lizenz läuft innerhalb der nächsten 30 Tage ab." msgstr[0] "%d Lizenz läuft innerhalb der nächsten 30 Tage ab."
msgstr[1] "%d Lizenzen laufen innerhalb der nächsten 30 Tage ab." msgstr[1] "%d Lizenzen laufen innerhalb der nächsten 30 Tage ab."
#: src/Admin/AdminController.php:918 #: src/Admin/AdminController.php:945
msgid "View Licenses" msgid "View Licenses"
msgstr "Lizenzen anzeigen" msgstr "Lizenzen anzeigen"
#: src/Admin/AdminController.php:924 #: src/Admin/AdminController.php:951
msgid "Quick Actions" msgid "Quick Actions"
msgstr "Schnellaktionen" msgstr "Schnellaktionen"
#: src/Admin/AdminController.php:928 #: src/Admin/AdminController.php:955
msgid "Manage Licenses" msgid "Manage Licenses"
msgstr "Lizenzen verwalten" msgstr "Lizenzen verwalten"
#: src/Admin/AdminController.php:932 #: src/Admin/AdminController.php:959
msgid "Export to CSV" msgid "Export to CSV"
msgstr "Als CSV exportieren" msgstr "Als CSV exportieren"
#: src/Admin/AdminController.php:936 wc-licensed-product.php:137 #: src/Admin/AdminController.php:963 wc-licensed-product.php:137
msgid "Settings" msgid "Settings"
msgstr "Einstellungen" msgstr "Einstellungen"
#: src/Admin/AdminController.php:1050 #: src/Admin/AdminController.php:1077
msgid "License updated successfully." msgid "License updated successfully."
msgstr "Lizenz erfolgreich aktualisiert." msgstr "Lizenz erfolgreich aktualisiert."
#: src/Admin/AdminController.php:1053 #: src/Admin/AdminController.php:1080
msgid "License deleted successfully." msgid "License deleted successfully."
msgstr "Lizenz erfolgreich gelöscht." msgstr "Lizenz erfolgreich gelöscht."
#: src/Admin/AdminController.php:1059 #: src/Admin/AdminController.php:1086
msgid "License extended successfully." msgid "License extended successfully."
msgstr "Lizenz erfolgreich verlängert." msgstr "Lizenz erfolgreich verlängert."
#: src/Admin/AdminController.php:1062 #: src/Admin/AdminController.php:1089
msgid "License set to lifetime successfully." msgid "License set to lifetime successfully."
msgstr "Lizenz erfolgreich auf lebenslang gesetzt." msgstr "Lizenz erfolgreich auf lebenslang gesetzt."
#: src/Admin/AdminController.php:1068 #: src/Admin/AdminController.php:1095
#, php-format #, php-format
msgid "%d license activated." msgid "%d license activated."
msgid_plural "%d licenses activated." msgid_plural "%d licenses activated."
msgstr[0] "%d Lizenz aktiviert." msgstr[0] "%d Lizenz aktiviert."
msgstr[1] "%d Lizenzen aktiviert." msgstr[1] "%d Lizenzen aktiviert."
#: src/Admin/AdminController.php:1076 #: src/Admin/AdminController.php:1103
#, php-format #, php-format
msgid "%d license deactivated." msgid "%d license deactivated."
msgid_plural "%d licenses deactivated." msgid_plural "%d licenses deactivated."
msgstr[0] "%d Lizenz deaktiviert." msgstr[0] "%d Lizenz deaktiviert."
msgstr[1] "%d Lizenzen deaktiviert." msgstr[1] "%d Lizenzen deaktiviert."
#: src/Admin/AdminController.php:1084 #: src/Admin/AdminController.php:1111
#, php-format #, php-format
msgid "%d license revoked." msgid "%d license revoked."
msgid_plural "%d licenses revoked." msgid_plural "%d licenses revoked."
msgstr[0] "%d Lizenz widerrufen." msgstr[0] "%d Lizenz widerrufen."
msgstr[1] "%d Lizenzen widerrufen." msgstr[1] "%d Lizenzen widerrufen."
#: src/Admin/AdminController.php:1092 #: src/Admin/AdminController.php:1119
#, php-format #, php-format
msgid "%d license deleted." msgid "%d license deleted."
msgid_plural "%d licenses deleted." msgid_plural "%d licenses deleted."
msgstr[0] "%d Lizenz gelöscht." msgstr[0] "%d Lizenz gelöscht."
msgstr[1] "%d Lizenzen gelöscht." msgstr[1] "%d Lizenzen gelöscht."
#: src/Admin/AdminController.php:1100 #: src/Admin/AdminController.php:1127
#, php-format #, php-format
msgid "%d license extended." msgid "%d license extended."
msgid_plural "%d licenses extended." msgid_plural "%d licenses extended."
msgstr[0] "%d Lizenz verlängert." msgstr[0] "%d Lizenz verlängert."
msgstr[1] "%d Lizenzen verlängert." msgstr[1] "%d Lizenzen verlängert."
#: src/Admin/AdminController.php:1105 #: src/Admin/AdminController.php:1132
msgid "License transferred to new domain successfully." msgid "License transferred to new domain successfully."
msgstr "Lizenz erfolgreich auf neue Domain übertragen." msgstr "Lizenz erfolgreich auf neue Domain übertragen."
#: src/Admin/AdminController.php:1108 #: src/Admin/AdminController.php:1135
msgid "Failed to transfer license. The license may be revoked or invalid." msgid "Failed to transfer license. The license may be revoked or invalid."
msgstr "" msgstr ""
"Lizenzübertragung fehlgeschlagen. Die Lizenz könnte widerrufen oder ungültig " "Lizenzübertragung fehlgeschlagen. Die Lizenz könnte widerrufen oder ungültig "
"sein." "sein."
#: src/Admin/AdminController.php:1111 #: src/Admin/AdminController.php:1138
msgid "No licenses to export." msgid "No licenses to export."
msgstr "Keine Lizenzen zum Exportieren." msgstr "Keine Lizenzen zum Exportieren."
#: src/Admin/AdminController.php:1121 #: src/Admin/AdminController.php:1148
#, php-format #, php-format
msgid "%d license imported." msgid "%d license imported."
msgid_plural "%d licenses imported." msgid_plural "%d licenses imported."
msgstr[0] "%d Lizenz importiert." msgstr[0] "%d Lizenz importiert."
msgstr[1] "%d Lizenzen importiert." msgstr[1] "%d Lizenzen importiert."
#: src/Admin/AdminController.php:1128 #: src/Admin/AdminController.php:1155
#, php-format #, php-format
msgid "%d updated." msgid "%d updated."
msgid_plural "%d updated." msgid_plural "%d updated."
msgstr[0] "%d aktualisiert." msgstr[0] "%d aktualisiert."
msgstr[1] "%d aktualisiert." msgstr[1] "%d aktualisiert."
#: src/Admin/AdminController.php:1136 #: src/Admin/AdminController.php:1163
#, php-format #, php-format
msgid "%d skipped." msgid "%d skipped."
msgid_plural "%d skipped." msgid_plural "%d skipped."
msgstr[0] "%d übersprungen." msgstr[0] "%d übersprungen."
msgstr[1] "%d übersprungen." msgstr[1] "%d übersprungen."
#: src/Admin/AdminController.php:1144 #: src/Admin/AdminController.php:1171
#, php-format #, php-format
msgid "%d error." msgid "%d error."
msgid_plural "%d errors." msgid_plural "%d errors."
msgstr[0] "%d Fehler." msgstr[0] "%d Fehler."
msgstr[1] "%d Fehler." msgstr[1] "%d Fehler."
#: src/Admin/AdminController.php:1165 #: src/Admin/AdminController.php:1192
msgid "Export CSV" msgid "Export CSV"
msgstr "CSV exportieren" msgstr "CSV exportieren"
#: src/Admin/AdminController.php:1169 #: src/Admin/AdminController.php:1196
msgid "Import CSV" msgid "Import CSV"
msgstr "CSV importieren" msgstr "CSV importieren"
#: src/Admin/AdminController.php:1184 #: src/Admin/AdminController.php:1211
msgid "Search Licenses" msgid "Search Licenses"
msgstr "Lizenzen durchsuchen" msgstr "Lizenzen durchsuchen"
#: src/Admin/AdminController.php:1186 #: src/Admin/AdminController.php:1213
msgid "Search license key or domain..." msgid "Search license key or domain..."
msgstr "Lizenzschlüssel oder Domain suchen..." msgstr "Lizenzschlüssel oder Domain suchen..."
#: src/Admin/AdminController.php:1187 #: src/Admin/AdminController.php:1214
msgid "Search" msgid "Search"
msgstr "Suchen" msgstr "Suchen"
#: src/Admin/AdminController.php:1193 #: src/Admin/AdminController.php:1220
msgid "All Statuses" msgid "All Statuses"
msgstr "Alle Status" msgstr "Alle Status"
#: src/Admin/AdminController.php:1201 #: src/Admin/AdminController.php:1228
msgid "All Products" msgid "All Products"
msgstr "Alle Produkte" msgstr "Alle Produkte"
#: src/Admin/AdminController.php:1207 #: src/Admin/AdminController.php:1234
msgid "Filter" msgid "Filter"
msgstr "Filtern" msgstr "Filtern"
#: src/Admin/AdminController.php:1210 #: src/Admin/AdminController.php:1237
msgid "Clear" msgid "Clear"
msgstr "Zurücksetzen" msgstr "Zurücksetzen"
#: src/Admin/AdminController.php:1215 #: src/Admin/AdminController.php:1242
msgid "item" msgid "item"
msgstr "Eintrag" msgstr "Eintrag"
#: src/Admin/AdminController.php:1215 #: src/Admin/AdminController.php:1242
msgid "items" msgid "items"
msgstr "Einträge" msgstr "Einträge"
#: src/Admin/AdminController.php:1221 #: src/Admin/AdminController.php:1248
msgid "Showing" msgid "Showing"
msgstr "Anzeige" msgstr "Anzeige"
#: src/Admin/AdminController.php:1221 #: src/Admin/AdminController.php:1248
msgid "license" msgid "license"
msgstr "Lizenz" msgstr "Lizenz"
#: src/Admin/AdminController.php:1221 #: src/Admin/AdminController.php:1248
msgid "licenses" msgid "licenses"
msgstr "Lizenzen" msgstr "Lizenzen"
#: src/Admin/AdminController.php:1223 #: src/Admin/AdminController.php:1250
msgid "filtered" msgid "filtered"
msgstr "gefiltert" msgstr "gefiltert"
#: src/Admin/AdminController.php:1225 #: src/Admin/AdminController.php:1252
msgid "View Dashboard" msgid "View Dashboard"
msgstr "Dashboard anzeigen" msgstr "Dashboard anzeigen"
#: src/Admin/AdminController.php:1234 src/Admin/AdminController.php:1406 #: src/Admin/AdminController.php:1261 src/Admin/AdminController.php:1446
msgid "Bulk Actions" msgid "Bulk Actions"
msgstr "Massenaktionen" msgstr "Massenaktionen"
#: src/Admin/AdminController.php:1235 src/Admin/AdminController.php:1407 #: src/Admin/AdminController.php:1262 src/Admin/AdminController.php:1447
#: src/Admin/VersionAdminController.php:188 #: src/Admin/VersionAdminController.php:188
#: src/Admin/VersionAdminController.php:419 #: src/Admin/VersionAdminController.php:419
msgid "Activate" msgid "Activate"
msgstr "Aktivieren" msgstr "Aktivieren"
#: src/Admin/AdminController.php:1236 src/Admin/AdminController.php:1408 #: src/Admin/AdminController.php:1263 src/Admin/AdminController.php:1448
#: src/Admin/VersionAdminController.php:188 #: src/Admin/VersionAdminController.php:188
#: src/Admin/VersionAdminController.php:419 #: src/Admin/VersionAdminController.php:419
msgid "Deactivate" msgid "Deactivate"
msgstr "Deaktivieren" msgstr "Deaktivieren"
#: src/Admin/AdminController.php:1237 src/Admin/AdminController.php:1368 #: src/Admin/AdminController.php:1264 src/Admin/AdminController.php:1408
#: src/Admin/AdminController.php:1409 #: src/Admin/AdminController.php:1449
msgid "Revoke" msgid "Revoke"
msgstr "Widerrufen" msgstr "Widerrufen"
#: src/Admin/AdminController.php:1238 src/Admin/AdminController.php:1410 #: src/Admin/AdminController.php:1265 src/Admin/AdminController.php:1450
msgid "Extend 30 days" msgid "Extend 30 days"
msgstr "30 Tage verlängern" msgstr "30 Tage verlängern"
#: src/Admin/AdminController.php:1239 src/Admin/AdminController.php:1411 #: src/Admin/AdminController.php:1266 src/Admin/AdminController.php:1451
msgid "Extend 90 days" msgid "Extend 90 days"
msgstr "90 Tage verlängern" msgstr "90 Tage verlängern"
#: src/Admin/AdminController.php:1240 src/Admin/AdminController.php:1412 #: src/Admin/AdminController.php:1267 src/Admin/AdminController.php:1452
msgid "Extend 1 year" msgid "Extend 1 year"
msgstr "1 Jahr verlängern" msgstr "1 Jahr verlängern"
#: src/Admin/AdminController.php:1241 src/Admin/AdminController.php:1377 #: src/Admin/AdminController.php:1268 src/Admin/AdminController.php:1417
#: src/Admin/AdminController.php:1413 src/Admin/VersionAdminController.php:191 #: src/Admin/AdminController.php:1453 src/Admin/VersionAdminController.php:191
#: src/Admin/VersionAdminController.php:422 #: src/Admin/VersionAdminController.php:422
msgid "Delete" msgid "Delete"
msgstr "Löschen" msgstr "Löschen"
#: src/Admin/AdminController.php:1243 src/Admin/AdminController.php:1415 #: src/Admin/AdminController.php:1270 src/Admin/AdminController.php:1455
msgid "Apply" msgid "Apply"
msgstr "Anwenden" msgstr "Anwenden"
#: src/Admin/AdminController.php:1255 src/Admin/AdminController.php:1393 #: src/Admin/AdminController.php:1282 src/Admin/AdminController.php:1433
#: src/Email/LicenseExpirationEmail.php:104 #: src/Email/LicenseExpirationEmail.php:104
msgid "Customer" msgid "Customer"
msgstr "Kunde" msgstr "Kunde"
#: src/Admin/AdminController.php:1258 src/Admin/AdminController.php:1396 #: src/Admin/AdminController.php:1285 src/Admin/AdminController.php:1436
msgid "Created" msgid "Created"
msgstr "Erstellt" msgstr "Erstellt"
#: src/Admin/AdminController.php:1266 #: src/Admin/AdminController.php:1293
msgid "No licenses found." msgid "No licenses found."
msgstr "Keine Lizenzen gefunden." msgstr "Keine Lizenzen gefunden."
#: src/Admin/AdminController.php:1276 src/Frontend/AccountController.php:194 #: src/Admin/AdminController.php:1303 src/Frontend/AccountController.php:194
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "In Zwischenablage kopieren" msgstr "In Zwischenablage kopieren"
#: src/Admin/AdminController.php:1342 #: src/Admin/AdminController.php:1369
msgid "Leave empty for lifetime" msgid "Leave empty for lifetime"
msgstr "Leer lassen für lebenslang" msgstr "Leer lassen für lebenslang"
#: src/Admin/AdminController.php:1345 src/Admin/AdminController.php:1361 #: src/Admin/AdminController.php:1372 src/Admin/AdminController.php:1401
msgid "Set to lifetime" msgid "Set to lifetime"
msgstr "Auf lebenslang setzen" msgstr "Auf lebenslang setzen"
#: src/Admin/AdminController.php:1355 #: src/Admin/AdminController.php:1382
msgid "Test license against API"
msgstr "Lizenz gegen API testen"
#: src/Admin/AdminController.php:1382
msgid "Test"
msgstr "Testen"
#: src/Admin/AdminController.php:1389 src/Frontend/AccountController.php:207
msgid "Transfer to new domain"
msgstr "Auf neue Domain übertragen"
#: src/Admin/AdminController.php:1389 src/Frontend/AccountController.php:209
msgid "Transfer"
msgstr "Übertragen"
#: src/Admin/AdminController.php:1395
msgid "Extend by 30 days" msgid "Extend by 30 days"
msgstr "Um 30 Tage verlängern" msgstr "Um 30 Tage verlängern"
#: src/Admin/AdminController.php:1367 #: src/Admin/AdminController.php:1407
msgid "Are you sure?" msgid "Are you sure?"
msgstr "Sind Sie sicher?" msgstr "Sind Sie sicher?"
#: src/Admin/AdminController.php:1376 #: src/Admin/AdminController.php:1416
msgid "Are you sure you want to delete this license?" msgid "Are you sure you want to delete this license?"
msgstr "Sind Sie sicher, dass Sie diese Lizenz löschen möchten?" msgstr "Sind Sie sicher, dass Sie diese Lizenz löschen möchten?"
#: src/Admin/AdminController.php:1463 src/Admin/AdminController.php:1556 #: src/Admin/AdminController.php:1476
msgid "License Validation Test"
msgstr "Lizenzvalidierungstest"
#: src/Admin/AdminController.php:1491
msgid "Testing license..."
msgstr "Lizenz wird geprüft..."
#: src/Admin/AdminController.php:1497 src/Frontend/AccountController.php:249
msgid "Close"
msgstr "Schliessen"
#: src/Admin/AdminController.php:1506 src/Frontend/AccountController.php:250
msgid "Transfer License to New Domain"
msgstr "Lizenz auf neue Domain übertragen"
#: src/Admin/AdminController.php:1513 src/Frontend/AccountController.php:255
msgid "Current Domain"
msgstr "Aktuelle Domain"
#: src/Admin/AdminController.php:1517 src/Frontend/AccountController.php:260
msgid "New Domain"
msgstr "Neue Domain"
#: src/Admin/AdminController.php:1520 src/Frontend/AccountController.php:264
msgid "Enter the new domain without http:// or www."
msgstr "Geben Sie die neue Domain ohne http:// oder www ein."
#: src/Admin/AdminController.php:1525 src/Frontend/AccountController.php:269
msgid "Transfer License"
msgstr "Lizenz übertragen"
#: src/Admin/AdminController.php:1595
msgid "License is VALID"
msgstr "Lizenz ist GÜLTIG"
#: src/Admin/AdminController.php:1598 src/Admin/VersionAdminController.php:81
#: src/Admin/VersionAdminController.php:136
msgid "Version"
msgstr "Version"
#: src/Admin/AdminController.php:1606
msgid "License is INVALID"
msgstr "Lizenz ist UNGÜLTIG"
#: src/Admin/AdminController.php:1608
msgid "Error Code"
msgstr "Fehlercode"
#: src/Admin/AdminController.php:1609
msgid "Message"
msgstr "Meldung"
#: src/Admin/AdminController.php:1622
msgid "Failed to test license. Please try again."
msgstr "Lizenztest fehlgeschlagen. Bitte versuchen Sie es erneut."
#: src/Admin/AdminController.php:1660 src/Admin/AdminController.php:1753
msgid "Import Licenses" msgid "Import Licenses"
msgstr "Lizenzen importieren" msgstr "Lizenzen importieren"
#: src/Admin/AdminController.php:1465 #: src/Admin/AdminController.php:1662
msgid "Back to Licenses" msgid "Back to Licenses"
msgstr "Zurück zu Lizenzen" msgstr "Zurück zu Lizenzen"
#: src/Admin/AdminController.php:1475 #: src/Admin/AdminController.php:1672
msgid "Error uploading file. Please try again." msgid "Error uploading file. Please try again."
msgstr "Fehler beim Hochladen der Datei. Bitte versuchen Sie es erneut." msgstr "Fehler beim Hochladen der Datei. Bitte versuchen Sie es erneut."
#: src/Admin/AdminController.php:1478 #: src/Admin/AdminController.php:1675
msgid "Invalid file type. Please upload a CSV file." msgid "Invalid file type. Please upload a CSV file."
msgstr "Ungültiger Dateityp. Bitte laden Sie eine CSV-Datei hoch." msgstr "Ungültiger Dateityp. Bitte laden Sie eine CSV-Datei hoch."
#: src/Admin/AdminController.php:1481 #: src/Admin/AdminController.php:1678
msgid "Error reading file. Please check the file format." msgid "Error reading file. Please check the file format."
msgstr "Fehler beim Lesen der Datei. Bitte überprüfen Sie das Dateiformat." msgstr "Fehler beim Lesen der Datei. Bitte überprüfen Sie das Dateiformat."
#: src/Admin/AdminController.php:1484 #: src/Admin/AdminController.php:1681
msgid "An error occurred during import." msgid "An error occurred during import."
msgstr "Beim Import ist ein Fehler aufgetreten." msgstr "Beim Import ist ein Fehler aufgetreten."
#: src/Admin/AdminController.php:1492 #: src/Admin/AdminController.php:1689
msgid "Import Licenses from CSV" msgid "Import Licenses from CSV"
msgstr "Lizenzen aus CSV importieren" msgstr "Lizenzen aus CSV importieren"
#: src/Admin/AdminController.php:1495 #: src/Admin/AdminController.php:1692
msgid "" msgid ""
"Upload a CSV file to import licenses. You can use the exported CSV format or " "Upload a CSV file to import licenses. You can use the exported CSV format or "
"a simplified format." "a simplified format."
@@ -665,71 +747,71 @@ msgstr ""
"Laden Sie eine CSV-Datei hoch, um Lizenzen zu importieren. Sie können das " "Laden Sie eine CSV-Datei hoch, um Lizenzen zu importieren. Sie können das "
"exportierte CSV-Format oder ein vereinfachtes Format verwenden." "exportierte CSV-Format oder ein vereinfachtes Format verwenden."
#: src/Admin/AdminController.php:1498 #: src/Admin/AdminController.php:1695
msgid "CSV Format" msgid "CSV Format"
msgstr "CSV-Format" msgstr "CSV-Format"
#: src/Admin/AdminController.php:1500 #: src/Admin/AdminController.php:1697
msgid "The CSV file should contain the following columns:" msgid "The CSV file should contain the following columns:"
msgstr "Die CSV-Datei sollte die folgenden Spalten enthalten:" msgstr "Die CSV-Datei sollte die folgenden Spalten enthalten:"
#: src/Admin/AdminController.php:1504 #: src/Admin/AdminController.php:1701
msgid "Full Format (from Export):" msgid "Full Format (from Export):"
msgstr "Vollständiges Format (vom Export):" msgstr "Vollständiges Format (vom Export):"
#: src/Admin/AdminController.php:1507 #: src/Admin/AdminController.php:1704
msgid "Simplified Format:" msgid "Simplified Format:"
msgstr "Vereinfachtes Format:" msgstr "Vereinfachtes Format:"
#: src/Admin/AdminController.php:1512 #: src/Admin/AdminController.php:1709
msgid "Notes:" msgid "Notes:"
msgstr "Hinweise:" msgstr "Hinweise:"
#: src/Admin/AdminController.php:1513 #: src/Admin/AdminController.php:1710
msgid "Leave License Key empty to auto-generate." msgid "Leave License Key empty to auto-generate."
msgstr "Lizenzschlüssel leer lassen für automatische Generierung." msgstr "Lizenzschlüssel leer lassen für automatische Generierung."
#: src/Admin/AdminController.php:1514 #: src/Admin/AdminController.php:1711
msgid "Status can be: active, inactive, expired, revoked (defaults to active)." msgid "Status can be: active, inactive, expired, revoked (defaults to active)."
msgstr "" msgstr ""
"Status kann sein: active, inactive, expired, revoked (Standard: active)." "Status kann sein: active, inactive, expired, revoked (Standard: active)."
#: src/Admin/AdminController.php:1515 #: src/Admin/AdminController.php:1712
msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"." msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"."
msgstr "Ablaufdatum sollte im Format JJJJ-MM-TT oder \"Lifetime\" sein." msgstr "Ablaufdatum sollte im Format JJJJ-MM-TT oder \"Lifetime\" sein."
#: src/Admin/AdminController.php:1527 #: src/Admin/AdminController.php:1724
msgid "CSV File" msgid "CSV File"
msgstr "CSV-Datei" msgstr "CSV-Datei"
#: src/Admin/AdminController.php:1531 #: src/Admin/AdminController.php:1728
msgid "Select a CSV file to import." msgid "Select a CSV file to import."
msgstr "Wählen Sie eine CSV-Datei zum Importieren." msgstr "Wählen Sie eine CSV-Datei zum Importieren."
#: src/Admin/AdminController.php:1535 #: src/Admin/AdminController.php:1732
msgid "Options" msgid "Options"
msgstr "Optionen" msgstr "Optionen"
#: src/Admin/AdminController.php:1539 #: src/Admin/AdminController.php:1736
msgid "Skip first row (header row)" msgid "Skip first row (header row)"
msgstr "Erste Zeile überspringen (Kopfzeile)" msgstr "Erste Zeile überspringen (Kopfzeile)"
#: src/Admin/AdminController.php:1544 #: src/Admin/AdminController.php:1741
msgid "Update existing licenses (by license key)" msgid "Update existing licenses (by license key)"
msgstr "Bestehende Lizenzen aktualisieren (nach Lizenzschlüssel)" msgstr "Bestehende Lizenzen aktualisieren (nach Lizenzschlüssel)"
#: src/Admin/AdminController.php:1547 #: src/Admin/AdminController.php:1744
msgid "" msgid ""
"If enabled, licenses with matching keys will be updated instead of skipped." "If enabled, licenses with matching keys will be updated instead of skipped."
msgstr "" msgstr ""
"Falls aktiviert, werden Lizenzen mit übereinstimmenden Schlüsseln " "Falls aktiviert, werden Lizenzen mit übereinstimmenden Schlüsseln "
"aktualisiert statt übersprungen." "aktualisiert statt übersprungen."
#: src/Admin/AdminController.php:1574 #: src/Admin/AdminController.php:1771
msgid "License" msgid "License"
msgstr "Lizenz" msgstr "Lizenz"
#: src/Admin/AdminController.php:1633 #: src/Admin/AdminController.php:1830
msgid "No domain specified" msgid "No domain specified"
msgstr "Keine Domain angegeben" msgstr "Keine Domain angegeben"
@@ -906,11 +988,6 @@ msgstr "Produktversionen"
msgid "Add New Version" msgid "Add New Version"
msgstr "Neue Version hinzufügen" msgstr "Neue Version hinzufügen"
#: src/Admin/VersionAdminController.php:81
#: src/Admin/VersionAdminController.php:136
msgid "Version"
msgstr "Version"
#: src/Admin/VersionAdminController.php:84 #: src/Admin/VersionAdminController.php:84
msgid "Use semantic versioning (e.g., 1.0.0)" msgid "Use semantic versioning (e.g., 1.0.0)"
msgstr "Verwenden Sie semantische Versionierung (z.B. 1.0.0)" msgstr "Verwenden Sie semantische Versionierung (z.B. 1.0.0)"
@@ -1319,14 +1396,6 @@ msgstr "Lizenzschlüssel:"
msgid "Domain:" msgid "Domain:"
msgstr "Domain:" msgstr "Domain:"
#: src/Frontend/AccountController.php:207
msgid "Transfer to new domain"
msgstr "Auf neue Domain übertragen"
#: src/Frontend/AccountController.php:209
msgid "Transfer"
msgstr "Übertragen"
#: src/Frontend/AccountController.php:213 #: src/Frontend/AccountController.php:213
#: src/Email/LicenseEmailController.php:284 #: src/Email/LicenseEmailController.php:284
#: src/Email/LicenseExpirationEmail.php:219 #: src/Email/LicenseExpirationEmail.php:219
@@ -1349,30 +1418,6 @@ msgstr "Verfügbare Downloads"
msgid "Version %s" msgid "Version %s"
msgstr "Version %s" msgstr "Version %s"
#: src/Frontend/AccountController.php:249
msgid "Close"
msgstr "Schliessen"
#: src/Frontend/AccountController.php:250
msgid "Transfer License to New Domain"
msgstr "Lizenz auf neue Domain übertragen"
#: src/Frontend/AccountController.php:255
msgid "Current Domain"
msgstr "Aktuelle Domain"
#: src/Frontend/AccountController.php:260
msgid "New Domain"
msgstr "Neue Domain"
#: src/Frontend/AccountController.php:264
msgid "Enter the new domain without http:// or www."
msgstr "Geben Sie die neue Domain ohne http:// oder www ein."
#: src/Frontend/AccountController.php:269
msgid "Transfer License"
msgstr "Lizenz übertragen"
#: src/Frontend/AccountController.php:311 #: src/Frontend/AccountController.php:311
#: src/Frontend/AccountController.php:378 #: src/Frontend/AccountController.php:378
msgid "License transferred successfully!" msgid "License transferred successfully!"

View File

@@ -1,14 +1,14 @@
# SOME DESCRIPTIVE TITLE. # SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # Copyright (C) YEAR Marco Graetsch
# This file is distributed under the same license as the WC Licensed Product package. # This file is distributed under the same license as the WooCommerce Licensed Product package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: WC Licensed Product 0.3.2\n" "Project-Id-Version: WooCommerce Licensed Product 0.3.3\n"
"Report-Msgid-Bugs-To: magdev3.0@gmail.com\n" "Report-Msgid-Bugs-To: magdev3.0@gmail.com\n"
"POT-Creation-Date: 2026-01-22 19:11+0100\n" "POT-Creation-Date: 2026-01-23 11:41+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -48,16 +48,16 @@ msgid "example.com"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:118 #: src/Admin/OrderLicenseController.php:118
#: src/Admin/OrderLicenseController.php:182 src/Admin/AdminController.php:147 #: src/Admin/OrderLicenseController.php:182 src/Admin/AdminController.php:150
#: src/Admin/AdminController.php:1302 src/Admin/AdminController.php:1322 #: src/Admin/AdminController.php:1329 src/Admin/AdminController.php:1349
#: src/Admin/AdminController.php:1343 #: src/Admin/AdminController.php:1370
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:127 #: src/Admin/OrderLicenseController.php:127
#: src/Admin/OrderLicenseController.php:222 src/Admin/AdminController.php:73 #: src/Admin/OrderLicenseController.php:222 src/Admin/AdminController.php:76
#: src/Admin/AdminController.php:74 src/Admin/AdminController.php:87 #: src/Admin/AdminController.php:77 src/Admin/AdminController.php:90
#: src/Admin/AdminController.php:1162 src/Frontend/AccountController.php:90 #: src/Admin/AdminController.php:1189 src/Frontend/AccountController.php:90
msgid "Licenses" msgid "Licenses"
msgstr "" msgstr ""
@@ -75,39 +75,42 @@ msgstr ""
msgid "Licenses will be generated when the order is marked as paid/completed." msgid "Licenses will be generated when the order is marked as paid/completed."
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:144 src/Admin/AdminController.php:1253 #: src/Admin/OrderLicenseController.php:144 src/Admin/AdminController.php:1280
#: src/Admin/AdminController.php:1391 src/Admin/SettingsController.php:142 #: src/Admin/AdminController.php:1431 src/Admin/AdminController.php:1480
#: src/Admin/SettingsController.php:142
#: src/Email/LicenseEmailController.php:230 #: src/Email/LicenseEmailController.php:230
msgid "License Key" msgid "License Key"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:145 src/Admin/AdminController.php:1254 #: src/Admin/OrderLicenseController.php:145 src/Admin/AdminController.php:1281
#: src/Admin/AdminController.php:1392 src/Email/LicenseEmailController.php:229 #: src/Admin/AdminController.php:1432 src/Admin/AdminController.php:1597
#: src/Email/LicenseEmailController.php:229
msgid "Product" msgid "Product"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:146 src/Admin/AdminController.php:1256 #: src/Admin/OrderLicenseController.php:146 src/Admin/AdminController.php:1283
#: src/Admin/AdminController.php:1394 #: src/Admin/AdminController.php:1434 src/Admin/AdminController.php:1484
msgid "Domain" msgid "Domain"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:147 src/Admin/AdminController.php:1257 #: src/Admin/OrderLicenseController.php:147 src/Admin/AdminController.php:1284
#: src/Admin/AdminController.php:1395 src/Admin/VersionAdminController.php:140 #: src/Admin/AdminController.php:1435 src/Admin/VersionAdminController.php:140
msgid "Status" msgid "Status"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:148 src/Admin/AdminController.php:1259 #: src/Admin/OrderLicenseController.php:148 src/Admin/AdminController.php:1286
#: src/Admin/AdminController.php:1397 src/Email/LicenseEmailController.php:231 #: src/Admin/AdminController.php:1437 src/Admin/AdminController.php:1600
#: src/Admin/AdminController.php:1602 src/Email/LicenseEmailController.php:231
msgid "Expires" msgid "Expires"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:149 src/Admin/AdminController.php:1260 #: src/Admin/OrderLicenseController.php:149 src/Admin/AdminController.php:1287
#: src/Admin/AdminController.php:1398 src/Admin/VersionAdminController.php:142 #: src/Admin/AdminController.php:1438 src/Admin/VersionAdminController.php:142
msgid "Actions" msgid "Actions"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:168 src/Admin/AdminController.php:192 #: src/Admin/OrderLicenseController.php:168 src/Admin/AdminController.php:195
#: src/Admin/AdminController.php:987 #: src/Admin/AdminController.php:1014
msgid "Unknown" msgid "Unknown"
msgstr "" msgstr ""
@@ -115,15 +118,17 @@ msgstr ""
msgid "Edit domain" msgid "Edit domain"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:185 src/Admin/AdminController.php:146 #: src/Admin/OrderLicenseController.php:185 src/Admin/AdminController.php:149
#: src/Admin/AdminController.php:1303 src/Admin/AdminController.php:1323 #: src/Admin/AdminController.php:1330 src/Admin/AdminController.php:1350
#: src/Admin/AdminController.php:1344 src/Frontend/AccountController.php:271 #: src/Admin/AdminController.php:1371 src/Admin/AdminController.php:1526
#: src/Frontend/AccountController.php:271
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:201 src/Admin/AdminController.php:148 #: src/Admin/OrderLicenseController.php:201 src/Admin/AdminController.php:151
#: src/Admin/AdminController.php:263 src/Admin/AdminController.php:1335 #: src/Admin/AdminController.php:266 src/Admin/AdminController.php:1362
#: src/Admin/SettingsController.php:192 src/Product/LicensedProductType.php:104 #: src/Admin/AdminController.php:1602 src/Admin/SettingsController.php:192
#: src/Product/LicensedProductType.php:104
#: src/Product/LicensedProductType.php:152 #: src/Product/LicensedProductType.php:152
msgid "Lifetime" msgid "Lifetime"
msgstr "" msgstr ""
@@ -137,7 +142,7 @@ msgstr ""
msgid "For more actions (revoke, extend, delete), go to the %s page." msgid "For more actions (revoke, extend, delete), go to the %s page."
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:285 src/Admin/AdminController.php:141 #: src/Admin/OrderLicenseController.php:285 src/Admin/AdminController.php:144
msgid "Saving..." msgid "Saving..."
msgstr "" msgstr ""
@@ -156,10 +161,10 @@ msgid "Please enter a valid domain."
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:301 #: src/Admin/OrderLicenseController.php:301
#: src/Admin/OrderLicenseController.php:340 src/Admin/AdminController.php:170 #: src/Admin/OrderLicenseController.php:340 src/Admin/AdminController.php:173
#: src/Admin/AdminController.php:210 src/Admin/AdminController.php:246 #: src/Admin/AdminController.php:213 src/Admin/AdminController.php:249
#: src/Admin/AdminController.php:298 src/Admin/AdminController.php:336 #: src/Admin/AdminController.php:301 src/Admin/AdminController.php:339
#: src/Admin/VersionAdminController.php:259 #: src/Admin/AdminController.php:369 src/Admin/VersionAdminController.php:259
#: src/Admin/VersionAdminController.php:328 #: src/Admin/VersionAdminController.php:328
#: src/Admin/VersionAdminController.php:354 #: src/Admin/VersionAdminController.php:354
msgid "Permission denied." msgid "Permission denied."
@@ -178,13 +183,13 @@ msgstr ""
msgid "Order domain updated." msgid "Order domain updated."
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:347 src/Admin/AdminController.php:217 #: src/Admin/OrderLicenseController.php:347 src/Admin/AdminController.php:220
#: src/Admin/AdminController.php:253 src/Admin/AdminController.php:305 #: src/Admin/AdminController.php:256 src/Admin/AdminController.php:308
#: src/Admin/AdminController.php:342 #: src/Admin/AdminController.php:345
msgid "Invalid license ID." msgid "Invalid license ID."
msgstr "" msgstr ""
#: src/Admin/OrderLicenseController.php:351 src/Admin/AdminController.php:309 #: src/Admin/OrderLicenseController.php:351 src/Admin/AdminController.php:312
msgid "Domain cannot be empty." msgid "Domain cannot be empty."
msgstr "" msgstr ""
@@ -202,519 +207,596 @@ msgstr ""
msgid "Failed to update license domain." msgid "Failed to update license domain."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:90 #: src/Admin/AdminController.php:93
msgid "Overview" msgid "Overview"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:138 #: src/Admin/AdminController.php:141
msgid "No licenses found" msgid "No licenses found"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:139 #: src/Admin/AdminController.php:142
msgid "Searching..." msgid "Searching..."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:140 #: src/Admin/AdminController.php:143
msgid "Search failed" msgid "Search failed"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:142 #: src/Admin/AdminController.php:145
msgid "Saved" msgid "Saved"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:143 #: src/Admin/AdminController.php:146
msgid "Save failed" msgid "Save failed"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:144 #: src/Admin/AdminController.php:147
msgid "" msgid ""
"Are you sure you want to revoke this license? This action cannot be undone." "Are you sure you want to revoke this license? This action cannot be undone."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:145 src/Admin/AdminController.php:1297 #: src/Admin/AdminController.php:148 src/Admin/AdminController.php:1324
#: src/Admin/AdminController.php:1312 src/Admin/AdminController.php:1338 #: src/Admin/AdminController.php:1339 src/Admin/AdminController.php:1365
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:149 src/Frontend/AccountController.php:309 #: src/Admin/AdminController.php:152 src/Frontend/AccountController.php:309
msgid "Copied!" msgid "Copied!"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:150 src/Frontend/AccountController.php:310 #: src/Admin/AdminController.php:153 src/Frontend/AccountController.php:310
msgid "Copy failed" msgid "Copy failed"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:153 src/Admin/AdminController.php:875 #: src/Admin/AdminController.php:156 src/Admin/AdminController.php:902
#: src/Admin/AdminController.php:1194 src/Admin/AdminController.php:1317 #: src/Admin/AdminController.php:1221 src/Admin/AdminController.php:1344
#: src/Admin/VersionAdminController.php:182 #: src/Admin/VersionAdminController.php:182
#: src/Admin/VersionAdminController.php:413 #: src/Admin/VersionAdminController.php:413
msgid "Active" msgid "Active"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:154 src/Admin/AdminController.php:882 #: src/Admin/AdminController.php:157 src/Admin/AdminController.php:909
#: src/Admin/AdminController.php:1195 src/Admin/AdminController.php:1318 #: src/Admin/AdminController.php:1222 src/Admin/AdminController.php:1345
#: src/Admin/VersionAdminController.php:182 #: src/Admin/VersionAdminController.php:182
#: src/Admin/VersionAdminController.php:413 #: src/Admin/VersionAdminController.php:413
msgid "Inactive" msgid "Inactive"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:155 src/Admin/AdminController.php:889 #: src/Admin/AdminController.php:158 src/Admin/AdminController.php:916
#: src/Admin/AdminController.php:1196 src/Admin/AdminController.php:1319 #: src/Admin/AdminController.php:1223 src/Admin/AdminController.php:1346
msgid "Expired" msgid "Expired"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:156 src/Admin/AdminController.php:896 #: src/Admin/AdminController.php:159 src/Admin/AdminController.php:923
#: src/Admin/AdminController.php:1197 src/Admin/AdminController.php:1320 #: src/Admin/AdminController.php:1224 src/Admin/AdminController.php:1347
msgid "Revoked" msgid "Revoked"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:193 src/Admin/AdminController.php:991 #: src/Admin/AdminController.php:196 src/Admin/AdminController.php:1018
msgid "Guest" msgid "Guest"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:222 #: src/Admin/AdminController.php:225
msgid "Invalid status." msgid "Invalid status."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:229 #: src/Admin/AdminController.php:232
msgid "Status updated successfully." msgid "Status updated successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:234 #: src/Admin/AdminController.php:237
msgid "Failed to update status." msgid "Failed to update status."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:261 #: src/Admin/AdminController.php:264
msgid "License set to lifetime." msgid "License set to lifetime."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:266 src/Admin/AdminController.php:283 #: src/Admin/AdminController.php:269 src/Admin/AdminController.php:286
msgid "Failed to update expiry date." msgid "Failed to update expiry date."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:278 #: src/Admin/AdminController.php:281
msgid "Expiry date updated successfully." msgid "Expiry date updated successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:286 #: src/Admin/AdminController.php:289
msgid "Invalid date format." msgid "Invalid date format."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:320 #: src/Admin/AdminController.php:323
msgid "Domain updated successfully." msgid "Domain updated successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:324 #: src/Admin/AdminController.php:327
msgid "Failed to update domain." msgid "Failed to update domain."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:349 src/Admin/AdminController.php:1056 #: src/Admin/AdminController.php:352 src/Admin/AdminController.php:1083
msgid "License revoked successfully." msgid "License revoked successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:354 #: src/Admin/AdminController.php:357
msgid "Failed to revoke license." msgid "Failed to revoke license."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:428 src/Admin/AdminController.php:448 #: src/Admin/AdminController.php:376
#: src/Admin/AdminController.php:466 src/Admin/AdminController.php:484 msgid "License key and domain are required."
#: src/Admin/AdminController.php:504 src/Admin/AdminController.php:522 msgstr ""
#: src/Admin/AdminController.php:589 src/Admin/AdminController.php:779
#: src/Admin/AdminController.php:455 src/Admin/AdminController.php:475
#: src/Admin/AdminController.php:493 src/Admin/AdminController.php:511
#: src/Admin/AdminController.php:531 src/Admin/AdminController.php:549
#: src/Admin/AdminController.php:616 src/Admin/AdminController.php:806
#: src/Admin/SettingsController.php:454 src/Frontend/AccountController.php:326 #: src/Admin/SettingsController.php:454 src/Frontend/AccountController.php:326
msgid "Security check failed." msgid "Security check failed."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:549 #: src/Admin/AdminController.php:576
msgid "You do not have permission to export licenses." msgid "You do not have permission to export licenses."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:593 #: src/Admin/AdminController.php:620
msgid "You do not have permission to import licenses." msgid "You do not have permission to import licenses."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:713 #: src/Admin/AdminController.php:740
msgid "Row missing domain" msgid "Row missing domain"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:717 #: src/Admin/AdminController.php:744
msgid "Row missing valid product ID" msgid "Row missing valid product ID"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:770 #: src/Admin/AdminController.php:797
#, php-format #, php-format
msgid "Failed to import license for domain %s" msgid "Failed to import license for domain %s"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:860 #: src/Admin/AdminController.php:887
msgid "License Dashboard" msgid "License Dashboard"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:868 #: src/Admin/AdminController.php:895
msgid "Total Licenses" msgid "Total Licenses"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:905 #: src/Admin/AdminController.php:932
msgid "Attention:" msgid "Attention:"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:910 #: src/Admin/AdminController.php:937
#, php-format #, php-format
msgid "%d license is expiring within the next 30 days." msgid "%d license is expiring within the next 30 days."
msgid_plural "%d licenses are expiring within the next 30 days." msgid_plural "%d licenses are expiring within the next 30 days."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:918 #: src/Admin/AdminController.php:945
msgid "View Licenses" msgid "View Licenses"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:924 #: src/Admin/AdminController.php:951
msgid "Quick Actions" msgid "Quick Actions"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:928 #: src/Admin/AdminController.php:955
msgid "Manage Licenses" msgid "Manage Licenses"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:932 #: src/Admin/AdminController.php:959
msgid "Export to CSV" msgid "Export to CSV"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:936 wc-licensed-product.php:137 #: src/Admin/AdminController.php:963 wc-licensed-product.php:137
msgid "Settings" msgid "Settings"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1050 #: src/Admin/AdminController.php:1077
msgid "License updated successfully." msgid "License updated successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1053 #: src/Admin/AdminController.php:1080
msgid "License deleted successfully." msgid "License deleted successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1059 #: src/Admin/AdminController.php:1086
msgid "License extended successfully." msgid "License extended successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1062 #: src/Admin/AdminController.php:1089
msgid "License set to lifetime successfully." msgid "License set to lifetime successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1068 #: src/Admin/AdminController.php:1095
#, php-format #, php-format
msgid "%d license activated." msgid "%d license activated."
msgid_plural "%d licenses activated." msgid_plural "%d licenses activated."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1076 #: src/Admin/AdminController.php:1103
#, php-format #, php-format
msgid "%d license deactivated." msgid "%d license deactivated."
msgid_plural "%d licenses deactivated." msgid_plural "%d licenses deactivated."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1084 #: src/Admin/AdminController.php:1111
#, php-format #, php-format
msgid "%d license revoked." msgid "%d license revoked."
msgid_plural "%d licenses revoked." msgid_plural "%d licenses revoked."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1092 #: src/Admin/AdminController.php:1119
#, php-format #, php-format
msgid "%d license deleted." msgid "%d license deleted."
msgid_plural "%d licenses deleted." msgid_plural "%d licenses deleted."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1100 #: src/Admin/AdminController.php:1127
#, php-format #, php-format
msgid "%d license extended." msgid "%d license extended."
msgid_plural "%d licenses extended." msgid_plural "%d licenses extended."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1105 #: src/Admin/AdminController.php:1132
msgid "License transferred to new domain successfully." msgid "License transferred to new domain successfully."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1108 #: src/Admin/AdminController.php:1135
msgid "Failed to transfer license. The license may be revoked or invalid." msgid "Failed to transfer license. The license may be revoked or invalid."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1111 #: src/Admin/AdminController.php:1138
msgid "No licenses to export." msgid "No licenses to export."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1121 #: src/Admin/AdminController.php:1148
#, php-format #, php-format
msgid "%d license imported." msgid "%d license imported."
msgid_plural "%d licenses imported." msgid_plural "%d licenses imported."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1128 #: src/Admin/AdminController.php:1155
#, php-format #, php-format
msgid "%d updated." msgid "%d updated."
msgid_plural "%d updated." msgid_plural "%d updated."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1136 #: src/Admin/AdminController.php:1163
#, php-format #, php-format
msgid "%d skipped." msgid "%d skipped."
msgid_plural "%d skipped." msgid_plural "%d skipped."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1144 #: src/Admin/AdminController.php:1171
#, php-format #, php-format
msgid "%d error." msgid "%d error."
msgid_plural "%d errors." msgid_plural "%d errors."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#: src/Admin/AdminController.php:1165 #: src/Admin/AdminController.php:1192
msgid "Export CSV" msgid "Export CSV"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1169 #: src/Admin/AdminController.php:1196
msgid "Import CSV" msgid "Import CSV"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1184 #: src/Admin/AdminController.php:1211
msgid "Search Licenses" msgid "Search Licenses"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1186 #: src/Admin/AdminController.php:1213
msgid "Search license key or domain..." msgid "Search license key or domain..."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1187 #: src/Admin/AdminController.php:1214
msgid "Search" msgid "Search"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1193 #: src/Admin/AdminController.php:1220
msgid "All Statuses" msgid "All Statuses"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1201 #: src/Admin/AdminController.php:1228
msgid "All Products" msgid "All Products"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1207 #: src/Admin/AdminController.php:1234
msgid "Filter" msgid "Filter"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1210 #: src/Admin/AdminController.php:1237
msgid "Clear" msgid "Clear"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1215 #: src/Admin/AdminController.php:1242
msgid "item" msgid "item"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1215 #: src/Admin/AdminController.php:1242
msgid "items" msgid "items"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1221 #: src/Admin/AdminController.php:1248
msgid "Showing" msgid "Showing"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1221 #: src/Admin/AdminController.php:1248
msgid "license" msgid "license"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1221 #: src/Admin/AdminController.php:1248
msgid "licenses" msgid "licenses"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1223 #: src/Admin/AdminController.php:1250
msgid "filtered" msgid "filtered"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1225 #: src/Admin/AdminController.php:1252
msgid "View Dashboard" msgid "View Dashboard"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1234 src/Admin/AdminController.php:1406 #: src/Admin/AdminController.php:1261 src/Admin/AdminController.php:1446
msgid "Bulk Actions" msgid "Bulk Actions"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1235 src/Admin/AdminController.php:1407 #: src/Admin/AdminController.php:1262 src/Admin/AdminController.php:1447
#: src/Admin/VersionAdminController.php:188 #: src/Admin/VersionAdminController.php:188
#: src/Admin/VersionAdminController.php:419 #: src/Admin/VersionAdminController.php:419
msgid "Activate" msgid "Activate"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1236 src/Admin/AdminController.php:1408 #: src/Admin/AdminController.php:1263 src/Admin/AdminController.php:1448
#: src/Admin/VersionAdminController.php:188 #: src/Admin/VersionAdminController.php:188
#: src/Admin/VersionAdminController.php:419 #: src/Admin/VersionAdminController.php:419
msgid "Deactivate" msgid "Deactivate"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1237 src/Admin/AdminController.php:1368 #: src/Admin/AdminController.php:1264 src/Admin/AdminController.php:1408
#: src/Admin/AdminController.php:1409 #: src/Admin/AdminController.php:1449
msgid "Revoke" msgid "Revoke"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1238 src/Admin/AdminController.php:1410 #: src/Admin/AdminController.php:1265 src/Admin/AdminController.php:1450
msgid "Extend 30 days" msgid "Extend 30 days"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1239 src/Admin/AdminController.php:1411 #: src/Admin/AdminController.php:1266 src/Admin/AdminController.php:1451
msgid "Extend 90 days" msgid "Extend 90 days"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1240 src/Admin/AdminController.php:1412 #: src/Admin/AdminController.php:1267 src/Admin/AdminController.php:1452
msgid "Extend 1 year" msgid "Extend 1 year"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1241 src/Admin/AdminController.php:1377 #: src/Admin/AdminController.php:1268 src/Admin/AdminController.php:1417
#: src/Admin/AdminController.php:1413 src/Admin/VersionAdminController.php:191 #: src/Admin/AdminController.php:1453 src/Admin/VersionAdminController.php:191
#: src/Admin/VersionAdminController.php:422 #: src/Admin/VersionAdminController.php:422
msgid "Delete" msgid "Delete"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1243 src/Admin/AdminController.php:1415 #: src/Admin/AdminController.php:1270 src/Admin/AdminController.php:1455
msgid "Apply" msgid "Apply"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1255 src/Admin/AdminController.php:1393 #: src/Admin/AdminController.php:1282 src/Admin/AdminController.php:1433
#: src/Email/LicenseExpirationEmail.php:104 #: src/Email/LicenseExpirationEmail.php:104
msgid "Customer" msgid "Customer"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1258 src/Admin/AdminController.php:1396 #: src/Admin/AdminController.php:1285 src/Admin/AdminController.php:1436
msgid "Created" msgid "Created"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1266 #: src/Admin/AdminController.php:1293
msgid "No licenses found." msgid "No licenses found."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1276 src/Frontend/AccountController.php:194 #: src/Admin/AdminController.php:1303 src/Frontend/AccountController.php:194
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1342 #: src/Admin/AdminController.php:1369
msgid "Leave empty for lifetime" msgid "Leave empty for lifetime"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1345 src/Admin/AdminController.php:1361 #: src/Admin/AdminController.php:1372 src/Admin/AdminController.php:1401
msgid "Set to lifetime" msgid "Set to lifetime"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1355 #: src/Admin/AdminController.php:1382
msgid "Test license against API"
msgstr ""
#: src/Admin/AdminController.php:1382
msgid "Test"
msgstr ""
#: src/Admin/AdminController.php:1389 src/Frontend/AccountController.php:207
msgid "Transfer to new domain"
msgstr ""
#: src/Admin/AdminController.php:1389 src/Frontend/AccountController.php:209
msgid "Transfer"
msgstr ""
#: src/Admin/AdminController.php:1395
msgid "Extend by 30 days" msgid "Extend by 30 days"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1367 #: src/Admin/AdminController.php:1407
msgid "Are you sure?" msgid "Are you sure?"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1376 #: src/Admin/AdminController.php:1416
msgid "Are you sure you want to delete this license?" msgid "Are you sure you want to delete this license?"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1463 src/Admin/AdminController.php:1556 #: src/Admin/AdminController.php:1476
msgid "License Validation Test"
msgstr ""
#: src/Admin/AdminController.php:1491
msgid "Testing license..."
msgstr ""
#: src/Admin/AdminController.php:1497 src/Frontend/AccountController.php:249
msgid "Close"
msgstr ""
#: src/Admin/AdminController.php:1506 src/Frontend/AccountController.php:250
msgid "Transfer License to New Domain"
msgstr ""
#: src/Admin/AdminController.php:1513 src/Frontend/AccountController.php:255
msgid "Current Domain"
msgstr ""
#: src/Admin/AdminController.php:1517 src/Frontend/AccountController.php:260
msgid "New Domain"
msgstr ""
#: src/Admin/AdminController.php:1520 src/Frontend/AccountController.php:264
msgid "Enter the new domain without http:// or www."
msgstr ""
#: src/Admin/AdminController.php:1525 src/Frontend/AccountController.php:269
msgid "Transfer License"
msgstr ""
#: src/Admin/AdminController.php:1595
msgid "License is VALID"
msgstr ""
#: src/Admin/AdminController.php:1598 src/Admin/VersionAdminController.php:81
#: src/Admin/VersionAdminController.php:136
msgid "Version"
msgstr ""
#: src/Admin/AdminController.php:1606
msgid "License is INVALID"
msgstr ""
#: src/Admin/AdminController.php:1608
msgid "Error Code"
msgstr ""
#: src/Admin/AdminController.php:1609
msgid "Message"
msgstr ""
#: src/Admin/AdminController.php:1622
msgid "Failed to test license. Please try again."
msgstr ""
#: src/Admin/AdminController.php:1660 src/Admin/AdminController.php:1753
msgid "Import Licenses" msgid "Import Licenses"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1465 #: src/Admin/AdminController.php:1662
msgid "Back to Licenses" msgid "Back to Licenses"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1475 #: src/Admin/AdminController.php:1672
msgid "Error uploading file. Please try again." msgid "Error uploading file. Please try again."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1478 #: src/Admin/AdminController.php:1675
msgid "Invalid file type. Please upload a CSV file." msgid "Invalid file type. Please upload a CSV file."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1481 #: src/Admin/AdminController.php:1678
msgid "Error reading file. Please check the file format." msgid "Error reading file. Please check the file format."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1484 #: src/Admin/AdminController.php:1681
msgid "An error occurred during import." msgid "An error occurred during import."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1492 #: src/Admin/AdminController.php:1689
msgid "Import Licenses from CSV" msgid "Import Licenses from CSV"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1495 #: src/Admin/AdminController.php:1692
msgid "" msgid ""
"Upload a CSV file to import licenses. You can use the exported CSV format or " "Upload a CSV file to import licenses. You can use the exported CSV format or "
"a simplified format." "a simplified format."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1498 #: src/Admin/AdminController.php:1695
msgid "CSV Format" msgid "CSV Format"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1500 #: src/Admin/AdminController.php:1697
msgid "The CSV file should contain the following columns:" msgid "The CSV file should contain the following columns:"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1504 #: src/Admin/AdminController.php:1701
msgid "Full Format (from Export):" msgid "Full Format (from Export):"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1507 #: src/Admin/AdminController.php:1704
msgid "Simplified Format:" msgid "Simplified Format:"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1512 #: src/Admin/AdminController.php:1709
msgid "Notes:" msgid "Notes:"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1513 #: src/Admin/AdminController.php:1710
msgid "Leave License Key empty to auto-generate." msgid "Leave License Key empty to auto-generate."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1514 #: src/Admin/AdminController.php:1711
msgid "Status can be: active, inactive, expired, revoked (defaults to active)." msgid "Status can be: active, inactive, expired, revoked (defaults to active)."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1515 #: src/Admin/AdminController.php:1712
msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"." msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1527 #: src/Admin/AdminController.php:1724
msgid "CSV File" msgid "CSV File"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1531 #: src/Admin/AdminController.php:1728
msgid "Select a CSV file to import." msgid "Select a CSV file to import."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1535 #: src/Admin/AdminController.php:1732
msgid "Options" msgid "Options"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1539 #: src/Admin/AdminController.php:1736
msgid "Skip first row (header row)" msgid "Skip first row (header row)"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1544 #: src/Admin/AdminController.php:1741
msgid "Update existing licenses (by license key)" msgid "Update existing licenses (by license key)"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1547 #: src/Admin/AdminController.php:1744
msgid "" msgid ""
"If enabled, licenses with matching keys will be updated instead of skipped." "If enabled, licenses with matching keys will be updated instead of skipped."
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1574 #: src/Admin/AdminController.php:1771
msgid "License" msgid "License"
msgstr "" msgstr ""
#: src/Admin/AdminController.php:1633 #: src/Admin/AdminController.php:1830
msgid "No domain specified" msgid "No domain specified"
msgstr "" msgstr ""
@@ -876,11 +958,6 @@ msgstr ""
msgid "Add New Version" msgid "Add New Version"
msgstr "" msgstr ""
#: src/Admin/VersionAdminController.php:81
#: src/Admin/VersionAdminController.php:136
msgid "Version"
msgstr ""
#: src/Admin/VersionAdminController.php:84 #: src/Admin/VersionAdminController.php:84
msgid "Use semantic versioning (e.g., 1.0.0)" msgid "Use semantic versioning (e.g., 1.0.0)"
msgstr "" msgstr ""
@@ -1277,14 +1354,6 @@ msgstr ""
msgid "Domain:" msgid "Domain:"
msgstr "" msgstr ""
#: src/Frontend/AccountController.php:207
msgid "Transfer to new domain"
msgstr ""
#: src/Frontend/AccountController.php:209
msgid "Transfer"
msgstr ""
#: src/Frontend/AccountController.php:213 #: src/Frontend/AccountController.php:213
#: src/Email/LicenseEmailController.php:284 #: src/Email/LicenseEmailController.php:284
#: src/Email/LicenseExpirationEmail.php:219 #: src/Email/LicenseExpirationEmail.php:219
@@ -1307,30 +1376,6 @@ msgstr ""
msgid "Version %s" msgid "Version %s"
msgstr "" msgstr ""
#: src/Frontend/AccountController.php:249
msgid "Close"
msgstr ""
#: src/Frontend/AccountController.php:250
msgid "Transfer License to New Domain"
msgstr ""
#: src/Frontend/AccountController.php:255
msgid "Current Domain"
msgstr ""
#: src/Frontend/AccountController.php:260
msgid "New Domain"
msgstr ""
#: src/Frontend/AccountController.php:264
msgid "Enter the new domain without http:// or www."
msgstr ""
#: src/Frontend/AccountController.php:269
msgid "Transfer License"
msgstr ""
#: src/Frontend/AccountController.php:311 #: src/Frontend/AccountController.php:311
#: src/Frontend/AccountController.php:378 #: src/Frontend/AccountController.php:378
msgid "License transferred successfully!" msgid "License transferred successfully!"

View File

@@ -61,6 +61,9 @@ final class AdminController
add_action('wp_ajax_wclp_update_license_expiry', [$this, 'handleAjaxExpiryUpdate']); add_action('wp_ajax_wclp_update_license_expiry', [$this, 'handleAjaxExpiryUpdate']);
add_action('wp_ajax_wclp_update_license_domain', [$this, 'handleAjaxDomainUpdate']); add_action('wp_ajax_wclp_update_license_domain', [$this, 'handleAjaxDomainUpdate']);
add_action('wp_ajax_wclp_revoke_license', [$this, 'handleAjaxRevoke']); add_action('wp_ajax_wclp_revoke_license', [$this, 'handleAjaxRevoke']);
// AJAX handler for license testing
add_action('wp_ajax_wclp_test_license', [$this, 'handleAjaxTestLicense']);
} }
/** /**
@@ -355,6 +358,30 @@ final class AdminController
} }
} }
/**
* Handle AJAX license test - validates license against the API
*/
public function handleAjaxTestLicense(): void
{
check_ajax_referer('wclp_inline_edit', 'nonce');
if (!current_user_can('manage_woocommerce')) {
wp_send_json_error(['message' => __('Permission denied.', 'wc-licensed-product')], 403);
}
$licenseKey = isset($_POST['license_key']) ? sanitize_text_field(wp_unslash($_POST['license_key'])) : '';
$domain = isset($_POST['domain']) ? sanitize_text_field(wp_unslash($_POST['domain'])) : '';
if (empty($licenseKey) || empty($domain)) {
wp_send_json_error(['message' => __('License key and domain are required.', 'wc-licensed-product')]);
}
// Validate the license using LicenseManager
$result = $this->licenseManager->validateLicense($licenseKey, $domain);
wp_send_json_success($result);
}
/** /**
* Handle admin actions (update, delete licenses) * Handle admin actions (update, delete licenses)
*/ */
@@ -1347,7 +1374,20 @@ final class AdminController
</td> </td>
<td class="license-actions"> <td class="license-actions">
<div class="row-actions"> <div class="row-actions">
<span class="test">
<a href="#" class="wclp-test-license-link"
data-license-id="<?php echo esc_attr($item['license']->getId()); ?>"
data-license-key="<?php echo esc_attr($item['license']->getLicenseKey()); ?>"
data-domain="<?php echo esc_attr($item['license']->getDomain()); ?>"
title="<?php esc_attr_e('Test license against API', 'wc-licensed-product'); ?>"><?php esc_html_e('Test', 'wc-licensed-product'); ?></a> |
</span>
<?php if ($item['license']->getStatus() !== License::STATUS_REVOKED): ?> <?php if ($item['license']->getStatus() !== License::STATUS_REVOKED): ?>
<span class="transfer">
<a href="#" class="wclp-transfer-link"
data-license-id="<?php echo esc_attr($item['license']->getId()); ?>"
data-current-domain="<?php echo esc_attr($item['license']->getDomain()); ?>"
title="<?php esc_attr_e('Transfer to new domain', 'wc-licensed-product'); ?>"><?php esc_html_e('Transfer', 'wc-licensed-product'); ?></a> |
</span>
<span class="extend"> <span class="extend">
<a href="<?php echo esc_url(wp_nonce_url( <a href="<?php echo esc_url(wp_nonce_url(
admin_url('admin.php?page=wc-licenses&action=extend&license_id=' . $item['license']->getId() . '&days=30'), admin_url('admin.php?page=wc-licenses&action=extend&license_id=' . $item['license']->getId() . '&days=30'),
@@ -1429,8 +1469,69 @@ final class AdminController
</div> </div>
</form> </form>
<!-- Test License Modal -->
<div id="wclp-test-modal" class="wclp-modal" style="display:none;">
<div class="wclp-modal-content">
<span class="wclp-modal-close">&times;</span>
<h2><?php esc_html_e('License Validation Test', 'wc-licensed-product'); ?></h2>
<div class="wclp-test-info">
<table class="form-table">
<tr>
<th scope="row"><?php esc_html_e('License Key', 'wc-licensed-product'); ?></th>
<td><code id="test-license-key"></code></td>
</tr>
<tr>
<th scope="row"><?php esc_html_e('Domain', 'wc-licensed-product'); ?></th>
<td><code id="test-domain"></code></td>
</tr>
</table>
</div>
<div id="wclp-test-loading" style="display:none; text-align:center; padding:20px;">
<span class="spinner is-active" style="float:none;"></span>
<p><?php esc_html_e('Testing license...', 'wc-licensed-product'); ?></p>
</div>
<div id="wclp-test-result" style="display:none;">
<div id="wclp-test-result-content"></div>
</div>
<p class="submit">
<button type="button" class="button wclp-modal-cancel"><?php esc_html_e('Close', 'wc-licensed-product'); ?></button>
</p>
</div>
</div>
<!-- Transfer Modal -->
<div id="wclp-transfer-modal" class="wclp-modal" style="display:none;">
<div class="wclp-modal-content">
<span class="wclp-modal-close">&times;</span>
<h2><?php esc_html_e('Transfer License to New Domain', 'wc-licensed-product'); ?></h2>
<form method="post" action="<?php echo esc_url(admin_url('admin.php?page=wc-licenses')); ?>">
<input type="hidden" name="action" value="transfer_license">
<?php wp_nonce_field('transfer_license', '_wpnonce'); ?>
<input type="hidden" name="license_id" id="transfer-license-id" value="">
<table class="form-table">
<tr>
<th scope="row"><label><?php esc_html_e('Current Domain', 'wc-licensed-product'); ?></label></th>
<td><code id="transfer-current-domain"></code></td>
</tr>
<tr>
<th scope="row"><label for="new_domain"><?php esc_html_e('New Domain', 'wc-licensed-product'); ?></label></th>
<td>
<input type="text" name="new_domain" id="transfer-new-domain" class="regular-text" placeholder="example.com" required>
<p class="description"><?php esc_html_e('Enter the new domain without http:// or www.', 'wc-licensed-product'); ?></p>
</td>
</tr>
</table>
<p class="submit">
<button type="submit" class="button button-primary"><?php esc_html_e('Transfer License', 'wc-licensed-product'); ?></button>
<button type="button" class="button wclp-modal-cancel"><?php esc_html_e('Cancel', 'wc-licensed-product'); ?></button>
</p>
</form>
</div>
</div>
<script> <script>
(function($) { (function($) {
// Checkbox select all
$('#cb-select-all-1, #cb-select-all-2').on('change', function() { $('#cb-select-all-1, #cb-select-all-2').on('change', function() {
$('input[name="license_ids[]"]').prop('checked', this.checked); $('input[name="license_ids[]"]').prop('checked', this.checked);
$('#cb-select-all-1, #cb-select-all-2').prop('checked', this.checked); $('#cb-select-all-1, #cb-select-all-2').prop('checked', this.checked);
@@ -1445,6 +1546,102 @@ final class AdminController
$('#bulk-action-selector').val(bottomAction); $('#bulk-action-selector').val(bottomAction);
} }
}); });
// Transfer modal
var $transferModal = $('#wclp-transfer-modal');
$('.wclp-transfer-link').on('click', function(e) {
e.preventDefault();
var licenseId = $(this).data('license-id');
var currentDomain = $(this).data('current-domain');
$('#transfer-license-id').val(licenseId);
$('#transfer-current-domain').text(currentDomain);
$('#transfer-new-domain').val('');
$transferModal.show();
});
// Test License modal
var $testModal = $('#wclp-test-modal');
var $testLoading = $('#wclp-test-loading');
var $testResult = $('#wclp-test-result');
var $testResultContent = $('#wclp-test-result-content');
$('.wclp-test-license-link').on('click', function(e) {
e.preventDefault();
var licenseKey = $(this).data('license-key');
var domain = $(this).data('domain');
$('#test-license-key').text(licenseKey);
$('#test-domain').text(domain);
$testLoading.show();
$testResult.hide();
$testModal.show();
$.ajax({
url: wclpAdmin.ajaxUrl,
type: 'POST',
data: {
action: 'wclp_test_license',
nonce: wclpAdmin.editNonce,
license_key: licenseKey,
domain: domain
},
success: function(response) {
$testLoading.hide();
if (response.success) {
var result = response.data;
var html = '';
if (result.valid) {
html = '<div class="notice notice-success inline"><p><strong>✓ <?php echo esc_js(__('License is VALID', 'wc-licensed-product')); ?></strong></p></div>';
html += '<table class="widefat striped"><tbody>';
html += '<tr><th><?php echo esc_js(__('Product', 'wc-licensed-product')); ?></th><td>' + escapeHtml(result.product_name || '-') + '</td></tr>';
html += '<tr><th><?php echo esc_js(__('Version', 'wc-licensed-product')); ?></th><td>' + escapeHtml(result.version || '-') + '</td></tr>';
if (result.expires_at) {
html += '<tr><th><?php echo esc_js(__('Expires', 'wc-licensed-product')); ?></th><td>' + escapeHtml(result.expires_at) + '</td></tr>';
} else {
html += '<tr><th><?php echo esc_js(__('Expires', 'wc-licensed-product')); ?></th><td><?php echo esc_js(__('Lifetime', 'wc-licensed-product')); ?></td></tr>';
}
html += '</tbody></table>';
} else {
html = '<div class="notice notice-error inline"><p><strong>✗ <?php echo esc_js(__('License is INVALID', 'wc-licensed-product')); ?></strong></p></div>';
html += '<table class="widefat striped"><tbody>';
html += '<tr><th><?php echo esc_js(__('Error Code', 'wc-licensed-product')); ?></th><td><code>' + escapeHtml(result.error || 'unknown') + '</code></td></tr>';
html += '<tr><th><?php echo esc_js(__('Message', 'wc-licensed-product')); ?></th><td>' + escapeHtml(result.message || '-') + '</td></tr>';
html += '</tbody></table>';
}
$testResultContent.html(html);
$testResult.show();
} else {
$testResultContent.html('<div class="notice notice-error inline"><p>' + escapeHtml(response.data.message || 'Error') + '</p></div>');
$testResult.show();
}
},
error: function() {
$testLoading.hide();
$testResultContent.html('<div class="notice notice-error inline"><p><?php echo esc_js(__('Failed to test license. Please try again.', 'wc-licensed-product')); ?></p></div>');
$testResult.show();
}
});
});
// Close modals
$('.wclp-modal-close, .wclp-modal-cancel').on('click', function() {
$(this).closest('.wclp-modal').hide();
});
$(window).on('click', function(e) {
if ($(e.target).hasClass('wclp-modal')) {
$(e.target).hide();
}
});
function escapeHtml(text) {
if (!text) return '';
var div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
})(jQuery); })(jQuery);
</script> </script>
</div> </div>

View File

@@ -361,7 +361,7 @@ final class VersionAdminController
wp_send_json_error(['message' => __('Version ID is required.', 'wc-licensed-product')]); wp_send_json_error(['message' => __('Version ID is required.', 'wc-licensed-product')]);
} }
$result = $this->versionManager->updateVersion($versionId, null, null, !$currentlyActive); $result = $this->versionManager->updateVersion($versionId, null, !$currentlyActive, null);
if (!$result) { if (!$result) {
wp_send_json_error(['message' => __('Failed to update version.', 'wc-licensed-product')]); wp_send_json_error(['message' => __('Failed to update version.', 'wc-licensed-product')]);

View File

@@ -184,6 +184,13 @@
</td> </td>
<td class="license-actions"> <td class="license-actions">
<div class="row-actions"> <div class="row-actions">
<span class="test">
<a href="#" class="wclp-test-license-link"
data-license-id="{{ item.license.id }}"
data-license-key="{{ esc_attr(item.license.licenseKey) }}"
data-domain="{{ esc_attr(item.license.domain) }}"
title="{{ __('Test license against API') }}">{{ __('Test') }}</a> |
</span>
{% if item.license.status != 'revoked' %} {% if item.license.status != 'revoked' %}
<span class="transfer"> <span class="transfer">
<a href="#" class="wclp-transfer-link" <a href="#" class="wclp-transfer-link"
@@ -272,6 +279,36 @@
</form> </form>
</div> </div>
<!-- Test License Modal -->
<div id="wclp-test-modal" class="wclp-modal" style="display:none;">
<div class="wclp-modal-content">
<span class="wclp-modal-close">&times;</span>
<h2>{{ __('License Validation Test') }}</h2>
<div class="wclp-test-info">
<table class="form-table">
<tr>
<th scope="row">{{ __('License Key') }}</th>
<td><code id="test-license-key"></code></td>
</tr>
<tr>
<th scope="row">{{ __('Domain') }}</th>
<td><code id="test-domain"></code></td>
</tr>
</table>
</div>
<div id="wclp-test-loading" style="display:none; text-align:center; padding:20px;">
<span class="spinner is-active" style="float:none;"></span>
<p>{{ __('Testing license...') }}</p>
</div>
<div id="wclp-test-result" style="display:none;">
<div id="wclp-test-result-content"></div>
</div>
<p class="submit">
<button type="button" class="button wclp-modal-cancel">{{ __('Close') }}</button>
</p>
</div>
</div>
<!-- Transfer Modal --> <!-- Transfer Modal -->
<div id="wclp-transfer-modal" class="wclp-modal" style="display:none;"> <div id="wclp-transfer-modal" class="wclp-modal" style="display:none;">
<div class="wclp-modal-content"> <div class="wclp-modal-content">
@@ -349,5 +386,91 @@
$modal.hide(); $modal.hide();
} }
}); });
// Test License modal
var $testModal = $('#wclp-test-modal');
var $testLoading = $('#wclp-test-loading');
var $testResult = $('#wclp-test-result');
var $testResultContent = $('#wclp-test-result-content');
$('.wclp-test-license-link').on('click', function(e) {
e.preventDefault();
var licenseKey = $(this).data('license-key');
var domain = $(this).data('domain');
// Show modal with info
$('#test-license-key').text(licenseKey);
$('#test-domain').text(domain);
$testLoading.show();
$testResult.hide();
$testModal.show();
// Call the test endpoint
$.ajax({
url: wclpAdmin.ajaxUrl,
type: 'POST',
data: {
action: 'wclp_test_license',
nonce: wclpAdmin.editNonce,
license_key: licenseKey,
domain: domain
},
success: function(response) {
$testLoading.hide();
if (response.success) {
var result = response.data;
var html = '';
if (result.valid) {
html = '<div class="notice notice-success inline"><p><strong>✓ {{ __('License is VALID') }}</strong></p></div>';
html += '<table class="widefat striped"><tbody>';
html += '<tr><th>{{ __('Product') }}</th><td>' + escapeHtml(result.product_name || '-') + '</td></tr>';
html += '<tr><th>{{ __('Version') }}</th><td>' + escapeHtml(result.version || '-') + '</td></tr>';
if (result.expires_at) {
html += '<tr><th>{{ __('Expires') }}</th><td>' + escapeHtml(result.expires_at) + '</td></tr>';
} else {
html += '<tr><th>{{ __('Expires') }}</th><td>{{ __('Lifetime') }}</td></tr>';
}
html += '</tbody></table>';
} else {
html = '<div class="notice notice-error inline"><p><strong>✗ {{ __('License is INVALID') }}</strong></p></div>';
html += '<table class="widefat striped"><tbody>';
html += '<tr><th>{{ __('Error Code') }}</th><td><code>' + escapeHtml(result.error || 'unknown') + '</code></td></tr>';
html += '<tr><th>{{ __('Message') }}</th><td>' + escapeHtml(result.message || '-') + '</td></tr>';
html += '</tbody></table>';
}
$testResultContent.html(html);
$testResult.show();
} else {
$testResultContent.html('<div class="notice notice-error inline"><p>' + escapeHtml(response.data.message || 'Error') + '</p></div>');
$testResult.show();
}
},
error: function() {
$testLoading.hide();
$testResultContent.html('<div class="notice notice-error inline"><p>{{ __('Failed to test license. Please try again.') }}</p></div>');
$testResult.show();
}
});
});
// Close test modal
$testModal.find('.wclp-modal-close, .wclp-modal-cancel').on('click', function() {
$testModal.hide();
});
$(window).on('click', function(e) {
if ($(e.target).is($testModal)) {
$testModal.hide();
}
});
function escapeHtml(text) {
if (!text) return '';
var div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
})(jQuery); })(jQuery);
</script> </script>

View File

@@ -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.2 * Version: 0.3.3
* 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.2'); define('WC_LICENSED_PRODUCT_VERSION', '0.3.3');
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__));