• Модуль: learning
  • Путь к файлу: ~/bitrix/modules/learning/classes/general/clearnhelper.php
  • Класс: CLearnHelper
  • Вызов: CLearnHelper::FilterCreate
static function FilterCreate($fname, $vals, $type, &$bFullJoin, $cOperationType=false, $bSkipEmpty = true)
{
	global $DB;
	if(!is_array($vals))
		$vals=Array($vals);

	if(count($vals)<1)
		return "";

	if(is_bool($cOperationType))
	{
		if($cOperationType===true)
			$cOperationType = "N";
		else
			$cOperationType = "E";
	}

	if($cOperationType=="G")
		$strOperation = ">";
	elseif($cOperationType=="GE")
		$strOperation = ">=";
	elseif($cOperationType=="LE")
		$strOperation = "<=";
	elseif($cOperationType=="L")
		$strOperation = "<";
	else
		$strOperation = "=";

	$bFullJoin = false;
	$bWasLeftJoin = false;

	$res = Array();
	for($i=0; $i '' || (is_bool($val) && $val===false))
		{
			switch ($type)
			{
			case "string_equal":
				if((string)$val == '')
					$res[] =
					($cOperationType=="N"?"NOT":"").
					"(".
					$fname." IS NULL OR ".$DB->Length($fname).
					"<=0)";
				else
					$res[] =
					"(".
					($cOperationType=="N"?" ".$fname." IS NULL OR NOT (":"").
					CCourse::_Upper($fname).$strOperation.CCourse::_Upper("'".$DB->ForSql($val)."'").
					($cOperationType=="N"?")":"").
					")";
				break;
			case "string":
				if($cOperationType=="?")
				{
					if((string)$val <> '')
						$res[] = GetFilterQuery($fname, $val, "Y",array(),"N");
				}
				elseif((string)$val == '')
				{
					$res[] = ($cOperationType=="N"?"NOT":"")."(".$fname." IS NULL OR ".$DB->Length($fname)."<=0)";
				}
				else
				{
					if($strOperation=="=")
						$res[] =
						"(".
						($cOperationType=="N"?" ".$fname." IS NULL OR NOT (":"").
						($DB->type == "ORACLE"?CCourse::_Upper($fname)." LIKE ".CCourse::_Upper("'".$DB->ForSqlLike($val)."'")." ESCAPE '\'" : $fname." ".($strOperation=="="?"LIKE":$strOperation)." '".$DB->ForSqlLike($val)."'").
						($cOperationType=="N"?")":"").
						")";
					else
						$res[] =
						"(".
						($cOperationType=="N"?" ".$fname." IS NULL OR NOT (":"").
						($DB->type == "ORACLE"?CCourse::_Upper($fname).
						" ".$strOperation." ".CCourse::_Upper("'".$DB->ForSql($val)."'")." " : $fname." ".$strOperation." '".$DB->ForSql($val)."'").
						($cOperationType=="N"?")":"").
						")";
				}
				break;
			case "date":
				if((string)$val == '')
					$res[] = ($cOperationType=="N"?"NOT":"")."(".$fname." IS NULL)";
				else
					$res[] =
					"(".
					($cOperationType=="N"?" ".$fname." IS NULL OR NOT (":"").
					$fname." ".$strOperation." ".$DB->CharToDateFunction($DB->ForSql($val), "FULL").
					($cOperationType=="N"?")":"").
					")";
				break;
			case "number":
				if((string)$val == '')
					$res[] = ($cOperationType=="N"?"NOT":"")."(".$fname." IS NULL)";
				else
					$res[] =
					"(".
					($cOperationType=="N"?" ".$fname." IS NULL OR NOT (":"").
					$fname." ".$strOperation." '".DoubleVal($val).
					($cOperationType=="N"?"')":"'").
					")";
				break;
			/*
			case "number_above":
				if(strlen($val)<=0)
					$res[] = ($cOperationType=="N"?"NOT":"")."(".$fname." IS NULL)";
				else
					$res[] = ($cOperationType=="N"?" ".$fname." IS NULL OR NOT ":"")."(".$fname." ".$strOperation." '".$DB->ForSql($val)."')";
				break;
			*/
			}

			// INNER JOIN in this case
			if((string)$val <> '' && $cOperationType!="N")
				$bFullJoin = true;
			else
				$bWasLeftJoin = true;
		}
	}

	$strResult = "";
	for($i=0; $i0)
			$strResult .= ($cOperationType=="N"?" AND ":" OR ");
		$strResult .= $res[$i];
	}

	if (count($res) > 1)
		$strResult = "(".$strResult.")";


	if($bFullJoin && $bWasLeftJoin && $cOperationType!="N")
		$bFullJoin = false;

	return $strResult;
}