• Модуль: workflow
  • Путь к файлу: ~/bitrix/modules/workflow/classes/general/status.php
  • Класс: CWorkflowStatus
  • Вызов: CWorkflowStatus::GetList
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; }