• Модуль: 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);
	}

}