• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/providercreator.php
  • Класс: BitrixSaleInternalsProviderCreator
  • Вызов: ProviderCreator::callBuilderMethod
private function callBuilderMethod($method, $outputName, $methodParameters = null)
{
	$result = new SaleResult();

	$resultList = array();

	/** @var ProviderBuilderBase $builder */
	foreach ($this->pool as $builder)
	{
		if (!method_exists($builder, $method))
		{
			throw new MainArgumentOutOfRangeException('method');
		}

		if (!$methodParameters)
		{
			/** @var SaleResult $r */
			$r = $builder->$method($outputName);
		}
		else
		{
			/** @var SaleResult $r */
			$r = $builder->$method($methodParameters);
		}

		if (!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
		}

		if ($r->hasWarnings())
		{
			$result->addWarnings($r->getWarnings());
		}

		$data = $r->getData();
		if (!empty($data))
		{
			$providerName = null;

			$providerClass = $builder->getProviderClass();
			if ($providerClass)
			{
				$reflect = new ReflectionClass($providerClass);
				$providerName = $this->clearProviderName($reflect->getName());
			}

			if (strval($providerName) == '')
			{
				$providerName = $builder->getCallbackFunction();
			}

			if (!empty($data[$outputName]))
			{
				$resultList[$providerName] = $data[$outputName];
			}
		}
	}

	if (!empty($resultList))
	{
		$result->setData(
			array(
				$outputName => $resultList
			)
		);
	}

	return $result;
}