static function getList($arOrder, $arFilter, $arSelect = array(), $arNavParams = array())
{
global $DB, $USER, $USER_FIELD_MANAGER;
$obUserFieldsSql = new CUserTypeSQL();
$obUserFieldsSql->SetEntity("LEARNING_LGROUPS", "LG.ID");
$obUserFieldsSql->SetSelect($arSelect);
$obUserFieldsSql->SetFilter($arFilter);
$obUserFieldsSql->SetOrder($arOrder);
$arFields = array(
'ID' => 'LG.ID',
'TITLE' => 'LG.TITLE',
'ACTIVE' => 'LG.ACTIVE',
'CODE' => 'LG.CODE',
'SORT' => 'LG.SORT',
'ACTIVE_FROM' => $DB->DateToCharFunction('LG.ACTIVE_FROM', 'FULL'),
'ACTIVE_TO' => $DB->DateToCharFunction('LG.ACTIVE_TO', 'FULL'),
'COURSE_LESSON_ID' => 'LG.COURSE_LESSON_ID',
'COURSE_TITLE' => 'LL.NAME',
'MEMBER_ID' => 'LGM.USER_ID'
);
$arFieldsSort = $arFields;
$arFieldsSort["ACTIVE_FROM"] = "LG.ACTIVE_FROM";
$arFieldsSort["ACTIVE_TO"] = "LG.ACTIVE_TO";
if (count($arSelect) <= 0 || in_array("*", $arSelect))
$arSelect = array_diff(array_keys($arFields), array('MEMBER_ID'));
elseif (!in_array("ID", $arSelect))
$arSelect[] = "ID";
if (!is_array($arOrder))
$arOrder = array();
$arSqlOrder = [];
foreach ($arOrder as $by => $order)
{
$by = (string) $by;
$byUppercase = mb_strtoupper($by);
$needle = null;
$order = mb_strtolower($order);
if ($order != "asc")
$order = "desc";
if (array_key_exists($byUppercase, $arFieldsSort))
{
$arSqlOrder[] = ' ' . $arFieldsSort[$byUppercase] . ' ' . $order . ' ';
$needle = $byUppercase;
}
elseif ($s = $obUserFieldsSql->getOrder(mb_strtolower($by)))
$arSqlOrder[] = ' ' . $s . ' ' . $order . ' ';
if (
($needle !== null)
&& ( ! in_array($needle, $arSelect, true) )
)
{
$arSelect[] = $needle;
}
}
if (
array_key_exists('MEMBER_ID', $arFilter)
&& ( ! in_array('MEMBER_ID', $arSelect, true) )
)
{
$arSelect[] = 'MEMBER_ID';
}
$arSqlSelect = array();
foreach ($arSelect as $field)
{
$field = mb_strtoupper($field);
if (array_key_exists($field, $arFields))
$arSqlSelect[$field] = $arFields[$field] . ' AS ' . $field;
}
if (!sizeof($arSqlSelect))
$arSqlSelect = 'LG.ID AS ID';
$arSqlSearch = self::getFilter($arFilter);
$r = $obUserFieldsSql->GetFilter();
if ($r <> '')
$arSqlSearch[] = "(".$r.")";
$strSql = "
SELECT
".implode(",n", $arSqlSelect)."
".$obUserFieldsSql->GetSelect();
$strFrom = "
FROM
b_learn_groups LG
";
if (in_array('COURSE_TITLE', $arSelect, true))
$strFrom .= "LEFT OUTER JOIN b_learn_lesson LL ON LL.ID = LG.COURSE_LESSON_ID n" ;
if (in_array('MEMBER_ID', $arSelect, true))
$strFrom .= "LEFT JOIN b_learn_groups_member LGM ON LGM.LEARNING_GROUP_ID = LG.ID n" ;
$strFrom .= $obUserFieldsSql->GetJoin("LG.ID") . " "
. (sizeof($arSqlSearch) ? " WHERE " . implode(" AND ", $arSqlSearch) : "") . " ";
$strSql .= $strFrom;
$strSqlOrder = "";
DelDuplicateSort($arSqlOrder);
for ($i = 0, $arSqlOrderCnt = count($arSqlOrder); $i < $arSqlOrderCnt; $i++)
{
if ($i == 0)
$strSqlOrder = " ORDER BY ";
else
$strSqlOrder .= ",";
$strSqlOrder .= $arSqlOrder[$i];
}
$strSql .= $strSqlOrder;
if (count($arNavParams))
{
if (isset($arNavParams['nTopCount']))
{
$strSql = $DB->TopSql($strSql, (int) $arNavParams['nTopCount']);
$res = $DB->Query($strSql, $bIgnoreErrors = false, "File: " . __FILE__ . "
Line: " . __LINE__);
$res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS"));
}
else
{
$res_cnt = $DB->Query("SELECT COUNT(LG.ID) as C " . $strFrom);
$res_cnt = $res_cnt->Fetch();
$res = new CDBResult();
$res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS"));
$rc = $res->NavQuery($strSql, $res_cnt["C"], $arNavParams, $bIgnoreErrors = false, "File: " . __FILE__ . "
Line: " . __LINE__);
}
}
else
{
$res = $DB->Query($strSql, $bIgnoreErrors = false, "File: " . __FILE__ . "
Line: " . __LINE__);
$res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS"));
}
return $res;
}