• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/businessvalue.php
  • Класс: BitrixSaleHelpersAdminBusinessValueControl
  • Вызов: BusinessValueControl::saveMap
public function saveMap()
{
	if ($this->errors)
		throw new SystemException('There are errors in map!');

	$consumers = BusinessValue::getConsumers();

	foreach ($this->consumerCodePersonMapping as $consumerKey => $codePersonMapping)
	{
		$consumer = $consumers[$consumerKey] ?? [];
		$setMapping =
			isset($consumer['SET_MAPPING']) && is_callable($consumer['SET_MAPPING'])
				? $consumer['SET_MAPPING']
				: null
		;
		$codes = $consumer['CODES'] ?? [];

		foreach ($codePersonMapping as $codeKey => $personMapping)
		{
			$code = $codes[$codeKey] ?? [];
			$fileInput = $code['INPUT'] ?? [];
			$fileType = $fileInput['TYPE'] ?? '';
			if (!(is_array($fileInput) && ($fileType == 'FILE' || $fileType == 'DATABASE_FILE')))
			{
				$fileInput = [];
			}

			foreach ($personMapping as $personTypeId => $mapping)
			{
				if ($setMapping)
				{
					$result = call_user_func($setMapping, $codeKey, $personTypeId, $mapping);
				}
				else
				{
					$consumerCodePersonMapping = BitrixSaleBusinessValue::getConsumerCodePersonMapping();
					if ($fileInput && ($file =& $mapping['PROVIDER_VALUE']))
					{
						if (InputFile::isDeletedSingle($file))
						{
							if ($fileInput['TYPE'] == 'FILE')
							{
								if (is_numeric($file['ID']) && isset($consumerCodePersonMapping[$consumerKey][$codeKey][$personTypeId]))
								{
									CFile::Delete($file['ID']); // TODO isSuccess
								}
							}

							$file = null;
						}
						elseif (InputFile::isUploadedSingle($file))
						{
							if ($fileInput['TYPE'] == 'FILE')
							{
								if (($file = CFile::SaveFile(array('MODULE_ID' => 'sale') + $file, 'sale/bizval')) && is_numeric($file))
								{
									if (($oldFile = BusinessValue::getMapping($codeKey, $consumerKey, $personTypeId, array('MATCH' => BusinessValue::MATCH_EXACT))) && is_numeric($oldFile['PROVIDER_VALUE']))
										CFile::Delete($oldFile['PROVIDER_VALUE']); // TODO isSuccess
								}
								else
								{
									$this->errors[$consumerKey][$codeKey][$personTypeId]['DATABASE'] = 'unable to save file';
									continue;
								}

								$file = InputManager::getValue($fileInput, $file);
							}
							elseif($fileInput['TYPE'] == 'DATABASE_FILE')
							{
								/** @noinspection PhpVariableNamingConventionInspection */
								global $APPLICATION;
								$content = $APPLICATION->GetFileContent($file['tmp_name']);
								if (!$content)
								{
									continue;
								}

								$file = $content;
							}
						}
						else
						{
							$file = $file['ID'];
						}
					}
					elseif (isset($fileInput['TYPE']) && is_array($fileInput) && $fileInput['TYPE'] === 'FILE')
					{
						if (isset($consumerCodePersonMapping[$consumerKey][$codeKey][$personTypeId]))
						{
							CFile::Delete($consumerCodePersonMapping[$consumerKey][$codeKey][$personTypeId]['PROVIDER_VALUE']);
						}
					}

					$common = IsModuleInstalled('bitrix24') ? false : true;
					$result = BusinessValue::setMapping($codeKey, $consumerKey, $personTypeId, $mapping, $common);
				}

				if (! $result->isSuccess())
					$this->errors[$consumerKey][$codeKey][$personTypeId]['DATABASE'] = $result->getErrorMessages();
			}
		}
	}

	return ! $this->errors;
}