• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/classes/general/taskservice.php
  • Класс: CBPTaskService
  • Вызов: CBPTaskService::delegateTask
static function delegateTask($taskId, $fromUserId, $toUserId)
{
	global $DB;
	$taskId = (int)$taskId;
	$fromUserId = (int)$fromUserId;
	$toUserId = (int)$toUserId;

	if (!$taskId || !$fromUserId || !$toUserId)
		return false;

	$originalUserId = 0;

	//check ORIGINAL_USER_ID
	$iterator = $DB->Query('SELECT ORIGINAL_USER_ID'
		.' FROM b_bp_task_user'
		.' WHERE TASK_ID = '.$taskId.' AND USER_ID = '.$fromUserId
	);
	$row = $iterator->fetch();
	if (!empty($row['ORIGINAL_USER_ID']))
		$originalUserId = $row['ORIGINAL_USER_ID'];

	// check USER_ID (USER_ID must be unique for task)
	$iterator = $DB->Query('SELECT USER_ID'
		.' FROM b_bp_task_user'
		.' WHERE TASK_ID = '.$taskId.' AND USER_ID = '.$toUserId
	);
	$row = $iterator->fetch();
	if (!empty($row['USER_ID']))
		return false;

	$DB->Query("UPDATE b_bp_task_user SET USER_ID = "
		.$toUserId
		.(!$originalUserId? ', ORIGINAL_USER_ID = '.$fromUserId : '')
		." WHERE TASK_ID = ".$taskId." AND USER_ID = ".$fromUserId, true);
	CUserCounter::Decrement($fromUserId, 'bp_tasks', '**');
	CUserCounter::Increment($toUserId, 'bp_tasks', '**');
	self::onTaskChange(
		$taskId,
		[
			'USERS' => [$toUserId],
			'USERS_ADDED' => [$toUserId],
			'USERS_REMOVED' => [$fromUserId],
			'COUNTERS_DECREMENTED' => [$fromUserId],
			'COUNTERS_INCREMENTED' => [$toUserId],
		],
		CBPTaskChangedStatus::Delegate
	);
	foreach (GetModuleEvents("bizproc", "OnTaskDelegate", true) as $arEvent)
	{
		ExecuteModuleEventEx($arEvent, array($taskId, $fromUserId, $toUserId));
	}
	return true;
}