- Модуль: voximplant
- Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_user.php
- Класс: CVoxImplantUser
- Вызов: CVoxImplantUser::getAllowedLines
static function getAllowedLines($userId)
{
if(!BitrixVoximplantLimits::canSelectLine())
return array();
$cacheManager = BitrixMainApplication::getInstance()->getManagedCache();
$cacheTag = static::$cacheTagAllowedLines.$userId;
if ($cacheManager->read(static::$cacheTtl, $cacheTag, static::$cacheTable))
return $cacheManager->get($cacheTag);
$userAccessCodes = CAccess::GetUserCodesArray($userId);
if(!is_array($userAccessCodes) || empty($userAccessCodes))
return array();
$cursor = BitrixVoximplantModelLineAccessTable::getList(array(
'select' => array(
new BitrixMainEntityExpressionField('DISTINCT_CONFIG_ID', 'DISTINCT %s', 'CONFIG_ID'),
'PHONE_NAME' => 'CONFIG.PHONE_NAME',
'PORTAL_MODE' => 'CONFIG.PORTAL_MODE',
'SEARCH_ID' => 'CONFIG.SEARCH_ID',
'RENTED_PHONE_NUMBER' => 'CONFIG.NUMBER.NUMBER',
'GROUP_PHONE_NUMBER' => 'CONFIG.GROUP_NUMBER.NUMBER',
'CALLER_ID_NUMBER' => 'CONFIG.CALLER_ID.NUMBER'
),
'filter' => array(
'=ACCESS_CODE' => $userAccessCodes,
'=CONFIG.CAN_BE_SELECTED' => 'Y',
)
)
);
$defaultLineId = static::getUserOutgoingLine($userId);
$defaultLineFound = false;
$result = array();
while ($row = $cursor->fetch())
{
if ($row['PORTAL_MODE'] == CVoxImplantConfig::MODE_RENT)
{
$line = $row['RENTED_PHONE_NUMBER'];
}
else if ($row['PORTAL_MODE'] == CVoxImplantConfig::MODE_LINK)
{
$line = $row['CALLER_ID_NUMBER'];
}
else if ($row['PORTAL_MODE'] == CVoxImplantConfig::MODE_GROUP)
{
$line = $row['GROUP_PHONE_NUMBER'];
}
else
{
$line = $row['SEARCH_ID'];
}
if($line == $defaultLineId) $defaultLineFound = true;
$result[] = $line;
}
if(!$defaultLineFound)
{
$result[] = $defaultLineId;
}
//rest apps and their lines are available unconditionally
$restApps = VIRestHelper::getExternalCallHandlers();
$externalNumbers = array();
$externalNumbersCursor = VIModelExternalLineTable::getList(array(
'filter' => array(
'=REST_APP_ID' => array_keys($restApps)
)
));
foreach ($externalNumbersCursor->getIterator() as $row)
{
$externalNumbers[$row['REST_APP_ID']][] = $row;
}
foreach ($restApps as $restAppId => $restAppName)
{
$prefixedRestAppId = CVoxImplantConfig::MODE_REST_APP . ':' . $restAppId;
$result[] = $prefixedRestAppId;
if($externalNumbers[$restAppId])
{
foreach ($externalNumbers[$restAppId] as $externalNumber)
{
$result[] = $externalNumber['NUMBER'];
}
}
}
$cacheManager->set($cacheTag, $result);
return $result;
}