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

	if (is_array($bCnt))
	{
		$arSelect = $bCnt;
		$bCnt = false;
	}
	else
	{
		$arSelect = array("ID");
	}

	if (!$arSelect)
	{
		$arSelect = array("ID", "TASK_ID", "CONTROLLER_MEMBER_ID", "INIT_EXECUTE", "INIT_EXECUTE_PARAMS", "INIT_CRC", "UPDATE_PERIOD", "RESULT_EXECUTE", "STATUS", "RETRY_COUNT", "RETRY_TIMEOUT", "CONTROLLER_MEMBER_NAME", "CONTROLLER_MEMBER_URL", "TIMESTAMP_X", "DATE_EXECUTE", "DATE_CREATE", "EXECUTED_INTERVAL");
	}

	static $arFields = array(
		"ID" => array(
			"FIELD_NAME" => "T.ID",
			"FIELD_TYPE" => "int",
		),
		"TIMESTAMP_X" => array(
			"FIELD_NAME" => "T.TIMESTAMP_X",
			"FIELD_TYPE" => "datetime",
		),
		"DATE_CREATE" => array(
			"FIELD_NAME" => "T.DATE_CREATE",
			"FIELD_TYPE" => "datetime",
		),
		"TASK_ID" => array(
			"FIELD_NAME" => "T.TASK_ID",
			"FIELD_TYPE" => "string",
		),
		"CONTROLLER_MEMBER_ID" => array(
			"FIELD_NAME" => "T.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 = T.CONTROLLER_MEMBER_ID",
			"LEFT_JOIN" => "LEFT JOIN b_controller_member M ON M.ID = T.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 = T.CONTROLLER_MEMBER_ID",
			"LEFT_JOIN" => "LEFT JOIN b_controller_member M ON M.ID = T.CONTROLLER_MEMBER_ID",
		),
		"DATE_EXECUTE" => array(
			"FIELD_NAME" => "T.DATE_EXECUTE",
			"FIELD_TYPE" => "datetime",
		),
		"EXECUTED_INTERVAL" => array(
			"FIELD_NAME" => "unix_timestamp(now()) - unix_timestamp(T.DATE_EXECUTE)",
			"FIELD_TYPE" => "int",
		),
		"INIT_EXECUTE" => array(
			"FIELD_NAME" => "T.INIT_EXECUTE",
			"FIELD_TYPE" => "string",
		),
		"INIT_EXECUTE_PARAMS" => array(
			"FIELD_NAME" => "T.INIT_EXECUTE_PARAMS",
			"FIELD_TYPE" => "string",
		),
		"INIT_CRC" => array(
			"FIELD_NAME" => "T.INIT_CRC",
			"FIELD_TYPE" => "int",
		),
		"UPDATE_PERIOD" => array(
			"FIELD_NAME" => "T.UPDATE_PERIOD",
			"FIELD_TYPE" => "int",
		),
		"RESULT_EXECUTE" => array(
			"FIELD_NAME" => "T.RESULT_EXECUTE",
			"FIELD_TYPE" => "string",
		),
		"STATUS" => array(
			"FIELD_NAME" => "T.STATUS",
			"FIELD_TYPE" => "string",
		),
		"INDEX_SALT" => array(
			"FIELD_NAME" => "T.INDEX_SALT",
			"FIELD_TYPE" => "int",
		),
		"RETRY_COUNT" => array(
			"FIELD_NAME" => "T.RETRY_COUNT",
			"FIELD_TYPE" => "int",
		),
		"RETRY_TIMEOUT" => array(
			"FIELD_NAME" => "T.RETRY_TIMEOUT",
			"FIELD_TYPE" => "int",
		),
	);

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

	$arFilterNew = Array();
	foreach ($arFilter as $k=>$value)
	{
		if (is_array($value) || $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 T.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";
			}
		}
	}

	if($bCnt)
	{
		$strSelect = "
			SELECT
				COUNT('x') as C
				,MIN(T.ID) as MIN_ID
				,MAX(T.ID) as MAX_ID
		";
	}

	$strSql = "
		FROM b_controller_task T
			".$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; }