static function GetList($arOrder=array(), $arFilter=array(), $arSelect = array(), $arNavParams = array())
{
global $DB, $USER, $USER_FIELD_MANAGER;
$obUserFieldsSql = new CUserTypeSQL;
$obUserFieldsSql->SetEntity("LEARN_ATTEMPT", "A.ID");
$obUserFieldsSql->SetSelect($arSelect);
$obUserFieldsSql->SetFilter($arFilter);
$obUserFieldsSql->SetOrder($arOrder);
$arFields = array(
"ID" => "A.ID",
"TEST_ID" => "A.TEST_ID",
"OBY_DATE_END" => "A.DATE_END",
"STUDENT_ID" => "A.STUDENT_ID",
"DATE_START" => $DB->DateToCharFunction("A.DATE_START", "FULL"),
"DATE_END" => $DB->DateToCharFunction("A.DATE_END", "FULL"),
"STATUS" => "A.STATUS",
"COMPLETED" => "A.COMPLETED",
"SCORE" => "A.SCORE",
"MAX_SCORE" => "A.MAX_SCORE",
"QUESTIONS" => "A.QUESTIONS",
"TEST_NAME" => "T.NAME",
"USER_NAME" => $DB->Concat("'('",'U.LOGIN',"') '","CASE WHEN U.NAME IS NULL THEN '' ELSE U.NAME END","' '", "CASE WHEN U.LAST_NAME IS NULL THEN '' ELSE U.LAST_NAME END"),
"USER_ID" => "U.ID",
"MARK" => "TM.MARK",
"MESSAGE" => "TM.DESCRIPTION",
"LINKED_LESSON_ID" => "C.LINKED_LESSON_ID",
"COURSE_ID" => "C.ID",
"SPEED" => self::getSpeedFieldSql()
);
if (count($arSelect) <= 0 || in_array("*", $arSelect))
$arSelect = array_keys($arFields);
$arSqlSelect = array();
foreach($arSelect as $field)
{
$field = mb_strtoupper($field);
if(array_key_exists($field, $arFields))
$arSqlSelect[$field] = $arFields[$field]." AS ".$field;
}
$sSelect = implode(",n", $arSqlSelect);
if (!is_array($arFilter))
$arFilter = Array();
$arSqlSearch = CTestAttempt::GetFilter($arFilter);
$strSqlSearch = "";
$arSqlSearchCnt = count($arSqlSearch);
for($i=0; $i<$arSqlSearchCnt; $i++)
if($arSqlSearch[$i] <> '')
$strSqlSearch .= " AND ".$arSqlSearch[$i]." ";
$r = $obUserFieldsSql->GetFilter();
if($r <> '')
$strSqlSearch .= " AND (".$r.") ";
$bCheckPerm = 'ORPHANED VAR';
$strSqlFrom = '';
$strSql = static::_GetListSQLFormer($sSelect, $obUserFieldsSql, $bCheckPerm, $USER, $arFilter, $strSqlSearch, $strSqlFrom);
if (!is_array($arOrder))
$arOrder = Array();
$arSqlOrder = [];
foreach($arOrder as $by=>$order)
{
$by = mb_strtolower($by);
$order = mb_strtolower($order);
if ($order!="asc")
$order = "desc";
if ($by == "id")
$arSqlOrder[] = " A.ID ".$order." ";
elseif ($by == "test_id")
$arSqlOrder[] = " A.TEST_ID ".$order." ";
elseif ($by == "student_id")
$arSqlOrder[] = " A.STUDENT_ID ".$order." ";
elseif ($by == "date_start")
$arSqlOrder[] = " A.DATE_START ".$order." ";
elseif ($by == "date_end")
$arSqlOrder[] = " A.DATE_END ".$order." ";
elseif ($by == "status")
$arSqlOrder[] = " A.STATUS ".$order." ";
elseif ($by == "score")
$arSqlOrder[] = " A.SCORE ".$order." ";
elseif ($by == "max_score")
$arSqlOrder[] = " A.MAX_SCORE ".$order." ";
elseif ($by == "completed")
$arSqlOrder[] = " A.COMPLETED ".$order." ";
elseif ($by == "questions")
$arSqlOrder[] = " A.QUESTIONS ".$order." ";
elseif ($by == "user_name")
$arSqlOrder[] = " USER_NAME ".$order." ";
elseif ($by == "test_name")
$arSqlOrder[] = " TEST_NAME ".$order." ";
elseif ($by == "speed")
$arSqlOrder[] = " SPEED ".$order." ";
elseif ($s = $obUserFieldsSql->GetOrder($by))
$arSqlOrder[$by] = " ".$s." ".$order." ";
else
$arSqlOrder[] = " A.ID ".$order." ";
}
$strSqlOrder = "";
DelDuplicateSort($arSqlOrder);
$arSqlOrderCnt = count($arSqlOrder);
for ($i=0; $i<$arSqlOrderCnt; $i++)
{
if($i==0)
$strSqlOrder = " ORDER BY ";
else
$strSqlOrder .= ",";
$strSqlOrder .= $arSqlOrder[$i];
}
$strSql .= $strSqlOrder;
if ( ! empty($arNavParams) )
{
$nTopCount = null;
if (isset($arNavParams['NAV_PARAMS']['nPageTop']) && ($arNavParams['NAV_PARAMS']['nPageTop'] > 0))
$nTopCount = (int) $arNavParams['NAV_PARAMS']['nPageTop'];
else if (isset($arNavParams['nPageTop']))
$nTopCount = (int) $arNavParams['nPageTop'];
else if (isset($arNavParams['nTopCount']))
$nTopCount = (int) $arNavParams['nTopCount'];
else
{
$res_cnt = $DB->Query("SELECT COUNT(A.ID) as C " . $strSqlFrom);
$res_cnt = $res_cnt->fetch();
$res = new CDBResult();
$res->NavQuery($strSql, $res_cnt['C'], $arNavParams);
$res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARN_ATTEMPT"));
}
if ($nTopCount !== null)
{
$strSql = $DB->TopSql($strSql, $nTopCount);
$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARN_ATTEMPT"));
}
}
else
{
$res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
$res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARN_ATTEMPT"));
}
return $res;
}