use \Bitrix\Main\Application;
IncludeModuleLangFile(__FILE__);
/*********************************************************************
Фильтр
*********************************************************************/
function CheckFilterDates($date1, $date2, &$date1_wrong, &$date2_wrong, &$date2_less_date1)
{
global $DB;
$date1 = trim($date1);
$date2 = trim($date2);
$date1_wrong = "N";
$date2_wrong = "N";
$date2_less_date1 = "N";
if ($date1 <> '' && !CheckDateTime($date1)) $date1_wrong = "Y";
if ($date2 <> '' && !CheckDateTime($date2)) $date2_wrong = "Y";
if ($date1_wrong!="Y" && $date2_wrong!="Y" && $date1 <> '' && $date2 <> '' && $DB->CompareDates($date2,$date1)<0) $date2_less_date1="Y";
}
function InitFilterEx($arName, $varName, $action="set", $session=true, $FilterLogic="FILTER_logic")
{
$sessAdmin = Application::getInstance()->getSession()["SESS_ADMIN"];
if ($session && isset($sessAdmin[$varName]) && is_array($sessAdmin[$varName]))
{
$FILTER = $sessAdmin[$varName];
}
else
{
$FILTER = [];
}
global $$FilterLogic;
if ($action=="set")
{
$FILTER[$FilterLogic] = $$FilterLogic;
}
else
{
$$FilterLogic = ($FILTER[$FilterLogic] ?? '');
}
for($i=0, $n=count($arName); $i < $n; $i++)
{
$name = $arName[$i];
$period = $arName[$i]."_FILTER_PERIOD";
$direction = $arName[$i]."_FILTER_DIRECTION";
$bdays = $arName[$i]."_DAYS_TO_BACK";
global $$name, $$direction, $$period, $$bdays;
if ($action=="set")
{
$FILTER[$name] = $$name;
if(isset($$period) || isset($FILTER[$period]))
$FILTER[$period] = $$period;
if(isset($$direction) || isset($FILTER[$direction]))
$FILTER[$direction] = $$direction;
if(isset($$bdays) || isset($FILTER[$bdays]))
{
$FILTER[$bdays] = $$bdays;
if ((string)$$bdays <> '' && $$bdays!="NOT_REF")
$$name = GetTime(time()-86400*intval($FILTER[$bdays]));
}
}
else
{
$$name = $FILTER[$name] ?? null;
if(isset($$period) || isset($FILTER[$period]))
$$period = $FILTER[$period];
if(isset($$direction) || isset($FILTER[$direction]))
$$direction = $FILTER[$direction];
if (isset($FILTER[$bdays]) && (string)$FILTER[$bdays] <> '' && $FILTER[$bdays]!="NOT_REF")
{
$$bdays = $FILTER[$bdays];
$$name = GetTime(time()-86400*intval($FILTER[$bdays]));
}
}
}
if($session)
{
if(!is_array(Application::getInstance()->getSession()["SESS_ADMIN"]))
Application::getInstance()->getSession()->set("SESS_ADMIN", []);
Application::getInstance()->getSession()["SESS_ADMIN"][$varName] = $FILTER;
}
}
function DelFilterEx($arName, $varName, $session=true, $FilterLogic="FILTER_logic")
{
global $$FilterLogic;
if ($session)
unset(Application::getInstance()->getSession()["SESS_ADMIN"][$varName]);
foreach ($arName as $name)
{
$period = $name."_FILTER_PERIOD";
$direction = $name."_FILTER_DIRECTION";
$bdays = $name."_DAYS_TO_BACK";
global $$name, $$period, $$direction, $$bdays;
$$name = "";
$$period ="";
$$direction = "";
$$bdays = "";
}
$$FilterLogic = "and";
}
function InitFilter($arName)
{
$md5Path = md5(GetPagePath());
$FILTER = Application::getInstance()->getSession()->get("SESS_ADMIN")[$md5Path];
foreach ($arName as $name)
{
global $$name;
if(isset($$name))
$FILTER[$name] = $$name;
else
$$name = $FILTER[$name];
}
Application::getInstance()->getSession()->get("SESS_ADMIN")[$md5Path] = $FILTER;
}
function DelFilter($arName)
{
$md5Path = md5(GetPagePath());
unset(Application::getInstance()->getSession()->get("SESS_ADMIN")[$md5Path]);
foreach ($arName as $name)
{
global $$name;
$$name = "";
}
}
function GetFilterHiddens($var = "filter_", $button = array("filter" => "Y", "set_filter" => "Y"))
{
$res = '';
// если поступил не массив имен переменных то
$arrVars = [];
if (!is_array($var))
{
// получим имена переменных фильтра по префиксу
$arKeys = @array_merge(array_keys($_GET), array_keys($_POST));
if (is_array($arKeys) && !empty($arKeys))
{
$len = mb_strlen($var);
foreach (array_unique($arKeys) as $key)
{
if (mb_substr($key, 0, $len) == $var)
{
$arrVars[] = $key;
}
}
}
}
else
{
$arrVars = $var;
}
// если получили массив переменных фильтра то
if (is_array($arrVars) && !empty($arrVars))
{
// соберем строку из URL параметров
foreach ($arrVars as $var_name)
{
global $$var_name;
$value = $$var_name;
if (is_array($value))
{
foreach($value as $v)
{
$res .= '';
}
}
elseif ((string)$value <> '' && $value!="NOT_REF")
{
$res .= '';
}
}
}
if(is_array($button))
{
foreach($button as $key => $val)
{
$res.='';
}
}
else
{
$res .= $button;
}
return $res;
}
function GetFilterParams($var="filter_", $bDoHtmlEncode=true, $button = array("filter" => "Y", "set_filter" => "Y"))
{
$arrVars = array(); // массив имен переменных фильтра
$res=""; // результирующая строка
// если поступил не массив имен переменных то
if(!is_array($var))
{
// получим имена переменных фильтра по префиксу
$arKeys = @array_merge(array_keys($_GET), array_keys($_POST));
if(is_array($arKeys) && !empty($arKeys))
{
$len = mb_strlen($var);
foreach (array_unique($arKeys) as $key)
if (mb_substr($key, 0, $len) == $var)
$arrVars[] = $key;
}
}
else
$arrVars = $var;
// если получили массив переменных фильтра то
if(is_array($arrVars) && !empty($arrVars))
{
// соберем строку из URL параметров
foreach($arrVars as $var_name)
{
global $$var_name;
$value = $$var_name;
if(is_array($value))
{
foreach($value as $v)
$res .= "&".urlencode($var_name)."[]=".urlencode($v);
}
elseif((string)$value <> '' && $value!="NOT_REF")
{
$res .= "&".urlencode($var_name)."=".urlencode($value);
}
}
}
if(is_array($button))
{
foreach($button as $key => $val)
{
$res .= "&".$key."=".urlencode($val);
}
}
else
{
$res .= $button;
}
$tmp_phpbug = ($bDoHtmlEncode) ? htmlspecialcharsbx($res) : $res;
return $tmp_phpbug;
//return ($bDoHtmlEncode) ? htmlspecialcharsbx($res) : $res;
}
// устаревшая функция, оставлена для совместимости
function GetFilterStr($arr, $button="set_filter")
{
foreach ($arr as $var)
{
global $$var;
$value = $$var;
if (is_array($value))
{
if (!empty($value))
{
foreach($value as $v)
{
$str .= "&".urlencode($var)."[]=".urlencode($v);
}
}
}
elseif ((string)$value <> '' && $value!="NOT_REF")
{
$str .= "&".urlencode($var)."=".urlencode($value);
}
}
return $str."&".$button."=Y";
}
function ShowExactMatchCheckbox($name, $title=false)
{
$var = $name."_exact_match";
global $$var;
if ($title===false) $title=GetMessage("MAIN_EXACT_MATCH");
return ''.InputType("checkbox", $name."_exact_match", "Y", $$var, false, "", "title='".$title."'");
}
function GetUrlFromArray($arr)
{
if(!is_array($arr))
return "";
$str = "";
foreach($arr as $key => $value)
{
if (is_array($value))
{
foreach ($value as $a)
{
$str .= "&".$key.urlencode("[]")."=".urlencode($a);
}
}
elseif((string)$value <> '' && $value!="NOT_REF")
{
$str .= "&".$key."=".urlencode($value);
}
}
return $str;
}
function ShowAddFavorite($filterName=false, $btnName="set_filter", $module="statistic", $alt=false)
{
global $QUERY_STRING, $SCRIPT_NAME, $sFilterID;
if ($alt===false)
$alt=GetMessage("MAIN_ADD_TO_FAVORITES");
if ($filterName===false)
$filterName = $sFilterID;
$url = urlencode($SCRIPT_NAME."?".$QUERY_STRING. GetUrlFromArray(Application::getInstance()->getSession()["SESS_ADMIN"][$filterName])."&".$btnName."=Y");
$str = "";
echo $str;
}
function IsFiltered($strSqlSearch)
{
return ($strSqlSearch <> '' && $strSqlSearch!="(1=1)" && $strSqlSearch!="(1=2)");
}
function ResetFilterLogic($FilterLogic="FILTER_logic")
{
$var = $FilterLogic."_reset";
global $$var;
$$var = "Y";
}
function ShowFilterLogicHelp()
{
global $LogicHelp;
$str = "";
if(LANGUAGE_ID == "ru")
$help_link = "https://dev.1c-bitrix.ru/api_help/main/general/filter.php";
else
$help_link = "http://www.bitrixsoft.com/help/index.html?page=".urlencode("source/main/help/en/filter.php.html");
if ($LogicHelp != "Y")
{
$str = "";
}
$str .= "";
$LogicHelp = "Y";
return $str;
}
function ShowLogicRadioBtn($FilterLogic="FILTER_logic")
{
global $$FilterLogic;
$s_and = "checked";
if ($$FilterLogic=="or")
{
$s_or = "checked";
$s_and = "";
}
$str = "