Rewolucja Cyfrowa

Sprzedawaj produkty cyfrowe — klucze licencyjne + rejestracja domeny + bezpieczne pobieranie

Cena: 299,00 €
Netto

Sell digital products professionally with Digital Revolution — an advanced module for managing software licenses, domain-restricted downloads, watermarked files, and support subscriptions. Perfect for selling PrestaShop modules, themes, software, digital media, or any downloadable product that needs licensing and access control.

Go beyond PrestaShop's basic virtual product support with per-domain licensing, automatic license key generation, download watermarking, expiration management, and tiered support plans with renewal tracking.

Key Benefits

  1. License Management: Generate and validate license keys with domain restrictions.
  2. Watermarked Downloads: Automatically watermark files with customer-specific identifiers.
  3. Support Subscriptions: Tiered support plans with expiration and renewal management.
  4. Domain Registration: Customers register domains for license activation and validation.
  5. Download Control: Expiring links, download limits, and version management.
Dostępność produktu: Natychmiastowe pobranie po zakupie
Udostępnij
Suma opcji: 0.00 €
6 wyświetleń

Professional Digital Product Sales

PrestaShop's built-in virtual product support is minimal — attach a file, set a download limit, done. If you sell software, modules, themes, or any digital product that requires licensing, Digital Revolution gives you the tools you need.

License Key System

Automatically generate unique license keys on purchase. Validate keys against registered domains via API. Set maximum domain activations per license. Revoke or transfer licenses from the admin panel.

Domain Registration

Customers register the domain(s) where they'll use your product. The license validation API checks the requesting domain against registered domains. This prevents unauthorized use while giving legitimate customers a smooth experience.

Watermarked Downloads

Automatically embed customer-specific identifiers into downloadable files. If a file appears on a piracy site, you can trace it back to the source. Supports PDF watermarking and ZIP file marking.

Support Subscriptions

Offer tiered support plans (e.g., 3 months free, 6/9/12 month paid options). Track expiration dates, send renewal reminders, and manage support access based on active subscription status.

Version Management

  • Upload multiple versions of a product
  • Customers always get the latest version
  • Changelog management per version
  • Selective access based on license tier
  • Automatic update notifications

Dlaczego ten moduł jest wyjątkowy?

  • License key generation with domain registration and validation API.
  • Watermarked downloads that embed customer information in delivered files.
  • Support subscription management with configurable duration and pricing.
  • Version management with release channels (stable, beta, development).

Zastosowania

  • Software developers selling modules, plugins, or themes with license protection.
  • Digital content creators selling downloadable assets with watermark protection.
  • SaaS-like businesses selling software with ongoing support subscriptions.
  • Indeks
    mprdigitalrevolution
  • W magazynie
    4 Przedmioty
  • Kompatybilność z PrestaShop
    PS 1.7 – 9.x
  • Model cenowy
    Jednorazowy zakup
  • Typ modułu
    Front & Back-office
  • Dotyczy RODO
    Nie
  • Cel biznesowy
    Usprawnić operacje
  • Wymagane konto zewnętrzne
    Nie
  • Złożoność modułu
    Kompletne rozwiązanie
  • Etap ścieżki klienta
    Zarządzać sklepem
  • Działa z platformą
    Bez zewnętrznej platformy

MPR Digital Products

Modul PrestaShop do sprzedazy i dystrybucji produktow cyfrowych (modulow, motywow, dodatkow) z zarządzaniem licencjami, wiazaniem domen, spersonalizowanymi pobraniami ze znakiem wodnym i automatycznymi aktualizacjami jednym kliknieciem.

Funkcje

Zarządzanie licencjami

  • Typy licencji: Licencje bezterminowe, subskrypcyjne lub probne
  • Wiazanie domen: Ograniczenie instalacji na licencje (np. 1 domena na licencje)
  • Wykrywanie domen deweloperskich: localhost, staging i domeny dev nie sa wliczane do limitow
  • Sledzenie statusu licencji: Stany: aktywna, zawieszona, wygasla, cofnieta
  • Okres karencji: Konfigurowalny okres karencji dla nieudanych walidacji (domyslnie: 7 dni)

