• Модуль: dav
  • Путь к файлу: ~/bitrix/modules/dav/classes/general/connection.php
  • Класс: CAllDavConnection
  • Вызов: CAllDavConnection::ParseFields
static function ParseFields(&$arFields, $id = 0)
{
	$id = (int)$id;
	$updateMode = ($id > 0);
	$addMode = !$updateMode;

	$arError = array();

	if ($updateMode)
	{
		$arConnectionOld = self::GetById($id);
		if (is_null($arConnectionOld))
		{
			$arError[] = ["updateMode", "updateMode"];
		}
		//throw new CDavInvalidOperationException("updateMode");
	}

	if (
		($addMode && !isset($arFields['NAME']))
		|| (isset($arFields['NAME']) && !$arFields['NAME'])
	)
	{
		$arError[] = [
			GetMessage('DAV_EXP_NAME'),
			"NULL_NAME"
		];
	}
	//throw new CDavArgumentNullException("NAME", GetMessage('DAV_EXP_NAME'));

	if ($addMode && !isset($arFields['ACCOUNT_TYPE']))
	{
		$arError[] = [
			GetMessage('DAV_EXP_ACCOUNT_TYPE'),
			"NULL_ACCOUNT_TYPE"
		];
	}
	//throw new CDavArgumentNullException("ACCOUNT_TYPE", GetMessage('DAV_EXP_ACCOUNT_TYPE'));

	if (isset($arFields['ACCOUNT_TYPE']))
	{
		$arFields["ACCOUNT_TYPE"] = mb_strtolower($arFields["ACCOUNT_TYPE"]);
		if (!in_array($arFields['ACCOUNT_TYPE'], [
			'caldav',
			'ical',
			BitrixCalendarSyncGoogleHelper::GOOGLE_ACCOUNT_TYPE_CALDAV,
			BitrixCalendarSyncGoogleHelper::GOOGLE_ACCOUNT_TYPE_API,
			BitrixCalendarSyncOffice365Helper::ACCOUNT_TYPE,
			BitrixCalendarSyncIcloudHelper::ACCOUNT_TYPE,
		], true)
	)
		{
			$arError[] = [
				GetMessage('DAV_EXP_ACCOUNT_TYPE_OOR'),
				"OOR_ACCOUNT_TYPE"
			];
		}
		//throw new CDavArgumentOutOfRangeException("ACCOUNT_TYPE", GetMessage('DAV_EXP_ACCOUNT_TYPE'), array("caldav", "ical"));
	}

	if ($addMode && !isset($arFields['ENTITY_TYPE']))
	{
		$arError[] = [
			GetMessage('DAV_EXP_ENTITY_TYPE'),
			"NULL_ENTITY_TYPE"
		];
	}
	//throw new CDavArgumentNullException("ENTITY_TYPE", GetMessage('DAV_EXP_ENTITY_TYPE'));

	if (isset($arFields['ENTITY_TYPE']))
	{
		$arFields["ENTITY_TYPE"] = mb_strtolower($arFields["ENTITY_TYPE"]);
		if (!in_array($arFields["ENTITY_TYPE"], ["user", "group"]))
		{
			$arError[] = [
				GetMessage('DAV_EXP_ENTITY_TYPE_OOR'),
				"OOR_ENTITY_TYPE"
			];
		}
		//throw new CDavArgumentOutOfRangeException("ENTITY_TYPE", GetMessage('DAV_EXP_ENTITY_TYPE'), array("user", "group"));
	}

	if ($addMode && !isset($arFields['ENTITY_ID']))
	{
		$arError[] = [
			GetMessage('DAV_EXP_ENTITY_ID'),
			"NULL_ENTITY_ID"
		];
	}
	//throw new CDavArgumentNullException("ENTITY_ID", GetMessage('DAV_EXP_ENTITY_ID'));

	if (isset($arFields['ENTITY_ID']))
	{
		$entityId = (int)$arFields["ENTITY_ID"];
		if (!$entityId || ($entityId."!" !== $arFields["ENTITY_ID"]."!"))
		{
			$arError[] = [
				GetMessage('DAV_EXP_ENTITY_ID_TYPE'),
				"TYPE_ENTITY_ID"
			];
		}
		//throw new CDavArgumentTypeException("ENTITY_ID", GetMessage('DAV_EXP_ENTITY_ID'), "int");
	}

	if (isset($arFields['SERVER']))
	{
		$arServer = [
			'host' => null,
			'scheme' => null,
			'port' => null,
			'path' => null,
		];
		$parsedUrl = parse_url($arFields["SERVER"]);
		$arServer = array_merge($arServer, $parsedUrl);

		$arFields["SERVER_SCHEME"] = $arServer["scheme"];
		$arFields["SERVER_HOST"] = $arServer["host"];
		$arFields["SERVER_PORT"] = $arServer["port"];
		$arFields["SERVER_PATH"] = $arServer["path"];
		unset($arFields["SERVER"]);
	}

	if ($addMode && !isset($arFields['SERVER_SCHEME']))
	{
		$arError[] = [
			GetMessage('DAV_EXP_SERVER_SCHEME'),
			"NULL_SERVER_SCHEME"
		];
	}
	//throw new CDavArgumentNullException("SERVER_SCHEME", GetMessage('DAV_EXP_SERVER_SCHEME'));

	if (isset($arFields['SERVER_SCHEME']))
	{
		$arFields["SERVER_SCHEME"] = mb_strtolower($arFields["SERVER_SCHEME"]);
		if (!in_array($arFields["SERVER_SCHEME"], array("http", "https")))
		{
			$arError[] = [
				GetMessage('DAV_EXP_SERVER_SCHEME_OOR'),
				"OOR_SERVER_SCHEME"
			];
		}
		//throw new CDavArgumentOutOfRangeException("SERVER_SCHEME", GetMessage('DAV_EXP_SERVER_SCHEME'), array("http", "https"));
	}

	if (
		($addMode && !isset($arFields['SERVER_HOST']))
		|| (isset($arFields['SERVER_HOST']) && !$arFields["SERVER_HOST"])
	)
	{
		$arError[] = [
			GetMessage('DAV_EXP_SERVER_HOST'),
			"NULL_SERVER_HOST"
		];
	}
	//throw new CDavArgumentNullException("SERVER_HOST", GetMessage('DAV_EXP_SERVER_HOST'));

	if (
		($addMode && !isset($arFields['SERVER_PORT']))
		|| (isset($arFields['SERVER_PORT']) && !(int)$arFields["SERVER_PORT"])
	)
	{
		if ($updateMode && !is_set($arFields, "SERVER_SCHEME"))
		{
			$arFields["SERVER_SCHEME"] = $arConnectionOld["SERVER_SCHEME"];
		}

		if ($arFields["SERVER_SCHEME"] === 'https')
		{
			$arFields["SERVER_PORT"] = 443;
		}
		else
		{
			$arFields["SERVER_PORT"] = 80;
		}
	}
	elseif (isset($arFields['SERVER_PORT']))
	{
		if ($arFields["SERVER_PORT"]."!" != (int)$arFields["SERVER_PORT"]."!")
		{
			$arError[] = [
				GetMessage('DAV_EXP_SERVER_PORT'),
				"TYPE_SERVER_PORT"
			];
		}
		//throw new CDavArgumentTypeException("SERVER_PORT", GetMessage('DAV_EXP_SERVER_PORT'), "int");
	}

	if (
		($addMode && !isset($arFields['SERVER_PATH']))
		|| (isset($arFields['SERVER_PATH']) && !$arFields["SERVER_PATH"])
	)
	{
		$arFields["SERVER_PATH"] = "/";
	}

	if (!empty($arError))
	{
		return $arError;
	}

	return true;
}