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

	list($type, $realValue) = static::detectType($value);

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

			return $errors;
		}
		list($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[] = array(
				"id" => $userField["FIELD_NAME"],
				"text" => Loc::getMessage('DISK_VERSION_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
			);

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

			return $errors;
		}
		$version = static::getVersionById($realValue);
		if(!$version)
		{
			$errors[] = array(
				"id" => $userField["FIELD_NAME"],
				"text" => Loc::getMessage('DISK_VERSION_USER_TYPE_ERROR_COULD_NOT_FIND_FILE'),
			);

			return $errors;
		}
		$file = $version->getObject();
		if($userId === false)
		{
			$securityContext = $file->getStorage()->getCurrentUserSecurityContext();
		}
		else
		{
			$userId = (int)$userId;
			$securityContext = $file->getStorage()->getSecurityContext($userId);
		}

		$hackData = AttachedObject::getStoredDataByObjectId($file->getId());
		if ($userId !== false && isset($hackData['STATE']) && $userId === (int)$version->getCreatedBy())
		{
			return $errors;
		}
		//we don't check rights on file if version create current user. (uf logic, magic)
		if($version->getCreatedBy() != self::getActivityUserId() && !$file->canRead($securityContext))
		{
			$errors[] = array(
				"id" => $userField["FIELD_NAME"],
				"text" => Loc::getMessage('DISK_VERSION_USER_TYPE_ERROR_BAD_RIGHTS'),
			);

			return $errors;
		}
	}

	return $errors;
}