Dystrybucja produktow

  • Zarządzanie wersjami: Sledzenie wydari z numerami wersji, changelogami i informacjami o kompatybilnosci
  • Obsługa galezi: Galerie stable, beta, dev, legacy na produkt
  • Spersonalizowane pobrania: Kazde pobranie jest oznaczone informacjami licencyjnymi do sledzenia piractwa
  • Bezpieczne tokeny: Tokeny pobierania z ograniczonym czasem zapobiegaja nieautoryzowanemu udostepnianiu

Portal klienta

  • Moje licencje: Klienci moga przegladac i zarządzać swoimi licencjami na /licenses
  • Rejestracja domen: Rejestracja domen bezposrednio z portalu
  • Historia pobran: Sledzenie wszystkich pobran na licencje
  • Status wsparcia: Wyświetlanie daty wygasniecia wsparcia i opcji odnowienia

System auto-update

  • Aktualizacje jednym kliknieciem: Moduly moga automatycznie sprawdzac i instalowac aktualizacje
  • Kontrole wstepne: Walidacja przestrzeni dyskowej, uprawnien i rozszerzen PHP przed aktualizacja
  • Atomic Swap: Stary modul jest tworzony jako kopia zapasowa przed instalacja nowej wersji
  • Obsługa rollback: Automatyczne przywracanie w przypadku nieudanej aktualizacji
  • Skrypty upgrade: Wykonywanie migracji bazy danych miedzy wersjami

Przedsprzedaz / Wkrotce dostepne

  • Produkty niedostepne do zamówieńia: Oznaczanie produktow jako "wkrotce dostepne" z przewidywana data wydania
  • Powiadomienia o wydaniu: Klienci moga subskrybowac powiadomienia o wydaniu produktu
  • Ostrzezenia w koszyku: Wyświetlanie informacji gdy produkty niedostepne do zamówieńia sa w koszyku

System cenowy

  • Okresy licencji: Oferowanie roznych czasow trwania licencji (1 miesiac, 1 rok, bezterminowo itp.)
  • Okresy wsparcia: Osobna wycena czasu trwania wsparcia
  • Warianty produktow: Laczenie licencji + wsparcia + uslug w pakiety
  • Dynamiczne ceny: Ceny specyficzne dla koszyka za pomoca systemu SpecificPrice PrestaShop

Uslugi i dodatki

  • Uslugi w pakiecie: Instalacja, dostosowanie, priorytetowe wsparcie
  • Ceny za usluge: Kazda usluga ma wlasna cene dodawana do sumy

Subskrypcje wsparcia (Stripe)

  • Płatnośći cykliczne: Integracja ze Stripe do rozliczen subskrypcyjnych
  • Przedluzenie wsparcia: Klienci moga przedluzyc wsparcie po wygasnieciu
  • Maksymalny limit wsparcia: Limit na produkt okreslajacy jak daleko w przod mozna zakupic wsparcie (np. maks. 3 lata)
  • Obsługa webhookow: Automatyczne aktualizacje statusu ze Stripe

Analizy i logowanie

  • Logi pobran: Sledzenie kazdego pobrania z IP, user agent, ID znaku wodnego
  • Logi API: Wszystkie zadania walidacji licencji sa rejestrowane
  • Historia walidacji sklepu: Sledzenie prob walidacji domen i wynikow

Instalacja

  1. Przeslac folder mprdigitalproducts do /modules/
  2. Install from PrestaShop back office → Modules
  3. Skonfigurowac klucze API Stripe w Ustawieniach (dla wsparcia subskrypcyjnego)
  4. Wyczyscic cache PrestaShop

Wymagania

  • PrestaShop 1.7.0 - 8.x
  • PHP 7.4+
  • Rozszerzenie ZipArchive (do pobierania)

Struktura Back Office

Modul dodaje menu Digital Products pod SPRZEDAZ z:

Digital Products
├── Dashboard
├── Catalog
│   ├── Products        - Digital products catalog
│   ├── Releases        - Version releases and ZIPs
│   └── Services        - Add-on services (installation, etc.)
├── Licensing
│   ├── Licenses        - Customer licenses
│   └── Domains         - Registered domains/shops
├── Support
│   ├── Subscriptions   - Active support subscriptions
│   └── Support Plans   - Subscription plan configuration
├── Analytics
│   ├── Downloads       - Download history
│   └── API Logs        - License validation logs
├── Settings            - Module configuration
└── System Check        - Integrity verification

