• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/uf/fileusertype.php
  • Класс: BitrixDiskUfFileUserType
  • Вызов: FileUserType::checkFields
static function checkFields($userField, $value, $userId = false)
{
	$userFieldManager = Driver::getInstance()->getUserFieldManager();
	$errors = [];

	[$type, $realValue] = self::detectType($value);

	if ($type === self::TYPE_ALREADY_ATTACHED)
	{
		$attachedModel = $userFieldManager->getAttachedObjectById($realValue);
		if (!$attachedModel)
		{
			$errors[] = [
				"id" => $userField["FIELD_NAME"],
				"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
			];

			return $errors;
		}
		[$connectorClass, $moduleId] = $userFieldManager->getConnectorDataByEntityType($userField['ENTITY_ID']);

		if(
			!$userFieldManager->belongsToEntity($attachedModel, $userField['ENTITY_ID'], $userField['ENTITY_VALUE_ID']) &&
			!(
				is_subclass_of($connectorClass, 'BitrixDiskUfISupportForeignConnector') ||
				in_array('BitrixDiskUfISupportForeignConnector', class_implements($connectorClass)) //5.3.9
			)
		)
		{
			$errors[] = [
				"id" => $userField["FIELD_NAME"],
				"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
			];

			return $errors;
		}
	}
	else
	{
		if ($realValue <= 0)
		{
			$errors[] = [
				"id" => $userField["FIELD_NAME"],
				"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_INVALID_VALUE'),
			];

			return $errors;
		}

		$fileModel = self::getFileById($realValue);
		if (!$fileModel || !$fileModel->getStorage())
		{
			$errors[] = [
				"id" => $userField["FIELD_NAME"],
				"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
			];

			return $errors;
		}

		if ($userId === false)
		{
			$securityContext = $fileModel->getStorage()->getCurrentUserSecurityContext();
		}
		else
		{
			$securityContext = $fileModel->getStorage()->getSecurityContext($userId);
		}

		if (!$fileModel->canRead($securityContext))
		{
			$errors[] = [
				"id" => $userField["FIELD_NAME"],
				"text" => Loc::getMessage('DISK_FILE_USER_TYPE_ERROR_BAD_RIGHTS'),
			];

			return $errors;
		}
	}

	return $errors;
}