- Модуль: 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;
}