Tabele bazy danych

Tabela Przeznaczenie
mprdigitalproducts_product Katalog produktow cyfrowych
mprdigitalproducts_release Wydania wersji z informacjami o plikach
mprdigitalproducts_license Licencje klientow
mprdigitalproducts_shop Zarejestrowane domeny/instalacje
mprdigitalproducts_license_shop Powiazania licencja-domena
mprdigitalproducts_download_token Tymczasowe tokeny pobierania
mprdigitalproducts_download_log Historia pobran
mprdigitalproducts_support_plan Plany subskrypcji wsparcia
mprdigitalproducts_support_subscription Aktywne subskrypcje
mprdigitalproducts_support_payment Płatnośći subskrypcyjne
mprdigitalproducts_validation_log Zadania walidacji API
mprdigitalproducts_shop_validation_log Historia walidacji sklepu
mprdigitalproducts_variant Pakiety wariantow produktow
mprdigitalproducts_license_price Ceny okresow licencji
mprdigitalproducts_support_price Ceny okresow wsparcia
mprdigitalproducts_service Uslugi dodatkowe
mprdigitalproducts_cart_variant Wybory wariantow w koszyku
mprdigitalproducts_notify Subskrybenci powiadomien o wydaniach
mprdigitalproducts_banned_domain Zablokowane domeny
mprdigitalproducts_rate_limit Limitowanie szybkosci API

Punkty dostepu API

Bazowy URL: https://yoursite.com/api/license/{action}

Walidacja licencji

POST /api/license/validate
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "domain": "example.com", "module": "yourmodule" }

Sprawdzanie aktualizacji

POST /api/license/check
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "module": "yourmodule", "version": "1.0.0" }

Uzyskanie tokena pobierania

POST /api/license/download
Headers: X-License-Key: YOUR-LICENSE-KEY
Body: { "id_release": 123, "id_shop": 456 }

Pobranie pliku

GET /download/{token}

Opcje konfiguracji

Ustawienie Opis Domyslnie
module_enabled Włączenie/wylaczenie modulu true
api_rate_limit Zapytan na godzine 100
default_support_months Darmowe wsparcie w zestawie 3
default_max_domains Domeny na licencje 1
allow_domain_change Zezwol na zmiane domeny true
dev_domains_free Domeny dev nie sa liczone true
grace_period_days Okres karencji dla nieudanych walidacji 7
watermark_downloads Osadzanie informacji licencyjnych w pobraniach true
stripe_mode test lub live test

Ustawienia dla produktu

Pole Opis Domyslnie
support_months Darmowe wsparcie włączone z zakupem 3
max_support_months Maksymalna liczba miesiecy wsparcia do kupienia (-1 = bez limitu) 36
max_domains Dozwolone domeny na licencje 1

Uzywane hooki

Hook Przeznaczenie
displayBackOfficeHeader Ladowanie CSS/JS admina
actionAdminControllerSetMedia Zasoby admina
displayCustomerAccount Link "Moje licencje" na koncie klienta
actionValidateOrder Generowanie licencji po zakonczeniu zamówieńia
actionOrderStatusPostUpdate Obsługa zmian statusu zamówieńia
moduleRoutes Rejestracja przyjaznych URLi
actionFrontControllerSetMedia Ladowanie CSS/JS frontu
displayProductAdditionalInfo Wybor wariantu na stronie produktu
actionCartUpdateQuantityBefore Zapisanie wariantu przy dodawaniu do koszyka
displayShoppingCartFooter Ostrzezenia o produktach niedostepnych do zamówieńia
actionMPRCheckoutValidateOrder Blokowanie checkout dla niedostepnych produktow

Planowane funkcje / TODO

  • Integracja systemu ticketow (tickety wsparcia na licencje)
  • Obsługa wielu walut dla cen licencji
  • Masowe generowanie licencji dla resellerow
  • Transfer licencji miedzy klientami
  • Dashboard analityki uzytkowania
  • Powiadomienia webhook dla zdarzen licencji
  • Integracja z marketplace PrestaShop Addons

