• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/testresult.php
  • Класс: CTestResult
  • Вызов: CTestResult::GetList
static function GetList($arOrder=array(), $arFilter=array(), $arNavParams = array())
{
	global $DB, $USER, $APPLICATION;

	if (!is_array($arFilter))
		$arFilter = Array();

	$oPermParser = new CLearnParsePermissionsFromFilter ($arFilter);
	$arSqlSearch = CTestResult::GetFilter($arFilter);

	// Remove empty strings from array
	$arSqlSearch = array_filter($arSqlSearch);

	if ($oPermParser->IsNeedCheckPerm())
		$arSqlSearch[] = " L.ID IN (" . $oPermParser->SQLForAccessibleLessons() . ") ";

	$strSqlSearch = ' ';
	if ( ! empty($arSqlSearch) )
	{
		$strSqlSearch = ' WHERE ';
		$strSqlSearch .= implode(' AND ', $arSqlSearch);
	}

	$strSqlFrom = "FROM b_learn_test_result TR 
		INNER JOIN b_learn_question Q ON TR.QUESTION_ID = Q.ID 
		INNER JOIN b_learn_lesson L ON Q.LESSON_ID = L.ID "
		. $strSqlSearch;

	$strSql = "SELECT TR.*, Q.QUESTION_TYPE, Q.NAME as QUESTION_NAME, 
		Q.POINT as QUESTION_POINT, Q.LESSON_ID "
		. $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[] = " TR.ID ".$order." ";
		elseif ($by == "attempt_id")
			$arSqlOrder[] = " TR.ATTEMPT_ID ".$order." ";
		elseif ($by == "question_id")
			$arSqlOrder[] = " TR.QUESTION_ID ".$order." ";
		elseif ($by == "point")
			$arSqlOrder[] = " TR.POINT ".$order." ";
		elseif ($by == "correct")
			$arSqlOrder[] = " TR.CORRECT ".$order." ";
		elseif ($by == "answered")
			$arSqlOrder[] = " TR.ANSWERED ".$order." ";
		elseif ($by == "question_point")
			$arSqlOrder[] = " QUESTION_POINT ".$order." ";
		elseif ($by == "question_name")
			$arSqlOrder[] = " QUESTION_NAME ".$order." ";
		elseif ($by == "rand")
			$arSqlOrder[] = CTest::GetRandFunction();
		else
		{
			$arSqlOrder[] = " TR.ID ".$order." ";
			$by = "id";
		}
	}

	$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 (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(TR.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; }