• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_phone.php
  • Класс: CVoxImplantPhone
  • Вызов: CVoxImplantPhone::syncWithController
static function syncWithController($parameters)
{
	if(isset($parameters['numbers']))
	{
		$numbers = $parameters['numbers'];
	}
	else
	{
		$numbers = static::GetRentNumbers();
	}

	if(!is_array($numbers))
	{
		return false;
	}

	$allowDelete = $parameters['delete'] === true;
	$allowCreate = $parameters['create'] === true;

	if(!$allowCreate && !$allowDelete)
	{
		// nothing to do
		return false;
	}

	$remoteNumbers = array_keys($numbers);

	$localNumbers = [];
	$cursor = VIModelNumberTable::getList();
	while($row = $cursor->fetch())
	{
		$localNumbers[] = $row['NUMBER'];
	}

	if($allowCreate)
	{
		$numbersToCreate = array_diff($remoteNumbers, $localNumbers);
		$numbersBySubscription = [];

		foreach ($numbersToCreate as $newNumber)
		{
			$numberRecord = $numbers[$newNumber];
			$subscriptionId = $numberRecord['SUBSCRIPTION_ID'];

			if(!isset($numbersBySubscription[$subscriptionId]))
			{
				$numbersBySubscription[$subscriptionId] = [];
			}

			$numbersBySubscription[$subscriptionId][$numberRecord['NUMBER']] = $numberRecord;
		}

		foreach ($numbersBySubscription as $subscriptionId => $newNumbers)
		{
			$configId = static::createConfig('', $newNumbers);
			static::savePhoneNumbers($configId, $newNumbers);
		}
	}

	if($allowDelete)
	{
		$numbersToDelete = array_diff($localNumbers, $remoteNumbers);
		if(!empty($numbersToDelete))
		{
			static::deleteLocal($numbersToDelete);

			CVoxImplantConfig::deleteOrphanConfigurations();
		}
	}

	return true;
}