• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/businessvalue.php
  • Класс: BitrixSaleBusinessValue
  • Вызов: BusinessValue::addConsumerByRef
static function addConsumerByRef($consumerKey, array &$consumer) // by ref!
{
	if (isset(self::$consumers[$consumerKey]) || $consumerKey == BusinessValueTable::COMMON_CONSUMER_KEY)
		throw new SystemException('duplicate consumer key '.$consumerKey);

//		// TODO remove hack to paysytem
//		if (substr($consumerKey, 0, 10) == 'PAYSYSTEM_')
//			$consumer['PROVIDERS'] = array('VALUE', 'COMPANY', 'ORDER', 'USER', 'PROPERTY', 'PAYMENT');

	if (isset($consumer['CODES']) && is_array($consumer['CODES']))
	{
		$codes =& self::$commonConsumer['CODES'];

		foreach ($consumer['CODES'] as $codeKey => $code)
		{
			$isCommon = !($code['NOT_COMMON'] ?? false);
			if ($codeKey && is_array($code) && $isCommon)
			{
				$codeName = ($code['NAME'] ?? null) ?: $codeKey;

				if ($c =& $codes[$codeKey])
				{
					if (empty($c['GROUP']) && !empty($code['GROUP']))
					{
						$c['GROUP'] = $code['GROUP'];
					}

					if (!isset($c['SORT']) && isset($code['SORT']))
					{
						$c['SORT'] = $code['SORT'];
					}

					if (
						isset($c['DEFAULT'], $code['DEFAULT'])
							&& !is_array($c['DEFAULT'])
							&& is_array($code['DEFAULT'])
					)
					{
						$c['DEFAULT'] = $code['DEFAULT'];
					}

					if (isset($code['DOMAINS']) && is_array($code['DOMAINS']))
					{
						$c['DOMAINS'] = isset($c['DOMAINS']) && is_array($c['DOMAINS'])
							? array_intersect($c['DOMAINS'], $code['DOMAINS'])
							: $code['DOMAINS']
						;
					}

					if (!isset($code['PROVIDERS']) || !is_array($code['PROVIDERS']))
					{
						$code['PROVIDERS'] = $consumer['PROVIDERS'] ?? [];
					}

					if (is_array($code['PROVIDERS']))
					{
						$c['PROVIDERS'] = isset($c['PROVIDERS']) && is_array($c['PROVIDERS'])
							? array_intersect($c['PROVIDERS'], $code['PROVIDERS'])
							: $code['PROVIDERS']
						;
					}

					$c['NAMES'][$codeName] = 1;

//						if (! $c['NAME'] && $code['NAME'])
//							$c['NAME'] = $code['NAME'];
				}
				else
				{
					$c = $code;
					$c['PROVIDERS'] = $code['PROVIDERS'] ?? $consumer['PROVIDERS'] ?? [];
					$c['NAMES'][$codeName] = 1;
				}

				$c['CONSUMERS'] []= !empty($consumer['NAME']) ? $consumer['NAME'] : $consumerKey;
			}
		}

		self::sortArray($consumer['CODES']);
	}

	self::$consumers[$consumerKey] = & $consumer; // by ref!
}