Skip to content

[Bug] Форма заказа: пустые блоки полей при кириллических label в combo model-fields #618

Closed

Description

@Ibochkarev

Описание проблемы

На странице заказа в менеджере (mgr/order) вкладки «Информация о заказе» и «Адрес» показывают:

Для этой вкладки не настроены поля формы заказа.

При этом в БД видимые msModelField и секции есть. Проблема не в ACL mssetting_save (это #613 / #614): GET /api/mgr/model-fields/visible/msOrder под пользователем без mssetting_save успешно отдаёт поля.

Корневая причина: в ComboConfigManager::buildLabel() вызывается preg_replace('/\s+/', ' ', $label) без Unicode-флага /u. В PCRE без /u символ \s совпадает с байтом 0xA0, а это второй байт UTF-8 для кириллической «Р» (U+0420 = D0 A0). Лейблы вроде «Руслан …» портятся → json_encode payload visible/* падает или Vue получает пустые results/sections → форма рисует empty-state.

Шаги воспроизведения

  1. Иметь покупателей/опции combo с кириллическими именами, начинающимися на «Р» (или другой символ с 0xA0 во втором байте UTF-8).
  2. Открыть менеджер → MiniShop3 → Заказы → любой заказ (например id=560).
  3. Вкладка «Информация о заказе» / «Адрес».

Ожидаемое поведение

Секции «Основная информация», «Дополнительно», адресные блоки и кнопка «Сохранить» отображаются; GET /api/mgr/model-fields/visible/msOrder стабильно отдаёт results + sections + валидный UTF-8 comboOptions.

Фактическое поведение

Сводка заказа видна, ниже текст «поля формы не настроены». Иногда повторный запрос visible/msOrder через браузер отдаёт полный envelope (~30KB, 5 results), иногда — пустой объект {"results":[],"sections":[],"comboOptions":{}} без нормального наполнения combo.

Скриншоты

На project.test при заказе #2605/1 (id=560): сводка есть, блоки полей пустые.

Окружение

  • MiniShop3: 1.13.0-beta1
  • MODX: 3.2.3 / 3.2.0-pl
  • PHP: 8.3+ / 8.5.6 (project.test)
  • Браузер: Cursor IDE browser / Chrome

Логи ошибок

Диагностика
Файл: core/components/minishop3/src/Services/ComboConfigManager.php
Метод: buildLabel()
Строка: preg_replace('/\s+/', ' ', $label);  // нужен /u

CLI getVisibleFields(msOrder) после фикса /u: results=5, sections=2, json_encode OK, bad_utf8=0
ACL (#613) не виноват: read visible = 200, write settings = 403 mssetting_save

Дополнительный контекст

  • Связано с проверкой #613 на project.test, но это отдельный баг.
  • Предлагаемый фикс: preg_replace('/\s+/u', ' ', $label) + regression-тест на лейбл с «Р» / invalid-UTF-8 hardening при необходимости.
  • Не путать с отсутствием политики miniShopManagerPolicy.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions