Skip to content

fix(events): учитывать мутации из $response["data"] после invokeEvent (#221)#252

Open
Ibochkarev wants to merge 2 commits into
modx-pro:betafrom
Ibochkarev:fix/gh-221-invoke-event-data-consumer
Open

fix(events): учитывать мутации из $response["data"] после invokeEvent (#221)#252
Ibochkarev wants to merge 2 commits into
modx-pro:betafrom
Ibochkarev:fix/gh-221-invoke-event-data-consumer

Conversation

@Ibochkarev
Copy link
Copy Markdown
Member

Описание

Исправлена потеря мутаций плагинов после MiniShop3\Utils\Utils::invokeEvent(): в пяти местах вызывающий код теперь читает актуальные значения из $response['data'] (они уже включают returnedValues из MODX-события).

Затронутые точки по аудиту issue #221:

  • Cart::changeOptionoptions после msOnBeforeChangeOptionsInCart
  • Customer::validatesuccess, затем необязательный массив errors после msOnErrorValidateCustomerValue
  • Customer::getOrCreate — опциональный msCustomer из события msOnBeforeGetOrderCustomer вместо безусловной перезаписи результатом getObject()
  • OrderStatusService::change — перенаправление на другой status_id, если плагин вернул другой статус в msOnBeforeChangeOrderStatus; повторная загрузка модели статуса только при изменении id
  • OrderUserResolver::getUserId — нормализованный orderData перед дальнейшим lookup пользователя

Это дополняет исправление по #219 (merge в invokeEvent): здесь ошибка была только в том, что готовые ключи в data не использовались.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Примечание по совместимости: для msOnErrorValidateCustomerValue раньше ответ события полностью игнорировался; теперь при success === false возвращается [$key => $response['message']], а при наличии непустого массива errors в data — он отдаётся вызывающему коду. Плагины с «шумным» непустым сообщением при ошибке смогут повлиять на UX — это ожидаемое включение расширяемости из #221.

Связанные Issues

Closes #221

См. также: #219, контекст продакшна в #218.

Как это было протестировано?

  • Ручное тестирование
  • Автоматические тесты (PHPStan, ESLint) — не запускались в рамках коммита; локально выполнена только проверка синтаксиса PHP (php -l) для изменённых файлов
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: локальный рабочий каталог, ветка fix/gh-221-invoke-event-data-consumer
  • MODX: не поднимался для интеграционной проверки
  • PHP: php -l на четырёх изменённых файлах

Скриншоты (если применимо)

До После

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность (намерение — сохранить поведение, если плагины ничего не возвращают; исключение — ветка msOnErrorValidateCustomerValue, см. выше)
  • Лексиконы добавлены на двух языках (ru/en) — не требуются
  • PHPStan проходит без новых ошибок
  • ESLint проходит без ошибок (для JS/Vue изменений)
  • Обновлён CHANGELOG.md (для значимых изменений)

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

Ревью можно сфокусировать на семантике msOnErrorValidateCustomerValue и на том, нужна ли дополнительная валидация типа для data['status'] при экзотических returnedValues.

Five call sites now consume merged plugin output from Utils::invokeEvent
(Cart options, Customer errors/msCustomer, order status id, orderData).

Refs modx-pro#221
- msOnErrorValidateCustomerValue: honor data.errors via array_key_exists
  (incl. empty array); document contract in Customer::validate()
- msOnBeforeChangeOrderStatus: only apply mutated status when is_numeric

Updates CHANGELOG.md (May 2026).
@Ibochkarev Ibochkarev requested a review from biz87 May 14, 2026 09:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Event mutation: Utils::invokeEvent callers that drop mutated params

1 participant