Workflow wydania modulu

Ta sekcja opisuje praktyczne kroki publikacji nowego modulu za pomoca systemu MPR Digital Products.

Wymagania wstepne

  • Kod źródłowy modulu gotowy do dystrybucji
  • Dostep do back office MPR Digital Products
  • Dostep do bazy danych do zarządzania wydaniami

Krok 1: Przygotowanie modulu

Wymagane pliki

Twoj modul musi zawierac klase UpdateChecker.php do obsługi auto-update:

yourmodule/
├── yourmodule.php           # Main module file
├── classes/
│   └── UpdateChecker.php    # Copy from mprdigitalproducts/src/Classes/Protection/
├── views/
├── controllers/
└── ...

Kopiowanie UpdateChecker

cp modules/mprdigitalproducts/src/Classes/Protection/UpdateChecker.php \
   modules/yourmodule/classes/

Integracja Update Checker w module

Dodaj do metody getContent() swojego modulu:

public function getContent()
{
    $output = '';

    // Handle auto-update AJAX request
    if (Tools::getValue('ajax') && Tools::getValue('action') === 'mpr_auto_update') {
        $this->handleAutoUpdate();
    }

    // Check for updates and show notification
    $output .= $this->checkForUpdates();

    // ... rest of your configuration
    return $output . $this->renderConfigurationForm();
}

private function checkForUpdates()
{
    $checkerPath = dirname(__FILE__) . '/classes/UpdateChecker.php';
    if (!file_exists($checkerPath)) {
        return '';
    }

    require_once $checkerPath;

    $checker = \MPRDigitalProducts\Classes\Protection\UpdateChecker::fromModule(
        $this->name,
        $this->version
    );

    if (!$checker) {
        return '';
    }

    return $checker->getUpdateNotification();
}

private function handleAutoUpdate()
{
    require_once dirname(__FILE__) . '/classes/UpdateChecker.php';

    $checker = \MPRDigitalProducts\Classes\Protection\UpdateChecker::fromModule(
        $this->name,
        $this->version
    );

    if (!$checker) {
        header('Content-Type: application/json');
        die(json_encode(['success' => false, 'error' => 'License configuration not found']));
    }

    header('Content-Type: application/json');
    die(json_encode($checker->handleAjaxUpdate()));
}

Krok 2: Tworzenie ZIP wydania

Struktura katalogow

ZIPy wydari sa przechowywane w:

modules/mprdigitalproducts/releases/{module_name}/

Wymagania dotyczace struktury ZIP

ZIP musi zawierac modul w folderze odpowiadajacym nazwie modulu:

yourmodule-1.0.0.zip
└── yourmodule/
    ├── yourmodule.php
    ├── classes/
    │   └── UpdateChecker.php
    └── ...

Przyklad skryptu budowania

Utworz build_release.php w swoim module:

<?php
/**
 * Build release ZIP for yourmodule
 * Usage: php build_release.php [version]
 */

$moduleName = 'yourmodule';
$modulePath = dirname(__FILE__);
$version = $argv[1] ?? null;

if (!$version) {
    die("Usage: php build_release.php <version>\n");
}

// Update version in main file
$mainFile = file_get_contents("$modulePath/$moduleName.php");
$mainFile = preg_replace(
    '/\$this->version\s*=\s*\'[^\']+\';/',
    "\$this->version = '$version';",
    $mainFile
);
file_put_contents("$modulePath/$moduleName.php", $mainFile);

// Output directory
$outputDir = dirname($modulePath) . "/mprdigitalproducts/releases/$moduleName";
if (!is_dir($outputDir)) {
    mkdir($outputDir, 0755, true);
}

// Create ZIP
$zip = new ZipArchive();
$zipPath = "$outputDir/$moduleName-$version.zip";

