• Модуль: controller
  • Путь к файлу: ~/bitrix/modules/controller/classes/general/controllerlog.php
  • Класс: CControllerLog
  • Вызов: CControllerLog::GetList
static function GetList($arOrder = Array(), $arFilter = Array(), $arNavParams = false, $arSelect = Array())
{
	/** @global CDatabase $DB */
	global $DB;

	if (!$arSelect)
	{
		$arSelect = array("ID", "CONTROLLER_MEMBER_ID", "NAME", "DESCRIPTION", "TASK_ID", "USER_ID", "STATUS", "CONTROLLER_MEMBER_NAME", "CONTROLLER_MEMBER_URL", "USER_NAME", "USER_LAST_NAME", "USER_LOGIN", "TASK_NAME", "TIMESTAMP_X");
	}

	static $arFields = array(
		"ID" => array(
			"FIELD_NAME" => "L.ID",
			"FIELD_TYPE" => "int",
		),
		"TIMESTAMP_X" => array(
			"FIELD_NAME" => "L.TIMESTAMP_X",
			"FIELD_TYPE" => "datetime",
		),
		"CONTROLLER_MEMBER_ID" => array(
			"FIELD_NAME" => "L.CONTROLLER_MEMBER_ID",
			"FIELD_TYPE" => "int",
		),
		"CONTROLLER_MEMBER_NAME" => array(
			"FIELD_NAME" => "M.NAME",
			"FIELD_TYPE" => "string",
			"TABLE_ALIAS" => "M",
			"JOIN" => "INNER JOIN b_controller_member M ON M.ID = L.CONTROLLER_MEMBER_ID",
			"LEFT_JOIN" => "LEFT JOIN b_controller_member M ON M.ID = L.CONTROLLER_MEMBER_ID",
		),
		"CONTROLLER_MEMBER_URL" => array(
			"FIELD_NAME" => "M.URL",
			"FIELD_TYPE" => "string",
			"TABLE_ALIAS" => "M",
			"JOIN" => "INNER JOIN b_controller_member M ON M.ID = L.CONTROLLER_MEMBER_ID",
			"LEFT_JOIN" => "LEFT JOIN b_controller_member M ON M.ID = L.CONTROLLER_MEMBER_ID",
		),
		"NAME" => array(
			"FIELD_NAME" => "L.NAME",
			"FIELD_TYPE" => "string",
		),
		"DESCRIPTION" => array(
			"FIELD_NAME" => "L.DESCRIPTION",
			"FIELD_TYPE" => "string",
		),
		"TASK_ID" => array(
			"FIELD_NAME" => "L.TASK_ID",
			"FIELD_TYPE" => "int",
		),
		"TASK_NAME" => array(
			"FIELD_NAME" => "T.TASK_ID",
			"FIELD_TYPE" => "string",
			"TABLE_ALIAS" => "T",
			"JOIN" => "INNER JOIN b_controller_task T ON T.ID = L.TASK_ID",
			"LEFT_JOIN" => "LEFT JOIN b_controller_task T ON T.ID = L.TASK_ID",
		),
		"USER_ID" => array(
			"FIELD_NAME" => "L.USER_ID",
			"FIELD_TYPE" => "int",
		),
		"USER_NAME" => array(
			"FIELD_NAME" => "U.NAME",
			"FIELD_TYPE" => "string",
			"TABLE_ALIAS" => "U",
			"JOIN" => "INNER JOIN b_user U ON U.ID = L.USER_ID",
			"LEFT_JOIN" => "LEFT JOIN b_user U ON U.ID = L.USER_ID",
		),
		"USER_LAST_NAME" => array(
			"FIELD_NAME" => "U.LAST_NAME",
			"FIELD_TYPE" => "string",
			"TABLE_ALIAS" => "U",
			"JOIN" => "INNER JOIN b_user U ON U.ID = L.USER_ID",
			"LEFT_JOIN" => "LEFT JOIN b_user U ON U.ID = L.USER_ID",
		),
		"USER_LOGIN" => array(
			"FIELD_NAME" => "U.LOGIN",
			"FIELD_TYPE" => "string",
			"TABLE_ALIAS" => "U",
			"JOIN" => "INNER JOIN b_user U ON U.ID = L.USER_ID",
			"LEFT_JOIN" => "LEFT JOIN b_user U ON U.ID = L.USER_ID",
		),
		"STATUS" => array(
			"FIELD_NAME" => "L.STATUS",
			"FIELD_TYPE" => "string",
		),
	);

	$obWhere = new CSQLWhere;
	$obWhere->SetFields($arFields);

	$arFilterNew = array();
	foreach ($arFilter as $k=>$value)
	{
		if ($value <> '' || $value === false)
		{
			$arFilterNew[$k]=$value;
		}
	}

	$strWhere = $obWhere->GetQuery($arFilterNew);

	if(is_array($arOrder))
	{
		foreach($arOrder as $key => $value)
		{
			$key = mb_strtoupper($key);
			if(array_key_exists($key, $arFields) && isset($arFields[$key]["LEFT_JOIN"]))
				$obWhere->c_joins[$key]++;
		}
	}

	$duplicates = array("ID" => 1);
	$strSelect = "SELECT L.ID AS IDn";
	foreach($arSelect as $key)
	{
		$key = mb_strtoupper($key);
		if(array_key_exists($key, $arFields) && !array_key_exists($key, $duplicates))
		{
			$duplicates[$key] = 1;

			if(isset($arFields[$key]["LEFT_JOIN"]))
				$obWhere->c_joins[$key]++;

			if($arFields[$key]["FIELD_TYPE"] == "datetime")
			{
				$strSelect .= ",".$DB->DateToCharFunction($arFields[$key]["FIELD_NAME"], $arFields[$key]["FORMAT"])." AS ".$key."n";
			}
			else
			{
				$strSelect .= ",".$arFields[$key]["FIELD_NAME"]." AS ".$key."n";
			}
		}
	}

	$strSql = "
		FROM b_controller_log L
		".$obWhere->GetJoins()."
		".($strWhere == ''? "": "WHERE ".$strWhere)."
	";

	$strOrder = CControllerAgent::_OrderBy($arOrder, $arFields);

	if (!is_array($arNavParams))
	{
		$dbr = $DB->Query($strSelect.$strSql.$strOrder, false, "File: ".__FILE__."
Line: ".__LINE__); } elseif ($arNavParams["nTopCount"] > 0) { $strSql = $strSelect.$strSql.$strOrder."nLIMIT ".intval($arNavParams["nTopCount"]); if ($arNavParams["nOffset"] > 0) { $strSql .= " OFFSET ".intval($arNavParams["nOffset"]); } $dbr = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__); } else { $res_cnt = $DB->Query("SELECT count('x') CNT ".$strSql); $ar_cnt = $res_cnt->Fetch(); if (isset($arNavParams["bOnlyCount"]) && $arNavParams["bOnlyCount"] === true) { return $ar_cnt["CNT"]; } $dbr = new CDBResult(); $dbr->NavQuery($strSelect.$strSql.$strOrder, $ar_cnt["CNT"], $arNavParams); } $dbr->is_filtered = ($strWhere <> ''); return $dbr; }