Доброго рабочего дня!
Возникла необходимость устранить упущение разработчиков Битрикс - реализовать возможность добавления события в персональный календарь пользователя, назначенного ответственным при постановке задачи.
Решение позволило бы руководителю просматривать задачи подчиненных в своем календаре.
Преследуя цель минимизировать вмешательство в CMS, решено было привязаться к событию OnTaskReminderAdd, которое возникает при добавлении напоминания к задаче.
Поскольку наша версия Модуля управления задачами (tasks) 14.5.8 от 30.01.2015 не поддерживала событие OnTaskReminderAdd, а в документации оно уже было заявлено, я обратился к bxapi.ru, где подглядел обработчик. Он выглядел таким образом:
и выполнялся в методе CTaskReminders::Add.
Взяв "грех" на душу и модифицировав ядро, я перенес обработчик в свой скрипт.
После этого инициировал обработчик в init.php
Непосредственно логика обработчика выглядит таким образом:
В результате при добавлении напоминания к задаче, создается событие в персональном календаре пользователя назначенного исполнителем и руководитель получает возможность просматривать задачи подчиненных, добавив их календари в свой.
Возникла необходимость устранить упущение разработчиков Битрикс - реализовать возможность добавления события в персональный календарь пользователя, назначенного ответственным при постановке задачи.
Решение позволило бы руководителю просматривать задачи подчиненных в своем календаре.
Преследуя цель минимизировать вмешательство в CMS, решено было привязаться к событию OnTaskReminderAdd, которое возникает при добавлении напоминания к задаче.
Поскольку наша версия Модуля управления задачами (tasks) 14.5.8 от 30.01.2015 не поддерживала событие OnTaskReminderAdd, а в документации оно уже было заявлено, я обратился к bxapi.ru, где подглядел обработчик. Он выглядел таким образом:
foreach(GetModuleEvents('tasks', 'OnTaskReminderAdd', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($ID, $arFields)); } |
Взяв "грех" на душу и модифицировав ядро, я перенес обработчик в свой скрипт.
После этого инициировал обработчик в init.php
AddEventHandler("tasks", "OnTaskReminderAdd", Array("CTaskHandlers", "OnTaskReminderAddHandler")); |
function OnTaskReminderAddHandler($ID, &$arFields) { if (CModule::IncludeModule("tasks")) { // поскольку $arFields содержит недостаточно данных // получаем параметры задачи $rsTask = CTasks::GetByID($arFields["TASK_ID"], false); if ($arTask = $rsTask->GetNext()) { if(CModule::IncludeModule('calendar')) { // узнаем ID персонального календаря исполнителя $arCalSet = CCalendar::GetUserSettings($arTask["RESPONSIBLE_ID"]); $arEventParam = array( "arFields" => array( "ID" => 0, "DT_FROM_TS" => strtotime($arFields["REMIND_DATE"]), "DT_TO_TS" => strtotime($arFields["REMIND_DATE"]), "NAME" => htmlspecialcharsBack($arTask["TITLE"]), "DESCRIPTION" => htmlspecialcharsBack($arTask["DESCRIPTION"]), "SECTIONS" => $arCalSet["meetSection"], "SKIP_TIME" => 1, "CAL_TYPE" => "user", "OWNER_ID" => $arTask["RESPONSIBLE_ID"], "VERSION" => 1, "DT_FROM" => date('d.m.Y H:i:s', strtotime($arFields["REMIND_DATE"])), "DT_TO" => date('d.m.Y H:i:s', strtotime($arFields["REMIND_DATE"])), ), "userId" => $arFields["USER_ID"], "path" => "/company/personal/user/".$arTask["RESPONSIBLE_ID"]."/calendar/", ); CCalendarEvent::Edit($arEventParam); } } } return; } |


