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

	$obUserFieldsSql = new CUserTypeSQL();
	$obUserFieldsSql->SetEntity('LEARNING_QUESTIONS', "CQ.ID");
	$obUserFieldsSql->SetSelect($arSelect);
	$obUserFieldsSql->SetFilter($arFilter);
	$obUserFieldsSql->SetOrder($arOrder);

	$arSqlSearch = array_filter(CLQuestion::GetFilter($arFilter));

	$strSqlFrom = "FROM b_learn_question CQ "
		. "INNER JOIN b_learn_lesson CL ON CQ.LESSON_ID = CL.ID "
		. $obUserFieldsSql->GetJoin("CQ.ID")
		. " WHERE ";

	$r = $obUserFieldsSql->GetFilter();
	if ($r <> '')
		$arSqlSearch[] = "(".$r.")";

	if ( ! empty($arSqlSearch) )
		$strSqlFrom .= implode(' AND ', $arSqlSearch);
	else
		$strSqlFrom .= ' 1=1 ';

	$strSql = "SELECT CQ.ID, CQ.ACTIVE, CQ.LESSON_ID, CQ.QUESTION_TYPE,
			CQ.NAME, CQ.SORT, CQ.DESCRIPTION, CQ.DESCRIPTION_TYPE,
			CQ.COMMENT_TEXT, CQ.FILE_ID, CQ.SELF, CQ.POINT, CQ.DIRECTION,
			CQ.CORRECT_REQUIRED, CQ.EMAIL_ANSWER, CQ.INCORRECT_MESSAGE,"
		. $DB->DateToCharFunction("CQ.TIMESTAMP_X")." as TIMESTAMP_X "
		. $obUserFieldsSql->GetSelect()
		. " "
		. $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[] = " CQ.ID ".$order." ";
		elseif ($by == "name")
			$arSqlOrder[] = " CQ.NAME ".$order." ";
		elseif ($by == "sort")
			$arSqlOrder[] = " CQ.SORT ".$order." ";
		elseif ($by == "point")
			$arSqlOrder[] = " CQ.POINT ".$order." ";
		elseif ($by == "type")
			$arSqlOrder[] = " CQ.QUESTION_TYPE ".$order." ";
		elseif ($by == "self")
			$arSqlOrder[] = " CQ.SELF ".$order." ";
		elseif ($by == "active")
			$arSqlOrder[] = " CQ.ACTIVE ".$order." ";
		elseif ($by == "correct_required")
			$arSqlOrder[] = " CQ.CORRECT_REQUIRED ".$order." ";
		elseif ($s = $obUserFieldsSql->getOrder($by))
			$arSqlOrder[] = ' ' . $s . ' ' . $order . ' ';
		else
			$arSqlOrder[] = " CQ.TIMESTAMP_X ".$order." ";
	}

	$strSqlOrder = "";
	DelDuplicateSort($arSqlOrder);
	$cnt = count($arSqlOrder);
	for ($i=0; $i<$cnt; $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(CQ.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__); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields('LEARNING_QUESTIONS')); return $res; }