Политика обновлений

Обзор

Wepps использует многоуровневую архитектуру с четким разделением между ядром платформы и пользовательским кодом. Это обеспечивает безопасные обновления без риска потери ваших наработок.

Компоненты платформы

🔵 Ядро платформы (обновляется)

Эти компоненты обновляются автоматически через систему обновлений:

Компонент Путь Назначение
Core packages/WeppsCore/ Базовые классы: Extension, Navigator, Data, Users и др.
Admin packages/WeppsAdmin/ Административная панель
Template packages/WeppsExtensions/Template/ Система шаблонов для статических страниц
Системные аддоны packages/WeppsExtensions/Addons/* Вспомогательные модули (выборочно)

Что включают обновления:

  • ✅ Исправления безопасности
  • ✅ Новая функциональность
  • ✅ Улучшения производительности
  • ✅ Исправления багов
  • ✅ Обратная совместимость в рамках мажорной версии

🟡 Демонстрационные расширения (НЕ обновляются)

При установке платформы включен демонстрационный интернет-магазин с примерами:

Расширения:

  • Products - каталог товаров
  • Cart - корзина покупок
  • News - новости и блог
  • Gallery - фотогалерея
  • Profile - личный кабинет
  • Contacts - контактная форма
  • Brands - бренды
  • Services - услуги
  • Slides - слайдер
  • И другие расширения

⚠️ Важно понимать:

  • Эти расширения служат демонстрационными примерами с готовой реализацией
  • Полностью рабочие и готовы к использованию
  • Не обновляются через систему обновлений
  • Предназначены для быстрого старта, изучения и адаптации под ваш проект
  • Подразумевается, что разработчик будет модифицировать их в соответствии с бизнес-логикой своего проекта

Демонстрационные таблицы БД:

  • Products, News, Gallery, Brands и др.
  • Также не обновляются и могут быть изменены

🟢 Пользовательский код (ваши разработки)

Код, который вы создаете или модифицируете:

  • Ваши расширения в WeppsExtensions/
  • Модифицированные демо-расширения
  • Кастомные аддоны в WeppsExtensions/Addons/
  • Шаблоны дизайна (.tpl, .css, .js)
  • Контентные данные в БД

Гарантии:

  • ❌ Никогда не затрагиваются обновлениями
  • ✅ Полный контроль над кодом
  • ✅ Рекомендуется использовать Git для версионирования

Система защиты от перезаписи

Проверка изменений

Перед каждым обновлением апдейтер автоматически проверяет:

  1. Файлы ядра - были ли изменены файлы, подлежащие обновлению
  2. Таблицы БД - были ли изменены системные таблицы

Что происходит при обнаружении изменений

Если вы модифицировали файлы или таблицы, которые должны обновиться:

⚠️ ПРЕДУПРЕЖДЕНИЕ: Обнаружены изменения в файлах ядра

Следующие файлы были изменены и НЕ БУДУТ обновлены:
  - packages/WeppsCore/Extension.php
  - packages/WeppsAdmin/Lists/Request.php

Следующие таблицы были изменены и НЕ БУДУТ обновлены:
  - s_Navigator (изменена структура)
  - s_Users (добавлены поля)

Обновление продолжится, но эти компоненты останутся в текущей версии.

Лог обновлений

Вся информация о процессе обновления сохраняется:

Доступ к логам:

# Просмотр последнего обновления
php packages/WeppsAdmin/Updates/Request.php log

# Полная история обновлений
php packages/WeppsAdmin/Updates/Request.php history

Лог включает:

  • ✅ Успешно обновленные файлы
  • ❌ Пропущенные файлы (с причиной)
  • 🔄 Выполненные миграции БД
  • ⚠️ Предупреждения и рекомендации

Жизненный цикл проекта

Этап 1: Установка

php install.php

Устанавливается:

  • ✅ Ядро платформы (WeppsCore, WeppsAdmin)
  • ✅ Демо-расширения (примеры для старта)
  • ✅ Тестовые данные в БД

Этап 2: Разработка

Вы адаптируете платформу под свой проект:

WeppsExtensions/
├── Products/          ← Модифицируете под свои нужды
├── Cart/              ← Настраиваете процесс заказа
├── News/              ← Удаляете, если не нужно
├── MyCustomShop/      ← Создаете новые расширения
└── Addons/
    ├── PaymentGateway/  ← Свои аддоны
    └── CustomFeature/

Рекомендации:

  • Используйте Git для контроля версий
  • Документируйте изменения
  • Избегайте модификации файлов ядра (используйте наследование)

Этап 3: Обновление платформы

# Проверка доступных обновлений
php packages/WeppsAdmin/Updates/Request.php list

# Обновление до конкретной версии
php packages/WeppsAdmin/Updates/Request.php update v1.6.0

Что происходит:

  1. Апдейтер проверяет изменения в файлах
  2. Показывает список изменений
  3. Запрашивает подтверждение
  4. Обновляет только ядро:
    • WeppsCore/ - новые методы, исправления
    • WeppsAdmin/ - улучшения интерфейса
    • Products, Cart и др. - не изменяются
    • ❌ Ваш код - остается нетронутым
  5. Выполняет миграции БД (при необходимости)
  6. Сохраняет лог обновления

Рекомендации для разработчиков

✅ Правильный подход

1. Создавайте свои расширения:

// WeppsExtensions/MyShop/MyShop.php
namespace WeppsExtensions\MyShop;

use WeppsCore\Extension;

class MyShop extends Extension {
    public function request() {
        // Ваша логика
    }
}

2. Модифицируйте демо-расширения:

// WeppsExtensions/Products/Products.php
// Это уже не демо, а ваша рабочая версия
// Обновления не затронут этот файл

3. Расширяйте классы ядра через наследование:

// WeppsExtensions/Addons/CustomExtension.php
namespace WeppsExtensions\Addons;

use WeppsCore\Extension as BaseExtension;

class CustomExtension extends BaseExtension {
    // Переопределяете нужные методы
    public function request() {
        // Вызываете родительский метод
        parent::request();
        // Добавляете свою логику
    }
}

4. Используйте hooks и события (если доступно):

// Подписка на события вместо изменения ядра
Hooks::add('after_product_save', function($product) {
    // Ваша логика
});

❌ Неправильный подход

1. НЕ модифицируйте файлы ядра:

// ❌ packages/WeppsCore/Extension.php
// Изменения затрутся при обновлении (если не обнаружены апдейтером)
// Или заблокируют обновление этого файла

2. НЕ изменяйте системные таблицы напрямую:

-- ❌ ALTER TABLE s_Navigator ADD COLUMN MyField VARCHAR(255)
-- Может конфликтовать с обновлениями
-- Используйте отдельные таблицы или JSON-поля

3. НЕ полагайтесь на internal API:

// ❌ Использование недокументированных методов
$navigator->_internalMethod(); 

// ✅ Используйте публичные методы
$navigator->getPath();

Работа с изменениями ядра

Если необходимо изменить файл ядра:

Вариант 1: Wrapper класс

// WeppsExtensions/Addons/MyCore.php
namespace WeppsExtensions\Addons;

use WeppsCore\Data;

class MyData extends Data {
    // Переопределяете нужное поведение
    public function getList($params = []) {
        // Ваша логика до
        $result = parent::getList($params);
        // Ваша логика после
        return $result;
    }
}

Вариант 2: Composer autoload

// composer.json
{
    "autoload": {
        "psr-4": {
            "MyApp\\": "WeppsExtensions/Addons/MyApp/"
        }
    }
}

Вариант 3: Форк и pull request

  • Создайте форк Wepps на GitHub
  • Внесите изменения в ядро
  • Отправьте pull request
  • После принятия изменения войдут в официальное обновление

Миграция при breaking changes

Если новая версия изменяет API:

До обновления

# Проверьте доступные обновления и их описание
php packages/WeppsAdmin/Updates/Request.php list

Типичные breaking changes

Пример 1: Изменение сигнатуры метода

// v1.x
$data->getList(['where' => ['Id' => 1]]);

// v2.x (добавлен обязательный параметр)
$data->getList('Products', ['where' => ['Id' => 1]]);

Как мигрировать:

  1. Найдите все использования старого метода
  2. Обновите вызовы согласно новой сигнатуре
  3. Тестируйте на dev/staging окружении

Пример 2: Переименование класса

// v1.x
use WeppsCore\Utils;

// v2.x
use WeppsCore\Helpers\Utils;

Как мигрировать:

  1. Замените namespace во всех файлах
  2. Проверьте с помощью IDE (Find Usages)

После обновления

# 1. Проверьте лог обновления
php packages/WeppsAdmin/Updates/Request.php log

# 2. Тестируйте основные функции
# - Главная страница
# - Админка
# - Ваши кастомные расширения

# 3. Проверьте логи ошибок
tail -f /path/to/php-error.log

Что делать с демо-расширениями

Стратегия 1: Использовать как основу

Модифицируйте демо под свой проект:

# Products, Cart, News остаются в WeppsExtensions/
# Вы изменяете их код, добавляете функции
# Они становятся частью вашего проекта

Плюсы:

  • Быстрый старт
  • Готовая структура
  • Понятные примеры

Минусы:

  • Нет обновлений (но вы и так их модифицируете)
  • Нужно поддерживать совместимость с новым ядром

Стратегия 2: Удалить ненужное

Если делаете не интернет-магазин или не нужны другие разделы из установочного набора:

# 1. Удалите разделы из Навигатора (через админку)
# Навигатор → выберите раздел → Удалить
# При удалении раздела автоматически удаляются все его подразделы

# 2. Физически удалите папки расширений
rm -rf packages/WeppsExtensions/Products
rm -rf packages/WeppsExtensions/Cart
rm -rf packages/WeppsExtensions/Brands

# 3. Удалите расширения из БД (через админку)
# Списки → s_Extensions → удалить Products, Cart, Brands

# 4. Удалите таблицы БД через админку (рекомендуется)
# Списки → выберите таблицу → Удалить
# Это также удалит связанные записи из s_Config и s_ConfigFields

# Или через SQL (не рекомендуется, требует ручной очистки):
# DROP TABLE Products;
# DELETE FROM s_Config WHERE TableName = 'Products';
# DELETE FROM s_ConfigFields WHERE TableName = 'Products';

Стратегия 3: Создать с нуля

Игнорируйте демо, создайте свою архитектуру:

# Оставьте демо для справки
# Создайте свои расширения
WeppsExtensions/Addons/MyCatalog/
WeppsExtensions/Addons/MyCart/
WeppsExtensions/Addons/MyBlog/

Плюсы:

  • Полный контроль
  • Чистая кодовая база
  • Оптимизация под задачу

Минусы:

  • Больше времени на разработку
  • Нужно изучать архитектуру

Резервное копирование

Встроенные инструменты

Платформа предоставляет системное расширение для создания резервных копий:

Через административную панель:

  • Резервирование базы данных - создание дампов БД
  • Резервирование файлов - архивирование файлов проекта

Доступ: Административная панель → Системные расширения → Backup

Перед обновлением

Автоматический бэкап:

# Система автоматически создаст бэкап перед обновлением
# Файлы: packages/WeppsAdmin/Updates/backups/
# БД: (опционально, настраивается)

Ручной бэкап:

# 1. Бэкап файлов
tar -czf wepps-backup-$(date +%Y%m%d).tar.gz \
    packages/ \
    files/ \
    pic/ \
    config.php

# 2. Бэкап БД
mysqldump --defaults-extra-file=/path/to/config.cnf your_database_name > wepps-backup-$(date +%Y%m%d).sql
# Или с указанием пользователя:
# mysqldump -u user -p your_database_name > wepps-backup-$(date +%Y%m%d).sql

# 3. Сохраните в безопасное место

Откат обновления

Если что-то пошло не так:

# Ручной откат через архивы
# Система автоматически создала архив перезаписанных файлов:
# packages/WeppsAdmin/Updates/files/updates/[tag]/wepps.platform-rollback.zip

# 1. Восстановите файлы из rollback-архива
cd packages/WeppsAdmin/Updates/files/updates/[tag]
unzip -o wepps.platform-rollback.zip -d /var/www/your-project

# 2. Восстановите БД из резервной копии
mysql --defaults-extra-file=/path/to/config.cnf your_database_name < wepps-backup-20251211.sql
# Или с указанием пользователя:
# mysql -u user -p your_database_name < wepps-backup-20251211.sql

Тестирование обновлений

Staging окружение

Создайте копию проекта:

# 1. Клонируйте файлы
cp -R /var/www/your-project /var/www/staging

# 2. Клонируйте БД
mysqldump --defaults-extra-file=/path/to/config.cnf your_database_name | mysql --defaults-extra-file=/path/to/config.cnf wepps_staging

# 3. Обновите config.php
# Измените название БД на wepps_staging

# 4. Тестируйте обновление на staging
cd /var/www/staging
php packages/WeppsAdmin/Updates/Request.php update v1.6.0

# 5. Проверьте работоспособность
# 6. Только после успеха - обновляйте production

FAQ

Q: Потеряю ли я свой код при обновлении?
A: Нет. Обновляется только ядро (WeppsCore, WeppsAdmin). Ваши расширения и модификации демо-расширений не затрагиваются.

Q: Что если я изменил файлы ядра?
A: Апдейтер обнаружит изменения и не перезапишет эти файлы. Вы получите предупреждение и информацию в логе.

Q: Можно ли обновить демо-расширения (Products, Cart)?
A: Они не обновляются автоматически. Если нужна новая версия - скачайте свежий релиз платформы и сравните код вручную.

Q: Нужно ли обновлять платформу?
A: Рекомендуется для получения исправлений безопасности и новых возможностей. Но это не обязательно, если текущая версия вас устраивает.

Q: Как узнать, что изменилось в обновлении?
A: Просмотрите список доступных обновлений:

php packages/WeppsAdmin/Updates/Request.php list

Q: Можно ли пропустить версию?
A: Да, можно обновиться с v1.4.0 сразу на v1.6.0. Система применит все промежуточные миграции.

Q: Как откатить обновление?
A: Используйте автоматически созданный rollback-архив:

# Файлы сохранены в:
# packages/WeppsAdmin/Updates/files/updates/[tag]/wepps.platform-rollback.zip
cd packages/WeppsAdmin/Updates/files/updates/[tag]
unzip -o wepps.platform-rollback.zip -d /var/www/your-project

Также восстановите БД из резервной копии.

Q: Обновления платные?
A: Нет, все обновления бесплатны (для открытой версии платформы).

Q: Как часто выходят обновления?
A: В среднем 1-2 минорных обновления в квартал + hotfix при критических багах.

Q: Что такое мажорная версия?
A: Версии формата v1.x.xv2.x.x. Могут содержать breaking changes. Обновление требует внимания и тестирования.

Q: Обязательно ли использовать систему обновлений?
A: Нет, можно обновлять вручную (git pull, rsync и т.д.). Но система обновлений удобнее и безопаснее.

Рекомендация: Используйте последнюю стабильную версию платформы.

Дополнительные материалы