Обновление встроенных модулей¶
Для встроенных модулей, так же как для третьесторонних, имеется возможность организации обновления, отдельного от ядра. В этом документе будут описаны особенности, связанные с обновлением таких аддонов.
Структура обновляемого модуля¶
Предполагается, что подобные модули не будут обновляться вместе с ядром и соответсвенно все вспомогательные скрипты, такие как миграции и валидаторы, должны быть отделены от скриптов ядра. Скрипт сборки пакета ожидает следующую структуру:
├── app
│   └── addons
│       └── [sample]
│           ├── addon.xml
│           ├── config.php
│           ├── func.php
│           ├── Tygh
│           │   └── UpgradeCenter
│           │       └── Connectors
│           │           └── [Sample]
│           │               └── Connector.php
│           └── upgrades
│               ├── [version1]
│               │   ├── migrations
│               │   │   ├── 467676233_migration1.php
│               │   │   └── 467676233_migration2.php
│               │   │
│               │   ├── validators
│               │   │   ├── validator1.php
│               │   │   └── validator2.php
│               │   │
│               │   ├── scripts
│               │   │   ├── pre_script.php
│               │   │   └── post_script.php
│               │   │
│               │   ├── extra_files
│               │   │   ├── extra_file1.php
│               │   │   └── extra_file2.php
│               │   │
│               │   └── extra
│               │       └── extra.php
│               │
│               │
│               └── [version2]
│                   ├── migrations
│                   │   ├── 467676233_migration1.php
│                   │   └── 467676233_migration2.php
│                   │
│                   ├── validators
│                   │   ├── validator1.php
│                   │   └── validator2.php
│                   │
│                   ├── scripts
│                   │   ├── pre_script.php
│                   │   └── post_script.php
│                   │
│                   ├── extra_files
│                   │   ├── extra_file1.php
│                   │   └── extra_file2.php
│                   │
│                   └── extra
│                       └── extra.php
│
Где:
- [sample] — название модуля.
 - [version1] — версия, например 1.0.0.
 - [version2] — версия, например 2.0.0.
 - app/addons/upgrades/[version]/migrations — папка с миграциями.
 - app/addons/upgrades/[version]/validators — папка с валидаторами.
 - app/addons/upgrades/[version]/scripts — папка с PRE/POST скриптами.
 - app/addons/upgrades/[version]/extra_files — папка с дополнительными файлами.
 - app/addons/upgrades/[version]/extra/extra.php — файл для расширения package.json пакета обновления.
 
Файлы и директории в app/addons/upgrades/[version] не являются обязательными, например, если в новой версии не было изменения в БД, то нет необходимости создавать app/addons/upgrades/[version]/migrations, скрипт сборки пакета в таком случае просто сообщит, что миграций нет.
Добавляем коннектор¶
Коннектор (т.н. “upgrade connector”) позволяет “Центру обновлений” запрашивать с сервера обновлений необходимые обновления. Для внутренних модулей сервером обновлений будет являться helpdesk. Для облегчения написания коннектора в ядре подготовлен базовый класс коннектора TyghUpgradeCenterConnectorsBaseAddonConnector. Необходимо создать файл app/addons/[ADDON_NAME]/Tygh/UpgradeCenter/Connectors/Upgrade/Connector.php.
namespace Tygh\UpgradeCenter\Connectors\[ADDON_NAME];
use Tygh\Addons\AXmlScheme;
use Tygh\Addons\SchemesManager;
use Tygh\Registry;
use Tygh\UpgradeCenter\Connectors\BaseAddonConnector;
/**
 * Class Connector
 * @package Tygh\UpgradeCenter\Connectors\Ebay
 */
class Connector extends BaseAddonConnector
{
    /** @inheritdoc */
    public function __construct()
    {
        parent::__construct();
        /** @var AXmlScheme $addon_scheme */
        $addon_scheme = SchemesManager::getScheme('[ADDON_NAME]');
        $this->addon_id = '[ADDON_NAME]';
        $this->license_number = '';
        $this->product_edition = '[ADDON_NAME]_EDITION';
        $this->product_name = $addon_scheme->getName();
        $this->product_version = $addon_scheme->getVersion();
        $this->product_build = '';
        $this->notification_key = 'upgrade_center:addon_[ADDON_NAME]';
    }
}
Где:
addon_id— символьный код модуля.license_number— лицензия модуля.product_edition— редакция модуля, должна быть равна значению редакции в соответствующем товаре в helpdesk.product_name— название модуля.product_version— текущая версия модуля.product_build— номер сборки.notification_key— ключ для нотификаций об upgrade пакете.
Создание релиза модуля¶
Для автоматической генерации архива с модулем был реализован скрипт _tools/upgrade/release_addon.php.
Пример использования:
php release_addon.php addon_name
Где:
addon_name- название модуля.
В результате выполнения скрипта в папке _tools/upgrade будет создан файл: addon_name_version.tgz (например: ebay_2.1.0.tgz).
Создание пакета обновления¶
Для автоматической генерации upgrade пакета был написан скрипт _tools/upgrade/build_addon.php.
Пример использования:
php build_addon.php old_release.tgz new_release.tgz
Где:
- old_release.tgz — tgz-архив текущей версии модуля (релиз старой версии).
 - new_release.tgz — tgz-архив новой версии модуля (новый релиз).
 
Скрипт работает по тому же принципу, что и соответствующий скрипт для генерации пакета обновления ядра, и поддерживает все те же возможности. Вспомогательные скрипты (валидаторы, миграции), будут браться из релиза модуля.
После выполнения скрипта в папке _tools/upgrade/packs будет создана папка upgrade и файл с архивом (например: upgrade_2.1.0_ebay–2.1.1_ebay.zip). Созданный архив можно добавлять в HelpDesk в соответствующий товар в табе updates.