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