static function GetList($by = 's_date_modify', $order = 'desc', $arFilter = [])
{
$err_mess = (CWorkflow::err_mess())."
Function: GetList
Line: ";
global $DB, $USER;
$arSqlSearch = Array();
$MAX_LOCK = intval(COption::GetOptionString("workflow","MAX_LOCK_TIME","60"));
$arGroups = $USER->GetUserGroupArray();
if (!is_array($arGroups)) $arGroups[] = 2;
$groups = implode(",",$arGroups);
$uid = intval($USER->GetID());
if (is_array($arFilter))
{
foreach ($arFilter as $key => $val)
{
if ((string)$val == '' || "$val"=="NOT_REF")
continue;
if (is_array($val) && count($val)<=0)
continue;
$match_value_set = (array_key_exists($key."_EXACT_MATCH", $arFilter) ? true : false);
$key = strtoupper($key);
switch($key)
{
case "ID":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="N") ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("D.ID",$val,$match);
break;
case "DATE_MODIFY_1":
if (CheckDateTime($val))
$arSqlSearch[] = "D.DATE_MODIFY >= ".$DB->CharToDateFunction($val, "SHORT");
break;
case "DATE_MODIFY_2":
if (CheckDateTime($val))
$arSqlSearch[] = "D.DATE_MODIFY < ".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY";
break;
case "MODIFIED_BY":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="Y") ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("D.MODIFIED_BY, UM.LOGIN, UM.NAME, UM.LAST_NAME", $val, $match);
break;
case "MODIFIED_USER_ID":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="N") ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("D.MODIFIED_BY",$val,$match);
break;
case "LOCK_STATUS":
$arSqlSearch[] = "
if (D.DATE_LOCK is null, 'green',
if(DATE_ADD(D.DATE_LOCK, interval $MAX_LOCK MINUTE)ForSql($val)."'";
break;
case "STATUS":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="Y") ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("D.STATUS_ID, S.TITLE",$val,$match);
break;
case "STATUS_ID":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="N") ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("D.STATUS_ID",$val,$match);
break;
case "SITE_ID":
case "TITLE":
case "BODY":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="Y") ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("D.".$key,$val,$match);
break;
case "FILENAME":
$match = ($match_value_set && $arFilter[$key."_EXACT_MATCH"]=="Y") ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("D.FILENAME",$val,$match, array("/", "\", ".", "_"));
break;
}
}
}
if ($by == "s_id") $strSqlOrder = "ORDER BY D.ID";
elseif ($by == "s_lock_status") $strSqlOrder = "ORDER BY LOCK_STATUS";
elseif ($by == "s_date_modify") $strSqlOrder = "ORDER BY D.DATE_MODIFY";
elseif ($by == "s_modified_by") $strSqlOrder = "ORDER BY D.MODIFIED_BY";
elseif ($by == "s_filename") $strSqlOrder = "ORDER BY D.FILENAME";
elseif ($by == "s_title") $strSqlOrder = "ORDER BY D.TITLE";
elseif ($by == "s_site_id") $strSqlOrder = "ORDER BY D.SITE_ID";
elseif ($by == "s_status") $strSqlOrder = "ORDER BY D.STATUS_ID";
else
{
$strSqlOrder = "ORDER BY D.DATE_MODIFY";
}
if ($order != "asc")
{
$strSqlOrder .= " desc ";
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
if (CWorkflow::IsAdmin())
{
$strSql = "
SELECT DISTINCT
D.*,
".$DB->DateToCharFunction("D.DATE_ENTER")." DATE_ENTER,
".$DB->DateToCharFunction("D.DATE_MODIFY")." DATE_MODIFY,
".$DB->DateToCharFunction("D.DATE_LOCK")." DATE_LOCK,
concat('(',UM.LOGIN,') ',ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,'')) MUSER_NAME,
concat('(',UE.LOGIN,') ',ifnull(UE.NAME,''),' ',ifnull(UE.LAST_NAME,'')) EUSER_NAME,
S.TITLE STATUS_TITLE,
if (D.DATE_LOCK is null, 'green',
if(DATE_ADD(D.DATE_LOCK, interval $MAX_LOCK MINUTE)DateToCharFunction("D.DATE_ENTER")." DATE_ENTER,
".$DB->DateToCharFunction("D.DATE_MODIFY")." DATE_MODIFY,
".$DB->DateToCharFunction("D.DATE_LOCK")." DATE_LOCK,
concat('(',UM.LOGIN,') ',ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,'')) MUSER_NAME,
concat('(',UE.LOGIN,') ',ifnull(UE.NAME,''),' ',ifnull(UE.LAST_NAME,'')) EUSER_NAME,
S.TITLE STATUS_TITLE,
if (D.DATE_LOCK is null, 'green',
if(DATE_ADD(D.DATE_LOCK, interval $MAX_LOCK MINUTE)= '2'
$strSqlOrder
";
}
$rs = $DB->Query($strSql, false, $err_mess.__LINE__);
$arr = array();
while($ar=$rs->Fetch())
{
if($USER->CanDoFileOperation('fm_edit_in_workflow', Array($ar["SITE_ID"], $ar["FILENAME"])))
$arr[] = $ar;
}
$rs = new CDBResult;
$rs->InitFromArray($arr);
return $rs;
}