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