- Модуль: voximplant
- Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_config.php
- Класс: CVoxImplantConfig
- Вызов: CVoxImplantConfig::GetLinesEx
static function GetLinesEx(array $params = [])
{
$showRestApps = isset($params['showRestApps']) && $params['showRestApps'] === true;
$showInboundOnly = isset($params['showInboundOnly']) && $params['showInboundOnly'] === true;
static $cache = [];
$cacheKey = ($showRestApps ? 'r' : '_') . ($showInboundOnly ? 'i' : '_');
if (isset($cache[$cacheKey]))
{
return $cache[$cacheKey];
}
$cacheTtl = 86400; //1 day
$result = Array();
$cursor = VIModelNumberTable::getList([
'select' => ['ID', 'NUMBER'],
'cache' => [
'ttl' => $cacheTtl
]
]);
while ($row = $cursor->fetch())
{
$name = BitrixMainPhoneNumberParser::getInstance()->parse($row['NUMBER'])->format(BitrixMainPhoneNumberFormat::INTERNATIONAL);
$result[$row['NUMBER']] = array(
'LINE_NUMBER' => $row['NUMBER'],
'SHORT_NAME' => $name,
'FULL_NAME' => $name,
'TYPE' => static::MODE_RENT
);
}
$res = VIConfigTable::getList([
'select' => [
'ID',
'PORTAL_MODE',
'SEARCH_ID',
'PHONE_NAME',
'RENTED_PHONE_NUMBER' => 'NUMBER.NUMBER',
'CALLER_ID_PHONE_NUMBER' => 'CALLER_ID.NUMBER'
],
'filter' => [
'=PORTAL_MODE' => [static::MODE_SIP, static::MODE_LINK]
],
'cache' => [
'ttl' => $cacheTtl
]
]);
while ($row = $res->fetch())
{
if ($row['SEARCH_ID'] == 'test')
continue;
switch ($row['PORTAL_MODE'])
{
case CVoxImplantConfig::MODE_SIP:
$searchId = $row['SEARCH_ID'];
$name = $row['PHONE_NAME'] ?: static::GetDefaultPhoneName($row);
break;
case CVoxImplantConfig::MODE_LINK:
$searchId = $row['CALLER_ID_PHONE_NUMBER'];
$name = PhoneNumberParser::getInstance()->parse($row['CALLER_ID_PHONE_NUMBER'])->format(PhoneNumberFormat::INTERNATIONAL);
break;
default:
continue 2;
}
$result[$searchId] = array(
'LINE_NUMBER' => $searchId,
'SHORT_NAME' => $name,
'FULL_NAME' => $name,
'TYPE' => $row['PORTAL_MODE']
);
}
$externalRestNumbers = array();
$externalSipNumbers = array();
if($showRestApps || $showInboundOnly)
{
$externalNumbersCursor = VIModelExternalLineTable::getList(array(
'select' => ['*', 'CONFIG_ID' => 'SIP.CONFIG_ID', 'SEARCH_ID' => 'SIP.CONFIG.SEARCH_ID'],
'cache' => array(
'ttl' => $cacheTtl
)
));
foreach ($externalNumbersCursor->getIterator() as $row)
{
switch ($row['TYPE'])
{
case VIModelExternalLineTable::TYPE_SIP:
if($row['CONFIG_ID'] > 0)
{
$externalSipNumbers[] = $row;
}
break;
case VIModelExternalLineTable::TYPE_REST_APP:
$externalRestNumbers[$row['REST_APP_ID']][] = $row;
break;
}
}
}
if($showInboundOnly)
{
foreach ($externalSipNumbers as $externalNumber)
{
$formattedNumber = PhoneNumberParser::getInstance()->parse($externalNumber['NUMBER'])->format();
$result[$externalNumber['NORMALIZED_NUMBER']] = array(
'LINE_NUMBER' => $externalNumber['NORMALIZED_NUMBER'],
'SHORT_NAME' => $formattedNumber,
'FULL_NAME' => $formattedNumber,
'TYPE' => 'SIP',
'PARENT_ID' => $externalNumber['SEARCH_ID']
) ;
}
}
if($showRestApps)
{
$restApps = VIRestHelper::getExternalCallHandlers();
foreach ($restApps as $restAppId => $restAppName)
{
if($restAppName == '')
$restAppName = Loc::getMessage('VI_CONFIG_NO_NAME');
$prefixedRestAppId = CVoxImplantConfig::MODE_REST_APP . ':' . $restAppId;
$result[$prefixedRestAppId] = array(
'LINE_NUMBER' => $prefixedRestAppId,
'SHORT_NAME' => GetMessage("VI_CONFIG_REST_APP").": ".$restAppName,
'FULL_NAME' => GetMessage("VI_CONFIG_REST_APP").": ".$restAppName,
'TYPE' => 'REST',
'REST_APP_ID' => $restAppId
);
if($externalRestNumbers[$restAppId])
{
foreach ($externalRestNumbers[$restAppId] as $externalNumber)
{
$result[$externalNumber['NUMBER']] = array(
'LINE_NUMBER' => $externalNumber['NUMBER'],
'SHORT_NAME' => $externalNumber['NUMBER'],
'FULL_NAME' => GetMessage("VI_CONFIG_REST_APP").": ".$restAppName. ": " . ($externalNumber['NAME'] ? $externalNumber['NUMBER'] . " - " . $externalNumber['NAME'] : $externalNumber['NUMBER']),
'TYPE' => 'REST',
'REST_APP_ID' => $restAppId,
'CRM_AUTO_CREATE' => $externalNumber['CRM_AUTO_CREATE'],
) ;
}
}
}
}
$cache[$cacheKey] = $result;
return $cache[$cacheKey];
}