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