- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/replica/taskhandler.php
- Класс: BitrixTasksReplicaTaskHandler
- Вызов: TaskHandler::updateAction
protected function updateAction(array $oldRecord, array $newRecord)
{
global $CACHE_MANAGER;
CounterService::getInstance()->collectData((int) $newRecord['ID']);
$newRecord['ACCOMPLICES'] = array();
$newRecord['AUDITORS'] = array();
$list = BitrixTasksInternalsTaskMemberTable::getList(array(
"filter" => array(
"=TASK_ID" => $newRecord["ID"],
),
));
while ($item = $list->fetch())
{
if ($item['TYPE'] == 'A')
$newRecord['ACCOMPLICES'][] = $item['USER_ID'];
elseif ($item['TYPE'] == 'U')
$newRecord['AUDITORS'][] = $item['USER_ID'];
}
CounterService::addEvent(
EventDictionary::EVENT_AFTER_TASK_UPDATE,
[
'NEW_RECORD' => $newRecord,
'OLD_RECORD' => $oldRecord
]
);
$arParticipants = array_unique(array_merge(
array($newRecord["CREATED_BY"], $newRecord["RESPONSIBLE_ID"]),
$newRecord["ACCOMPLICES"],
$newRecord["AUDITORS"]
));
// Emit pull event
try
{
$eventGUID = sha1(uniqid('AUTOGUID', true));
$arPullRecipients = array();
foreach($arParticipants as $userId)
$arPullRecipients[] = (int) $userId;
$arPullData = array(
'TASK_ID' => (int) $newRecord["ID"],
'BEFORE' => array(
'GROUP_ID' => 0
),
'AFTER' => array(
'GROUP_ID' => 0
),
'TS' => time(),
'event_GUID' => $eventGUID
);
CTasks::EmitPullWithTagPrefix(
$arPullRecipients,
'TASKS_GENERAL_',
'task_update',
$arPullData
);
CTasks::EmitPullWithTag(
$arPullRecipients,
'TASKS_TASK_' . (int) $newRecord["ID"],
'task_update',
$arPullData
);
}
catch (Exception $e)
{
}
if (($status = intval($newRecord["STATUS"])) && $status > 0 && $status < 8
&& ( (int) $oldRecord['STATUS'] !== (int) $newRecord['STATUS'] ) // only if status changed
)
{
if ($status == 7)
{
$arTask["DECLINE_REASON"] = $newRecord["DECLINE_REASON"];
}
CTaskNotifications::sendStatusMessage($oldRecord, $status, $newRecord);
}
CTaskNotifications::sendUpdateMessage($newRecord, $oldRecord, true, array());
//CTaskComments::onAfterTaskUpdate($newRecord['ID'], $oldRecord, $newRecord);
CTasks::Index($newRecord, $newRecord["TAGS"]); // search index
SearchIndex::setTaskSearchIndex($newRecord['ID'], $newRecord);
// clear cache
$CACHE_MANAGER->ClearByTag("tasks_".$newRecord["ID"]);
foreach($arParticipants as $userId)
{
$CACHE_MANAGER->ClearByTag("tasks_user_".$userId);
}
}