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

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

	$arFields = array(
		'ID'               => 'LG.ID',
		'TITLE'            => 'LG.TITLE',
		'ACTIVE'           => 'LG.ACTIVE',
		'CODE'             => 'LG.CODE',
		'SORT'             => 'LG.SORT', 
		'ACTIVE_FROM'      => $DB->DateToCharFunction('LG.ACTIVE_FROM', 'FULL'),
		'ACTIVE_TO'        => $DB->DateToCharFunction('LG.ACTIVE_TO', 'FULL'),
		'COURSE_LESSON_ID' => 'LG.COURSE_LESSON_ID',
		'COURSE_TITLE'     => 'LL.NAME',
		'MEMBER_ID'        => 'LGM.USER_ID'
	);

	$arFieldsSort = $arFields;
	$arFieldsSort["ACTIVE_FROM"] = "LG.ACTIVE_FROM";
	$arFieldsSort["ACTIVE_TO"] = "LG.ACTIVE_TO";

	if (count($arSelect) <= 0 || in_array("*", $arSelect))
		$arSelect = array_diff(array_keys($arFields), array('MEMBER_ID'));
	elseif (!in_array("ID", $arSelect))
		$arSelect[] = "ID";

	if (!is_array($arOrder))
		$arOrder = array();

	$arSqlOrder = [];
	foreach ($arOrder as $by => $order)
	{
		$by = (string) $by;
		$byUppercase = mb_strtoupper($by);
		$needle = null;
		$order = mb_strtolower($order);

		if ($order != "asc")
			$order = "desc";

		if (array_key_exists($byUppercase, $arFieldsSort))
		{
			$arSqlOrder[] = ' ' . $arFieldsSort[$byUppercase] . ' ' . $order . ' ';
			$needle = $byUppercase;
		}
		elseif ($s = $obUserFieldsSql->getOrder(mb_strtolower($by)))
			$arSqlOrder[] = ' ' . $s . ' ' . $order . ' ';

		if (
			($needle !== null)
			&& ( ! in_array($needle, $arSelect, true) )
		)
		{
			$arSelect[] = $needle;
		}
	}

	if (
		array_key_exists('MEMBER_ID', $arFilter)
		&& ( ! in_array('MEMBER_ID', $arSelect, true) )
	)
	{
		$arSelect[] = 'MEMBER_ID';
	}

	$arSqlSelect = array();
	foreach ($arSelect as $field)
	{
		$field = mb_strtoupper($field);
		if (array_key_exists($field, $arFields))
			$arSqlSelect[$field] = $arFields[$field] . ' AS ' . $field;
	}

	if (!sizeof($arSqlSelect))
		$arSqlSelect = 'LG.ID AS ID';

	$arSqlSearch = self::getFilter($arFilter);

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

	$strSql = "
		SELECT
			".implode(",n", $arSqlSelect)."
			".$obUserFieldsSql->GetSelect();

	$strFrom = "
		FROM
			b_learn_groups LG
			";

	if (in_array('COURSE_TITLE', $arSelect, true))
		$strFrom .= "LEFT OUTER JOIN b_learn_lesson LL ON LL.ID = LG.COURSE_LESSON_ID n" ;

	if (in_array('MEMBER_ID', $arSelect, true))
		$strFrom .= "LEFT JOIN b_learn_groups_member LGM ON LGM.LEARNING_GROUP_ID = LG.ID n" ;

	$strFrom .= $obUserFieldsSql->GetJoin("LG.ID") . " "
		. (sizeof($arSqlSearch) ? " WHERE " . implode(" AND ", $arSqlSearch) : "") . " ";

	$strSql .= $strFrom;

	$strSqlOrder = "";
	DelDuplicateSort($arSqlOrder);
	for ($i = 0, $arSqlOrderCnt = count($arSqlOrder); $i < $arSqlOrderCnt; $i++)
	{
		if ($i == 0)
			$strSqlOrder = " ORDER BY ";
		else
			$strSqlOrder .= ",";

		$strSqlOrder .= $arSqlOrder[$i];
	}

	$strSql .= $strSqlOrder;

	if (count($arNavParams))
	{
		if (isset($arNavParams['nTopCount']))
		{
			$strSql = $DB->TopSql($strSql, (int) $arNavParams['nTopCount']);
			$res = $DB->Query($strSql, $bIgnoreErrors = false, "File: " . __FILE__ . "
Line: " . __LINE__); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS")); } else { $res_cnt = $DB->Query("SELECT COUNT(LG.ID) as C " . $strFrom); $res_cnt = $res_cnt->Fetch(); $res = new CDBResult(); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS")); $rc = $res->NavQuery($strSql, $res_cnt["C"], $arNavParams, $bIgnoreErrors = false, "File: " . __FILE__ . "
Line: " . __LINE__); } } else { $res = $DB->Query($strSql, $bIgnoreErrors = false, "File: " . __FILE__ . "
Line: " . __LINE__); $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("LEARNING_LGROUPS")); } return $res; }