if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
    $iterator = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($modulePath, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::LEAVES_ONLY
    );

    $excludePatterns = [
        'node_modules', '.git', 'build_release.php', '_releases',
        '.mpr_license.json', 'yarn.lock', 'package-lock.json',
        'package.json', 'Gruntfile.js', 'gulpfile.js', '.env'
    ];

    foreach ($iterator as $file) {
        $filePath = $file->getRealPath();
        $relativePath = "$moduleName/" . substr($filePath, strlen($modulePath) + 1);

        // Skip excluded files
        $skip = false;
        foreach ($excludePatterns as $pattern) {
            if (strpos($relativePath, $pattern) !== false) {
                $skip = true;
                break;
            }
        }
        if ($skip) continue;

        $zip->addFile($filePath, $relativePath);
    }
    $zip->close();

    $hash = hash_file('sha256', $zipPath);
    $size = filesize($zipPath);

    echo "Created: $zipPath\n";
    echo "Hash: $hash\n";
    echo "Size: $size bytes\n";
    echo "\n--- SQL to insert release ---\n";
    echo "INSERT INTO ps_mprdigitalproducts_release
    (id_digital_product, version, file_path, file_hash, file_size, is_latest, active, date_add)
    VALUES (
        (SELECT id_digital_product FROM ps_mprdigitalproducts_product WHERE module_name = '$moduleName'),
        '$version',
        '$moduleName/$moduleName-$version.zip',
        '$hash',
        $size,
        1,
        1,
        NOW()
    );\n";
} else {
    die("Failed to create ZIP\n");
}

Uruchomienie:

php modules/yourmodule/build_release.php 1.0.0

Krok 3: Rejestracja produktu w bazie danych

Utworzenie wpisu produktu cyfrowego

INSERT INTO ps_mprdigitalproducts_product (
    id_product,          -- PrestaShop product ID (for shop integration)
    type,                -- 'module', 'theme', or 'addon'
    module_name,         -- Technical name (folder name)
    display_name,        -- Human-readable name
    current_version,     -- Latest version
    min_ps_version,      -- Minimum PrestaShop version
    max_ps_version,      -- Maximum PrestaShop version
    min_php_version,     -- Minimum PHP version
    support_months,      -- Support duration
    max_domains,         -- Domains per license
    active,
    orderable,
    date_add,
    date_upd
) VALUES (
    NULL,                -- Or link to PrestaShop product
    'module',
    'yourmodule',
    'Your Module Name',
    '1.0.0',
    '1.7.0.0',
    '8.99.99',
    '7.4',
    12,                  -- 12 months support
    1,                   -- 1 domain per license
    1,
    1,
    NOW(),
    NOW()
);

Utworzenie wpisu wydania

INSERT INTO ps_mprdigitalproducts_release (
    id_digital_product,
    version,
    file_path,           -- Relative to releases/ directory
    file_hash,           -- SHA256 hash of ZIP
    file_size,           -- Size in bytes
    changelog,
    min_php_version,
    min_ps_version,
    max_ps_version,
    is_latest,           -- Set to 1 for latest version
    active,
    date_add
) VALUES (
    (SELECT id_digital_product FROM ps_mprdigitalproducts_product WHERE module_name = 'yourmodule'),
    '1.0.0',
    'yourmodule/yourmodule-1.0.0.zip',
    'abc123...64char_sha256_hash...',
    12345,
    '# Version 1.0.0\n\n- Initial release',
    '7.4',
    '1.7.0.0',
    '8.99.99',
    1,
    1,
    NOW()
);

Krok 4: Wydanie nowej wersji

Podczas publikowania aktualizacji:

1. Zbudowanie nowego ZIP

php modules/yourmodule/build_release.php 1.1.0

2. Aktualizacja flag is_latest

-- Remove latest flag from old versions
UPDATE ps_mprdigitalproducts_release
SET is_latest = 0
WHERE id_digital_product = (
    SELECT id_digital_product FROM ps_mprdigitalproducts_product
    WHERE module_name = 'yourmodule'
);

-- Insert new release (with is_latest = 1)
INSERT INTO ps_mprdigitalproducts_release (...) VALUES (...);

-- Update product's current_version
UPDATE ps_mprdigitalproducts_product
SET current_version = '1.1.0', date_upd = NOW()
WHERE module_name = 'yourmodule';

Jak dzialaja auto-updates

