• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/filterquery.php
  • Класс: CAllFilterQuery
  • Вызов: CAllFilterQuery::PrepareQuery
public function PrepareQuery($q)
{
	$state = 0;
	$qu = "";
	$n = 0;
	$this->error = "";

	$t=strtok($q," ");

	while (($t!="") && ($this->error==""))
	{
		switch ($state)
		{
		case 0:
			if(($t=="||") || ($t=="&&") || ($t==")"))
			{
				$this->error=GetMessage("FILTER_ERROR2")." ".$t;
				$this->errorno=2;
			}
			elseif($t=="!")
			{
				$state=0;
				$qu="$qu NOT ";
				break;
			}
			elseif($t=="(")
			{
				$n++;
				$state=0;
				$qu="$qu(";
			}
			else
			{
				$state=1;
				$qu="$qu ".$this->BuildWhereClause($t)." ";
			}
			break;

		case 1:
			if(($t=="||") || ($t=="&&"))
			{
				$state=0;
				if($t=='||') $qu="$qu OR ";
				else $qu="$qu AND ";
			}
			elseif($t==")")
			{
				$n--;
				$state=1;
				$qu="$qu)";
			}
			else
			{
				$this->error=GetMessage("FILTER_ERROR2")." ".$t;
				$this->errorno=2;
			}
			break;
		}
		$t=strtok(" ");
	}

	if(($this->error=="") && ($n != 0))
	{
		$this->error=GetMessage("FILTER_ERROR1");
		$this->errorno=1;
	}
	if($this->error!="") return 0;

	return $qu;
}