diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index cc00087d..e27d88be 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -134,6 +134,11 @@ jobs: MODULE_ROOT="module/oc_telegram_shop/upload/oc_telegram_shop" echo "${{ needs.version_meta.outputs.tag }}" > "${MODULE_ROOT}/version.txt" + - name: Set version in install.xml + run: | + TAG="${{ needs.version_meta.outputs.tag }}" + sed -i "s#.*#${TAG}#" module/oc_telegram_shop/install.xml + - name: Build module run: | bash scripts/ci/build.sh "${GITHUB_WORKSPACE}" diff --git a/Makefile b/Makefile index 86f7ebb4..5eed9b8d 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,9 @@ dev-admin: rm -rf src/upload/admin/view/javascript/telecart && \ cd frontend/admin && npm run dev +ocmod: + ./scripts/apply_ocmod.sh + lint: docker compose exec -w /module/oc_telegram_shop/upload/oc_telegram_shop web bash -c "./vendor/bin/phpstan analyse" diff --git a/module/oc_telegram_shop/install.xml b/module/oc_telegram_shop/install.xml new file mode 100644 index 00000000..1542bd6f --- /dev/null +++ b/module/oc_telegram_shop/install.xml @@ -0,0 +1,30 @@ + + + TeleCart + telecart + 1.0 + TeleCart + https://docs.telecart.pro/ + + + + 'Настройки', + 'href' => $this->url->link('extension/module/tgshop', 'user_token=' . $this->session->data['user_token'], true), + 'children' => array() + ); + $data['menus'][] = array( + 'id' => 'menu-telecart', + 'icon' => 'fa-telegram', + 'name' => 'TeleCart', + 'href' => '', + 'children' => $telecart + ); + // END TeleCart modification + + ]]> + + + diff --git a/scripts/apply_ocmod.sh b/scripts/apply_ocmod.sh new file mode 100755 index 00000000..e1caa852 --- /dev/null +++ b/scripts/apply_ocmod.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# Создаёт симлинк install.xml в system/ OpenCart внутри контейнера. +# OpenCart при «Обновить» (Расширения → Модификации) подхватывает файлы +# DIR_SYSTEM . '*.ocmod.xml' и применяет их своей логикой — так же, как на сервере. +# +# Использование: +# ./scripts/apply_ocmod.sh +# +# Переменные (по умолчанию из docker-compose.yaml): +# CONTAINER — сервис/контейнер (по умолчанию web) +# TARGET_DIR — каталог system в контейнере (по умолчанию /web/upload/system) +# SOURCE — путь к install.xml в контейнере (по умолчанию /module/oc_telegram_shop/ocmod/install.xml) +# +# После запуска: открой админку → Расширения → Модификации → нажми «Обновить». + +set -euo pipefail + +CONTAINER="${CONTAINER:-web}" +TARGET_DIR="${TARGET_DIR:-/web/upload/system}" +SOURCE="${SOURCE:-/module/oc_telegram_shop/install.xml}" +TARGET="$TARGET_DIR/telecart.ocmod.xml" + +if ! docker compose exec "$CONTAINER" test -f "$SOURCE" 2>/dev/null; then + echo "Ошибка: в контейнере $CONTAINER не найден $SOURCE" >&2 + echo "Проверь, что том ./module примонтирован в контейнер." >&2 + exit 1 +fi + +if ! docker compose exec "$CONTAINER" test -d "$TARGET_DIR" 2>/dev/null; then + echo "Ошибка: в контейнере $CONTAINER не найден каталог $TARGET_DIR" >&2 + exit 1 +fi + +docker compose exec "$CONTAINER" bash -c " + if [ -e '$TARGET' ]; then + if [ -L '$TARGET' ]; then + current=\$(readlink '$TARGET') + if [ \"\$current\" = '$SOURCE' ]; then + echo 'Симлинк уже указывает на модуль: $TARGET' + exit 0 + fi + fi + rm -f '$TARGET' + fi + ln -sf '$SOURCE' '$TARGET' + echo 'Симлинк создан в контейнере: $TARGET → $SOURCE' +" + +echo "" +echo "Дальше: открой админку OpenCart → Расширения → Модификации → нажми «Обновить»." +echo "Модификация применится той же логикой, что и при установке на сервере."