Skip to content

Fix undefined $_SESSION warning when rebuilding menu cache - #17

Open
Ibochkarev wants to merge 1 commit into
3.xfrom
fix/undefined-session-modmenu
Open

Fix undefined $_SESSION warning when rebuilding menu cache#17
Ibochkarev wants to merge 1 commit into
3.xfrom
fix/undefined-session-modmenu

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Что сделано

modMenu::rebuildCache() и другие lookup-ы языка менеджера передавали голый $_SESSION в getOption(). Без активной сессии (CLI, ранний bootstrap, работа save/remove cache) PHP 8+ логирует Undefined global variable $_SESSION.

Изменения:

  • modX::getManagerLanguage() разрезолвит язык как $_SESSION ?? [] → config manager_languagecultureKeyen.
  • modMenu::save / remove вызывают clearCache() (clean на партиции menu) и пропускают rebuild, ключёванный сессией. Процессоры меню по-прежнему вызывают refresh(['menu' => []]) один раз, поэтому OnCacheUpdate срабатывает один раз.
  • Пути rebuild/read используют getManagerLanguage(): rebuildCache, header менеджера, lexicon, connector/manager request, country list, transport provider.
  • getSubMenus убирает идентичные мёртвые ветки лексикона.
  • Login держит Accept-Language. Чтение сессии использует $_SESSION ?? [].

Как проверить

  1. Запустите php -l на затронутых PHP-файлах.
  2. Запустите composer phpunit -- --filter 'modMenuTest|testGetManagerLanguage' (ожидание exit 0: 4 теста, 8 assertions).
  3. Сохраните или удалите пункт меню менеджера без HTTP-сессии. Подтвердите, что в логе нет Undefined global variable $_SESSION из modMenu.php.
  4. Задайте в сессии manager_language, очистите кэш меню, откройте менеджер. Подтвердите, что верхнее меню рендерится на этом языке.

Связанные

Без GitHub issue. Продакшен-лог:

PHPwarning: Undefined global variable $_SESSION at core/src/Revolution/modMenu.php:69.

Совместимость

Применимо к PHP 8+. Без изменения конфигов. При активной сессии менеджера разрезолвление языка совпадает со старой цепочкой getOption('manager_language', $_SESSION, …).

Совместимость

Без удаления публичного API. Добавляет modX::getManagerLanguage(). Хуки мутации меню чистят всю партицию menu вместо перезаписи одной записи по ключу языка. Процессоры по-прежнему срабатывают OnCacheUpdate один раз. Безопасно для patch-потребителей.

Оригинал: modxcms#16990

Resolve manager language through modX::getManagerLanguage and clear the menu cache partition on save/remove instead of writing a session-keyed shard without a session.
@Ibochkarev Ibochkarev changed the title Фикс предупреждения undefined $_SESSION при перестройке кэша меню Fix undefined $_SESSION warning when rebuilding menu cache Aug 21, 2026
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.

1 participant