- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/kanban/stages.php
- Класс: BitrixTasksKanbanStagesTable
- Вызов: StagesTable::pinInStage
static function pinInStage($taskId, $users = [], $refreshGroup = false)
{
if (!is_array($users))
{
$users = array($users);
}
$newTask = empty($users);
// get additional data
$currentUsers = array();
$task = TaskRegistry::getInstance()->get($taskId);
if (!$task)
{
return;
}
$currentUsers[] = $task['RESPONSIBLE_ID'];
$currentUsers[] = $task['CREATED_BY'];
// get current other members
$res = CTaskMembers::GetList(
array(),
array('TASK_ID' => $taskId)
);
while ($row = $res->fetch())
{
$currentUsers[] = $row['USER_ID'];
}
if ($newTask)
{
$users = $currentUsers;
$currentUsers = array();
}
$users = array_unique($users);
// pin in personal default stage (if already Kanban exist)
$personaleDefStages = array();
self::setWorkMode(self::WORK_MODE_USER);
foreach ($users as $userId)
{
$checkStages = self::getStages($userId, true);
if (!empty($checkStages))
{
$personaleDefStages[$userId] = self::getDefaultStageId($userId);
if (!in_array($userId, self::$disableLink))
{
$resStg = TaskStageTable::getList(array(
'filter' => array(
'TASK_ID' => $taskId,
'STAGE_ID' => array_keys($checkStages)
)
));
if (!$resStg->fetch())
{
$fields = array(
'TASK_ID' => $taskId,
'STAGE_ID' => self::getDefaultStageId($userId)
);
if (!TaskStageTable::getList(array(
'filter' => $fields
)
)->fetch())
{
try
{
TaskStageTable::add($fields);
}
catch (Exception $e){}
}
}
}
}
}
// work mode
self::setWorkMode(
$task['GROUP_ID'] > 0
? self::WORK_MODE_GROUP
: self::WORK_MODE_USER
);
if ($task['GROUP_ID'] > 0 && ($newTask || $refreshGroup))
{
$checkStages = self::getStages($task['GROUP_ID'], true);
}
else
{
$checkStages = array();
}
// one sort for project
if ($task['GROUP_ID'] > 0 && !empty($checkStages) && ($newTask || $refreshGroup))
{
// get order
if (($project = ProjectsTable::getById($task['GROUP_ID'])->fetch()))
{
$order = $project['ORDER_NEW_TASK'] ? $project['ORDER_NEW_TASK'] : 'desc';
}
else
{
$order = 'desc';
}
// set sorting
$targetId = (new Sort())->getPositionForGroup((int) $taskId, $order, (int) $task['GROUP_ID']);
if ($targetId)
{
SortingTable::setSorting(
BitrixTasksUtilUser::getId() > 0 ? BitrixTasksUtilUser::getId() : $task['CREATED_BY'],
$task['GROUP_ID'],
$taskId,
$targetId,
$order == 'asc' ? false : true
);
}
}
// and for each user
foreach ($users as $userId)
{
if (
$userId
&& !in_array($userId, self::$disablePin)
&& !in_array($userId, $currentUsers)
&& isset($personaleDefStages[$userId])
)
{
// get order
$order = CUserOptions::getOption(
'tasks',
'order_new_task',
'desc',
$userId
);
$targetId = (new Sort())->getPositionForUser((int)$taskId, $order, (int)$userId);
if ($targetId)
{
SortingTable::setSorting(
$userId,
0,
$taskId,
$targetId,
($order == 'asc' ? false : true)
);
}
}
}
}