Skip to content

Commit 752a046

Browse files
authored
Merge pull request #232 from modx-pro/dev/1.10.1-beta
release: v1.10.1-beta1
2 parents 137b908 + 1afde6a commit 752a046

4 files changed

Lines changed: 61 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,54 @@
1717

1818
## Апрель 2026
1919

20+
### [2026-04-27] 🚀 Версия 1.10.1-beta1
21+
22+
**Тип релиза:** PATCH (beta) — точечные исправления и восстановление контракта событий
23+
24+
---
25+
26+
#### 🐛 Исправлено
27+
28+
**Manager API — события жизненного цикла позиции заказа (#208, closes #207):**
29+
- Vue-админка дёргает `msOnBefore/Create/Update/Remove OrderProduct` через `Utils::invokeEvent` при добавлении/изменении/удалении позиций заказа — раньше события были зарегистрированы в `events.php`, но `OrdersController` их не вызывал, и сторонние подписчики (ms3PromoCode и т.п.) не срабатывали.
30+
- Before-hooks могут заблокировать операцию через `Response::error(400)`. After-hooks логируются на WARN-уровне с маркером `(persistence already done)` — ошибка плагина после `save()`/`remove()` не возвращается клиенту как 4xx, потому что persistence уже произошёл.
31+
32+
**Опции товара — переключение групп больше не сбрасывает значения (#230):**
33+
- `ProductOptionsTab.vue` рендерит все группы сразу с `v-show` вместо `v-if`-style монтирования только активной — локальные `value = ref(...)` и hidden inputs сохраняются между переключениями вкладок.
34+
- Раньше значения, введённые в неактивной группе, терялись и не доезжали на бэкенд (MODX/ExtJS `BasicForm.getValues()` собирает только инпуты, физически присутствующие в DOM на момент сабмита).
35+
36+
**Опции товара — висячие `modcategory_id` после удаления категории (#228):**
37+
- Плагин `MiniShop3` подписан на `OnCategoryRemove` — обнуляет `msOption.modcategory_id` для всех опций, ссылавшихся на удалённую `modCategory`. Зеркалит штатный паттерн MODX, где `modCategory::remove()` сбрасывает `category` у `modChunk`/`modPlugin`/`modSnippet`/`modTemplate`/`modTemplateVar`.
38+
- Без фикса в карточке товара мог появиться второй таб «Без группы» с разными мёртвыми `modcategory_id`.
39+
40+
**OrderFinalizeService вызывал несуществующие события (#217):**
41+
- `msOnBeforeFinalizeOrder` / `msOnFinalizeOrder` нигде не были зарегистрированы как `modEvent`, подписать плагин через UI было нельзя. Заменены на `msOnBeforeMgrCreateOrder` / `msOnMgrCreateOrder` — уже существовали в билдере, но никем не вызывались.
42+
43+
**Импорт товаров — неправильный ключ system setting для дефолтного шаблона (#210):**
44+
- `Processors\Utilities\Import\Fields::getTvFields()` использовал несуществующий ключ `ms3_product_default_template`. Корректный ключ — `ms3_template_product_default` (используется в `controllers/product/create.class.php`). Из-за опечатки на экране импорта блок «TV-поля» перечислял все TV вместо только привязанных к шаблону-дефолту.
45+
46+
**Cart API — отсутствующий лексикон (#223, closes #222):**
47+
- Добавлен ключ `ms3_cart_get_success` в `lexicon/{ru,en}/cart.inc.php` — ключ использовался в `Cart::get()`, но без перевода MODX писал в лог `Language string not found`.
48+
49+
**ServiceRegistry — лишний debug-шум в логах (#225, closes #224):**
50+
- На штатной установке без кастомизации сервисов `loadMainConfig()` / `loadAddonConfigs()` писали DEBUG про отсутствие дефолтных override-путей. Теперь логирование срабатывает только если оператор явно задал `ms3_services_config` / `ms3_services_addons_dir` через system settings, а файла/папки по этому пути нет.
51+
52+
#### 📁 Изменённые файлы
53+
54+
```
55+
_build/elements/plugins.php
56+
core/components/minishop3/elements/plugins/minishop3.php
57+
core/components/minishop3/lexicon/en/cart.inc.php
58+
core/components/minishop3/lexicon/ru/cart.inc.php
59+
core/components/minishop3/src/Controllers/Api/Manager/OrdersController.php
60+
core/components/minishop3/src/Processors/Utilities/Import/Fields.php
61+
core/components/minishop3/src/ServiceRegistry.php
62+
core/components/minishop3/src/Services/Order/OrderFinalizeService.php
63+
vueManager/src/components/product/ProductOptionsTab.vue
64+
```
65+
66+
---
67+
2068
### 🚀 Версия 1.10.0-beta1
2169

2270
**Тип релиза:** MINOR (beta) — полный перевод управления опциями с ExtJS на Vue, рефакторинг карточки заказа, self-heal миграция

_build/config.inc.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
'name' => 'MiniShop3',
1313
'name_lower' => 'minishop3',
1414
'name_short' => 'ms3',
15-
'version' => '1.10.0',
15+
'version' => '1.10.1',
1616
'release' => 'beta1',
1717
// Install package to site right after build
1818
'install' => false,

core/components/minishop3/docs/changelog.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.10.1-beta1]
9+
10+
### Fixed
11+
- Manager API now invokes `msOnBefore/Create/Update/Remove OrderProduct` events when adding, updating, or removing order line items via the Vue admin (#208, closes #207). Before-hooks may abort with HTTP 400; after-hooks are observe-only and their failures are logged at WARN level (`persistence already done`) without returning a 4xx — the row is already in DB. Previously third-party plugins (ms3PromoCode etc.) silently missed these events.
12+
- Product Options tab: switching between option groups no longer wipes user-entered values (#230). All groups are kept mounted via `v-show` instead of `v-if`-style remount, so per-field local state and hidden inputs survive tab switches and reach the form on submit.
13+
- Cleared dangling `msOption.modcategory_id` references when a `modCategory` is removed (#228). Plugin subscribes to `OnCategoryRemove` and resets the link to 0, mirroring how MODX core handles `modChunk` / `modPlugin` / `modSnippet` / `modTemplate` / `modTemplateVar` on category removal. Prevents the duplicate "no group" tab in the product options UI when a third-party component is uninstalled.
14+
- `OrderFinalizeService` now invokes registered `msOnBeforeMgrCreateOrder` / `msOnMgrCreateOrder` instead of non-existent `msOnBeforeFinalizeOrder` / `msOnFinalizeOrder` (#217). The old names were never registered as `modEvent`, so plugins could not subscribe via the UI.
15+
- Import → TV fields panel uses the correct setting key `ms3_template_product_default` (was: non-existent `ms3_product_default_template`), so the panel lists only TVs bound to the configured default product template instead of every TV in the system (#210).
16+
- Added missing lexicon `ms3_cart_get_success` in `lexicon/{ru,en}/cart.inc.php` — the key was used by `Cart::get()` but missing from translations, producing `Language string not found` warnings in MODX logs (#223, closes #222).
17+
- `ServiceRegistry` no longer logs DEBUG noise for missing default optional override paths (`core/config/ms3.services.php`, `core/config/ms3.services.d/`) on stock installations (#225, closes #224). The DEBUG log is preserved when the operator explicitly sets `ms3_services_config` / `ms3_services_addons_dir` system settings to a missing path.
18+
819
## [1.10.0-beta1]
920

1021
### Added

core/components/minishop3/src/MiniShop3.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
class MiniShop3
2222
{
23-
public $version = '1.10.0-beta1';
23+
public $version = '1.10.1-beta1';
2424

2525
/** @var modX $modx */
2626
public $modx;

0 commit comments

Comments
 (0)