static function GetList($arOrder = ["ID" => "ASC"], $arFilter = [], $arGroupBy = null, $arNavStartParams = null, $arSelectFields = [])
{
global $DB;
if (
is_array($arFilter)
&& isset($arFilter['ID'], self::$connectionData[(int)$arFilter['ID']])
&& (int)$arFilter['ID']
&& self::$connectionData[(int)$arFilter['ID']]
)
{
return self::$connectionData[(int)$arFilter['ID']];
}
if (is_array($arSelectFields) && empty($arSelectFields))
{
$arSelectFields = [
"ID",
"ENTITY_TYPE",
"ENTITY_ID",
"ACCOUNT_TYPE",
"NAME",
"SERVER_SCHEME",
"SERVER_HOST",
"SERVER_PORT",
"SYNC_TOKEN",
"SERVER_USERNAME",
"SERVER_PASSWORD",
"SERVER_PATH",
"CREATED",
"MODIFIED",
"SYNCHRONIZED",
"LAST_RESULT",
"IS_DELETED",
"NEXT_SYNC_TRY",
];
}
static $arFields = [
"ID" => ["FIELD" => "N.ID", "TYPE" => "int"],
"ENTITY_TYPE" => ["FIELD" => "N.ENTITY_TYPE", "TYPE" => "string"],
"ENTITY_ID" => ["FIELD" => "N.ENTITY_ID", "TYPE" => "int"],
"ACCOUNT_TYPE" => ["FIELD" => "N.ACCOUNT_TYPE", "TYPE" => "string"],
"NAME" => ["FIELD" => "N.NAME", "TYPE" => "string"],
"SERVER_SCHEME" => ["FIELD" => "N.SERVER_SCHEME", "TYPE" => "string"],
"SERVER_HOST" => ["FIELD" => "N.SERVER_HOST", "TYPE" => "string"],
"SERVER_PORT" => ["FIELD" => "N.SERVER_PORT", "TYPE" => "int"],
"SERVER_USERNAME" => ["FIELD" => "N.SERVER_USERNAME", "TYPE" => "string"],
"SERVER_PASSWORD" => ["FIELD" => "N.SERVER_PASSWORD", "TYPE" => "string"],
"SERVER_PATH" => ["FIELD" => "N.SERVER_PATH", "TYPE" => "string"],
"CREATED" => ["FIELD" => "N.CREATED", "TYPE" => "datetime"],
"MODIFIED" => ["FIELD" => "N.MODIFIED", "TYPE" => "datetime"],
"SYNCHRONIZED" => ["FIELD" => "N.SYNCHRONIZED", "TYPE" => "datetime"],
"LAST_RESULT" => ["FIELD" => "N.LAST_RESULT", "TYPE" => "string"],
"SYNC_TOKEN" => ["FIELD" => "N.SYNC_TOKEN", "TYPE" => "string"],
"IS_DELETED" => ["FIELD" => "N.IS_DELETED", "TYPE" => "string"],
"NEXT_SYNC_TRY" => ["FIELD" => "N.NEXT_SYNC_TRY", "TYPE" => "datetime"],
];
$arSqls = CDav::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
$arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
$strSql =
"SELECT " . $arSqls["SELECT"] . " "
. "FROM b_dav_connections N "
. " " . $arSqls["FROM"] . " ";
if ($arSqls["WHERE"])
{
$strSql .= "WHERE " . $arSqls["WHERE"] . " ";
}
if ($arSqls["GROUPBY"])
{
$strSql .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
}
if (is_array($arGroupBy) && empty($arGroupBy))
{
$dbRes = $DB->Query($strSql, false, "File: " . __FILE__ . "
Line: " . __LINE__);
if ($arRes = $dbRes->Fetch())
{
return $arRes["CNT"];
}
return false;
}
if ($arSqls["ORDERBY"])
{
$strSql .= "ORDER BY " . $arSqls["ORDERBY"] . " ";
}
if (is_array($arNavStartParams) && !(int)$arNavStartParams["nTopCount"])
{
$strSql_tmp =
"SELECT COUNT('x') as CNT "
. "FROM b_dav_connections N "
. " " . $arSqls["FROM"] . " ";
if ($arSqls["WHERE"])
{
$strSql_tmp .= "WHERE " . $arSqls["WHERE"] . " ";
}
if ($arSqls["GROUPBY"])
{
$strSql_tmp .= "GROUP BY " . $arSqls["GROUPBY"] . " ";
}
$dbRes = $DB->Query($strSql_tmp, false, "File: ".__FILE__."
Line: ".__LINE__);
$cnt = 0;
if (!$arSqls["GROUPBY"])
{
if ($arRes = $dbRes->Fetch())
{
$cnt = $arRes["CNT"];
}
}
else
{
$cnt = $dbRes->SelectedRowsCount();
}
$dbRes = new CDBResult();
$dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
}
else
{
if (is_array($arNavStartParams) && (int)$arNavStartParams["nTopCount"] > 0)
{
$strSql .= "LIMIT " . (int)$arNavStartParams["nTopCount"];
}
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
}
if (
$dbRes
&& is_array($arFilter)
&& isset($arFilter['ID'])
&& (int)$arFilter['ID']
)
{
$result = (new CDavConnectionResult($dbRes))->Fetch();
if ($result && $result['ID'])
{
self::$connectionData[(int)$arFilter['ID']] = $result;
}
return $result;
}
return new CDavConnectionResult($dbRes);
}