Przebieg aktualizacji

  1. Sprawdzanie aktualizacji: Modul wywoluje API updates/check z license key
  2. Uzyskanie tokena pobierania: Jesli dostepna jest aktualizacja, wywoluje updates/download aby uzyskac tymczasowy token
  3. Kontrole wstepne: Walidacja przestrzeni dyskowej, uprawnien, dostepnosci ZipArchive
  4. Backup: Tworzenie kopii zapasowej ZIP biezacego modulu + dump SQL tabel modulu
  5. Pobieranie i weryfikacja: Pobiera ZIP, waliduje strukture (sprawdzanie hash pominiete dla spersonalizowanych plikow)
  6. Atomic Swap: Zmienia nazwe biezacego modulu na _old, przenosi nowy modul na jego miejsce
  7. Przywracanie licencji: Zachowuje .mpr_license.json z poprzedniej instalacji
  8. Uruchomienie upgrades: Wykonuje wszystkie skrypty upgrade/upgrade-X.X.X.php
  9. Czyszczenie: Usuwa pliki tymczasowe i stary katalog modulu

Spersonalizowane pobrania

Pobrania sa personalizowane z osadzona konfiguracja licencji (.mpr_license.json), wiec hash pliku bedzie sie roznic od oryginalu. System pomija weryfikacje hash dla spersonalizowanych plikow, ale nadal waliduje strukture ZIP.

Rollback

Jesli aktualizacja nie powiedzie sie w dowolnym momencie po atomic swap, system automatycznie przywraca modul z kopii zapasowej.


Skrypty upgrade

Do migracji bazy danych miedzy wersjami, utworz skrypty w upgrade/:

yourmodule/
└── upgrade/
    ├── upgrade-1.1.0.php
    └── upgrade-2.0.0.php

Format skryptu:

<?php
function upgrade_module_1_1_0($module)
{
    // Run database migrations
    $sql = 'ALTER TABLE `' . _DB_PREFIX_ . 'yourmodule_data` ADD `new_field` VARCHAR(255)';
    return Db::getInstance()->execute($sql);
}

Referencja struktury plikow

modules/mprdigitalproducts/
├── releases/                          # Release ZIPs organized by module
│   └── yourmodule/
│       ├── yourmodule-1.0.0.zip
│       ├── yourmodule-1.1.0.zip
│       └── yourmodule-2.0.0.zip
├── temp/                              # Temporary files during download personalization
├── uploads/                           # Customer uploads (tickets, etc.)
├── src/
│   └── Classes/
│       ├── MPRDigitalProductsProduct.php
│       ├── MPRDigitalProductsLicense.php
│       ├── MPRDigitalProductsRelease.php
│       ├── MPRDigitalProductsShop.php
│       ├── MPRDigitalProductsVariant.php
│       ├── MPRDigitalProductsNotify.php
│       ├── ... (20+ entity classes)
│       ├── Protection/
│       │   ├── UpdateChecker.php      # Copy to your modules
│       │   ├── IntegrityCore.php      # File integrity verification
│       │   └── Obfuscator.php         # Code protection
│       └── Services/
│           ├── DownloadService.php    # Handles watermarked downloads
│           ├── UpdateService.php      # Auto-update logic
│           ├── LicenseService.php     # License operations
│           ├── ValidationService.php  # Domain validation
│           ├── ReleasePackagerService.php
│           └── ... (10+ services)
├── controllers/
│   ├── admin/                         # 14 admin controllers
│   │   ├── AdminMPRDigitalProductsDashboardController.php
│   │   ├── AdminMPRDigitalProductsProductsController.php
│   │   ├── AdminMPRDigitalProductsLicensesController.php
│   │   └── ...
│   └── front/                         # 7 front controllers
│       ├── Api.php                    # License validation API
│       ├── Download.php               # Secure file downloads
│       ├── Portal.php                 # Customer license portal
│       ├── Subscription.php           # Support checkout
│       ├── Ticket.php                 # Support tickets
│       └── Webhook.php                # Stripe webhooks
├── views/
│   ├── css/
│   ├── js/
│   └── templates/
├── sql/
│   ├── install.php
│   └── uninstall.php
├── mprdigitalproducts.php             # Main module class
└── vendor/                            # Composer dependencies (Stripe, etc.)

