• Модуль: forum
  • Путь к файлу: ~/bitrix/modules/forum/classes/general/forum_new.php
  • Класс: CAllForumNew
  • Вызов: CAllForumNew::GetList
static function GetList($arOrder = Array("SORT"=>"ASC"), $arFilter = Array(), $arAddParams = array())
{
	global $DB;
	$arSqlSearch = Array();
	$arSqlSearchFrom = Array();
	$strSqlSelect = "";
	$strSqlSearchFrom = "";
	$strSqlSearch = "";
	$arSqlOrder = Array();
	$strSqlOrder = "";
	$arFilter = (is_array($arFilter) ? $arFilter : array());

	foreach ($arFilter as $key => $val)
	{
		$key_res = CForumNew::GetFilterOperation($key);
		$key = mb_strtoupper($key_res["FIELD"]);
		$strNegative = $key_res["NEGATIVE"];
		$strOperation = $key_res["OPERATION"];

		switch ($key)
		{
			case "LID":
			case "SITE_ID":
				$val = trim($val);
				if ($val <> '')
				{
					$arSqlSearch[] = "F.ID = F2S.FORUM_ID AND ".($strNegative=="Y"?" NOT ":"")."(F2S.SITE_ID ".$strOperation." '".$DB->ForSql($val)."' )";
					$arSqlSearchFrom[] = "b_forum2site F2S";
				}
				break;
			case "INDEXATION":
			case "DEDUPLICATION":
			case "ACTIVE":
			case "XML_ID":
				if ($val == '')
					$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(F.".$key." IS NULL OR ".($DB->type == "MSSQL" ? "LEN" : "LENGTH")."(F.".$key.")<=0)";
				else
					$arSqlSearch[] = ($strNegative=="Y"?" F.".$key." IS NULL OR NOT ":"")."(F.".$key." ".$strOperation." '".$DB->ForSql($val)."' )";
				break;
			case "ID":
			case "FORUM_GROUP_ID":
			case "TOPICS":
			case "POSTS":
			case "POSTS_UNAPPROVED":
				if ($strOperation == "IN")
				{
					if (is_array($val))
					{
						$val_int = array();
						foreach ($val as $v)
							$val_int[] = intval($v);
						$val = implode(", ", $val_int);
					}
					else
					{
						$val = intval($val);
					}
					$val = trim($val);
				}
				if (($strOperation == "IN" && $val == '') || intval($val) <= 0)
					$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(F.".$key." IS NULL OR F.".$key."<=0)";
				elseif ($strOperation == "IN")
					$arSqlSearch[] = ($strNegative=="Y"?" NOT ":"")."(F.".$key." IN (".$DB->ForSql($val)."))";
				else
					$arSqlSearch[] = ($strNegative=="Y"?" F.".$key." IS NULL OR NOT ":"")."(F.".$key." ".$strOperation." ".intval($val)." )";
				break;
			case "TEXT":
				$arSqlSearch[] = " (".GetFilterQuery("F.NAME,F.DESCRIPTION", $DB->ForSql($val), "Y").") ";
				break;
			case "PERMS":
				if (is_array($val) && count($val)>1)
				{
					$val[1] = mb_strtoupper(mb_substr($val[1], 0, 1));
					if (mb_strpos("AEIMQUY", $val[1]) !== false)
					{
						$arSqlSearch[] = "F.ID = FP.FORUM_ID AND FP.GROUP_ID IN (".intval($val[0]).") AND FP.PERMISSION > '".$DB->ForSql($val[1])."' ";
						$arSqlSearchFrom[] = "b_forum_perms FP";
					}
				}
				break;
		}
	}

	if (count($arSqlSearch) > 0)
		$strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).") ";
	if (count($arSqlSearchFrom) > 0)
		$strSqlSearchFrom = ", ".implode(", ", $arSqlSearchFrom);

	foreach ($arOrder as $by=>$order)
	{
		$by = mb_strtoupper($by);
		$order = mb_strtoupper($order);
		if ($order!="ASC") $order = "DESC";
		if ($by == "ID") $arSqlOrder[] = " F.ID ".$order." ";
		elseif ($by == "NAME") $arSqlOrder[] = " F.NAME ".$order." ";
		elseif ($by == "ACTIVE") $arSqlOrder[] = " F.ACTIVE ".$order." ";
		elseif ($by == "MODERATION") $arSqlOrder[] = " F.MODERATION ".$order." ";
		elseif ($by == "FORUM_GROUP_ID") $arSqlOrder[] = " F.FORUM_GROUP_ID ".$order." ";
		elseif ($by == "TOPICS") $arSqlOrder[] = " F.TOPICS ".$order." ";
		elseif ($by == "POSTS") $arSqlOrder[] = " F.POSTS ".$order." ";
		elseif ($by == "POSTS_UNAPPROVED") $arSqlOrder[] = " F.POSTS_UNAPPROVED ".$order." ";
		elseif ($by == "LAST_POST_DATE") $arSqlOrder[] = " F.LAST_POST_DATE ".$order." ";
		else
		{
			$arSqlOrder[] = " F.SORT ".$order." ";
			$by = "SORT";
		}
	}
	DelDuplicateSort($arSqlOrder);
	if (count($arSqlOrder) > 0)
		$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);

	$strSql =
		"SELECT F_FORUM.*, F.NAME, F.DESCRIPTION, F.ACTIVE, F.MODERATION, F.INDEXATION, F.DEDUPLICATION, F.ALLOW_MOVE_TOPIC, '' as LID,
			F.TOPICS, F.POSTS, F.LAST_POSTER_ID, F.LAST_POSTER_NAME,
			".$DB->DateToCharFunction("F.LAST_POST_DATE", "FULL")." as LAST_POST_DATE,
			F.LAST_MESSAGE_ID, F.LAST_MESSAGE_ID as MID,
			F.POSTS_UNAPPROVED, F.ABS_LAST_POSTER_ID, F.ABS_LAST_POSTER_NAME,
			".$DB->DateToCharFunction("F.ABS_LAST_POST_DATE", "FULL")." as ABS_LAST_POST_DATE,
			F.ABS_LAST_MESSAGE_ID, F.SORT, F.ORDER_BY,
			F.ORDER_DIRECTION, F.ALLOW_HTML, F.ALLOW_ANCHOR, F.ALLOW_BIU,
			F.ALLOW_IMG, F.ALLOW_VIDEO, F.ALLOW_TABLE, F.ALLOW_LIST, F.ALLOW_QUOTE, F.ALLOW_CODE,
			F.ALLOW_ALIGN, F.ALLOW_FONT, F.ALLOW_SMILES, F.ALLOW_UPLOAD, F.EVENT1, F.EVENT2,
			F.EVENT3, F.ALLOW_NL2BR, '' as PATH2FORUM_MESSAGE, F.ALLOW_UPLOAD_EXT, F.ALLOW_TOPIC_TITLED,
			F.ALLOW_SIGNATURE,
			F.FORUM_GROUP_ID, F.ASK_GUEST_EMAIL, F.USE_CAPTCHA, F.XML_ID
		FROM
		(
			SELECT F.ID ".$strSqlSelect."
			FROM b_forum F
				".$strSqlSearchFrom."
			WHERE (1=1 ".$strSqlSearch.")
			GROUP BY F.ID
		) F_FORUM
		INNER JOIN b_forum F ON (F_FORUM.ID = F.ID)
		".$strSqlOrder;
	$db_res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); return $db_res; }