• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/kanban/stages.php
  • Класс: BitrixTasksKanbanStagesTable
  • Вызов: StagesTable::getStages
static function getStages($entityId = 0, $disableCreate = false)
{
	static $stages = array();

	$entityType = self::getWorkMode();

	if (
		isset($stages[$entityType.$entityId]) &&
		!empty($stages[$entityType.$entityId])
	)
	{
		return $stages[$entityType.$entityId];
	}

	$stages[$entityType.$entityId] = array();
	$predefinedStages = ($entityType == self::WORK_MODE_TIMELINE)
		? TimeLineTable::getStages()
		: [];

	$res = self::getList(array(
		'filter' => array(
			'ENTITY_ID' => $entityId,
			'=ENTITY_TYPE' => $entityType
		),
		'order' => array(
			'SORT' => 'ASC'
		),
	));
	while ($row = $res->fetch())
	{
		// set default color
		if ($row['COLOR'] == '')
		{
			$row['COLOR'] = self::DEF_COLOR_STAGE;
		}
		// set default title
		if ($row['TITLE'] == '')
		{
			if ($row['SYSTEM_TYPE'] != '')
			{
				$row['TITLE'] = Loc::getMessage('TASKS_STAGE_' . $row['SYSTEM_TYPE']);
			}
			else
			{
				$row['TITLE'] = Loc::getMessage('TASKS_STAGE_' . self::SYS_TYPE_DEFAULT);
			}
		}
		if ($row['SYSTEM_TYPE'])
		{
			if (
				!$row['ADDITIONAL_FILTER'] &&
				isset($predefinedStages[$row['SYSTEM_TYPE']]['FILTER'])
			)
			{
				$row['ADDITIONAL_FILTER'] = $predefinedStages[$row['SYSTEM_TYPE']]['FILTER'];
				$row['ADDITIONAL_FILTER_TEST'] = $row['ADDITIONAL_FILTER'];
			}
			if (isset($row['ADDITIONAL_FILTER_TEST']))
			{
				foreach ($row['ADDITIONAL_FILTER_TEST'] as &$date)
				{
					if ($date instanceof BitrixMainTypeDateTime)
					{
						$date = clone $date;
						$date = (string)$date;
					}
				}
				unset($date);
			}
			if (
				!$row['TO_UPDATE'] &&
				isset($predefinedStages[$row['SYSTEM_TYPE']]['UPDATE'])
			)
			{
				$row['TO_UPDATE'] = $predefinedStages[$row['SYSTEM_TYPE']]['UPDATE'];
			}
			if (
				!$row['TO_UPDATE_ACCESS'] &&
				isset($predefinedStages[$row['SYSTEM_TYPE']]['UPDATE_ACCESS'])
			)
			{
				$row['TO_UPDATE_ACCESS'] = $predefinedStages[$row['SYSTEM_TYPE']]['UPDATE_ACCESS'];
			}
		}
		$row['TO_UPDATE'] = (array)$row['TO_UPDATE'];
		$row['ADDITIONAL_FILTER'] = (array)$row['ADDITIONAL_FILTER'];
		$stages[$entityType.$entityId][$row['ID']] = $row;
	}
	if ($disableCreate)
	{
		return $stages[$entityType.$entityId];
	}
	// if empty, create default stages
	if (empty($stages[$entityType.$entityId]))
	{
		if ($entityType == self::WORK_MODE_USER)
		{
			self::add(array(
				'SYSTEM_TYPE' => self::SYS_TYPE_NEW,
				'TITLE' => Loc::getMessage('TASKS_STAGE_MP_1'),
				'SORT' => 100,
				'ENTITY_ID' => $entityId,
				'ENTITY_TYPE' => $entityType,
				'COLOR' => '00C4FB'
			));
			self::add(array(
				'TITLE' => Loc::getMessage('TASKS_STAGE_MP_2'),
				'SORT' => 200,
				'ENTITY_ID' => $entityId,
				'ENTITY_TYPE' => $entityType,
				'COLOR' => '47D1E2'
			));
		}
		else if ($entityType == self::WORK_MODE_GROUP)
		{
			if ($entityId > 0)
			{
				self::getStages(0);
				self::copyView(0, $entityId);
			}
			else
			{
				self::add(array(
					'SYSTEM_TYPE' => self::SYS_TYPE_NEW,
					'SORT' => 100,
					'ENTITY_ID' => $entityId,
					'ENTITY_TYPE' => $entityType,
					'COLOR' => '00C4FB'
				));
				self::add(array(
					'SYSTEM_TYPE' => self::SYS_TYPE_PROGRESS,
					'SORT' => 200,
					'ENTITY_ID' => $entityId,
					'ENTITY_TYPE' => $entityType,
					'COLOR' => '47D1E2'
				));
				self::add(array(
					'SYSTEM_TYPE' => self::SYS_TYPE_FINISH,
					'SORT' => 300,
					'ENTITY_ID' => $entityId,
					'ENTITY_TYPE' => $entityType,
					'COLOR' => '75D900'
				));
			}
		}
		else
		{
			$i = 0;

			if ($entityType == self::WORK_MODE_TIMELINE)
			{
				$source = TimeLineTable::getStages();
			}
			else
			{
				return [];
			}

			foreach ($source as $stageCode => $stageItem)
			{
				self::add([
					'SYSTEM_TYPE' => array_key_exists('SYSTEM_TYPE', $stageItem)
									? $stageItem['SYSTEM_TYPE']
									: $stageCode,
					'TITLE' => array_key_exists('TITLE', $stageItem)
									? $stageItem['TITLE']
									: '',
					'SORT' => ++$i * 100,
					'ENTITY_ID' => $entityId,
					'ENTITY_TYPE' => $entityType,
					'COLOR' => $stageItem['COLOR']
				]);
			}
		}

		return self::getStages($entityId);
	}

	return $stages[$entityType.$entityId];
}