static function GetPublicList($arFilter=Array(), $strSqlOrder="ORDER BY C.C_SORT, C.ID, V.DATE_START desc", $params = array())
{
global $DB, $USER;
$err_mess = (CVote::err_mess())."
Function: GetPublicList
Line: ";
$arSqlSearch = array();
$arFilter = (is_array($arFilter) ? $arFilter : array());
$params = (is_array($params) ? $params : array());
$left_join = "";
foreach ($arFilter as $key => $val)
{
if (empty($val) || (is_string($val) && $val === "NOT_REF"))
continue;
$key = mb_strtoupper($key);
switch($key)
{
case "SITE":
$val = (is_array($val) ? implode(" | ", $val) : $val);
$match = ($arFilter[$key."_EXACT_MATCH"] == "N" ? "Y" : "N");
$arSqlSearch[] = GetFilterQuery("CS.SITE_ID", $val, $match);
$left_join = "LEFT JOIN b_vote_channel_2_site CS ON (C.ID = CS.CHANNEL_ID)";
break;
case "CHANNEL":
$match = ($arFilter[$key."_EXACT_MATCH"] == "N" ? "Y" : "N");
if (is_array($val)):
$arr = array();
foreach ($val as $v):
$v = trim($v);
if (!empty($v))
{
$arr[] = GetFilterQuery("C.SYMBOLIC_NAME", $v, $match);
}
endforeach;
if (!empty($arr)):
$arSqlSearch[] = "((".implode(") OR (", $arr)."))";
endif;
else:
$arSqlSearch[] = GetFilterQuery("C.SYMBOLIC_NAME", $val, $match);
endif;
break;
case "FIRST_SITE_ID":
case "LID":
$match = ($arFilter[$key."_EXACT_MATCH"] == "N" ? "Y" : "N");
$arSqlSearch[] = GetFilterQuery("C.FIRST_SITE_ID",$val,$match);
break;
}
}
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$is_admin = in_array(1, $USER->GetUserGroupArray());
$groups = $USER->GetGroups();
$iCnt = 0;
if (array_key_exists("bDescPageNumbering", $params) && $params["nTopCount"] <= 0 || $params["bCount"] === true)
{
$strSql = "SELECT COUNT(V1.ID) CNT
FROM (
SELECT V.CHANNEL_ID, V.ID, ".($is_admin ? "2" : "max(G.PERMISSION)")." as MAX_PERMISSION
FROM b_vote V
INNER JOIN b_vote_channel C ON (C.ACTIVE = 'Y' AND C.HIDDEN = 'N' AND V.CHANNEL_ID = C.ID)
LEFT JOIN b_vote_channel_2_group G ON (G.CHANNEL_ID = C.ID and G.GROUP_ID in ($groups))
$left_join
WHERE
$strSqlSearch
AND V.ACTIVE = 'Y' AND V.DATE_START <= NOW()
GROUP BY V.CHANNEL_ID, V.ID
".($is_admin ? "" : "
HAVING MAX_PERMISSION > 0")."
) V1";
$db_res = $DB->Query($strSql, false, $err_mess.__LINE__);
if ($db_res && ($res = $db_res->Fetch()))
$iCnt = intval($res["CNT"]);
if ($params["bCount"] === true)
return $iCnt;
}
$strSql = "
SELECT C.TITLE CHANNEL_TITLE, V.*, V.KEEP_IP_SEC as DELAY, 'S' as DELAY_TYPE,
".$DB->DateToCharFunction("V.DATE_START")." DATE_START,
".$DB->DateToCharFunction("V.DATE_END")." DATE_END,
V4.MAX_PERMISSION, V4.LAMP
FROM (
SELECT V.CHANNEL_ID, V.ID,
".($is_admin ? "2" : "max(G.PERMISSION)")." as MAX_PERMISSION,
IF((C.VOTE_SINGLE = 'Y'),
(IF(V.ID = VV.ACTIVE_VOTE_ID, 'green', 'red')),
(IF(V.ACTIVE = 'Y' AND V.DATE_START <= NOW() AND NOW() <= V.DATE_END, 'green', 'red'))) LAMP
FROM b_vote V
INNER JOIN b_vote_channel C ON (C.ACTIVE = 'Y' AND C.HIDDEN = 'N' AND V.CHANNEL_ID = C.ID)
LEFT JOIN (
SELECT VVV.CHANNEL_ID, MAX(VVV.ID) AS ACTIVE_VOTE_ID
FROM b_vote VVV, b_vote_channel CCC
WHERE VVV.CHANNEL_ID = CCC.ID AND CCC.VOTE_SINGLE='Y' AND VVV.ACTIVE = 'Y'
AND NOW() >= VVV.DATE_START AND VVV.DATE_END >= NOW()
GROUP BY VVV.CHANNEL_ID) VV ON (VV.CHANNEL_ID = V.CHANNEL_ID)
LEFT JOIN b_vote_channel_2_group G ON (G.CHANNEL_ID = C.ID and G.GROUP_ID in ($groups))
$left_join
WHERE
$strSqlSearch
AND V.ACTIVE = 'Y' AND V.DATE_START <= NOW()
GROUP BY V.CHANNEL_ID, V.ID
".($is_admin ? "" : "
HAVING MAX_PERMISSION > 0")."
) V4
INNER JOIN b_vote V ON (V4.ID = V.ID)
INNER JOIN b_vote_channel C ON (V4.CHANNEL_ID = C.ID)
".$DB->ForSql($strSqlOrder);
if (array_key_exists("bDescPageNumbering", $params) && $params["nTopCount"] <= 0)
{
$db_res = new CDBResult();
$db_res->NavQuery($strSql, $iCnt, $params);
}
else
{
if ($params["nTopCount"] > 0)
$strSql .= " LIMIT 0,".intval($params["nTopCount"]);
$db_res = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
}
return $db_res;
}