• Модуль: crmmobile
  • Путь к файлу: ~/bitrix/modules/crmmobile/lib/Command/SaveEntityCommand.php
  • Класс: BitrixCrmMobileCommandSaveEntityCommand
  • Вызов: SaveEntityCommand::prepareFileField
private function prepareFileField(Field $field, $sourceFiles)
{
	if (empty($sourceFiles))
	{
		return $sourceFiles;
	}

	$resultFiles = $sourceFiles;

	if (!is_array($resultFiles) || Collection::isAssociative($resultFiles))
	{
		$resultFiles = [$resultFiles];
	}

	$isUserField = $field->isUserField();
	$tokens = array_column($resultFiles, 'token');
	$pendingFiles = $this->getPendingFiles($field, $tokens);
	$pendingFilesMap = $pendingFiles->getAll();

	foreach ($resultFiles as &$resultFile)
	{
		if (!empty($resultFile['copy']) && !empty($resultFile['value']) && is_array($resultFile['value']))
		{
			$resultFile = $resultFile['value'];
			continue;
		}

		if (empty($resultFile['token']))
		{
			if (is_array($resultFile))
			{
				$resultFile = null;
			}

			continue;
		}

		$pendingFile = $pendingFilesMap[$resultFile['token']];

		if ($pendingFile && $pendingFile->isValid())
		{
			$resultFile = $pendingFilesMap[$resultFile['token']]->getFileId();
			if ($resultFile > 0)
			{
				if ($isUserField)
				{
					$this->registerUserFileField($field, $resultFile);
				}
				else
				{
					$this->registerGeneralFileField($field, $resultFile);
				}
			}
		}
		else
		{
			throw new DomainException('File upload error.');
		}
	}

	unset($resultFile);

	$pendingFiles->makePersistent();

	if ($field->isMultiple())
	{
		return $resultFiles;
	}

	return reset($resultFiles) ?: null;
}