• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Service/Operation/Import.php
  • Класс: Bitrix\Crm\Service\Operation\Import
  • Вызов: Import::checkSystemFieldsValues
public function checkSystemFieldsValues(array $systemFieldsValues): Result
{
	$result = new Result();

	$canSetSystemFields = Container::getInstance()->getUserPermissions($this->getContext()->getUserId())->isAdmin();
	if ($canSetSystemFields)
	{
		$createdTime = $systemFieldsValues[Item::FIELD_NAME_CREATED_TIME];
		$updatedTime = $systemFieldsValues[Item::FIELD_NAME_UPDATED_TIME];
		$movedTime = $systemFieldsValues[Item::FIELD_NAME_MOVED_TIME];

		if ($createdTime)
		{
			$maxPossibleCreatedTime = $this->getLastAddedItemCreatedTime();
			if ($maxPossibleCreatedTime && $maxPossibleCreatedTime->getTimestamp() > $createdTime->getTimestamp())
			{
				$result->addError($this->getFieldCreatedTimeIsNotMonotoneError(Item::FIELD_NAME_CREATED_TIME));
			}
			if ($createdTime->getTimestamp() > (new DateTime())->getTimestamp())
			{
				$result->addError($this->getFieldCreatedTimeIsInFutureError(Item::FIELD_NAME_CREATED_TIME));
			}
		}

		if ($updatedTime)
		{
			$minPossibleUpdatedTime = $createdTime ?? (new DateTime());
			if ($minPossibleUpdatedTime->getTimestamp() > $updatedTime->getTimestamp())
			{
				$result->addError($this->getFieldCompareValueError(
					Item::FIELD_NAME_UPDATED_TIME,
					Item::FIELD_NAME_CREATED_TIME
				));
			}
			if ($updatedTime->getTimestamp() > (new DateTime())->getTimestamp())
			{
				$result->addError($this->getFieldCreatedTimeIsInFutureError(Item::FIELD_NAME_UPDATED_TIME));
			}
		}

		if ($movedTime)
		{
			$createdTimeValue = ($createdTime ?? (new DateTime()))->getTimestamp();
			$updatedTimeValue = $updatedTime ? $updatedTime->getTimestamp() : $createdTimeValue;
			if ($movedTime->getTimestamp() < $createdTimeValue)
			{
				$result->addError($this->getFieldCompareValueError(
					Item::FIELD_NAME_CREATED_TIME,
					Item::FIELD_NAME_MOVED_TIME,
				));
			}
			if ($movedTime->getTimestamp() > $updatedTimeValue)
			{
				$result->addError($this->getFieldCompareValueError(
					Item::FIELD_NAME_MOVED_TIME,
					Item::FIELD_NAME_UPDATED_TIME
				));
			}
		}

		foreach ([
			Item::FIELD_NAME_CREATED_BY,
			Item::FIELD_NAME_UPDATED_BY,
			Item::FIELD_NAME_MOVED_BY,
		] as $fieldName)
		{
			$fieldValue = $systemFieldsValues[$fieldName];
			if ($fieldValue && $fieldValue < 0)
			{
				$result->addError(
					$this->fieldsCollection->getField($fieldName)->getValueNotValidError()
				);
			}
		}
	}
	else
	{
		foreach ($systemFieldsValues as $fieldName => $fieldValue)
		{

			if (!is_null($fieldValue))
			{
				$result->addError($this->getOnlyAdminCanSetFieldError($fieldName));
			}
		}
	}

	return $result;
}