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;
}