- Модуль: learning
- Путь к файлу: ~/bitrix/modules/learning/classes/general/test.php
- Класс: CAllTest
- Вызов: CAllTest::GetList
static function GetList($arOrder = array(), $arFilter = array(), $arNavParams = array())
{
global $DB, $USER;
if (!is_array($arFilter))
$arFilter = Array();
$oPermParser = new CLearnParsePermissionsFromFilter ($arFilter);
$arSqlSearch = CTest::GetFilter($arFilter);
// Remove empty strings from array
$arSqlSearch = array_filter($arSqlSearch);
if ($oPermParser->IsNeedCheckPerm())
$arSqlSearch[] = " C.LINKED_LESSON_ID IN (" . $oPermParser->SQLForAccessibleLessons() . ") ";
$strSqlSearch = ' ';
if ( ! empty($arSqlSearch) )
{
$strSqlSearch = ' WHERE ';
$strSqlSearch .= implode(' AND ', $arSqlSearch);
}
$strSqlFrom = "FROM b_learn_test LT ".
"INNER JOIN b_learn_course C ON LT.COURSE_ID = C.ID "
. $strSqlSearch;
$strSql =
"SELECT LT.ID, LT.COURSE_ID, LT.SORT, LT.ACTIVE, LT.NAME,
LT.DESCRIPTION, LT.DESCRIPTION_TYPE, LT.ATTEMPT_LIMIT,
LT.TIME_LIMIT, LT.COMPLETED_SCORE, LT.QUESTIONS_FROM,
LT.QUESTIONS_FROM_ID, LT.QUESTIONS_AMOUNT, LT.RANDOM_QUESTIONS,
LT.RANDOM_ANSWERS, LT.APPROVED, LT.INCLUDE_SELF_TEST,
LT.PASSAGE_TYPE, LT.PREVIOUS_TEST_ID, LT.PREVIOUS_TEST_SCORE,
LT.INCORRECT_CONTROL, LT.CURRENT_INDICATION,
LT.FINAL_INDICATION, LT.MIN_TIME_BETWEEN_ATTEMPTS,
LT.SHOW_ERRORS, LT.NEXT_QUESTION_ON_ERROR, ".
$DB->DateToCharFunction("LT.TIMESTAMP_X")." as TIMESTAMP_X "
. $strSqlFrom;
if (!is_array($arOrder))
$arOrder = Array();
foreach($arOrder as $by=>$order)
{
$by = mb_strtolower($by);
$order = mb_strtolower($order);
if ($order!="asc")
$order = "desc";
if ($by == "id")
$arSqlOrder[] = " LT.ID ".$order." ";
elseif ($by == "name")
$arSqlOrder[] = " LT.NAME ".$order." ";
elseif ($by == "active")
$arSqlOrder[] = " LT.ACTIVE ".$order." ";
elseif ($by == "sort")
$arSqlOrder[] = " LT.SORT ".$order." ";
else
{
$arSqlOrder[] = " LT.TIMESTAMP_X ".$order." ";
$by = "timestamp_x";
}
}
$strSqlOrder = "";
DelDuplicateSort($arSqlOrder);
if ( ! empty($arSqlOrder) )
$strSqlOrder .= ' ORDER BY ' . implode(', ', $arSqlOrder) . ' ';
$strSql .= $strSqlOrder;
if (is_array($arNavParams) && ( ! empty($arNavParams) ) )
{
if (isset($arNavParams['nTopCount']) && ((int) $arNavParams['nTopCount'] > 0))
{
$strSql = $DB->TopSql($strSql, (int) $arNavParams['nTopCount']);
$res = $DB->Query($strSql, false, "File: " . __FILE__ . "
Line: " . __LINE__);
}
else
{
$res_cnt = $DB->Query("SELECT COUNT(LT.ID) as C " . $strSqlFrom);
$res_cnt = $res_cnt->fetch();
$res = new CDBResult();
$res->NavQuery($strSql, $res_cnt['C'], $arNavParams);
}
}
else
$res = $DB->Query($strSql, false, "File: " . __FILE__ . "
Line: " . __LINE__);
return $res;
}