static function GetList($by = 's_c_sort', $order = 'asc', $arFilter = [], $is_filtered = null, $arSelect = [])
{
$err_mess = (CWorkflowStatus::err_mess())."
Function: GetList
Line: ";
global $DB;
if(!is_array($arSelect))
$arSelect = array();
if(count($arSelect) <= 0)
$arSelect = array("ID", "C_SORT", "ACTIVE", "TITLE", "DESCRIPTION", "IS_FINAL", "TIMESTAMP_X", "DOCUMENTS", "NOTIFY");
if($by == "s_id")
{
$strSqlOrder = "ORDER BY S.ID";
$arSelect[] = "ID";
}
elseif($by == "s_timestamp")
{
$strSqlOrder = "ORDER BY S.TIMESTAMP_X";
$arSelect[] = "TIMESTAMP_X";
}
elseif($by == "s_active")
{
$strSqlOrder = "ORDER BY S.ACTIVE";
$arSelect[] = "ACTIVE";
}
elseif($by == "s_c_sort")
{
$strSqlOrder = "ORDER BY S.C_SORT";
$arSelect[] = "C_SORT";
}
elseif($by == "s_title")
{
$strSqlOrder = "ORDER BY S.TITLE ";
$arSelect[] = "TITLE";
}
elseif($by == "s_description")
{
$strSqlOrder = "ORDER BY S.DESCRIPTION";
$arSelect[] = "DESCRIPTION";
}
elseif($by == "s_documents")
{
$strSqlOrder = "ORDER BY DOCUMENTS";
$arSelect[] = "DOCUMENTS";
}
else
{
$strSqlOrder = "ORDER BY S.C_SORT";
$arSelect[] = "C_SORT";
}
if($order != "desc")
$order = "asc";
$strSqlOrder .= " $order ";
$arSelectFields = array(
"ID" => "S.ID",
"C_SORT" => "S.C_SORT",
"ACTIVE" => "S.ACTIVE",
"NOTIFY" => "S.NOTIFY",
"TITLE" => "S.TITLE",
"DESCRIPTION" => "S.DESCRIPTION",
"IS_FINAL" => "S.IS_FINAL",
"TIMESTAMP_X" => "S.TIMESTAMP_X TIMESTAMP_X_TEMP, ".$DB->DateToCharFunction("S.TIMESTAMP_X"),
"DOCUMENTS" => "count(DISTINCT D.ID)",
"REFERENCE_ID" => "S.ID",
"REFERENCE" => ($DB->type=="MSSQL"?
$DB->Concat("'['", "convert(varchar(8000), S.ID)" , "'] '", "S.TITLE"):
$DB->Concat("'['", "S.ID" , "'] '", "S.TITLE")
),
);
$arSqlSelect = array();
foreach($arSelect as $field)
if(array_key_exists($field, $arSelectFields))
$arSqlSelect[$field] = $arSelectFields[$field]." ".$field;
$bGroup = false;
$arGroupFields = array(
"ID" => "S.ID",
"C_SORT" => "S.C_SORT",
"ACTIVE" => "S.ACTIVE",
"NOTIFY" => "S.NOTIFY",
"TITLE" => "S.TITLE",
"DESCRIPTION" => "S.DESCRIPTION",
"IS_FINAL" => "S.IS_FINAL",
"TIMESTAMP_X" => "S.TIMESTAMP_X",
"REFERENCE_ID" => "S.ID",
"REFERENCE" => ($DB->type=="MSSQL"?
$DB->Concat("'['", "convert(varchar(8000), S.ID)" , "'] '", "S.TITLE"):
$DB->Concat("'['", "S.ID" , "'] '", "S.TITLE")
),
);
$arSqlGroup = array();
foreach($arSelect as $field)
if(array_key_exists($field, $arGroupFields))
$arSqlGroup[$field] = $arGroupFields[$field];
elseif(array_key_exists($field, $arSelectFields))
{
$arSqlGroup["ID"] = "S.ID";
$bGroup = true;
}
$arSqlSearch = $arSqlSearch_h = $arSqlSearch_g = array();
if(is_array($arFilter))
{
foreach($arFilter as $key => $val)
{
if(is_array($val))
{
if(count($val) <= 0) continue;
}
else
{
if((string)$val == '' || "$val"=="NOT_REF") continue;
}
$match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter);
$key = strtoupper($key);
$predicate = "";
switch($key)
{
case "ID":
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$predicate = GetFilterQuery("S.ID", $val, $match);
break;
case "ACTIVE":
$predicate = ($val=="Y") ? "S.ACTIVE='Y'" : "S.ACTIVE='N'";
break;
case "!=ACTIVE":
if($val === "Y" || $val === "N")
$arSqlSearch[] = "S.ACTIVE <> '".$val."'";
break;
case "TITLE":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$predicate = GetFilterQuery("S.TITLE", $val, $match);
break;
case "DESCRIPTION":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$predicate = GetFilterQuery("S.DESCRIPTION", $val, $match);
break;
case "DOCUMENTS_1":
$arSqlSearch_h[] = "count(D.ID) >= ".intval($val);
$bGroup = true;
break;
case "DOCUMENTS_2":
$arSqlSearch_h[] = "count(D.ID) <= ".intval($val);
$bGroup = true;
break;
case "GROUP_ID":
if(!is_array($val))
$val = array($val);
$groups = array();
foreach($val as $i => $v)
{
$v = intval($v);
if($v > 0)
$groups[$v] = $v;
}
if(count($groups) > 0)
{
$arSqlSearch_g[] = "G.GROUP_ID in (".implode(", ",$groups).")";
$bGroup = true;
}
break;
case "PERMISSION_TYPE_1":
$val = intval($val);
if($val > 0)
{
$arSqlSearch_g[] = "G.PERMISSION_TYPE >= ".$val;
$bGroup = true;
}
break;
case "PERMISSION_TYPE_2":
$val = intval($val);
if($val > 0)
{
$arSqlSearch_g[] = "G.PERMISSION_TYPE <= ".$val;
$bGroup = true;
}
break;
}
if($predicate <> '' && $predicate!="0")
$arSqlSearch[] = $predicate;
}
}
if(count($arSqlSearch) > 0)
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
else
$strSqlSearch = "";
if(count($arSqlSearch_h) > 0)
$strSqlSearch_h = "(".implode(") and (", $arSqlSearch_h).") ";
else
$strSqlSearch_h = "";
if(count($arSqlSearch_g) > 0)
{
if($strSqlSearch <> '')
{
$strSqlSearch .= " AND ";
}
$strSqlSearch .= "(".implode(") and (", $arSqlSearch_g).") ";
}
$strSql = "
SELECT
".implode(", ", $arSqlSelect)."
FROM
b_workflow_status S
".($strSqlSearch_h <> '' || array_key_exists("DOCUMENTS", $arSqlSelect)? "LEFT JOIN b_workflow_document D ON (D.STATUS_ID = S.ID)": "")."
".(count($arSqlSearch_g) > 0? "LEFT JOIN b_workflow_status2group G ON (G.STATUS_ID = S.ID)": "")."
".($strSqlSearch <> ''? "WHERE ".$strSqlSearch: "")."
".($bGroup? "GROUP BY ".implode(", ", $arSqlGroup): "")."
".($strSqlSearch_h <> ''? "HAVING ".$strSqlSearch_h: "")."
$strSqlOrder
";
$res = $DB->Query($strSql, false, $err_mess.__LINE__);
return $res;
}