Обычно я разделяю масштабную задачу на несколько небольших задач и решаю их по очереди. Также поступлю и в этот раз. Сначала рассмотрим смену статуса закрытой задачи при добавлении комментария. Затем реализацию отображения последнего комментария в списке задач.
Замечу, что обе задачи мы будем решать путем использования события OnAfterCommentAdd. Код обработчика события разместим в файле /local/php_interface/init.php.
Итак, пункт первый: активация задачи при добавлении комментария в нее.
Добавляем в обработчик события Битрикс OnAfterCommentAdd следующий код:
PHP
В нем мы получаем объект задачи и сохраняем его в переменную $oTask, далее проверяем доступно ли для текущей задачи действие по ее возобновлению. Оно передается функции isActionAllowed в виде числа 11. Полный список идентификаторов действий хранится в файле /bitrix/modules/task/classes/general/taskitem.php в виде констант.
Например, указанное значение хранится в константе ACTION_RENEW. Значение констант хранится в шестнадцатеричном формате. Если действие доступно для текущей задачи, мы возобновляем ее методом renew. Единственным аргументом этого метода в данном случае является пустой массив. Вообще нем можно передавать различные параметры. Например, нужно возобновлять подзадачи (AFFECT_CHILDREN).
Так как содержимое задачи в Битрикс24 обычно отображается в «выезжающем» блоке чтобы было видно ее обновленное состояние, нужно выполнить редирект на страницу текущей задачи.
Способ, описанный выше устарел и после очередного обновления Битрикс24 не работает, но можно использовать другой.
Он заключается в использовании своего обработчика JS-события OnClickSubmit. Это одно из событий, которое происходит при добавлении комментария к задаче. Организуем работу следующим образом: у нас будет 2 файла. Один из них будет JS-файл с обработчиком. Он будет размещаться в папке /bitrix/js/custom_task/ct_clicksubmit.js. Вторым будет php-файл с кодом, который будет очень похож на тот, который размещался ранее в обработчике OnAfterCommentAdd. Этот файл будет вызываться из JS-файла посредством AJAX-запроса. Его можно разместить в корне портала и назвать ct_clicksubmit.php
Также мы зарегистрируем JS-обработчик в файле /bitrix/php_interface/init.php.
PHP
В файле /bitrix/js/custom_task/ct_clicksubmit.js размещаем следующий, код:
JavaScript
Для отправки AJAX-запроса мы используем метод BX.ajax. В качестве параметров мы будем передавать PHP-скрипту идентификатор задачи taskId, который мы получаем выше из адресной строки браузера.
PHP-скрипт (/ct_clicksubmit.php), который будет обрабатывать запрос, будет выглядеть следующим образом:
PHP
Фактически – это тот же обработчик события OnAfterCommentAdd, только с небольшими доработками.
Переходим ко второму пункту нашей программы: после добавления комментария он отображается в списке задач.
Для решения этой задачи нам нужно выполнить следующие действия:
-
Создать в Битрикс пользовательское поле для хранения последних комментариев в задачах. Давайте его так и назовем: «последний комментарий», присвоим ему код UF_LAST_COMMENT. Это поле будет «привязано» к объекту задачи (TASKS_TASK).
В настройках списка задач нужно вывести значения нового поля – в шапке таблицы появится столбец «Последний комментарий»
- В обработчик события Битрикс OnAfterCommentAdd добавить следующий код:
PHP
Если все сделано правильно, то в списке задач мы увидим последний добавленный комментарий.
Надеюсь, что описанные выше методы расширения функционала модуля задач Битрикс24, помогут читателю в его работе.