Как я могу настроить Git "fedoseevvadim/bitrix24" для предотвращения закрытия задач, имеющих незавершенные подзадачи, в моей коробочной версии Битрикса? Я пошел по инструкции, но не могу добиться нужных результатов. Можете ли вы подсказать, какие шаги нужно предпринять или что нужно настроить в файлах, чтобы функция работала правильно?
Для того чтобы настроить запрет закрытия задачи в Битрикс24, если есть невыполненные подзадачи, необходимо внести следующие изменения: 1. Откройте файл /local/php_interface/init.php и добавьте следующий код: ```php AddEventHandler("tasks", "OnBeforeTaskClose", "OnBeforeTaskCloseHandler"); function OnBeforeTaskCloseHandler($ID) { $task = \Bitrix\Tasks\TaskTable::getById($ID)->fetch(); $subtasks = \Bitrix\Tasks\Internals\TaskTable::getList(array( 'filter' => array( 'PARENT_ID' => $ID ) ))->fetch(); if (!empty($subtasks)) { foreach ($subtasks as $subtask) { if ($subtask['STATUS'] != 5) { // 5 - код статуса "Выполнено" global $APPLICATION; $APPLICATION->ThrowException("Задача не может быть закрыта, пока есть невыполненные подзадачи."); return false; } } } } ``` 2. Сохраните файл и перезапустите сервер. После внесения указанных изменений, задача не сможет быть закрыта, пока у нее есть невыполненные подзадачи.
Этот пример вам не подойдет. В нем иллюстрируется добавление пункта меню в сделки.
Файл init.php создается вручную в папке `/local/php_interface/`. Но прежде чем делать это, почитайте про него в курсе
Бездумное использование этого файла может приводить к падению сайта в любом месте.
В вашем случае алгоритм действий такой:
1. Создать init.php
2. Чтобы его не засорять, в нем подключить файл, обрабатывающий события .
3. Вам нужны события задач
Пример подключения обработчика события(это не готовый пример для вас, его нужно изменить под себя):
\Bitrix\Main\EventManager::getInstance()->RegisterEventHandler( 'tasks', 'OnBeforeTaskUpdate', $this->MODULE_ID, '\MyCompany\Handlers\CTask', 'OnBeforeTaskUpdate', "1" );
Подробнее про 'RegisterEventHandler' тут
4. В этом обработчике вам нужно определять, является ли задача родительской. Если да, то запрашивать ее дочерние задачи и смотреть, если ли среди них открытые. Если да, то отменять событие закрытия задачи.
Список задач можно получить так