• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/grids.php
  • Класс: CGridOptions
  • Вызов: CGridOptions::GetFilter
public function GetFilter($arFilter)
{
	$aRes = array();
	foreach($arFilter as $field)
	{
		//date
		if(isset($_REQUEST[$field["id"]."_datesel"]))
		{
			if($_REQUEST[$field["id"]."_datesel"] <> '')
			{
				$aRes[$field["id"]."_datesel"] = $_REQUEST[$field["id"]."_datesel"];
				CGridOptions::CalcDates($field["id"], $_REQUEST, $aRes);
			}
			else
			{
				unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_datesel"]);
				unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_from"]);
				unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_to"]);
				unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_days"]);
			}
			continue;
		}

		//quick
		if (
			isset($_REQUEST[$field["id"] . "_list"])
			&& $_REQUEST[$field["id"] . "_list"] <> ''
			&& isset($_REQUEST[$field["id"]])
			&& $_REQUEST[$field["id"]] <> ''
		)
		{
			$aRes[$field["id"] . "_list"] = $_REQUEST[$field["id"] . "_list"];
		}

		//number interval
		if(isset($_REQUEST[$field["id"]."_from"]))
		{
			if($_REQUEST[$field["id"]."_from"] <> '')
				$aRes[$field["id"]."_from"] = $_REQUEST[$field["id"]."_from"];
			else
				unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_from"]);
		}
		if(isset($_REQUEST[$field["id"]."_to"]))
		{
			if($_REQUEST[$field["id"]."_to"] <> '')
				$aRes[$field["id"]."_to"] = $_REQUEST[$field["id"]."_to"];
			else
				unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]."_to"]);
		}

		//filtered outside, we don't control the filter field value
		if(isset($field["filtered"]) && $field["filtered"] == true)
		{
			if(isset($field["filter_value"]))
				$aRes[$field["id"]] = $field["filter_value"];
			else
				$aRes[$field["id"]] = true;
			continue;
		}

		//list or string
		if(isset($_REQUEST[$field["id"]]))
		{
			if(is_array($_REQUEST[$field["id"]]) && !empty($_REQUEST[$field["id"]]) && reset($_REQUEST[$field["id"]]) <> '' || !is_array($_REQUEST[$field["id"]]) && $_REQUEST[$field["id"]] <> '')
				$aRes[$field["id"]] = $_REQUEST[$field["id"]];
			else
				unset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"][$field["id"]]);
		}
	}

	//Check for filter ID -->
	if(isset($_REQUEST["apply_filter"]) && $_REQUEST["apply_filter"] === 'Y' && isset($_REQUEST["grid_filter_id"]))
	{
		$aRes["GRID_FILTER_APPLIED"] = true;
		$aRes["GRID_FILTER_ID"] = $_REQUEST["grid_filter_id"];
	}
	//<-- Check for filter ID

	if(!empty($aRes))
	{
		Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"] = $aRes;
	}
	elseif(isset($_REQUEST["clear_filter"]) && $_REQUEST["clear_filter"] <> '')
	{
		Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"] = array();
	}
	elseif(
		isset(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"])
		&& is_array(Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"])
	)
	{
		$aRes = Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"];
	}
	else
	{
		$this->InitFilter();
		if(!empty($this->filter))
		{
			foreach($arFilter as $field)
			{
				if($this->filter[$field["id"]."_datesel"] <> '')
				{
					$aRes[$field["id"]."_datesel"] = $this->filter[$field["id"]."_datesel"];
					CGridOptions::CalcDates($field["id"], $this->filter, $aRes);
					continue;
				}
				if($this->filter[$field["id"]."_list"] <> '' && $this->filter[$field["id"]] <> '')
				{
					$aRes[$field["id"]."_list"] = $this->filter[$field["id"]."_list"];
				}
				if($this->filter[$field["id"]."_from"] <> '')
				{
					$aRes[$field["id"]."_from"] = $this->filter[$field["id"]."_from"];
				}
				if($this->filter[$field["id"]."_to"] <> '')
				{
					$aRes[$field["id"]."_to"] = $this->filter[$field["id"]."_to"];
				}
				if(is_array($this->filter[$field["id"]]))
				{
					//multiselect values
					if(!empty($this->filter[$field["id"]]) && reset($this->filter[$field["id"]]) <> '')
					{
						$aRes[$field["id"]] = array_values($this->filter[$field["id"]]);
					}
				}
				elseif($this->filter[$field["id"]] <> '')
				{
					$aRes[$field["id"]] = $this->filter[$field["id"]];
				}
			}
			if(!empty($aRes))
			{
				Application::getInstance()->getSession()["main.interface.grid"][$this->grid_id]["filter"] = $aRes;
			}
		}
	}

	return $aRes;
}