PHPackages                             websystems/ws-prestashop-update-package - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. websystems/ws-prestashop-update-package

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

websystems/ws-prestashop-update-package
=======================================

A Composer package for PrestaShop to manage module licensing and updates for Websystems package server.

v1.0.9(1mo ago)035proprietaryPHPPHP &gt;=7.2

Since May 28Pushed 1mo agoCompare

[ Source](https://github.com/websystemspl/ws-prestashop-update)[ Packagist](https://packagist.org/packages/websystems/ws-prestashop-update-package)[ RSS](/packages/websystems-ws-prestashop-update-package/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (11)Used By (0)

websystems/ws-prestashop-update-package
=======================================

[](#websystemsws-prestashop-update-package)

Paczka Composer do zarządzania **licencjami** i **aktualizacjami** modułów PrestaShop przez serwer UpdatePulse. Zamiast duplikować kod w każdym module, wystarczy dołączyć tę paczkę i użyć gotowego traita.

---

Wymagania
---------

[](#wymagania)

- PHP &gt;= 7.2
- Rozszerzenia PHP: `ext-curl`, `ext-zip`
- PrestaShop 1.7 lub 8.x
- Plik `updatepulse.json` w katalogu głównym modułu

---

Instalacja
----------

[](#instalacja)

```
composer require websystems/ws-prestashop-update-package
```

Następnie upewnij się, że autoload Composera jest ładowany w module (zwykle już jest w `vendor/autoload.php`).

---

Plik updatepulse.json
---------------------

[](#plik-updatepulsejson)

Każdy moduł musi posiadać plik `updatepulse.json` w swoim katalogu głównym (np. `modules/ws_mymodule/updatepulse.json`):

```
{
    "server": "https://admin.k4.pl",
    "packageData": {
        "Name": "Nazwa modułu",
        "Version": "1.0.0",
        "Homepage": "https://admin.k4.pl/",
        "Author": "Web Systems",
        "AuthorURI": "https://admin.k4.pl/",
        "Description": "Opis modułu",
        "RequireLicense": true
    }
}
```

Opcjonalnie można dodać pole `"Slug"` w `packageData` — jeśli go nie ma, używana jest nazwa modułu (`$module->name`).

---

Integracja z modułem
--------------------

[](#integracja-z-modułem)

Trait `WsLicenseTrait` można użyć w **dwóch miejscach** niezależnie lub razem:

MiejsceDo czegoKlasa modułu (`Module`)Globalny baner powiadomień o aktualizacjiKontroler admina (`ModuleAdminController`)Pełna zakładka „Licencja i aktualizacje"---

### 1. Globalny baner powiadomień (klasa modułu)

[](#1-globalny-baner-powiadomień-klasa-modułu)

Dzięki temu baner o dostępnej aktualizacji pojawia się **na każdej stronie admina** — wewnątrz `#content`, tak samo jak natywne komunikaty PrestaShop — a nie tylko w zakładce konfiguracji modułu.

```
class Ws_mymodule extends Module
{
    use \Websystems\PrestashopUpdatePackage\Traits\WsLicenseTrait;

    public function __construct()
    {
        // ...
        parent::__construct();
        // ...

        // Inicjalizacja klienta aktualizacji
        $this->wsInitUpdateManager($this, 'WS_MYMODULE');
    }

    public function install(): bool
    {
        return parent::install()
            && $this->registerHook('displayAdminAfterHeader');
            // ... pozostałe hooki
    }

    /**
     * Renderuje baner z informacją o dostępnej aktualizacji.
     * Sprawdzanie serwera odbywa się max raz na 24 h (cache w Configuration).
     * Sam baner pokazuje się zawsze gdy wykryto nowszą wersję — bez limitu czasowego.
     */
    public function hookDisplayAdminAfterHeader(): string
    {
        $tabUrl = $this->context->link->getAdminLink('AdminWsMyModule') . '&ws_tab=license';
        return $this->wsRenderUpdateNotification($tabUrl);
    }
}
```

#### Wariant z `hookDisplayBackOfficeHeader` — automatyczne sprawdzanie w tle

[](#wariant-z-hookdisplaybackofficeheader--automatyczne-sprawdzanie-w-tle)

Jeśli chcesz aby sprawdzanie aktualizacji odbywało się **automatycznie w tle** na każdej stronie admina (bez renderowania HTML), użyj `wsCheckForUpdates()`. Metoda odpytuje serwer max raz na 24 h — same zarządza cache w `Configuration`; nie musisz ręcznie porównywać timestampów ani zapisywać czasu ostatniego sprawdzenia.

```
class Ws_mymodule extends Module
{
    use \Websystems\PrestashopUpdatePackage\Traits\WsLicenseTrait;

    public function __construct()
    {
        parent::__construct();
        $this->wsInitUpdateManager($this, 'WS_MYMODULE');
    }

    public function install(): bool
    {
        return parent::install()
            && $this->registerHook('displayBackOfficeHeader')
            && $this->registerHook('displayAdminAfterHeader');
            // ... pozostałe hooki
    }

    /**
     * Sprawdza aktualizacje w tle — max raz na 24 h.
     * Nie renderuje HTML. Odpowiednik ręcznego wzorca z Configuration::get/updateValue.
     */
    public function hookDisplayBackOfficeHeader(): void
    {
        $this->wsCheckForUpdates();
    }

    /**
     * Renderuje baner gdy dostępna jest nowsza wersja.
     * Dane są już w cache z hookDisplayBackOfficeHeader.
     */
    public function hookDisplayAdminAfterHeader(): string
    {
        $tabUrl = $this->context->link->getAdminLink('AdminWsMyModule') . '&ws_tab=license';
        return $this->wsRenderUpdateNotification($tabUrl);
    }
}
```

---

### 2. Zakładka „Licencja i aktualizacje" (kontroler admina)

[](#2-zakładka-licencja-i-aktualizacje-kontroler-admina)

```
use Websystems\PrestashopUpdatePackage\Traits\WsLicenseTrait;

class AdminWsMyModuleController extends ModuleAdminController
{
    use WsLicenseTrait;

    public function __construct()
    {
        parent::__construct();
        // Inicjalizacja — przekaż instancję modułu i prefiks klucza konfiguracyjnego
        $this->wsInitUpdateManager($this->module, 'WS_MYMODULE');
    }

    public function postProcess()
    {
        // Obsługuje submitWsLicenseActivate, submitWsLicenseDeactivate,
        // submitWsCheckUpdate, submitWsInstallUpdate
        $this->wsHandleLicenseActions();
        parent::postProcess();
    }

    public function renderView()
    {
        if (Tools::getValue('ws_tab') === 'license') {
            $adminUrl = $this->context->link->getAdminLink('AdminWsMyModule') . '&ws_tab=license';
            return $this->wsRenderLicenseTab($adminUrl);
        }
        return parent::renderView();
    }
}
```

---

Jak działa zarządzanie licencjami
---------------------------------

[](#jak-działa-zarządzanie-licencjami)

1. Admin wpisuje klucz licencji w formularzu i klika **Aktywuj licencję**.
2. Paczka wysyła żądanie do serwera UpdatePulse (`updatepulse-server-license-api`).
3. Serwer weryfikuje klucz i domenę sklepu — w odpowiedzi odsyła `license_signature`.
4. Klucz i sygnatura są zapisywane w `Configuration` PrestaShop (klucze: `WS_MYMODULE_LICENSE_KEY`, `WS_MYMODULE_LICENSE_SIG`).
5. Dezaktywacja usuwa dane z `Configuration` i informuje serwer.

---

Jak działają aktualizacje
-------------------------

[](#jak-działają-aktualizacje)

1. Paczka odpytuje serwer (`updatepulse-server-update-api`, akcja `get_metadata`) **max raz na 24 h** (cache w `Configuration`).
2. Wynik jest cache'owany — klucze `WS_MYMODULE_UPDATE_INFO` (JSON) i `WS_MYMODULE_UPDATE_LAST_CHECK` (timestamp).
3. Baner powiadomienia (`hookDisplayAdminAfterHeader`) wyświetla się na każdej stronie admina gdy dostępna jest nowsza wersja; sam baner nie ma żadnego limitu czasowego.
4. W zakładce „Licencja i aktualizacje" pojawia się przycisk **Zainstaluj aktualizację** oraz link do pobrania ZIP.
5. Instalacja jest wyłącznie ręczna — tylko gdy admin kliknie przycisk. Pobiera ZIP przez cURL (wyłącznie HTTPS), rozpakowuje do `_PS_MODULE_DIR_`, uruchamia skrypty upgrade z katalogu `upgrade/`, aktualizuje wersję w `ps_module`.
6. Przycisk **Sprawdź teraz** w zakładce wymusza natychmiastowe odpytanie serwera (pomija cache).

---

Klucze konfiguracyjne w bazie danych
------------------------------------

[](#klucze-konfiguracyjne-w-bazie-danych)

Klucze są budowane automatycznie z przekazanego prefiksu (np. `WS_MYMODULE`):

KluczZawartość`WS_MYMODULE_LICENSE_KEY`Klucz licencji`WS_MYMODULE_LICENSE_SIG`Sygnatura licencji (z serwera)`WS_MYMODULE_UPDATE_INFO`JSON z metadanymi ostatniej odpowiedzi serwera`WS_MYMODULE_UPDATE_LAST_CHECK`Timestamp ostatniego sprawdzenia aktualizacji> **Uwaga:** Gdy `"RequireLicense": false` w `updatepulse.json`, sekcja licencji jest całkowicie ukryta w zakładce admina, a zapytanie o aktualizacje jest wysyłane bez parametrów licencyjnych.

---

Struktura paczki
----------------

[](#struktura-paczki)

```
src/
  Update/
    UpdatePulseClient.php     ← klient HTTP do serwera UpdatePulse
  License/
    LicenseTabRenderer.php    ← generator HTML zakładki "Licencja i aktualizacje"
  Traits/
    WsLicenseTrait.php        ← trait do wklejenia w AdminController (zakładka licencji)
  Translations.php            ← tłumaczenia PL/EN (tablice statyczne)

```

---

Tłumaczenia
-----------

[](#tłumaczenia)

Paczka zawiera wbudowane tłumaczenia PL i EN. Język wykrywany jest automatycznie z `Context::getContext()->language->iso_code`. Można też użyć bezpośrednio:

```
use Websystems\PrestashopUpdatePackage\Translations;

$msg = Translations::trans('License activated successfully.', 'pl');
// → "Licencja aktywowana pomyślnie."
```

---

Autor
-----

[](#autor)

**Artur Ograbek** —
Web Systems —

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance89

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

10

Last Release

56d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/59c5c549dd854981a979a871cb12d6ab383327c39da0b4a39dccf78b8ccf47ff?d=identicon)[DragonKing026](/maintainers/DragonKing026)

---

Top Contributors

[![DragonKing026](https://avatars.githubusercontent.com/u/82218318?v=4)](https://github.com/DragonKing026 "DragonKing026 (15 commits)")

### Embed Badge

![Health badge](/badges/websystems-ws-prestashop-update-package/health.svg)

```
[![Health](https://phpackages.com/badges/websystems-ws-prestashop-update-package/health.svg)](https://phpackages.com/packages/websystems-ws-prestashop-update-package)
```

###  Alternatives

[thl/pinyin

Romanization tool for Traditional Chinese

2520.1k](/packages/thl-pinyin)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
