- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/kanban/stages.php
- Класс: BitrixTasksKanbanStagesTable
- Вызов: StagesTable::updateByCode
static function updateByCode($id, $fields)
{
$id = intval($id);
$afterId = isset($fields['AFTER_ID']) ? intval($fields['AFTER_ID']) : 0;
$entityId = isset($fields['ENTITY_ID']) ? intval($fields['ENTITY_ID']) : 0;
$entityType = self::getWorkMode();
if ($entityType == self::WORK_MODE_TIMELINE)
{
return null;
}
// get stages
$newStageId = 0;
$stages = array();
$res = self::getList(array(
'filter' => array(
'ENTITY_ID' => $entityId,
'=ENTITY_TYPE' => $entityType
),
'order' => array(
'SORT' => 'ASC'
)
));
while ($row = $res->fetch())
{
if ($row['SYSTEM_TYPE'] == self::SYS_TYPE_NEW)
{
$newStageId = $row['ID'];
}
$stages[$row['ID']] = $row;
}
// if move first - update tasks for fix in this stage
if (
isset($fields['AFTER_ID']) &&
isset($stages[$id]) &&
$entityType == self::WORK_MODE_GROUP
)
{
if (
$fields['AFTER_ID'] == 0 ||
$stages[$id]['SYSTEM_TYPE'] == self::SYS_TYPE_NEW
)
{
$connection = BitrixMainApplication::getConnection();
$sql = 'UPDATE '
. '`' . Task::getTableName() . '` '
. 'SET `STAGE_ID`=' . ($newStageId) . ' '
. 'WHERE `STAGE_ID`=0 AND `GROUP_ID`=' . $entityId . ';';
$connection->query($sql);
}
}
// set new
if (!isset($stages[$id]))
{
$id = 0;
}
$stages[$id] = array_merge(
isset($stages[$id]) ? $stages[$id] : array(),
$fields
);
// set sort
if (array_key_exists('AFTER_ID', $fields))
{
if ($afterId == 0)
{
$stages[$id]['SORT'] = 10;
}
elseif (isset($stages[$afterId]))
{
$stages[$id]['SORT'] = $stages[$afterId]['SORT'] + 10;
}
else
{
$stages[$id]['SORT'] = count($stages) * 100 + 10;
}
}
uasort($stages, function($a, $b)
{
if ($a['SORT'] == $b['SORT'])
{
return 0;
}
return ($a['SORT'] < $b['SORT']) ? -1 : 1;
});
// renew
$return = null;
$sort = 100;
foreach ($stages as $i => $stage)
{
if ($entityType == self::WORK_MODE_ACTIVE_SPRINT)
{
$systemType = $stage['SYSTEM_TYPE'] ?? '';
}
else
{
if (
$stage['TITLE'] ||
$stage['SYSTEM_TYPE'] == self::SYS_TYPE_NEW
)
{
$stage['SYSTEM_TYPE'] = '';
}
$systemType = ($sort == 100 ? self::SYS_TYPE_NEW : $stage['SYSTEM_TYPE']);
}
$fields = array(
'TITLE' => $stage['TITLE'],
'COLOR' => $stage['COLOR'],
'ENTITY_ID' => $stage['ENTITY_ID'],
'ENTITY_TYPE' => $entityType,
'SORT' => $sort,
'SYSTEM_TYPE' => $systemType
);
$sort += 100;
if ($i > 0)
{
$res = self::update($i, $fields);
}
else
{
$res = self::add($fields);
}
if ($i == $id)
{
$return = $res;
}
}
return $return;
}