Szybka checklista wydania

  • Zaktualizowac numer wersji w glownym pliku PHP modulu
  • Skopiowac najnowsza wersje UpdateChecker.php do folderu classes modulu
  • Zbudowac ZIP wydania z prawidlowa struktura
  • Obliczyc hash SHA256
  • Utworzyc katalog wydania: releases/{module_name}/
  • Umiescic ZIP w katalogu wydania
  • Wstawic rekord wydania do bazy danych
  • Zaktualizowac flage is_latest (usunac ze starego, ustawic na nowym)
  • Zaktualizowac current_version w tabeli produktow
  • Przetestowac pobieranie z portalu klienta
  • Przetestowac auto-update z zainstalowanego modulu

v1.1.0 — 2026-02-01

  • Added PS 9.1 compatibility with updated virtual product handling
  • New download analytics dashboard showing downloads per product, customer, and time period
  • Added automatic download link expiration with configurable renewal workflow
  • Fixed download limit counter not decrementing for resumed downloads
  • Added digital product bundle support (multiple files per virtual product)
  • Improved download speed with chunked transfer and range request support

v1.0.4 — 2025-09-20

  • Added PS 9.0 compatibility
  • Fixed download links breaking when shop URL uses subfolder configuration
  • Added file integrity verification (SHA-256 checksum) shown to customer before download
  • Fixed concurrent download limit not enforcing across multiple browser sessions

v1.0.3 — 2025-05-12

  • Fixed download notification email not including order reference number
  • Added S3-compatible cloud storage support for digital product files
  • Fixed large file downloads (2GB+) timing out on shared hosting
  • Improved download token security with HMAC-based URL signing

v1.0.2 — 2024-12-08

  • Added PS 8.2 compatibility with new virtual product tab
  • Fixed download page not respecting shop-specific SSL configuration
  • Added customer download history page in My Account section
  • Fixed file access control allowing downloads from cancelled orders

v1.0.1 — 2024-08-22

  • Fixed download counter displaying incorrectly for multi-file products
  • Added watermark injection for PDF digital products with customer info
  • Fixed download manager JavaScript not loading on order confirmation page

v1.0.0 — 2024-05-20

  • Initial release with enhanced digital product delivery system
  • Configurable download limits per product and per customer
  • Time-limited download links with expiration management
  • Download progress tracking and resume support
  • Email notifications with secure download links
  • Support for PS 1.7.6+ and PS 8.x
0.0
0 opinii
5 ★
0
4 ★
0
3 ★
0
2 ★
0
1 ★
0

Brak opinii. Bądź pierwszy!

Napisz opinię

Oceń poszczególne aspekty (opcjonalnie)
Jakość
Stosunek jakości do ceny
Stabilność
Kompatybilność
Wsparcie
7 Implemented
7 propozycji

License key generation and management

Implemented
Automatically generate unique license keys on purchase with configurable format, prefix, and character sets. Manage activation and revocation.
Sandra Müller Mar 10, 2025
Odpowiedź: Core feature since v1.0.0! Automatic generation on payment, configurable key format, pre-generated pools, per-product licensing rules, and full status management (activate/suspend/revoke/transfer).

Auto-update notifications for installed modules

Implemented
When a new version is available, show a notification in the customer's back office with a one-click update button.
Patrick O'Brien Apr 05, 2025
Odpowiedź: Available since v1.1.0! Modules check for updates daily and show a non-intrusive notification. One-click update with automatic backup and rollback on failure.

Customer domain registration with verification

Implemented
Customers should be able to register their domain against their license, with optional DNS/HTTP verification to prevent piracy.
Jacob Wilson May 18, 2025
Odpowiedź: Shipped in v1.2.0! Self-service domain registration, configurable domain limits per license, domain swap, DNS/HTTP verification, wildcard subdomain support, and environment tagging.

Version management with changelog display

Implemented
Upload new file versions and show a changelog to customers. They should always get the latest version and be able to rollback if needed.
Natasha Volkova Jul 22, 2025
Odpowiedź: Added in v1.4.0! Version management with version history, customer-facing changelog, automatic "latest version" download, download expiry, and download limits.

