diff --git a/CHANGELOG.md b/CHANGELOG.md index 467cf1e..fa1fb4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.2] - 2026-01-22 + +### Added + +- SHA256 checksum column in admin product versions table +- File hash display in customer account downloads section +- Visual indicators for file integrity verification + +### Changed + +- Checksum file upload field now styled consistently with package upload field +- Download list items now show truncated hash with full hash on hover + +### Technical Details + +- ProductVersion `getFileHash()` method now exposed in admin and frontend views +- Frontend CSS extended with `.download-hash` styles +- Admin CSS extended with `.file-hash` styles + ## [0.2.1] - 2026-01-22 ### Changed @@ -354,7 +373,8 @@ define('WC_LICENSE_SERVER_SECRET', 'your-secure-random-string-min-32-chars'); - WordPress REST API integration - Custom WooCommerce product type extending WC_Product -[Unreleased]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.2.1...HEAD +[Unreleased]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.2.2...HEAD +[0.2.2]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.2.1...v0.2.2 [0.2.1]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.2.0...v0.2.1 [0.2.0]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.1.0...v0.2.0 [0.1.0]: https://src.bundespruefstelle.ch/magdev/wc-licensed-product/compare/v0.0.11...v0.1.0 diff --git a/assets/css/admin.css b/assets/css/admin.css index 17537b7..618bb9a 100644 --- a/assets/css/admin.css +++ b/assets/css/admin.css @@ -43,6 +43,13 @@ font-size: 0.9em; } +/* File Hash */ +code.file-hash { + cursor: help; + font-size: 0.85em; + color: #666; +} + /* License Product Tab */ #woocommerce-product-data .show_if_licensed { display: block !important; diff --git a/assets/css/frontend.css b/assets/css/frontend.css index 860cf71..bde49eb 100644 --- a/assets/css/frontend.css +++ b/assets/css/frontend.css @@ -247,6 +247,30 @@ margin-left: auto; } +.download-hash { + display: inline-flex; + align-items: center; + gap: 0.25em; + font-size: 0.8em; + color: #666; +} + +.download-hash .dashicons { + font-size: 14px; + width: 14px; + height: 14px; + color: #28a745; +} + +.download-hash code { + font-family: 'SF Mono', Monaco, Consolas, monospace; + background: #f5f5f5; + padding: 0.2em 0.4em; + border-radius: 3px; + font-size: 0.9em; + color: #666; +} + /* Domain Field */ #licensed-product-domain-field { margin-top: 2em; diff --git a/languages/wc-licensed-product-de_CH.mo b/languages/wc-licensed-product-de_CH.mo index c1d13da..e3dcc68 100644 Binary files a/languages/wc-licensed-product-de_CH.mo and b/languages/wc-licensed-product-de_CH.mo differ diff --git a/languages/wc-licensed-product-de_CH.po b/languages/wc-licensed-product-de_CH.po index de89417..177c2e3 100644 --- a/languages/wc-licensed-product-de_CH.po +++ b/languages/wc-licensed-product-de_CH.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: WC Licensed Product 0.2.1\n" "Report-Msgid-Bugs-To: magdev3.0@gmail.com\n" -"POT-Creation-Date: 2026-01-22 17:25+0100\n" +"POT-Creation-Date: 2026-01-22 17:32+0100\n" "PO-Revision-Date: 2026-01-22T17:15:00+00:00\n" "Last-Translator: Marco Graetsch \n" "Language-Team: German (Switzerland) \n" @@ -81,7 +81,7 @@ msgstr "Bearbeiten" #: src/Admin/AdminController.php:146 src/Admin/AdminController.php:1303 #: src/Admin/AdminController.php:1323 src/Admin/AdminController.php:1344 #: src/Admin/OrderLicenseController.php:185 -#: src/Frontend/AccountController.php:270 +#: src/Frontend/AccountController.php:271 msgid "Cancel" msgstr "Abbrechen" @@ -99,25 +99,25 @@ msgstr "Speichern" msgid "Lifetime" msgstr "Lebenslang" -#: src/Admin/AdminController.php:149 src/Frontend/AccountController.php:308 +#: src/Admin/AdminController.php:149 src/Frontend/AccountController.php:309 msgid "Copied!" msgstr "Kopiert!" -#: src/Admin/AdminController.php:150 src/Frontend/AccountController.php:309 +#: src/Admin/AdminController.php:150 src/Frontend/AccountController.php:310 msgid "Copy failed" msgstr "Kopieren fehlgeschlagen" #: src/Admin/AdminController.php:153 src/Admin/AdminController.php:875 #: src/Admin/AdminController.php:1194 src/Admin/AdminController.php:1317 -#: src/Admin/VersionAdminController.php:172 -#: src/Admin/VersionAdminController.php:394 +#: src/Admin/VersionAdminController.php:180 +#: src/Admin/VersionAdminController.php:409 msgid "Active" msgstr "Aktiv" #: src/Admin/AdminController.php:154 src/Admin/AdminController.php:882 #: src/Admin/AdminController.php:1195 src/Admin/AdminController.php:1318 -#: src/Admin/VersionAdminController.php:172 -#: src/Admin/VersionAdminController.php:394 +#: src/Admin/VersionAdminController.php:180 +#: src/Admin/VersionAdminController.php:409 msgid "Inactive" msgstr "Inaktiv" @@ -135,9 +135,9 @@ msgstr "Widerrufen" #: src/Admin/AdminController.php:246 src/Admin/AdminController.php:298 #: src/Admin/AdminController.php:336 src/Admin/OrderLicenseController.php:301 #: src/Admin/OrderLicenseController.php:340 -#: src/Admin/VersionAdminController.php:249 -#: src/Admin/VersionAdminController.php:318 -#: src/Admin/VersionAdminController.php:344 +#: src/Admin/VersionAdminController.php:257 +#: src/Admin/VersionAdminController.php:326 +#: src/Admin/VersionAdminController.php:352 msgid "Permission denied." msgstr "Zugriff verweigert." @@ -208,7 +208,7 @@ msgstr "Lizenz konnte nicht widerrufen werden." #: src/Admin/AdminController.php:466 src/Admin/AdminController.php:484 #: src/Admin/AdminController.php:504 src/Admin/AdminController.php:522 #: src/Admin/AdminController.php:589 src/Admin/AdminController.php:779 -#: src/Frontend/AccountController.php:325 +#: src/Frontend/AccountController.php:326 msgid "Security check failed." msgstr "Sicherheitsüberprüfung fehlgeschlagen." @@ -430,14 +430,14 @@ msgid "Bulk Actions" msgstr "Massenaktionen" #: src/Admin/AdminController.php:1235 src/Admin/AdminController.php:1407 -#: src/Admin/VersionAdminController.php:178 -#: src/Admin/VersionAdminController.php:400 +#: src/Admin/VersionAdminController.php:186 +#: src/Admin/VersionAdminController.php:415 msgid "Activate" msgstr "Aktivieren" #: src/Admin/AdminController.php:1236 src/Admin/AdminController.php:1408 -#: src/Admin/VersionAdminController.php:178 -#: src/Admin/VersionAdminController.php:400 +#: src/Admin/VersionAdminController.php:186 +#: src/Admin/VersionAdminController.php:415 msgid "Deactivate" msgstr "Deaktivieren" @@ -459,8 +459,8 @@ msgid "Extend 1 year" msgstr "1 Jahr verlängern" #: src/Admin/AdminController.php:1241 src/Admin/AdminController.php:1377 -#: src/Admin/AdminController.php:1413 src/Admin/VersionAdminController.php:181 -#: src/Admin/VersionAdminController.php:403 +#: src/Admin/AdminController.php:1413 src/Admin/VersionAdminController.php:189 +#: src/Admin/VersionAdminController.php:418 msgid "Delete" msgstr "Löschen" @@ -492,7 +492,7 @@ msgstr "Domain" #: src/Admin/AdminController.php:1257 src/Admin/AdminController.php:1395 #: src/Admin/OrderLicenseController.php:147 -#: src/Admin/VersionAdminController.php:139 +#: src/Admin/VersionAdminController.php:140 msgid "Status" msgstr "Status" @@ -508,7 +508,7 @@ msgstr "Läuft ab" #: src/Admin/AdminController.php:1260 src/Admin/AdminController.php:1398 #: src/Admin/OrderLicenseController.php:149 -#: src/Admin/VersionAdminController.php:141 +#: src/Admin/VersionAdminController.php:142 msgid "Actions" msgstr "Aktionen" @@ -516,7 +516,7 @@ msgstr "Aktionen" msgid "No licenses found." msgstr "Keine Lizenzen gefunden." -#: src/Admin/AdminController.php:1276 src/Frontend/AccountController.php:193 +#: src/Admin/AdminController.php:1276 src/Frontend/AccountController.php:194 msgid "Copy to clipboard" msgstr "In Zwischenablage kopieren" @@ -718,8 +718,8 @@ msgid "Error saving. Please try again." msgstr "Fehler beim Speichern. Bitte versuchen Sie es erneut." #: src/Admin/OrderLicenseController.php:288 -#: src/Frontend/AccountController.php:313 -#: src/Frontend/AccountController.php:345 +#: src/Frontend/AccountController.php:314 +#: src/Frontend/AccountController.php:346 msgid "Please enter a valid domain." msgstr "Bitte geben Sie eine gültige Domain ein." @@ -737,7 +737,7 @@ msgid "Order domain updated." msgstr "Bestellungs-Domain aktualisiert." #: src/Admin/OrderLicenseController.php:363 -#: src/Frontend/AccountController.php:351 +#: src/Frontend/AccountController.php:352 #: src/Frontend/DownloadController.php:105 msgid "License not found." msgstr "Lizenz nicht gefunden." @@ -890,7 +890,7 @@ msgstr "" "Dateiintegrität zu überprüfen." #: src/Admin/VersionAdminController.php:116 -#: src/Admin/VersionAdminController.php:138 +#: src/Admin/VersionAdminController.php:139 msgid "Release Notes" msgstr "Versionshinweise" @@ -902,107 +902,111 @@ msgstr "Version hinzufügen" msgid "Existing Versions" msgstr "Vorhandene Versionen" -#: src/Admin/VersionAdminController.php:140 +#: src/Admin/VersionAdminController.php:138 +msgid "SHA256" +msgstr "SHA256" + +#: src/Admin/VersionAdminController.php:141 msgid "Released" msgstr "Veröffentlicht" -#: src/Admin/VersionAdminController.php:147 +#: src/Admin/VersionAdminController.php:148 msgid "No versions found. Add your first version above." msgstr "Keine Versionen gefunden. Fügen Sie Ihre erste Version oben hinzu." -#: src/Admin/VersionAdminController.php:163 -#: src/Admin/VersionAdminController.php:385 +#: src/Admin/VersionAdminController.php:164 +#: src/Admin/VersionAdminController.php:393 msgid "Uploaded file" msgstr "Hochgeladene Datei" -#: src/Admin/VersionAdminController.php:166 -#: src/Admin/VersionAdminController.php:388 +#: src/Admin/VersionAdminController.php:167 +#: src/Admin/VersionAdminController.php:396 msgid "No download file" msgstr "Keine Download-Datei" -#: src/Admin/VersionAdminController.php:222 +#: src/Admin/VersionAdminController.php:230 msgid "Are you sure you want to delete this version?" msgstr "Sind Sie sicher, dass Sie diese Version löschen möchten?" -#: src/Admin/VersionAdminController.php:223 +#: src/Admin/VersionAdminController.php:231 msgid "Please enter a version number." msgstr "Bitte geben Sie eine Versionsnummer ein." -#: src/Admin/VersionAdminController.php:224 +#: src/Admin/VersionAdminController.php:232 msgid "Please enter a valid version number (e.g., 1.0.0)." msgstr "Bitte geben Sie eine gültige Versionsnummer ein (z.B. 1.0.0)." -#: src/Admin/VersionAdminController.php:225 +#: src/Admin/VersionAdminController.php:233 msgid "An error occurred. Please try again." msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut." -#: src/Admin/VersionAdminController.php:226 +#: src/Admin/VersionAdminController.php:234 msgid "Select Download File" msgstr "Download-Datei auswählen" -#: src/Admin/VersionAdminController.php:227 +#: src/Admin/VersionAdminController.php:235 msgid "Use this file" msgstr "Diese Datei verwenden" -#: src/Admin/VersionAdminController.php:228 +#: src/Admin/VersionAdminController.php:236 msgid "" "Invalid checksum file format. File must contain a 64-character SHA256 hash." msgstr "" "Ungültiges Prüfsummendateiformat. Die Datei muss einen 64-stelligen SHA256-" "Hash enthalten." -#: src/Admin/VersionAdminController.php:229 +#: src/Admin/VersionAdminController.php:237 msgid "Failed to read checksum file." msgstr "Prüfsummendatei konnte nicht gelesen werden." -#: src/Admin/VersionAdminController.php:259 +#: src/Admin/VersionAdminController.php:267 msgid "Product ID and version are required." msgstr "Produkt-ID und Version sind erforderlich." -#: src/Admin/VersionAdminController.php:264 +#: src/Admin/VersionAdminController.php:272 msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." msgstr "" "Ungültiges Versionsformat. Verwenden Sie semantische Versionierung (z.B. " "1.0.0)." -#: src/Admin/VersionAdminController.php:269 +#: src/Admin/VersionAdminController.php:277 msgid "This version already exists." msgstr "Diese Version existiert bereits." -#: src/Admin/VersionAdminController.php:275 +#: src/Admin/VersionAdminController.php:283 msgid "Product not found." msgstr "Produkt nicht gefunden." -#: src/Admin/VersionAdminController.php:279 +#: src/Admin/VersionAdminController.php:287 msgid "This product is not a licensed product." msgstr "Dieses Produkt ist kein lizensiertes Produkt." -#: src/Admin/VersionAdminController.php:296 +#: src/Admin/VersionAdminController.php:304 msgid "Failed to create version." msgstr "Version konnte nicht erstellt werden." -#: src/Admin/VersionAdminController.php:304 +#: src/Admin/VersionAdminController.php:312 msgid "Version added successfully." msgstr "Version erfolgreich hinzugefügt." -#: src/Admin/VersionAdminController.php:324 -#: src/Admin/VersionAdminController.php:351 +#: src/Admin/VersionAdminController.php:332 +#: src/Admin/VersionAdminController.php:359 msgid "Version ID is required." msgstr "Versions-ID ist erforderlich." -#: src/Admin/VersionAdminController.php:330 +#: src/Admin/VersionAdminController.php:338 msgid "Failed to delete version." msgstr "Version konnte nicht gelöscht werden." -#: src/Admin/VersionAdminController.php:333 +#: src/Admin/VersionAdminController.php:341 msgid "Version deleted successfully." msgstr "Version erfolgreich gelöscht." -#: src/Admin/VersionAdminController.php:357 +#: src/Admin/VersionAdminController.php:365 msgid "Failed to update version." msgstr "Version konnte nicht aktualisiert werden." -#: src/Admin/VersionAdminController.php:361 +#: src/Admin/VersionAdminController.php:369 msgid "Version updated successfully." msgstr "Version erfolgreich aktualisiert." @@ -1084,7 +1088,7 @@ msgstr "Domain für Lizenz-Aktivierung" #: src/Email/LicenseEmailController.php:281 #: src/Email/LicenseExpirationEmail.php:207 #: src/Email/LicenseExpirationEmail.php:270 -#: src/Frontend/AccountController.php:189 +#: src/Frontend/AccountController.php:190 msgid "License Key:" msgstr "Lizenzschlüssel:" @@ -1099,7 +1103,7 @@ msgstr "Lizensierte Domain:" #: src/Email/LicenseEmailController.php:248 #: src/Email/LicenseEmailController.php:287 -#: src/Frontend/AccountController.php:217 +#: src/Frontend/AccountController.php:218 msgid "Never" msgstr "Nie" @@ -1116,7 +1120,7 @@ msgstr "IHRE LIZENZSCHLÜSSEL" #: src/Email/LicenseEmailController.php:284 #: src/Email/LicenseExpirationEmail.php:219 #: src/Email/LicenseExpirationEmail.php:272 -#: src/Frontend/AccountController.php:212 +#: src/Frontend/AccountController.php:213 msgid "Expires:" msgstr "Läuft ab:" @@ -1145,7 +1149,7 @@ msgid "License Expiration Notice" msgstr "Lizenzablauf-Benachrichtigung" #: src/Email/LicenseExpirationEmail.php:107 -#: src/Frontend/AccountController.php:139 src/License/LicenseManager.php:760 +#: src/Frontend/AccountController.php:140 src/License/LicenseManager.php:760 msgid "Unknown Product" msgstr "Unbekanntes Produkt" @@ -1179,7 +1183,7 @@ msgstr "Produkt:" #: src/Email/LicenseExpirationEmail.php:215 #: src/Email/LicenseExpirationEmail.php:271 -#: src/Frontend/AccountController.php:200 +#: src/Frontend/AccountController.php:201 msgid "Domain:" msgstr "Domain:" @@ -1237,61 +1241,61 @@ msgstr "Wählen Sie, welches E-Mail-Format gesendet werden soll." msgid "Please log in to view your licenses." msgstr "Bitte melden Sie sich an, um Ihre Lizenzen zu sehen." -#: src/Frontend/AccountController.php:164 +#: src/Frontend/AccountController.php:165 msgid "You have no licenses yet." msgstr "Sie haben noch keine Lizenzen." -#: src/Frontend/AccountController.php:206 +#: src/Frontend/AccountController.php:207 msgid "Transfer to new domain" msgstr "Auf neue Domain übertragen" -#: src/Frontend/AccountController.php:208 +#: src/Frontend/AccountController.php:209 msgid "Transfer" msgstr "Übertragen" -#: src/Frontend/AccountController.php:225 +#: src/Frontend/AccountController.php:226 msgid "Available Downloads" msgstr "Verfügbare Downloads" -#: src/Frontend/AccountController.php:231 +#: src/Frontend/AccountController.php:232 #, php-format msgid "Version %s" msgstr "Version %s" -#: src/Frontend/AccountController.php:248 +#: src/Frontend/AccountController.php:249 msgid "Close" msgstr "Schliessen" -#: src/Frontend/AccountController.php:249 +#: src/Frontend/AccountController.php:250 msgid "Transfer License to New Domain" msgstr "Lizenz auf neue Domain übertragen" -#: src/Frontend/AccountController.php:254 +#: src/Frontend/AccountController.php:255 msgid "Current Domain" msgstr "Aktuelle Domain" -#: src/Frontend/AccountController.php:259 +#: src/Frontend/AccountController.php:260 msgid "New Domain" msgstr "Neue Domain" -#: src/Frontend/AccountController.php:263 +#: 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:268 +#: src/Frontend/AccountController.php:269 msgid "Transfer License" msgstr "Lizenz übertragen" -#: src/Frontend/AccountController.php:310 -#: src/Frontend/AccountController.php:377 +#: src/Frontend/AccountController.php:311 +#: src/Frontend/AccountController.php:378 msgid "License transferred successfully!" msgstr "Lizenz erfolgreich übertragen!" -#: src/Frontend/AccountController.php:311 +#: src/Frontend/AccountController.php:312 msgid "Transfer failed. Please try again." msgstr "Übertragung fehlgeschlagen. Bitte versuchen Sie es erneut." -#: src/Frontend/AccountController.php:312 +#: src/Frontend/AccountController.php:313 msgid "" "Are you sure you want to transfer this license to a new domain? This action " "cannot be undone." @@ -1299,31 +1303,31 @@ msgstr "" "Sind Sie sicher, dass Sie diese Lizenz auf eine neue Domain übertragen " "möchten? Diese Aktion kann nicht rückgängig gemacht werden." -#: src/Frontend/AccountController.php:331 +#: src/Frontend/AccountController.php:332 msgid "Please log in to transfer a license." msgstr "Bitte melden Sie sich an, um eine Lizenz zu übertragen." -#: src/Frontend/AccountController.php:337 +#: src/Frontend/AccountController.php:338 msgid "Invalid license." msgstr "Ungültige Lizenz." -#: src/Frontend/AccountController.php:355 +#: src/Frontend/AccountController.php:356 msgid "You do not have permission to transfer this license." msgstr "Sie haben keine Berechtigung, diese Lizenz zu übertragen." -#: src/Frontend/AccountController.php:360 +#: src/Frontend/AccountController.php:361 msgid "Revoked licenses cannot be transferred." msgstr "Widerrufene Lizenzen können nicht übertragen werden." -#: src/Frontend/AccountController.php:364 +#: src/Frontend/AccountController.php:365 msgid "Expired licenses cannot be transferred." msgstr "Abgelaufene Lizenzen können nicht übertragen werden." -#: src/Frontend/AccountController.php:369 +#: src/Frontend/AccountController.php:370 msgid "The new domain is the same as the current domain." msgstr "Die neue Domain ist dieselbe wie die aktuelle Domain." -#: src/Frontend/AccountController.php:381 +#: src/Frontend/AccountController.php:382 msgid "Failed to transfer license. Please try again." msgstr "Lizenzübertragung fehlgeschlagen. Bitte versuchen Sie es erneut." @@ -1473,9 +1477,6 @@ msgstr "Datei-Prüfsumme stimmt nicht überein. Erwartet: %1$s, Erhalten: %2$s" #~ "Alternativ: Geben Sie eine externe Download-URL ein, anstatt eine Datei " #~ "hochzuladen." -#~ msgid "SHA256 Hash" -#~ msgstr "SHA256 Prüfsumme" - #~ msgid "Enter SHA256 checksum..." #~ msgstr "SHA256 Prüfsumme eingeben..." diff --git a/languages/wc-licensed-product.pot b/languages/wc-licensed-product.pot index ce86959..b71c042 100644 --- a/languages/wc-licensed-product.pot +++ b/languages/wc-licensed-product.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: WooCommerce Licensed Product 0.2.1\n" +"Project-Id-Version: WooCommerce Licensed Product 0.2.2\n" "Report-Msgid-Bugs-To: magdev3.0@gmail.com\n" -"POT-Creation-Date: 2026-01-22 17:25+0100\n" +"POT-Creation-Date: 2026-01-22 17:32+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -80,7 +80,7 @@ msgstr "" #: src/Admin/AdminController.php:146 src/Admin/AdminController.php:1303 #: src/Admin/AdminController.php:1323 src/Admin/AdminController.php:1344 #: src/Admin/OrderLicenseController.php:185 -#: src/Frontend/AccountController.php:270 +#: src/Frontend/AccountController.php:271 msgid "Cancel" msgstr "" @@ -98,25 +98,25 @@ msgstr "" msgid "Lifetime" msgstr "" -#: src/Admin/AdminController.php:149 src/Frontend/AccountController.php:308 +#: src/Admin/AdminController.php:149 src/Frontend/AccountController.php:309 msgid "Copied!" msgstr "" -#: src/Admin/AdminController.php:150 src/Frontend/AccountController.php:309 +#: src/Admin/AdminController.php:150 src/Frontend/AccountController.php:310 msgid "Copy failed" msgstr "" #: src/Admin/AdminController.php:153 src/Admin/AdminController.php:875 #: src/Admin/AdminController.php:1194 src/Admin/AdminController.php:1317 -#: src/Admin/VersionAdminController.php:172 -#: src/Admin/VersionAdminController.php:394 +#: src/Admin/VersionAdminController.php:180 +#: src/Admin/VersionAdminController.php:409 msgid "Active" msgstr "" #: src/Admin/AdminController.php:154 src/Admin/AdminController.php:882 #: src/Admin/AdminController.php:1195 src/Admin/AdminController.php:1318 -#: src/Admin/VersionAdminController.php:172 -#: src/Admin/VersionAdminController.php:394 +#: src/Admin/VersionAdminController.php:180 +#: src/Admin/VersionAdminController.php:409 msgid "Inactive" msgstr "" @@ -134,9 +134,9 @@ msgstr "" #: src/Admin/AdminController.php:246 src/Admin/AdminController.php:298 #: src/Admin/AdminController.php:336 src/Admin/OrderLicenseController.php:301 #: src/Admin/OrderLicenseController.php:340 -#: src/Admin/VersionAdminController.php:249 -#: src/Admin/VersionAdminController.php:318 -#: src/Admin/VersionAdminController.php:344 +#: src/Admin/VersionAdminController.php:257 +#: src/Admin/VersionAdminController.php:326 +#: src/Admin/VersionAdminController.php:352 msgid "Permission denied." msgstr "" @@ -207,7 +207,7 @@ msgstr "" #: src/Admin/AdminController.php:466 src/Admin/AdminController.php:484 #: src/Admin/AdminController.php:504 src/Admin/AdminController.php:522 #: src/Admin/AdminController.php:589 src/Admin/AdminController.php:779 -#: src/Frontend/AccountController.php:325 +#: src/Frontend/AccountController.php:326 msgid "Security check failed." msgstr "" @@ -427,14 +427,14 @@ msgid "Bulk Actions" msgstr "" #: src/Admin/AdminController.php:1235 src/Admin/AdminController.php:1407 -#: src/Admin/VersionAdminController.php:178 -#: src/Admin/VersionAdminController.php:400 +#: src/Admin/VersionAdminController.php:186 +#: src/Admin/VersionAdminController.php:415 msgid "Activate" msgstr "" #: src/Admin/AdminController.php:1236 src/Admin/AdminController.php:1408 -#: src/Admin/VersionAdminController.php:178 -#: src/Admin/VersionAdminController.php:400 +#: src/Admin/VersionAdminController.php:186 +#: src/Admin/VersionAdminController.php:415 msgid "Deactivate" msgstr "" @@ -456,8 +456,8 @@ msgid "Extend 1 year" msgstr "" #: src/Admin/AdminController.php:1241 src/Admin/AdminController.php:1377 -#: src/Admin/AdminController.php:1413 src/Admin/VersionAdminController.php:181 -#: src/Admin/VersionAdminController.php:403 +#: src/Admin/AdminController.php:1413 src/Admin/VersionAdminController.php:189 +#: src/Admin/VersionAdminController.php:418 msgid "Delete" msgstr "" @@ -489,7 +489,7 @@ msgstr "" #: src/Admin/AdminController.php:1257 src/Admin/AdminController.php:1395 #: src/Admin/OrderLicenseController.php:147 -#: src/Admin/VersionAdminController.php:139 +#: src/Admin/VersionAdminController.php:140 msgid "Status" msgstr "" @@ -505,7 +505,7 @@ msgstr "" #: src/Admin/AdminController.php:1260 src/Admin/AdminController.php:1398 #: src/Admin/OrderLicenseController.php:149 -#: src/Admin/VersionAdminController.php:141 +#: src/Admin/VersionAdminController.php:142 msgid "Actions" msgstr "" @@ -513,7 +513,7 @@ msgstr "" msgid "No licenses found." msgstr "" -#: src/Admin/AdminController.php:1276 src/Frontend/AccountController.php:193 +#: src/Admin/AdminController.php:1276 src/Frontend/AccountController.php:194 msgid "Copy to clipboard" msgstr "" @@ -701,8 +701,8 @@ msgid "Error saving. Please try again." msgstr "" #: src/Admin/OrderLicenseController.php:288 -#: src/Frontend/AccountController.php:313 -#: src/Frontend/AccountController.php:345 +#: src/Frontend/AccountController.php:314 +#: src/Frontend/AccountController.php:346 msgid "Please enter a valid domain." msgstr "" @@ -720,7 +720,7 @@ msgid "Order domain updated." msgstr "" #: src/Admin/OrderLicenseController.php:363 -#: src/Frontend/AccountController.php:351 +#: src/Frontend/AccountController.php:352 #: src/Frontend/DownloadController.php:105 msgid "License not found." msgstr "" @@ -858,7 +858,7 @@ msgid "" msgstr "" #: src/Admin/VersionAdminController.php:116 -#: src/Admin/VersionAdminController.php:138 +#: src/Admin/VersionAdminController.php:139 msgid "Release Notes" msgstr "" @@ -870,103 +870,107 @@ msgstr "" msgid "Existing Versions" msgstr "" -#: src/Admin/VersionAdminController.php:140 +#: src/Admin/VersionAdminController.php:138 +msgid "SHA256" +msgstr "" + +#: src/Admin/VersionAdminController.php:141 msgid "Released" msgstr "" -#: src/Admin/VersionAdminController.php:147 +#: src/Admin/VersionAdminController.php:148 msgid "No versions found. Add your first version above." msgstr "" -#: src/Admin/VersionAdminController.php:163 -#: src/Admin/VersionAdminController.php:385 +#: src/Admin/VersionAdminController.php:164 +#: src/Admin/VersionAdminController.php:393 msgid "Uploaded file" msgstr "" -#: src/Admin/VersionAdminController.php:166 -#: src/Admin/VersionAdminController.php:388 +#: src/Admin/VersionAdminController.php:167 +#: src/Admin/VersionAdminController.php:396 msgid "No download file" msgstr "" -#: src/Admin/VersionAdminController.php:222 +#: src/Admin/VersionAdminController.php:230 msgid "Are you sure you want to delete this version?" msgstr "" -#: src/Admin/VersionAdminController.php:223 +#: src/Admin/VersionAdminController.php:231 msgid "Please enter a version number." msgstr "" -#: src/Admin/VersionAdminController.php:224 +#: src/Admin/VersionAdminController.php:232 msgid "Please enter a valid version number (e.g., 1.0.0)." msgstr "" -#: src/Admin/VersionAdminController.php:225 +#: src/Admin/VersionAdminController.php:233 msgid "An error occurred. Please try again." msgstr "" -#: src/Admin/VersionAdminController.php:226 +#: src/Admin/VersionAdminController.php:234 msgid "Select Download File" msgstr "" -#: src/Admin/VersionAdminController.php:227 +#: src/Admin/VersionAdminController.php:235 msgid "Use this file" msgstr "" -#: src/Admin/VersionAdminController.php:228 +#: src/Admin/VersionAdminController.php:236 msgid "" "Invalid checksum file format. File must contain a 64-character SHA256 hash." msgstr "" -#: src/Admin/VersionAdminController.php:229 +#: src/Admin/VersionAdminController.php:237 msgid "Failed to read checksum file." msgstr "" -#: src/Admin/VersionAdminController.php:259 +#: src/Admin/VersionAdminController.php:267 msgid "Product ID and version are required." msgstr "" -#: src/Admin/VersionAdminController.php:264 +#: src/Admin/VersionAdminController.php:272 msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." msgstr "" -#: src/Admin/VersionAdminController.php:269 +#: src/Admin/VersionAdminController.php:277 msgid "This version already exists." msgstr "" -#: src/Admin/VersionAdminController.php:275 +#: src/Admin/VersionAdminController.php:283 msgid "Product not found." msgstr "" -#: src/Admin/VersionAdminController.php:279 +#: src/Admin/VersionAdminController.php:287 msgid "This product is not a licensed product." msgstr "" -#: src/Admin/VersionAdminController.php:296 +#: src/Admin/VersionAdminController.php:304 msgid "Failed to create version." msgstr "" -#: src/Admin/VersionAdminController.php:304 +#: src/Admin/VersionAdminController.php:312 msgid "Version added successfully." msgstr "" -#: src/Admin/VersionAdminController.php:324 -#: src/Admin/VersionAdminController.php:351 +#: src/Admin/VersionAdminController.php:332 +#: src/Admin/VersionAdminController.php:359 msgid "Version ID is required." msgstr "" -#: src/Admin/VersionAdminController.php:330 +#: src/Admin/VersionAdminController.php:338 msgid "Failed to delete version." msgstr "" -#: src/Admin/VersionAdminController.php:333 +#: src/Admin/VersionAdminController.php:341 msgid "Version deleted successfully." msgstr "" -#: src/Admin/VersionAdminController.php:357 +#: src/Admin/VersionAdminController.php:365 msgid "Failed to update version." msgstr "" -#: src/Admin/VersionAdminController.php:361 +#: src/Admin/VersionAdminController.php:369 msgid "Version updated successfully." msgstr "" @@ -1046,7 +1050,7 @@ msgstr "" #: src/Email/LicenseEmailController.php:281 #: src/Email/LicenseExpirationEmail.php:207 #: src/Email/LicenseExpirationEmail.php:270 -#: src/Frontend/AccountController.php:189 +#: src/Frontend/AccountController.php:190 msgid "License Key:" msgstr "" @@ -1061,7 +1065,7 @@ msgstr "" #: src/Email/LicenseEmailController.php:248 #: src/Email/LicenseEmailController.php:287 -#: src/Frontend/AccountController.php:217 +#: src/Frontend/AccountController.php:218 msgid "Never" msgstr "" @@ -1077,7 +1081,7 @@ msgstr "" #: src/Email/LicenseEmailController.php:284 #: src/Email/LicenseExpirationEmail.php:219 #: src/Email/LicenseExpirationEmail.php:272 -#: src/Frontend/AccountController.php:212 +#: src/Frontend/AccountController.php:213 msgid "Expires:" msgstr "" @@ -1102,7 +1106,7 @@ msgid "License Expiration Notice" msgstr "" #: src/Email/LicenseExpirationEmail.php:107 -#: src/Frontend/AccountController.php:139 src/License/LicenseManager.php:760 +#: src/Frontend/AccountController.php:140 src/License/LicenseManager.php:760 msgid "Unknown Product" msgstr "" @@ -1136,7 +1140,7 @@ msgstr "" #: src/Email/LicenseExpirationEmail.php:215 #: src/Email/LicenseExpirationEmail.php:271 -#: src/Frontend/AccountController.php:200 +#: src/Frontend/AccountController.php:201 msgid "Domain:" msgstr "" @@ -1192,91 +1196,91 @@ msgstr "" msgid "Please log in to view your licenses." msgstr "" -#: src/Frontend/AccountController.php:164 +#: src/Frontend/AccountController.php:165 msgid "You have no licenses yet." msgstr "" -#: src/Frontend/AccountController.php:206 +#: src/Frontend/AccountController.php:207 msgid "Transfer to new domain" msgstr "" -#: src/Frontend/AccountController.php:208 +#: src/Frontend/AccountController.php:209 msgid "Transfer" msgstr "" -#: src/Frontend/AccountController.php:225 +#: src/Frontend/AccountController.php:226 msgid "Available Downloads" msgstr "" -#: src/Frontend/AccountController.php:231 +#: src/Frontend/AccountController.php:232 #, php-format msgid "Version %s" msgstr "" -#: src/Frontend/AccountController.php:248 +#: src/Frontend/AccountController.php:249 msgid "Close" msgstr "" -#: src/Frontend/AccountController.php:249 +#: src/Frontend/AccountController.php:250 msgid "Transfer License to New Domain" msgstr "" -#: src/Frontend/AccountController.php:254 +#: src/Frontend/AccountController.php:255 msgid "Current Domain" msgstr "" -#: src/Frontend/AccountController.php:259 +#: src/Frontend/AccountController.php:260 msgid "New Domain" msgstr "" -#: src/Frontend/AccountController.php:263 +#: src/Frontend/AccountController.php:264 msgid "Enter the new domain without http:// or www." msgstr "" -#: src/Frontend/AccountController.php:268 +#: src/Frontend/AccountController.php:269 msgid "Transfer License" msgstr "" -#: src/Frontend/AccountController.php:310 -#: src/Frontend/AccountController.php:377 +#: src/Frontend/AccountController.php:311 +#: src/Frontend/AccountController.php:378 msgid "License transferred successfully!" msgstr "" -#: src/Frontend/AccountController.php:311 +#: src/Frontend/AccountController.php:312 msgid "Transfer failed. Please try again." msgstr "" -#: src/Frontend/AccountController.php:312 +#: src/Frontend/AccountController.php:313 msgid "" "Are you sure you want to transfer this license to a new domain? This action " "cannot be undone." msgstr "" -#: src/Frontend/AccountController.php:331 +#: src/Frontend/AccountController.php:332 msgid "Please log in to transfer a license." msgstr "" -#: src/Frontend/AccountController.php:337 +#: src/Frontend/AccountController.php:338 msgid "Invalid license." msgstr "" -#: src/Frontend/AccountController.php:355 +#: src/Frontend/AccountController.php:356 msgid "You do not have permission to transfer this license." msgstr "" -#: src/Frontend/AccountController.php:360 +#: src/Frontend/AccountController.php:361 msgid "Revoked licenses cannot be transferred." msgstr "" -#: src/Frontend/AccountController.php:364 +#: src/Frontend/AccountController.php:365 msgid "Expired licenses cannot be transferred." msgstr "" -#: src/Frontend/AccountController.php:369 +#: src/Frontend/AccountController.php:370 msgid "The new domain is the same as the current domain." msgstr "" -#: src/Frontend/AccountController.php:381 +#: src/Frontend/AccountController.php:382 msgid "Failed to transfer license. Please try again." msgstr "" diff --git a/src/Admin/VersionAdminController.php b/src/Admin/VersionAdminController.php index 8a61aa3..24bfcc0 100644 --- a/src/Admin/VersionAdminController.php +++ b/src/Admin/VersionAdminController.php @@ -135,6 +135,7 @@ final class VersionAdminController + @@ -144,7 +145,7 @@ final class VersionAdminController - + @@ -166,6 +167,13 @@ final class VersionAdminController + + getFileHash()): ?> + getFileHash(), 0, 12)); ?>... + + + + getReleaseNotes() ? wp_trim_words($version->getReleaseNotes(), 10) : '—'); ?> @@ -388,6 +396,13 @@ final class VersionAdminController + + getFileHash()): ?> + getFileHash(), 0, 12)); ?>... + + + + getReleaseNotes() ? wp_trim_words($version->getReleaseNotes(), 10) : '—'); ?> diff --git a/src/Frontend/AccountController.php b/src/Frontend/AccountController.php index 1a9af4f..78c0b96 100644 --- a/src/Frontend/AccountController.php +++ b/src/Frontend/AccountController.php @@ -129,6 +129,7 @@ final class AccountController ), 'release_notes' => $version->getReleaseNotes(), 'released_at' => $version->getReleasedAt()->format(get_option('date_format')), + 'file_hash' => $version->getFileHash(), ]; } } diff --git a/templates/frontend/licenses.html.twig b/templates/frontend/licenses.html.twig index 2693b2c..9bcadc8 100644 --- a/templates/frontend/licenses.html.twig +++ b/templates/frontend/licenses.html.twig @@ -64,6 +64,12 @@ v{{ esc_html(download.version) }} {{ esc_html(download.released_at) }} + {% if download.file_hash %} + + + {{ download.file_hash[:12] }}... + + {% endif %} {% endfor %} diff --git a/wc-licensed-product.php b/wc-licensed-product.php index bb47bb4..cf2b18b 100644 --- a/wc-licensed-product.php +++ b/wc-licensed-product.php @@ -3,7 +3,7 @@ * Plugin Name: WooCommerce 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. - * Version: 0.2.1 + * Version: 0.2.2 * Author: Marco Graetsch * Author URI: https://src.bundespruefstelle.ch/magdev * License: GPL-2.0-or-later @@ -28,7 +28,7 @@ if (!defined('ABSPATH')) { } // Plugin constants -define('WC_LICENSED_PRODUCT_VERSION', '0.2.1'); +define('WC_LICENSED_PRODUCT_VERSION', '0.2.2'); define('WC_LICENSED_PRODUCT_PLUGIN_FILE', __FILE__); define('WC_LICENSED_PRODUCT_PLUGIN_DIR', plugin_dir_path(__FILE__)); define('WC_LICENSED_PRODUCT_PLUGIN_URL', plugin_dir_url(__FILE__));