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

	$arFields = array(
		'LEARNING_GROUP_ID'  => 'LGM.LEARNING_GROUP_ID',
		'USER_ID'            => 'LGM.USER_ID'
	);

	if (count($arSelect) <= 0 || in_array("*", $arSelect))
		$arSelect = array_keys($arFields);

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

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

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

		if (array_key_exists($by, $arFields))
		{
			$arSqlOrder[] = ' ' . $by . ' ' . $order . ' ';
			$needle = $by;
		}

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

	$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[] = 'LGM.USER_ID AS USER_ID';

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

	$strSql = "
		SELECT 
			U.NAME AS MEMBER_NAME,
			U.LAST_NAME AS MEMBER_LAST_NAME,
			U.SECOND_NAME AS MEMBER_SECOND_NAME,
			U.LOGIN AS MEMBER_LOGIN,
			U.EMAIL AS MEMBER_EMAIL,
			" . implode(",n", $arSqlSelect);

	$strFrom = "
		FROM
			b_learn_groups_member LGM
			LEFT JOIN b_user U ON U.ID = LGM.USER_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__); } else { $res_cnt = $DB->Query("SELECT COUNT(LGM.ID) as C " . $strFrom); $res_cnt = $res_cnt->Fetch(); $res = new CDBResult(); $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__); } return $res; }