С помощью ИИ искал причину. Warning убирается.
Прошу ознакомиться с итогом:
Проблема
При запуске процесса корректировки (action=run) в поле типа «Согласование пользователей» (fieldtype_users_approve) возникали предупреждения PHP:
- Undefined array key "item" в строках 421 и 557
- Trying to access array offset on null
- Сбой редиректа из-за вывода предупреждений в браузер
Причина: в методах output() и check_button_filter() идёт прямое обращение к $options['item']['id'] без проверки существования ключа item. При вызове через процессы этот ключ отсутствует.
Решение на уровне сервера (временное)
Создан файл .user.ini в корне сайта с настройками:
Код: Выделить всё
display_errors = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING
Рекомендуемое решение на уровне CRM (постоянное)
Внести точечные правки в файл
/includes/classes/fieldstypes/fieldtype_users_approve.php:
1. Метод output(), строка ~421 (блок else):
Было:
Код: Выделить всё
$approved_users = approved_items::get_approved_users_by_field($options['field']['entities_id'], $options['item']['id'], $options['field']['id']);
Код: Выделить всё
$item_id = isset($options['item']['id']) ? $options['item']['id'] : 0;
$approved_users = approved_items::get_approved_users_by_field($options['field']['entities_id'], $item_id, $options['field']['id']);
Было:
Код: Выделить всё
$listing_sql_query = "e.id='" . $options['item']['id'] . "'";
Код: Выделить всё
$listing_sql_query = "e.id='" . (isset($options['item']['id']) ? $options['item']['id'] : 0) . "'";
Аналогичные проверки isset() следует добавить во все места ядра, где используется $options['item'] без проверки.
В идеале — передавать item в $options при вызове output() из модуля процессов, чтобы ключ всегда существовал.
Код: Выделить всё
ИтогКод: Выделить всё
Во вложении файл с исправленным кодом (при необходимости).