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