Demo download with watermark and time limit

Implemented
Let potential customers download a demo version of modules that expires after 14-30 days. Helps them evaluate before buying.
Lena Schneider Jun 18, 2025
Odpowiedź: Shipped in v1.3.0! Configurable demo period, personalized watermarks for piracy tracking, and email/domain deduplication.

REST API for license validation

Implemented
A public API endpoint that our module can call to check if a license is valid, what domains are registered, and when it expires.
Paul Eriksen Apr 20, 2025
Odpowiedź: Core feature! POST /api/license/validate returns license status, product info, expiry, registered domains, and metadata. API key auth with rate limiting.

Subscription renewals with reminder emails

Implemented
Support annual subscriptions with automated renewal reminder emails at 30, 7, and 1 day before expiry. Discounted renewal pricing for existing customers.
Marie-Claire Dubois Sep 08, 2025
Odpowiedź: Done in v1.5.0! Annual/monthly subscriptions, configurable renewal reminders, grace period, discounted renewal pricing, and upgrade paths.
2 otwarty 10 rozwiązany
Zgłoś problem
The download link expiration check uses server time while the link generation uses shop time. On servers where PHP timezone differs from shop timezone, links can expire before the customer clicks them. Unified time source to use Configuration::get('PS_TIMEZONE'). Fixed in v1.0.0 — commit d4e8c12
Downloaded PDF files are corrupted (0 bytes or HTML prepended) when PHP output buffering is enabled by another module or the server configuration. Added ob_end_clean() before sending the file stream. Fixed in v1.0.0 — commit 7b3a9e5
Download links remain active even after the order is cancelled or refunded. The link validity only checks expiration date, not order status. Added order status validation to the download controller. Fixed in v1.0.0 — commit a2c5f84
Uploading digital product files larger than 64MB fails silently — the admin interface shows success but no file is saved. The issue is PHP's default upload_max_filesize. Added a preflight check that validates PHP settings and shows an admin warning if limits are too low. Fixed in v1.0.0 — commit c8d4e71
When a customer resumes a partial download (HTTP Range request), the download counter increments again, eventually hitting the download limit. Changed to only increment on the first byte range (Range: bytes=0-). Fixed in v1.0.0 — commit 5e9b3a2
On stores using 'Set order status to Delivered for virtual products' option, the status update fails because the module's hook fires before the core's virtual product check. Changed hook priority to ensure it runs after core processing. Fixed in v1.0.0 — commit 8f1c7d4
The rich text editor for release notes strips HTML on save, converting formatted text to plain text. The AdminController was using strip_tags in the validation step. Changed to use the HTML purifier instead. Fixed in v1.0.0 — commit 3a7e2b9
When creating a ZIP archive of multiple digital files, files with Unicode characters in their names (e.g., 'présentation.pdf') are silently skipped. The ZipArchive class needs the ENC_UTF_8 flag. Added Unicode handling. Fixed in v1.0.0 — commit e7c1d58
Pre-signed S3 URLs default to 15-minute expiration. For large files (>2GB) on slower connections, the download times out. Made the expiration configurable with a default of 2 hours. Fixed in v1.0.0 — commit b5a8f23
Guest customers receive a download link pointing to the customer account page, which they can't access. The link should point to the guest order tracking page with the download attached. Fixed the email template logic. Fixed in v1.0.0 — commit 4d2e9c7
Adding a new file to a product that already has version 3.2 resets the version counter to 1.0 instead of auto-incrementing to 3.3. The version field was being reset during form submission. Now reads the latest version and increments.
When uploading 3 files at once via the admin drag-and-drop interface, only the last file is saved. The async upload handler uses the same temporary filename for all concurrent uploads. Added UUID-based temp filenames.
Zobacz wszystkie znane problemy
30 dni na zwrot
Łatwy zwrot - bez pytań
Moduły Plug & Play
Zainstaluj, skonfiguruj i zarabiaj
Wsparcie na pierwszym miejscu
Priorytet pomocy i satysfakcji

Więcej z tej kategorii

  • Nowy
Magazyn Revolution
299,00 €
Ładowanie...
Powrót do góry