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