- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/statusbase.php
- Класс: BitrixSaleStatusBase
- Вызов: StatusBase::getAllowedGroupStatuses
static function getAllowedGroupStatuses($groupId, $fromStatus)
{
static $cacheAllowStatuses = array();
if (! is_array($groupId))
$groupId = array($groupId);
$cacheKey = md5(join('|', $groupId) . "_".(is_array($fromStatus) ? join('|', $fromStatus) : $fromStatus));
if (in_array('1', $groupId, true) || CMain::GetUserRight('sale', $groupId) >= 'W') // Admin
{
if (!array_key_exists($cacheKey, $cacheAllowStatuses))
{
$result = static::getList(array(
'select' => array(
'ID',
'NAME' => 'BitrixSaleInternalsStatusLangTable:STATUS.NAME'
),
'filter' => array(
'=TYPE' => static::TYPE,
'=BitrixSaleInternalsStatusLangTable:STATUS.LID' => LANGUAGE_ID),
'order' => array(
'SORT'
),
));
while ($row = $result->fetch())
{
$cacheAllowStatuses[$cacheKey][$row['ID']] = $row['NAME'];
}
}
}
else
{
if (!array_key_exists($cacheKey, $cacheAllowStatuses))
{
$cacheAllowStatuses[$cacheKey] = array();
$dbRes = static::getList(array( // check if group can change from status
'select' => array('ID'),
'filter' => array(
'=ID' => $fromStatus,
'=TYPE' => static::TYPE,
'=BitrixSaleInternalsStatusGroupTaskTable:STATUS.GROUP_ID' => $groupId,
'=BitrixSaleInternalsStatusGroupTaskTable:STATUS.TASK.BitrixMainTaskOperation:TASK.OPERATION.NAME' => 'sale_status_from',
),
'limit' => 1,
));
if ($dbRes->fetch())
{
$result = static::getList(array(
'select' => array('ID', 'NAME' => 'BitrixSaleInternalsStatusLangTable:STATUS.NAME'),
'filter' => array(
'=TYPE' => static::TYPE,
'=BitrixSaleInternalsStatusLangTable:STATUS.LID' => LANGUAGE_ID,
'=BitrixSaleInternalsStatusGroupTaskTable:STATUS.GROUP_ID' => $groupId,
'=BitrixSaleInternalsStatusGroupTaskTable:STATUS.TASK.BitrixMainTaskOperation:TASK.OPERATION.NAME' => 'sale_status_to',
),
'order' => array('SORT'),
));
while ($row = $result->fetch())
{
$cacheAllowStatuses[$cacheKey][$row['ID']] = $row['NAME'];
}
}
}
}
return $cacheAllowStatuses[$cacheKey] ?? [];
}