• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/attempt.php
  • Класс: CAllTestAttempt
  • Вызов: CAllTestAttempt::GetList
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; }