public static function RecalculateSupportDeadline($arFilter = array()) { global $DB; $err_mess = CAllTicketReminder::err_mess() . "<br>Function: RecalculateSupportDeadline<br>Line: "; $arSqlSearch = array(); if (!is_array($arFilter)) { $arFilter = array(); } foreach ($arFilter as $key => $val) { if (is_array($val) && count($val) <= 0 || !is_array($val) && strlen($val) <= 0) { continue; } $key = strtoupper($key); if (is_array($val)) { $val = implode(" | ", $val); } switch ($key) { case "ID": $arSqlSearch[] = GetFilterQuery("T.ID", $val, "N"); break; case "SLA_ID": $arSqlSearch[] = GetFilterQuery("T.SLA_ID", $val, "N"); break; } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\tT.ID ID,\n\t\t\t\tT.SLA_ID,\n\t\t\t\t" . $DB->DateToCharFunction("T.DEADLINE_SOURCE_DATE", "FULL") . " DEADLINE_SOURCE_DATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.D_1_USER_M_AFTER_SUP_M", "FULL") . " D_1_USER_M_AFTER_SUP_M,\n\t\t\t\tT.IS_OVERDUE,\n\t\t\t\tSLA.RESPONSE_TIME_UNIT,\n\t\t\t\tSLA.RESPONSE_TIME,\n\t\t\t\tSLA.NOTICE_TIME_UNIT,\n\t\t\t\tSLA.NOTICE_TIME\n\t\t\tFROM\n\t\t\t\tb_ticket T\n\t\t\t\tINNER JOIN b_ticket_sla SLA\n\t\t\t\t\tON T.SLA_ID = SLA.ID\n\t\t\t\t\t\tAND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'N'\n\t\t\t\t\t\tAND (T.DATE_CLOSE IS NULL)\n\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t"; $rsTicket = $DB->Query($strSql, false, $err_mess . __LINE__); while ($arTicket = $rsTicket->Fetch()) { self::RecalculateSupportDeadlineForOneTicket($arTicket); } }
function GetList(&$by, &$order, $arFilter = array(), &$is_filtered) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "LAST": $arSqlSearch[] = $val == "Y" ? "S.DATE_STAT = curdate()" : "S.DATE_STAT<>curdate()"; break; case "USER_AGENT": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.USER_AGENT", $val, $match); break; case "COUNTER1": $arSqlSearch_h[] = "COUNTER>=" . intval($val); break; case "COUNTER2": $arSqlSearch_h[] = "COUNTER<=" . intval($val); break; } } for ($i = 0; $i < count($arSqlSearch_h); $i++) { $strSqlSearch_h .= " and (" . $arSqlSearch_h[$i] . ") "; } } if ($by == "s_user_agent") { $strSqlOrder = "ORDER BY S.USER_AGENT"; } elseif ($by == "s_counter") { $strSqlOrder = "ORDER BY COUNTER"; } else { $by = "s_counter"; $strSqlOrder = "ORDER BY COUNTER"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "SET OPTION SQL_BIG_SELECTS=1"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $strSql = "\n\t\t\tSELECT\n\t\t\t\tS.USER_AGENT,\n\t\t\t\tcount(S.ID) COUNTER\n\t\t\tFROM\n\t\t\t\tb_stat_session S\n\t\t\tLEFT JOIN b_stat_browser B ON (\n\t\t\t\tlength(B.USER_AGENT)>0\n\t\t\tand B.USER_AGENT is not null\n\t\t\tand\tupper(S.USER_AGENT) like upper(B.USER_AGENT)\n\t\t\t)\n\t\t\tLEFT JOIN b_stat_searcher R ON (\n\t\t\t\tlength(R.USER_AGENT)>0\n\t\t\tand\tR.USER_AGENT is not null\n\t\t\tand\tupper(S.USER_AGENT) like upper(concat('%',R.USER_AGENT,'%'))\n\t\t\t)\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\tand S.USER_AGENT is not null\n\t\t\tand S.USER_AGENT<>''\n\t\t\tand S.NEW_GUEST<>'N'\n\t\t\tand B.ID is null\n\t\t\tand R.ID is null\n\t\t\tGROUP BY S.USER_AGENT\n\t\t\tHAVING '1'='1' {$strSqlSearch_h}\n\t\t\t{$strSqlOrder}\n\t\t\t"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch) || strlen($strSqlSearch_h) > 0; return $res; }
private static function makeSqlSearch($arFilter) { $arSqlSearch = array(); if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (strlen($val) <= 0) { continue; } $key = strtoupper($key); switch ($key) { case "PAYSYSTEM_ID": $arSqlSearch[] = $key . "=" . intval($val); break; case "DELIVERY_ID": case "DELIVERY_PROFILE_ID": $arSqlSearch[] = GetFilterQuery($key, $val, "N"); break; } } } return GetFilterSqlSearch($arSqlSearch); }
public static function GetList($Params = array()) { global $DB; $arFilter = $Params['arFilter']; $arOrder = isset($Params['arOrder']) ? $Params['arOrder'] : array('ID' => 'asc'); $arFields = array("ID" => array("FIELD_NAME" => "U.ID", "FIELD_TYPE" => "string"), "MODULE_ID" => array("FIELD_NAME" => "U.MODULE_ID", "FIELD_TYPE" => "string"), "UNDO_TYPE" => array("FIELD_NAME" => "U.UNDO_TYPE", "FIELD_TYPE" => "string"), "UNDO_HANDLER" => array("FIELD_NAME" => "U.UNDO_HANDLER", "FIELD_TYPE" => "string"), "CONTENT" => array("FIELD_NAME" => "U.CONTENT", "FIELD_TYPE" => "string"), "USER_ID" => array("FIELD_NAME" => "U.USER_ID", "FIELD_TYPE" => "int"), "TIMESTAMP_X" => array("FIELD_NAME" => "U.TIMESTAMP_X", "FIELD_TYPE" => "int")); $err_mess = "CUndo::GetList<br>Line: "; $arSqlSearch = array(); if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); for ($i = 0, $l = count($filter_keys); $i < $l; $i++) { $n = strtoupper($filter_keys[$i]); $val = $arFilter[$filter_keys[$i]]; if ($n == 'ID' || $n == 'USER_ID') { $arSqlSearch[] = GetFilterQuery("U." . $n, $val, 'N'); } elseif (isset($arFields[$n])) { $arSqlSearch[] = GetFilterQuery($arFields[$n]["FIELD_NAME"], $val); } } } $strOrderBy = ''; foreach ($arOrder as $by => $order) { if (isset($arFields[strtoupper($by)])) { $strOrderBy .= $arFields[strtoupper($by)]["FIELD_NAME"] . ' ' . (strtolower($order) == 'desc' ? 'desc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS LAST" : "") : 'asc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS FIRST" : "")) . ','; } } if (strlen($strOrderBy) > 0) { $strOrderBy = "ORDER BY " . rtrim($strOrderBy, ","); } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\tU.*\n\t\t\tFROM\n\t\t\t\tb_undo U\n\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t{$strOrderBy}"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $arResult = array(); while ($arRes = $res->Fetch()) { $arResult[] = $arRes; } return $arResult; }
public static function GetAccessibilityForUsers($Params = array()) { global $DB; CTimeZone::Disable(); $curEventId = intVal($Params['curEventId']); if (!is_array($Params['users']) || count($Params['users']) == 0) { return array(); } $users = array(); $Accessibility = array(); foreach ($Params['users'] as $userId) { $userId = intVal($userId); if ($userId) { $users[] = $userId; $Accessibility[$userId] = array(); } } if (count($users) == 0) { return array(); } $strUsers = join(',', $users); // We fetch all events for user where it was attented $strSql = "SELECT EVENT_ID,USER_ID,STATUS,ACCESSIBILITY FROM b_calendar_attendees WHERE USER_KEY in (" . $strUsers . ") AND STATUS<>'N'"; $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $arInvIds = array(); $Attendees = array(); while ($ev = $res->Fetch()) { $ev["STATUS"] = trim($ev["STATUS"]); $ev["ACCESSIBILITY"] = trim($ev["ACCESSIBILITY"]); if (!is_array($Attendees[$ev['EVENT_ID']])) { $Attendees[$ev['EVENT_ID']] = array(); } $Attendees[$ev['EVENT_ID']][] = $ev; if (!in_array(intVal($ev['EVENT_ID']), $arInvIds)) { $arInvIds[] = intVal($ev['EVENT_ID']); } } $strInvIds = join(',', $arInvIds); $from_ts = false; $to_ts = false; $arSqlSearch = array(); if ($Params['from']) { $val = $Params['from']; $from_ts = CCalendar::Timestamp($val); if (strtoupper($DB->type) == "MYSQL") { $arSqlSearch[] = "CE.DT_TO>=FROM_UNIXTIME('" . MkDateTime(FmtDate($val, "D.M.Y"), "d.m.Y") . "')"; } elseif (strtoupper($DB->type) == "MSSQL") { $arSqlSearch[] = "CE.DT_TO>=" . $DB->CharToDateFunction($val, "SHORT"); } elseif (strtoupper($DB->type) == "ORACLE") { $arSqlSearch[] = "CE.DT_TO>=TO_DATE('" . FmtDate($val, "D.M.Y") . " 00:00:00','dd.mm.yyyy hh24:mi:ss')"; } } if ($Params['to']) { $val = $Params['to']; $to_ts = CCalendar::Timestamp($val); if (date('H:i', $to_ts) == '00:00') { $to_ts += CCalendar::DAY_LENGTH; } if (strtoupper($DB->type) == "MYSQL") { $arSqlSearch[] = "CE.DT_FROM<=FROM_UNIXTIME('" . MkDateTime(FmtDate($val, "D.M.Y") . " 23:59:59", "d.m.Y H:i:s") . "')"; } elseif (strtoupper($DB->type) == "MSSQL") { $arSqlSearch[] = "CE.DT_FROM<dateadd(day, 1, " . $DB->CharToDateFunction($val, "SHORT") . ")"; } elseif (strtoupper($DB->type) == "ORACLE") { $arSqlSearch[] = "CE.DT_FROM<=TO_DATE('" . FmtDate($val, "D.M.Y") . " 23:59:59','dd.mm.yyyy hh24:mi:ss')"; } } $arSqlSearch[] = GetFilterQuery("DELETED", "N"); $q = "CE.CAL_TYPE='user' AND CE.OWNER_ID in (" . $strUsers . ")"; if (count($arInvIds) > 0) { $q = '(' . $q . ') OR CE.ID in (' . $strInvIds . ')'; } $arSqlSearch[] = $q; $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT CE.ID, CE.CAL_TYPE,CE.OWNER_ID, CE.NAME, " . $DB->DateToCharFunction("CE.DT_FROM") . " as DT_FROM, " . $DB->DateToCharFunction("CE.DT_TO") . " as DT_TO, CE.DT_LENGTH, CE.PRIVATE_EVENT, CE.ACCESSIBILITY, CE.IMPORTANCE,CE.IS_MEETING, CE.MEETING_HOST, CE.MEETING, CE.LOCATION, CE.RRULE, CE.EXRULE, CE.RDATE, CE.EXDATE, CES.SECT_ID, CES.REL\n\t\t\tFROM\n\t\t\t\tb_calendar_event CE\n\t\t\tINNER JOIN b_calendar_event_sect CES ON (CE.ID=CES.EVENT_ID)\n\t\t\tWHERE CE.DELETED='N' AND {$strSqlSearch}"; $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $arResult = array(); while ($event = $res->Fetch()) { $event = self::PreHandleEvent($event); if ($curEventId && $curEventId == $event['ID']) { continue; } if (self::CheckRecurcion($event)) { self::ParseRecursion($arResult, $event, array('fromLimit' => $Params["from"], 'toLimit' => $Params["to"])); } else { self::HandleEvent($arResult, $event); } } foreach ($arResult as $event) { $ev_to_ts = $event['DT_TO_TS']; if ($event['DT_SKIP_TIME'] == 'Y') { $ev_to_ts += CCalendar::DAY_LENGTH; } if ($from_ts && $ev_to_ts < $from_ts || $to_ts && $event['DT_FROM_TS'] > $to_ts) { continue; } if (!in_array($event["ACCESSIBILITY"], array('busy', 'quest', 'free', 'absent'))) { $event["ACCESSIBILITY"] = 'busy'; } if (!in_array($event['IMPORTANCE'], array('high', 'normal', 'low'))) { $event['IMPORTANCE'] = 'normal'; } $val = array("ID" => $event["ID"], "DT_FROM" => CCalendar::CutZeroTime($event["DT_FROM"]), "DT_TO" => CCalendar::CutZeroTime($event["DT_TO"]), "ACCESSIBILITY" => $event["ACCESSIBILITY"], "IMPORTANCE" => $event["IMPORTANCE"], "FROM" => $event['DT_FROM_TS'], "TO" => $event['DT_TO_TS']); if ($event['IS_MEETING']) { if (is_array($Attendees[$event['ID']])) { foreach ($Attendees[$event['ID']] as $attendee) { if (is_array($Accessibility[$attendee['USER_ID']])) { $val['ACCESSIBILITY'] = $attendee['ACCESSIBILITY']; $Accessibility[$attendee['USER_ID']][] = $val; } } } } elseif ($event['CAL_TYPE'] == 'user' && is_array($Accessibility[$event['OWNER_ID']])) { $Accessibility[$event['OWNER_ID']][] = $val; } } CTimeZone::Enable(); return $Accessibility; }
function GetDomainList(&$by, &$order, $arFilter = array(), &$is_filtered) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array("P.SEARCHER_ID <> 1"); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": case "SEARCHER_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("P." . $key, $val, $match); break; case "DOMAIN": case "VARIABLE": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("P." . $key, $val, $match); break; } } } $strSqlOrder = ""; if ($by == "s_id") { $strSqlOrder = "ORDER BY P.ID"; } elseif ($by == "s_domain") { $strSqlOrder = "ORDER BY P.DOMAIN"; } elseif ($by == "s_variable") { $strSqlOrder = "ORDER BY P.VARIABLE"; } else { $by = "s_id"; $strSqlOrder = "ORDER BY P.ID"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\tP.ID,\n\t\t\t\tP.DOMAIN,\n\t\t\t\tP.VARIABLE,\n\t\t\t\tP.CHAR_SET\n\t\t\tFROM\n\t\t\t\tb_stat_searcher_params P\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\t"; $rs = $DB->Query($strSql, false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch); return $rs; }
/** * <p>Возвращает список групп в виде объекта класса <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cdbresult/index.php">CDBResult</a>.</p> * * * * * @param string &$by = "c_sort" Ссылка на переменную с полем для сортировки, может принимать * следующие значения: <ul> <li> <b>id</b> - ID группы </li> <li> <b>timestamp_x</b> - дата * изменения </li> <li> <b>name</b> - название </li> <li> <b>active</b> - активность </li> <li> * <b>c_sort</b> - порядок сортировки </li> <li> <b>description</b> - описание </li> <li> * <b>users</b> - кол-во пользователей входящих в группу </li> </ul> * * * * @param string &$order = "asc" Ссылка на переменную с порядком сортировки, может принимать * следующие значения: <ul> <li> <b>asc</b> - по возрастанию </li> <li> <b>desc</b> - по * убыванию </li> </ul> * * * * @param array $filter Массив для фильтрации пользователей. В массиве допустимы * следующие индексы: <ul> <li> <b>ID</b> - ID группы (допускается <a * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li> <li> * <b>TIMESTAMP_1</b> - дата изменения настроек группы "с" </li> <li> <b>TIMESTAMP_2</b> - * дата изменения настроек группы "по" </li> <li> <b>ACTIVE</b> - фильтр по * активности (Y|N) </li> <li> <b>ADMIN</b> - фильтр по типу группы ("Y" - * администраторы | "N" - не администраторы) </li> <li> <b>NAME</b> - по названию * (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) * </li> <li> <b>DESCRIPTION</b> - по описанию (допускается <a * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li> <li> <b>USERS_1</b> - * кол-во пользователей "с" </li> <li> <b>USERS_2</b> - кол-во пользователей "по" * </li> </ul> * * * * @param string $SHOW_USERS_AMOUNT = "N" "Y" - в выборке будет присутствовать поле ("USERS") с количеством * пользователей в каждой группе; "N" - в выборке не будет поля с * количеством пользователей в каждой группе (по умолчанию); * * * * @return CDBResult * * * <h4>Example</h4> * <pre> * <? * $filter = Array * ( * "ID" => "1 | 2", * "TIMESTAMP_1" => "04.02.2004", // в формате текущего сайта * "TIMESTAMP_2" => "04.02.2005", * "ACTIVE" => "Y", * "NAME" => "Техподдержка", * "DESCRITION" => "специальная | поддержка", * "USERS_1" => "2", // от 2 пользователей * "USERS_2" => "10" // до 10 пользователей * ); * $rsGroups = <b>CGroup::GetList</b>(($by="c_sort"), ($order="desc"), $filter); // выбираем группы * $is_filtered = $rsGroups->is_filtered; // отфильтрована ли выборка ? * $rsGroups->NavStart(50); // разбиваем постранично по 50 записей * echo $rsGroups->NavPrint(GetMessage("PAGES")); // печатаем постраничную навигацию * while($rsGroups->NavNext(true, "f_")) : * echo "[".$f_ID."] ".$f_NAME." ".$f_DESCRIPTION."<br>"; * endwhile; * ?> * * Фильтровать можно по полю "STRING_ID" - символьному идентификатору группы. Например: * * // Возвращает группу по символьному идентификатору * function GetGroupByCode ($code) * { * $rsGroups = CGroup::GetList ($by = "c_sort", $order = "asc", Array ("STRING_ID" => $code)); * return $rsGroups->Fetch(); * } * * $rsGroups = CGroup::GetList($by = "c_sort", $order = "asc", array("STRING_ID"=>'groupe code|groupe code|groupe code')); * if(intval($rsGroups->SelectedRowsCount()) > 0) * { * while($arGroups = $rsGroups->Fetch()) * { * $arUsersGroups[] = $arGroups; * } * } * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cgroup/index.php#flds">Поля CGroup</a> </li> <li> * <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cgroup/getbyid.php">CGroup::GetByID</a> </li> </ul></b<a * name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/main/reference/cgroup/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter = array(), $SHOW_USERS_AMOUNT = "N") { global $DB; $err_mess = CGroup::err_mess() . "<br>Function: GetList<br>Line: "; $arSqlSearch = $arSqlSearch_h = array(); $strSqlSearch_h = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || "{$val}" == "NOT_REF") { continue; } } $key = strtoupper($key); $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); switch ($key) { case "ID": $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "N" ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("G.ID", $val, $match); break; case "TIMESTAMP_1": $arSqlSearch[] = "G.TIMESTAMP_X >= FROM_UNIXTIME('" . MkDateTime(FmtDate($val, "D.M.Y"), "d.m.Y") . "')"; break; case "TIMESTAMP_2": $arSqlSearch[] = "G.TIMESTAMP_X <= FROM_UNIXTIME('" . MkDateTime(FmtDate($val, "D.M.Y") . " 23:59:59", "d.m.Y") . "')"; break; case "ACTIVE": $arSqlSearch[] = $val == "Y" ? "G.ACTIVE='Y'" : "G.ACTIVE='N'"; break; case "ADMIN": if (COption::GetOptionString("main", "controller_member", "N") == "Y" && COption::GetOptionString("main", "~controller_limited_admin", "N") == "Y") { if ($val == "Y") { $arSqlSearch[] = "G.ID=0"; } break; } else { $arSqlSearch[] = $val == "Y" ? "G.ID=1" : "G.ID>1"; } break; case "NAME": $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "Y" ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.NAME", $val, $match); break; case "STRING_ID": $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "N" ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("G.STRING_ID", $val, $match); break; case "DESCRIPTION": $match = $match_value_set && $arFilter[$key . "_EXACT_MATCH"] == "Y" ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.DESCRIPTION", $val, $match); break; case "USERS_1": $SHOW_USERS_AMOUNT = "Y"; $arSqlSearch_h[] = "USERS>=" . intval($val); break; case "USERS_2": $SHOW_USERS_AMOUNT = "Y"; $arSqlSearch_h[] = "USERS<=" . intval($val); break; case "ANONYMOUS": if ($val == 'Y' || $val == 'N') { $arSqlSearch[] = "G.ANONYMOUS='" . $val . "'"; } break; } } foreach ($arSqlSearch_h as $condition) { $strSqlSearch_h .= " and (" . $condition . ") "; } } if (strtolower($by) == "id") { $strSqlOrder = " ORDER BY G.ID "; } elseif (strtolower($by) == "active") { $strSqlOrder = " ORDER BY G.ACTIVE "; } elseif (strtolower($by) == "timestamp_x") { $strSqlOrder = " ORDER BY G.TIMESTAMP_X "; } elseif (strtolower($by) == "c_sort") { $strSqlOrder = " ORDER BY G.C_SORT "; } elseif (strtolower($by) == "sort") { $strSqlOrder = " ORDER BY G.C_SORT, G.NAME, G.ID "; } elseif (strtolower($by) == "name") { $strSqlOrder = " ORDER BY G.NAME "; } elseif (strtolower($by) == "string_id") { $strSqlOrder = " ORDER BY G.STRING_ID "; } elseif (strtolower($by) == "description") { $strSqlOrder = " ORDER BY G.DESCRIPTION "; } elseif (strtolower($by) == "anonymous") { $strSqlOrder = " ORDER BY G.ANONYMOUS "; } elseif (strtolower($by) == "dropdown") { $strSqlOrder = " ORDER BY C_SORT, NAME "; } elseif (strtolower($by) == "users") { $strSqlOrder = " ORDER BY USERS "; $SHOW_USERS_AMOUNT = "Y"; } else { $strSqlOrder = " ORDER BY G.C_SORT "; $by = "c_sort"; } if (strtolower($order) == "desc") { $strSqlOrder .= " desc "; $order = "desc"; } else { $strSqlOrder .= " asc "; $order = "asc"; } $str_USERS = $str_TABLE = ""; if ($SHOW_USERS_AMOUNT == "Y") { $str_USERS = "count(distinct U.USER_ID)\t\t\t\t\t\tUSERS,"; $str_TABLE = "LEFT JOIN b_user_group U ON (U.GROUP_ID=G.ID AND ((U.DATE_ACTIVE_FROM IS NULL) OR (U.DATE_ACTIVE_FROM <= " . $DB->CurrentTimeFunction() . ")) AND ((U.DATE_ACTIVE_TO IS NULL) OR (U.DATE_ACTIVE_TO >= " . $DB->CurrentTimeFunction() . ")))"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\tG.ID, G.ACTIVE, G.C_SORT, G.ANONYMOUS, G.NAME, G.DESCRIPTION, G.STRING_ID,\n\t\t\t\t" . $str_USERS . "\n\t\t\t\tG.ID\t\t\t\t\t\t\t\t\t\tREFERENCE_ID,\n\t\t\t\tconcat(G.NAME, ' [', G.ID, ']')\t\t\t\t\tREFERENCE,\n\t\t\t\t" . $DB->DateToCharFunction("G.TIMESTAMP_X") . "\tTIMESTAMP_X\n\t\t\tFROM\n\t\t\t\tb_group G\n\t\t\t" . $str_TABLE . "\n\t\t\tWHERE\n\t\t\t" . $strSqlSearch . "\n\t\t\tGROUP BY\n\t\t\t\tG.ID, G.ACTIVE, G.C_SORT, G.TIMESTAMP_X, G.ANONYMOUS, G.NAME, G.STRING_ID, G.DESCRIPTION\n\t\t\tHAVING\n\t\t\t\t1=1\n\t\t\t\t" . $strSqlSearch_h . "\n\t\t\t" . $strSqlOrder; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $res->is_filtered = IsFiltered($strSqlSearch) || strlen($strSqlSearch_h) > 0; return $res; }
/** * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#session">сессий</a> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителей</a>, проявивших активность (совершивших <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хит</a>) на сайте за определённый интервал времени.</p> * * * * * @param function $GetList Ссылка на переменную, которая после выполнения функции будет * содержать количество <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#online">посетителей в online</a>. * * * * @param (&$guest_coun $t Ссылка на переменную, которая после выполнения функции будет * содержать количество сессий посетителей в online. * * * * @param &$session_coun $t * * * * @param $arOrde $r = Array() * * * * @param $arFilte $r = Array()) * * * * @return CDBResult * * * <h4>Example</h4> * <pre> * <? * // получим список записей * $rs = <b>CUserOnline::GetList</b>($guest_counter, $session_counter); * * echo "Количество посетителей в онлайн: ".$guest_counter; * echo "Количество сессий в онлайн: ".$session_counter; * * // выведем все записи * while ($ar = $rs->Fetch()) * { * echo "<pre>"; print_r($ar); echo "</pre>"; * } * ?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://www.1c-bitrix.ru/user_help/statistic/users_online.php">Отчет "Кто на сайте"</a> * </li> </ul><a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/cuseronline/getlist.php * @author Bitrix */ public static function GetList(&$guest_count, &$session_count, $arOrder=Array(), $arFilter=Array()) { $DB = CDatabase::GetModuleConnection('statistic'); $err_mess = "File: ".__FILE__."<br>Line: "; $interval = intval(COption::GetOptionString("statistic", "ONLINE_INTERVAL")); $arSqlSearch = Array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if(is_array($val)) { if(count($val) <= 0) continue; } else { if( (strlen($val) <= 0) || ($val === "NOT_REF") ) continue; } $match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch($key) { case "INTERVAL": $interval = intval($val); break; case "ID": case "GUEST_ID": case "ADV_ID": case "STOP_LIST_ID": case "USER_ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("S.".$key,$val,$match); break; case "COUNTRY_ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("S.COUNTRY_ID",$val,$match); break; case "IP": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.IP_LAST",$val,$match,array(".")); break; case "REGISTERED": $arSqlSearch[] = ($val=="Y") ? "S.USER_ID>0" : "(S.USER_ID<=0 or S.USER_ID is null)"; break; case "HITS1": $arSqlSearch[] = "S.HITS>='".intval($val)."'"; break; case "HITS2": $arSqlSearch[] = "S.HITS<='".intval($val)."'"; break; case "ADV": if ($val=="Y") $arSqlSearch[] = "(S.ADV_ID>0 and S.ADV_ID is not null)"; elseif ($val=="N") $arSqlSearch[] = "(S.ADV_ID<=0 or S.ADV_ID is null)"; break; case "REFERER1": case "REFERER2": case "REFERER3": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.".$key, $val, $match); break; case "STOP": $arSqlSearch[] = ($val=="Y") ? "S.STOP_LIST_ID>0" : "(S.STOP_LIST_ID<=0 or S.STOP_LIST_ID is null)"; break; case "COUNTRY": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("C.NAME", $val, $match); $from2 = "INNER JOIN b_stat_country C ON (C.ID = S.COUNTRY_ID)"; break; case "LAST_SITE_ID": $arSqlSearch[] = GetFilterQuery("S.".$key, $val, "N"); break; case "URL_LAST": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.".$key,$val,$match,array("/","\\",".","?","#",":")); break; case "FIRST_URL_FROM": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.".$key,$val,$match,array("/","\\",".","?","#",":")); break; case "ADV_BACK": case "NEW_GUEST": case "URL_LAST_404": case "URL_TO_404": case "USER_AUTH": $arSqlSearch[] = ($val=="Y") ? "S.".$key."='Y'" : "S.".$key."='N'"; break; case "FAVORITES": $arSqlSearch[] = ($val=="Y") ? "G.".$key."='Y'" : "G.".$key."='N'"; break; case "USER": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = "ifnull(S.USER_ID,0)>0"; $arSqlSearch[] = GetFilterQuery("S.USER_ID,A.LOGIN,A.LAST_NAME,A.NAME", $val, $match); $from1 = "LEFT JOIN b_user A ON (A.ID = S.USER_ID)"; $select = " , A.LOGIN, concat(ifnull(A.NAME,''),' ',ifnull(A.LAST_NAME,'')) USER_NAME"; break; } } } if (!is_array($arOrder)) $arOrder = Array("s_id" => "desc"); foreach($arOrder as $by=>$order) { $by = strtolower($by); $order = strtolower($order); if ($order!="asc") $order = "desc"; } if ($by == "s_id") $strSqlOrder = "ORDER BY S.ID"; elseif ($by == "s_session_time") $strSqlOrder = "ORDER BY SESSION_TIME"; elseif ($by == "s_date_first") $strSqlOrder = "ORDER BY S.DATE_FIRST"; elseif ($by == "s_date_last") $strSqlOrder = "ORDER BY S.DATE_LAST"; elseif ($by == "s_user_id") $strSqlOrder = "ORDER BY S.USER_ID"; elseif ($by == "s_guest_id") $strSqlOrder = "ORDER BY S.GUEST_ID"; elseif ($by == "s_ip") $strSqlOrder = "ORDER BY S.IP_LAST"; elseif ($by == "s_hits") $strSqlOrder = "ORDER BY S.HITS "; elseif ($by == "s_adv_id") $strSqlOrder = "ORDER BY S.ADV_ID "; elseif ($by == "s_country_id") $strSqlOrder = "ORDER BY S.COUNTRY_ID "; elseif ($by == "s_url_last") $strSqlOrder = "ORDER BY S.URL_LAST "; elseif ($by == "s_url_to") $strSqlOrder = "ORDER BY S.URL_TO "; else { $by = "s_id"; $strSqlOrder = "ORDER BY S.ID"; } if ($order!="asc") { $strSqlOrder .= " desc "; $order="desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = " SELECT S.ID, S.ADV_ID, S.REFERER1, S.REFERER2, S.REFERER3, S.ADV_BACK, S.LAST_SITE_ID, S.URL_LAST, S.URL_LAST_404, S.IP_LAST, S.HITS, S.USER_AUTH, S.STOP_LIST_ID, S.GUEST_ID, G.FAVORITES, G.LAST_USER_ID, UNIX_TIMESTAMP(S.DATE_LAST) - UNIX_TIMESTAMP(S.DATE_FIRST) SESSION_TIME, ".$DB->DateToCharFunction("S.DATE_LAST")." DATE_LAST, if(G.SESSIONS<=1,'Y','N') NEW_GUEST, G.FIRST_URL_FROM, G.FIRST_SITE_ID, S.URL_FROM, S.COUNTRY_ID, C.NAME COUNTRY_NAME, CITY.REGION REGION_NAME, S.CITY_ID, CITY.NAME CITY_NAME FROM b_stat_session S INNER JOIN b_stat_guest G ON (G.ID = S.GUEST_ID) INNER JOIN b_stat_country C ON (C.ID = S.COUNTRY_ID) ".$from1." LEFT JOIN b_stat_city CITY ON (CITY.ID = S.CITY_ID) WHERE S.DATE_STAT >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) and S.DATE_LAST > DATE_ADD(now(), INTERVAL - ".$interval." SECOND) and ".$strSqlSearch." ".$strSqlOrder." "; $arr = array(); $arrG = array(); $rs = $DB->Query($strSql, false, $err_mess.__LINE__); while($ar = $rs->Fetch()) { $arr[] = $ar; $arrG[$ar["GUEST_ID"]] = $ar["GUEST_ID"]; } $guest_count = count($arrG); $session_count = count($arr); $rs = new CDBResult; $rs->InitFromArray($arr); return $rs; }
/** * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителей</a>. Число выводимых строк определяется в поле <b>Максимальное кол-во показываемых записей в таблицах</b> в <a href="http://dev.1c-bitrix.ru/user_help/statistic/settings.php" >настройках модуля</a> Веб-аналитика.</p> * * * @param string &$by = "s_id" Поле для сортировки. Возможные значения: <ul> <li> <b>s_id</b> - ID хита; </li> * <li> <b>s_site_id</b> - ID сайта; </li> <li> <b>s_session_id</b> - ID <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#session">сессии</a>; </li> <li> <b>s_date_hit</b> - * время хита; </li> <li> <b>s_user_id</b> - ID <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user">пользователя</a> под которым * был авторизован посетитель (в момент хита или до того); </li> <li> * <b>s_guest_id</b> - ID <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителя</a>; * </li> <li> <b>s_ip</b> - <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#ip">IP адрес</a> * посетителя; </li> <li> <b>s_url</b> - страница хита; </li> <li> <b>s_country_id</b> - ID * страны посетителя. </li> </ul> * * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul> * * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве * допустимы следующие ключи: <ul> <li> <b>ID</b>* - ID хита; </li> <li> <b>ID_EXACT_MATCH</b> - * если значение равно "N", то при фильтрации по <b>ID</b> будет искаться * вхождение; </li> <li> <b>GUEST_ID</b>* - ID посетителя; </li> <li> <b>GUEST_ID_EXACT_MATCH</b> - * если значение равно "N", то при фильтрации по <b>GUEST_ID</b> будет * искаться вхождение; </li> <li> <b>NEW_GUEST</b> - флаг "новый посетитель", * возможные значения: <ul> <li> <b>Y</b> - посетитель впервые на портале; </li> * <li> <b>N</b> - посетитель уже посещал ранее портал. </li> </ul> </li> <li> * <b>SESSION_ID</b>* - ID сессии; </li> <li> <b>SESSION_ID_EXACT_MATCH</b> - если значение равно * "N", то при фильтрации по <b>SESSION_ID</b> будет искаться вхождение; </li> <li> * <b>STOP_LIST_ID</b>* - ID записи <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#stop_list">стоп-листа</a> под которую * попал посетитель (если это имело место быть); </li> <li> * <b>STOP_LIST_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>STOP_LIST_ID</b> будет искаться вхождение; </li> <li> <b>URL</b>* - страница хита; * </li> <li> <b>URL_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>URL</b> будет искаться точное совпадение; </li> <li> <b>URL_404</b> - была ли <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a> на странице хита <ul> * <li> <b>Y</b> - была; </li> <li> <b>N</b> - не было. </li> </ul> </li> <li> <b>USER</b>* - ID, логин, * имя, фамилия пользователя под которым был авторизован посетитель * в момент хита или до него; </li> <li> <b>USER_EXACT_MATCH</b> - если значение равно * "Y", то при фильтрации по <b>USER</b> будет искаться точное совпадение; * </li> <li> <b>REGISTERED</b> - флаг "был ли авторизован посетитель в момент * хита или до этого", возможные значения: <ul> <li> <b>Y</b> - был; </li> <li> <b>N</b> * - не был. </li> </ul> </li> <li> <b>DATE_1</b> - начальное значение интервала даты * хита; </li> <li> <b>DATE_2</b> - конечное значение интервала даты хита; </li> <li> * <b>IP</b>* - IP адрес посетителя в момент хита; </li> <li> <b>IP_EXACT_MATCH</b> - если * значение равно "Y", то при фильтрации по <b>IP</b> будет искаться * точное совпадение; </li> <li> <b>USER_AGENT</b>* - <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user_agent">UserAgent</a> посетителя в * момент хита; </li> <li> <b>USER_AGENT_EXACT_MATCH</b> - если значение равно "Y", то при * фильтрации по <b>USER_AGENT</b> будет искаться точное совпадение; </li> <li> * <b>COUNTRY_ID</b>* - ID страны посетителя в момент хита; </li> <li> * <b>COUNTRY_ID_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>COUNTRY_ID</b> будет искаться точное совпадение; </li> <li> <b>COUNTRY</b>* - * название страны; </li> <li> <b>COUNTRY_EXACT_MATCH</b> - если значение равно "Y", то * при фильтрации по <b>COUNTRY</b> будет искаться точное совпадение; </li> * <li> <b>COOKIE</b>* - содержимое <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#cookie">Cookie</a> в момент хита; </li> <li> * <b>COOKIE_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>COOKIE</b> будет искаться точное совпадение; </li> <li> <b>STOP</b> - <ul> <li> <b>Y</b> * - был; </li> <li> <b>N</b> - не был. </li> </ul> </li> <li> <b>SITE_ID</b>* - ID сайта; </li> <li> * <b>SITE_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>SITE_ID</b> будет искаться вхождение. </li> </ul> <br> * - допускается <a * href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a> * * @param bool &$is_filtered Флаг отфильтрованности списка хитов. Если значение равно "true", то * список был отфильтрован. * * @return CDBResult * * <h4>Example</h4> * <pre> * <? * // выберем хиты сессии #1056 * $arFilter = array( * "SESSION_ID" => 1056 * ); * * // получим список записей * $rs = <b>CHit::GetList</b>( * ($by = "s_id"), * ($order = "desc"), * $arFilter, * $is_filtered * ); * * // выведем все записи * while ($ar = $rs->Fetch()) * { * echo "<pre>"; print_r($ar); echo "</pre>"; * } * ?> * </pre> * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">Термин "Хит"</a> </li> </ul> <a * name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/chit/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": case "GUEST_ID": case "SESSION_ID": case "STOP_LIST_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match); break; case "URL": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.URL", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "URL_404": case "NEW_GUEST": $arSqlSearch[] = $val == "Y" ? "H." . $key . "='Y'" : "H." . $key . "='N'"; break; case "REGISTERED": $arSqlSearch[] = $val == "Y" ? "H.USER_ID>0" : "(H.USER_ID<=0 or H.USER_ID is null)"; break; case "DATE_1": if (CheckDateTime($val)) { $arSqlSearch[] = "H.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE_2": if (CheckDateTime($val)) { $arSqlSearch[] = "H.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); } break; case "IP": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.IP", $val, $match, array(".")); break; case "USER_AGENT": case "COUNTRY_ID": case "CITY_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match); break; case "COOKIE": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.COOKIES", $val, $match); break; case "USER": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = $DB->IsNull("H.USER_ID", "0") . ">0"; $arSqlSearch[] = GetFilterQuery("H.USER_ID,A.LOGIN,A.LAST_NAME,A.NAME", $val, $match); $select = ", A.LOGIN, " . $DB->Concat($DB->IsNull("A.NAME", "''"), "' '", $DB->IsNull("A.LAST_NAME", "''")) . " USER_NAME"; $from1 = "LEFT JOIN b_user A ON (A.ID = H.USER_ID)"; break; case "COUNTRY": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("C.NAME", $val, $match); $from2 = "INNER JOIN b_stat_country C ON (C.ID = H.COUNTRY_ID)"; break; case "REGION": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("CITY.REGION", $val, $match); break; case "CITY": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("CITY.NAME", $val, $match); break; case "STOP": $arSqlSearch[] = $val == "Y" ? "H.STOP_LIST_ID>0" : "(H.STOP_LIST_ID<=0 or H.STOP_LIST_ID is null)"; break; case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("H.SITE_ID", $val, $match); break; } } } if ($by == "s_id") { $strSqlOrder = "ORDER BY H.ID"; } elseif ($by == "s_site_id") { $strSqlOrder = "ORDER BY H.SITE_ID"; } elseif ($by == "s_session_id") { $strSqlOrder = "ORDER BY H.SESSION_ID"; } elseif ($by == "s_date_hit") { $strSqlOrder = "ORDER BY H.DATE_HIT"; } elseif ($by == "s_user_id") { $strSqlOrder = "ORDER BY H.USER_ID"; } elseif ($by == "s_guest_id") { $strSqlOrder = "ORDER BY H.GUEST_ID"; } elseif ($by == "s_ip") { $strSqlOrder = "ORDER BY H.IP"; } elseif ($by == "s_url") { $strSqlOrder = "ORDER BY H.URL "; } elseif ($by == "s_country_id") { $strSqlOrder = "ORDER BY H.COUNTRY_ID "; } elseif ($by == "s_region_name") { $strSqlOrder = "ORDER BY CITY.REGION "; } elseif ($by == "s_city_id") { $strSqlOrder = "ORDER BY H.CITY_ID "; } else { $by = "s_id"; $strSqlOrder = "ORDER BY H.ID"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT /*TOP*/\n\t\t\t\tH.ID,\n\t\t\t\tH.SESSION_ID,\n\t\t\t\tH.GUEST_ID,\n\t\t\t\tH.NEW_GUEST,\n\t\t\t\tH.USER_ID,\n\t\t\t\tH.USER_AUTH,\n\t\t\t\tH.URL,\n\t\t\t\tH.URL_404,\n\t\t\t\tH.URL_FROM,\n\t\t\t\tH.IP,\n\t\t\t\tH.METHOD,\n\t\t\t\tH.COOKIES,\n\t\t\t\tH.USER_AGENT,\n\t\t\t\tH.STOP_LIST_ID,\n\t\t\t\tH.COUNTRY_ID,\n\t\t\t\tH.CITY_ID,\n\t\t\t\tCITY.REGION REGION_NAME,\n\t\t\t\tCITY.NAME CITY_NAME,\n\t\t\t\tH.SITE_ID,\n\t\t\t\t" . $DB->DateToCharFunction("H.DATE_HIT") . " DATE_HIT\n\t\t\t\t" . $select . "\n\t\t\tFROM\n\t\t\t\tb_stat_hit H\n\t\t\t\tLEFT JOIN b_stat_city CITY ON (CITY.ID = H.CITY_ID)\n\t\t\t" . $from1 . "\n\t\t\t" . $from2 . "\n\t\t\tWHERE\n\t\t\t" . $strSqlSearch . "\n\t\t\t" . $strSqlOrder . "\n\t\t"; $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch); return $res; }
/** * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителей</a>.</p> * * * * * @param string &$by = "s_last_date" Поле для сортировки. Возможные значения: <ul> <li> <b>s_id</b> - ID * посетителя; </li> <li> <b>s_events</b> - суммарное кол-во <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#event">событий</a> сгенерированных * посетителем; </li> <li> <b>s_sessions</b> - суммарное кол-во <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#session">сессий</a> посетителя; </li> <li> * <b>s_hits</b> - суммарное кол-во <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a> посетителя; </li> <li> * <b>s_first_site_id</b> - ID сайта на который впервые пришел посетитель; </li> <li> * <b>s_first_date</b> - время первого захода на сайт; </li> <li> <b>s_first_url_from</b> - * страница с которой впервые пришел посетитель; </li> <li> <b>s_first_url_to</b> - * страница куда впервые пришел посетитель; </li> <li> <b>s_first_adv_id</b> - ID <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv">рекламной кампании</a> первого * захода; </li> <li> <b>s_last_site_id</b> - ID сайта последнего захода посетителя; * </li> <li> <b>s_last_date</b> - время последнего захода поестителя; </li> <li> * <b>s_last_user_id</b> - ID пользователя; </li> <li> <b>s_last_url_last</b> - последняя * страница на которую заходил посетитель; </li> <li> <b>s_last_user_agent</b> - <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user_agent">UserAgent</a> посетителя на * последнем заходе; </li> <li> <b>s_last_ip</b> - <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#ip">IP адрес</a> посетителя на * последнем заходе; </li> <li> <b>s_last_adv_id</b> - ID рекламной кампании на * последнем заходе; </li> <li> <b>s_last_country_id</b> - ID страны посетителя на * последнем заходе. </li> </ul> * * * * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul> * * * * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве * допустимы следующие ключи: <ul> <li> <b>ID</b>* - ID посетителя; </li> <li> * <b>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b> * будет искаться вхождение; </li> <li> <b>REGISTERED</b> - был ли посетитель * когда либо авторизован на сайте, возможные значения: <ul> <li> <b>Y</b> - * был; </li> <li> <b>N</b> - не был. </li> </ul> </li> <li> <b>FIRST_DATE1</b> - начальное * значение интервала для поля "дата первого захода на сайт"; </li> <li> * <b>FIRST_DATE2</b> - конечное значение интервала для поля "дата первого * захода на сайт"; </li> <li> <b>LAST_DATE1</b> - начальное значение интервала * для поля "дата последнего захода на сайт"; </li> <li> <b>LAST_DATE2</b> - * конечное значение интервала для поля "дата первого захода на * сайт"; </li> <li> <b>PERIOD_DATE1</b> - начальное значение интервала для даты * посещения посетителем сайта; </li> <li> <b>PERIOD_DATE2</b> - конечно значение * интервала для даты посещения посетителем сайта; </li> <li> <b>SITE_ID</b>* - ID * сайта первого либо последнего захода; </li> <li> <b>SITE_ID_EXACT_MATCH</b> - если * значение равно "N", то при фильтрации по <b>SITE_ID</b> будет искаться * вхождение; </li> <li> <b>FIRST_SITE_ID</b>* - ID сайта первого захода; </li> <li> * <b>FIRST_SITE_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>FIRST_SITE_ID</b> будет искаться вхождение; </li> <li> <b>LAST_SITE_ID</b>* - ID сайта * последнего захода; </li> <li> <b>LAST_SITE_ID_EXACT_MATCH</b> - если значение равно * "N", то при фильтрации по <b>LAST_SITE_ID</b> будет искаться вхождение; </li> * <li> <b>URL</b>* - страница откуда впервые пришел посетитель, страница на * которую впервые пришел посетитель и последняя страница * просмотренная посетителем; </li> <li> <b>URL_EXACT_MATCH</b> - если значение * равно "Y", то при фильтрации по <b>URL</b> будет искаться точное * совпадение; </li> <li> <b>URL_404</b> - была ли <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a> на первой странице * или на последней странице посещенной посетителем, возможные * значения: <ul> <li> <b>Y</b> - была; </li> <li> <b>N</b> - не было. </li> </ul> </li> <li> * <b>USER_AGENT</b>* - UserAgent посетителя на последнем заходе; </li> <li> * <b>USER_AGENT_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>USER_AGENT</b> будет искаться точное совпадение; </li> <li> <b>ADV</b> - флаг * "приходил ли посетитель когда либо по рекламной кампании (не * равной NA/NA)", возможные значения: <ul> <li> <b>Y</b> - посетитель приходил * по какой либо рекламной кампании (не равной NA/NA); </li> <li> <b>N</b> - не * приходил никогда ни по одной рекламной кампании (не равной NA/NA). * </li> </ul> </li> <li> <b>ADV_ID</b> - ID рекламной кампании первого либо * последнего захода посетителя (при этом это мог быть как <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv_first">прямой заход</a> так и <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv_back">возврат</a> по рекламной * кампании); </li> <li> <b>REFERER1</b>* - <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv_id">идентификатор</a> referer1 * рекламной кампании первого либо последнего захода посетителя; * </li> <li> <b>REFERER1_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>REFERER1</b> будет искаться точное совпадение; </li> <li> <b>REFERER2</b>* - * идентификатор referer2 рекламной кампании первого либо последнего * захода посетителя; </li> <li> <b>REFERER2_EXACT_MATCH</b> - если значение равно "Y", * то при фильтрации по <b>REFERER2</b> будет искаться точное совпадение; * </li> <li> <b>REFERER3</b>* - <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#adv_referer3">дополнительный * параметр</a> referer3 рекламной кампании первого либо последнего * захода посетителя; </li> <li> <b>REFERER3_EXACT_MATCH</b> - если значение равно "Y", * то при фильтрации по <b>REFERER3</b> будет искаться точное совпадение; * </li> <li> <b>EVENTS1</b> - начальное значение для интервала кол-ва событий * сгенерированных посетителем; </li> <li> <b>EVENTS2</b> - конечное значение * для интервала кол-ва событий сгенерированных посетителем; </li> <li> * <b>SESS1</b> - начальное значение для интервала кол-ва сессий * сгенерированных посетителем; </li> <li> <b>SESS2</b> - конечное значение * для интервала кол-ва сессий сгенерированных посетителем; </li> <li> * <b>HITS1</b> - начальное значение для интервала кол-ва хитов * сгенерированных посетителем; </li> <li> <b>HITS2</b> - конечное значение * для интервала кол-ва хитов сгенерированных посетителем; </li> <li> * <b>FAVORITES</b> - флаг "добавлял ли посетитель сайт в "<a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#favorites">Избранное</a>"", возможные * значения: <ul> <li> <b>Y</b> - добавлял; </li> <li> <b>N</b> - не добавлял. </li> </ul> </li> * <li> <b>IP</b> - IP адрес посетителя сайта в последнем заходе; </li> <li> * <b>LANG</b> - <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#browser_lang">языки * установленные в настройках браузера</a> посетителя в последнем * заходе; </li> <li> <b>COUNTRY_ID</b>* - ID страны (двухсимвольный идентификатор) * посетителя в последнем заходе; </li> <li> <b>COUNTRY_ID_EXACT_MATCH</b> - если * значение равно "Y", то при фильтрации по <b>COUNTRY_ID</b> будет искаться * точное совпадение; </li> <li> <b>COUNTRY</b>* - название страны; </li> <li> * <b>COUNTRY_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>COUNTRY</b> будет искаться точное совпадение; </li> <li> <b>USER</b>* - ID, логин, * имя, фамилия <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user">пользователя</a>, * под которыми посетитель последний раз был авторизован; </li> <li> * <b>USER_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по <b>USER</b> * будет искаться точное совпадение; </li> <li> <b>USER_ID</b>* - ID пользователя, * под которым посетитель последний раз был авторизован; </li> <li> * <b>USER_ID_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>USER_ID</b> будет искаться точное совпадение. </li> </ul> <br> * - * допускается <a href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная * логика</a> * * * * @param bool &$is_filtered Флаг отфильтрованности списка посетителей. Если значение равно * "true", то список был отфильтрован. * * * * @return CDBResult * * * <h4>Example</h4> * <pre> * <? * // выберем только тех посетителей UserAgent которых содержит "Opera" * $arFilter = array( * "USER_AGENT" => "Opera" * ); * * // получим список записей * $rs = <b>CGuest::GetList</b>( * ($by = "s_id"), * ($order = "desc"), * $arFilter, * $is_filtered * ); * * // выведем все записи * while ($ar = $rs->Fetch()) * { * echo "<pre>"; print_r($ar); echo "</pre>"; * } * ?> * </pre> * * * * <h4>See Also</h4> * <ul><li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">Термин "Посетитель"</a> * </li></ul><a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/cguest/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter=Array(), &$is_filtered) { $err_mess = "File: ".__FILE__."<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = Array(); $strSqlSearch = ""; $bGroup = false; $arrGroup = array( "G.ID" => true, "G.C_EVENTS" => true, "G.FIRST_SITE_ID" => true, "G.LAST_SITE_ID" => true, "G.SESSIONS" => true, "G.HITS" => true, "G.FAVORITES" => true, "G.FIRST_URL_FROM" => true, "G.FIRST_URL_TO" => true, "G.FIRST_URL_TO_404" => true, "G.FIRST_ADV_ID" => true, "G.FIRST_REFERER1" => true, "G.FIRST_REFERER2" => true, "G.FIRST_REFERER3" => true, "G.LAST_ADV_ID" => true, "G.LAST_ADV_BACK" => true, "G.LAST_REFERER1" => true, "G.LAST_REFERER2" => true, "G.LAST_REFERER3" => true, "G.LAST_USER_ID" => true, "G.LAST_USER_AUTH" => true, "G.LAST_URL_LAST" => true, "G.LAST_URL_LAST_404" => true, "G.LAST_USER_AGENT" => true, "G.LAST_IP" => true, "G.LAST_LANGUAGE" => true, "G.LAST_COUNTRY_ID" => true, "G.LAST_CITY_ID" => true, "G.FIRST_DATE" => true, "G.LAST_DATE" => true, "G.FIRST_SESSION_ID" => true, "G.LAST_SESSION_ID" => true, "CITY.REGION" => true, "CITY.NAME" => true, ); if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if(is_array($val)) { if(count($val) <= 0) continue; } else { if( (strlen($val) <= 0) || ($val === "NOT_REF") ) continue; } $match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch($key) { case "ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("G.ID",$val,$match); break; case "REGISTERED": if ($val=="Y") $arSqlSearch[] = "G.LAST_USER_ID>0 and G.LAST_USER_ID is not null"; elseif ($val=="N") $arSqlSearch[] = "G.LAST_USER_ID<=0 or G.LAST_USER_ID is null"; break; case "FIRST_DATE1": if (CheckDateTime($val)) $arSqlSearch[] = "G.FIRST_DATE >= ".$DB->CharToDateFunction($val, "SHORT"); break; case "FIRST_DATE2": if (CheckDateTime($val)) $arSqlSearch[] = "G.FIRST_DATE < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); break; case "LAST_DATE1": if (CheckDateTime($val)) $arSqlSearch[] = "G.LAST_DATE >= ".$DB->CharToDateFunction($val, "SHORT"); break; case "LAST_DATE2": if (CheckDateTime($val)) $arSqlSearch[] = "G.LAST_DATE < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); break; case "PERIOD_DATE1": ResetFilterLogic(); if (CheckDateTime($val)) { $arSqlSearch[] = "S.DATE_FIRST >= ".$DB->CharToDateFunction($val, "SHORT"); $from0 = " INNER JOIN b_stat_session S ON (S.GUEST_ID = G.ID) "; $select0 = "count(S.ID) as SESS,"; $bGroup = true; } break; case "PERIOD_DATE2": ResetFilterLogic(); if (CheckDateTime($val)) { $arSqlSearch[] = "S.DATE_LAST < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); $from0 = " INNER JOIN b_stat_session S ON (S.GUEST_ID = G.ID) "; $select0 = "count(S.ID) as SESS,"; $bGroup = true; } break; case "SITE_ID": if (is_array($val)) $val = implode(" | ", $val); $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("G.LAST_SITE_ID, G.FIRST_SITE_ID", $val, $match); break; case "LAST_SITE_ID": case "FIRST_SITE_ID": if (is_array($val)) $val = implode(" | ", $val); $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("G.".$key, $val, $match); break; case "URL": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.FIRST_URL_FROM,G.FIRST_URL_TO,G.LAST_URL_LAST", $val, $match, array("/","\\",".","?","#",":")); break; case "URL_404": if ($val=="Y") $arSqlSearch[] = "G.FIRST_URL_TO_404='Y' or G.LAST_URL_LAST_404='Y'"; elseif ($val=="N") $arSqlSearch[] = "G.FIRST_URL_TO_404='N' and G.LAST_URL_LAST_404='N'"; break; case "USER_AGENT": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.LAST_USER_AGENT", $val, $match); break; case "ADV": if ($val=="Y") { $arSqlSearch[] = "( G.FIRST_ADV_ID>0 and G.FIRST_ADV_ID is not null and G.FIRST_REFERER1<>'NA' and G.FIRST_REFERER2<>'NA' or G.LAST_ADV_ID>0 and G.LAST_ADV_ID is not null and G.LAST_REFERER1<>'NA' and G.LAST_REFERER2<>'NA' )"; } elseif ($val=="N") { $arSqlSearch[] = "(( G.FIRST_ADV_ID<=0 or G.FIRST_ADV_ID is null or (G.FIRST_REFERER1='NA' and G.FIRST_REFERER2='NA') ) and ( G.LAST_ADV_ID<=0 or G.LAST_ADV_ID is null or (G.LAST_REFERER1='NA' and G.LAST_REFERER2='NA') ))"; } break; case "ADV_ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("G.FIRST_ADV_ID,G.LAST_ADV_ID", $val, $match); break; case "REFERER1": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.FIRST_REFERER1,G.LAST_REFERER1", $val, $match); break; case "REFERER2": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.FIRST_REFERER2,G.LAST_REFERER2", $val, $match); break; case "REFERER3": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.FIRST_REFERER3,G.LAST_REFERER3", $val, $match); break; case "EVENTS1": $arSqlSearch[] = "G.C_EVENTS>='".intval($val)."'"; break; case "EVENTS2": $arSqlSearch[] = "G.C_EVENTS<='".intval($val)."'"; break; case "SESS1": $arSqlSearch[] = "G.SESSIONS>='".intval($val)."'"; break; case "SESS2": $arSqlSearch[] = "G.SESSIONS<='".intval($val)."'"; break; case "HITS1": $arSqlSearch[] = "G.HITS>='".intval($val)."'"; break; case "HITS2": $arSqlSearch[] = "G.HITS<='".intval($val)."'"; break; case "FAVORITES": if ($val=="Y") $arSqlSearch[] = "G.FAVORITES='Y'"; elseif ($val=="N") $arSqlSearch[] = "G.FAVORITES<>'Y'"; break; case "IP": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.LAST_IP",$val,$match,array(".")); break; case "LANG": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.LAST_LANGUAGE", $val, $match); break; case "COUNTRY_ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.LAST_COUNTRY_ID", $val, $match); break; case "COUNTRY": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("C.NAME", $val, $match); $select1 .= " , C.NAME LAST_COUNTRY_NAME "; $from2 = " LEFT JOIN b_stat_country C ON (C.ID = G.LAST_COUNTRY_ID) "; $arrGroup["C.NAME"] = true; $bGroup = true; break; case "REGION": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("CITY.REGION", $val, $match); break; case "CITY_ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("G.LAST_CITY_ID", $val, $match); break; case "CITY": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("CITY.NAME", $val, $match); break; case "USER": if(COption::GetOptionString("statistic", "dbnode_id") <= 0) { $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = $DB->IsNull("G.LAST_USER_ID","0").">0"; $arSqlSearch[] = GetFilterQuery("G.LAST_USER_ID,A.LOGIN,A.LAST_NAME,A.NAME", $val, $match); $select1 .= ", ".$DB->Concat($DB->IsNull("A.NAME","''"), "' '", $DB->IsNull("A.LAST_NAME","''"))." USER_NAME, A.LOGIN"; $from1 = "LEFT JOIN b_user A ON (A.ID = G.LAST_USER_ID) "; $arrGroup["A.NAME"] = true; $arrGroup["A.LAST_NAME"] = true; $arrGroup["A.LOGIN"] = true; $bGroup = true; } break; case "USER_ID": if(COption::GetOptionString("statistic", "dbnode_id") <= 0) { $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = $DB->IsNull("G.LAST_USER_ID","0").">0"; $arSqlSearch[] = GetFilterQuery("G.LAST_USER_ID", $val, $match); $select1 .= ", ".$DB->Concat($DB->IsNull("A.NAME","''"), "' '", $DB->IsNull("A.LAST_NAME","''"))." USER_NAME, A.LOGIN"; $from1 = "LEFT JOIN b_user A ON (A.ID = G.LAST_USER_ID) "; $arrGroup["A.NAME"] = true; $arrGroup["A.LAST_NAME"] = true; $arrGroup["A.LOGIN"] = true; $bGroup = true; } break; } } } if ($by == "s_id") $strSqlOrder = "ORDER BY G.ID"; elseif ($by == "s_first_site_id") $strSqlOrder = "ORDER BY G.FIRST_SITE_ID"; elseif ($by == "s_last_site_id") $strSqlOrder = "ORDER BY G.LAST_SITE_ID"; elseif ($by == "s_events") $strSqlOrder = "ORDER BY G.C_EVENTS"; elseif ($by == "s_sessions") $strSqlOrder = "ORDER BY G.SESSIONS"; elseif ($by == "s_hits") $strSqlOrder = "ORDER BY G.HITS"; elseif ($by == "s_first_date") $strSqlOrder = "ORDER BY G.FIRST_DATE"; elseif ($by == "s_first_url_from") $strSqlOrder = "ORDER BY G.FIRST_URL_FROM"; elseif ($by == "s_first_url_to") $strSqlOrder = "ORDER BY G.FIRST_URL_TO"; elseif ($by == "s_first_adv_id") $strSqlOrder = "ORDER BY G.FIRST_ADV_ID"; elseif ($by == "s_last_date") $strSqlOrder = "ORDER BY ".CStatistics::DBFirstDate("G.LAST_DATE"); elseif ($by == "s_last_user_id") $strSqlOrder = "ORDER BY G.LAST_USER_ID"; elseif ($by == "s_last_url_last") $strSqlOrder = "ORDER BY G.LAST_URL_LAST"; elseif ($by == "s_last_user_agent") $strSqlOrder = "ORDER BY G.LAST_USER_AGENT"; elseif ($by == "s_last_ip") $strSqlOrder = "ORDER BY G.LAST_IP"; elseif ($by == "s_last_adv_id") $strSqlOrder = "ORDER BY G.LAST_ADV_ID"; elseif ($by == "s_last_country_id") $strSqlOrder = "ORDER BY G.LAST_COUNTRY_ID"; elseif ($by == "s_last_region_name") $strSqlOrder = "ORDER BY CITY.REGION"; elseif ($by == "s_last_city_id") $strSqlOrder = "ORDER BY G.LAST_CITY_ID"; else { $by = "s_last_date"; $strSqlOrder = "ORDER BY ".CStatistics::DBFirstDate("G.LAST_DATE"); } if ($order!="asc") { $strSqlOrder .= " desc "; $order="desc"; } if($bGroup) { $strSqlGroup = "GROUP BY ".implode(", ", array_keys($arrGroup)); } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = " SELECT /*TOP*/ ".$select0." G.ID, G.FIRST_SITE_ID, G.FIRST_SESSION_ID, G.LAST_SESSION_ID, G.LAST_SITE_ID, G.C_EVENTS, G.SESSIONS, G.HITS, G.FAVORITES, G.FIRST_URL_FROM, G.FIRST_URL_TO, G.FIRST_URL_TO_404, G.FIRST_ADV_ID, G.FIRST_REFERER1, G.FIRST_REFERER2, G.FIRST_REFERER3, G.LAST_ADV_ID, G.LAST_ADV_BACK, G.LAST_REFERER1, G.LAST_REFERER2, G.LAST_REFERER3, G.LAST_USER_ID, G.LAST_USER_AUTH, G.LAST_URL_LAST, G.LAST_URL_LAST_404, G.LAST_USER_AGENT, G.LAST_IP, G.LAST_LANGUAGE, G.LAST_COUNTRY_ID, CITY.REGION as LAST_REGION_NAME, G.LAST_CITY_ID, CITY.NAME as LAST_CITY_NAME, ".$DB->DateToCharFunction("G.FIRST_DATE")." FIRST_DATE, ".$DB->DateToCharFunction("G.LAST_DATE")." LAST_DATE ".$select1." FROM b_stat_guest G ".$from0." ".$from1." ".$from2." LEFT JOIN b_stat_city CITY ON (CITY.ID = G.LAST_CITY_ID) WHERE ".$strSqlSearch." ".$strSqlGroup." ".$strSqlOrder." "; $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess.__LINE__); $is_filtered = (IsFiltered($strSqlSearch)); return $res; }
function GetList($arSort = array("SORT" => "ASC"), $arFilter = array()) { /* Filter: "ACTIVE" => Y (default); 'ALL' for full list without activity check; "SITE_ID" => SITE_ID (default); 'ALL' for full list without site check. Syn. SITE; "COMPABILITY" => "N" (default); arOrder for additional check inside this method "SID" => only with this SID. Syn: "ID"; "HANDLER" => check by part of handler path. Syn: "PATH" */ global $DB; if (!defined('SALE_DH_INITIALIZED')) { CSaleDeliveryHandler::Initialize(); } $arAllowedSort = array("SORT" => "SORT", "NAME" => "NAME", "SID" => "HID", "SITE_ID" => "LID", "HANDLER" => "HANDLER", "ACTIVE" => "ACTIVE"); foreach ($arSort as $SORT => $SORT_DIR) { if (array_key_exists($SORT, $arAllowedSort)) { unset($arSort[$SORT]); $arSort[$arAllowedSort[$SORT]] = $SORT_DIR == "DESC" ? "DESC" : "ASC"; } else { unset($arSort[$SORT]); } } // additional filter synonim check if (is_set($arFilter, "SITE") && !is_set($arFilter, "SITE_ID")) { $arFilter["SITE_ID"] = $arFilter["SITE"]; } unset($arFilter["SITE"]); $arFilterDefault = array("SITE_ID" => SITE_ID, "COMPABILITY" => "N", "ACTIVE" => "Y"); if (!is_array($arFilter)) { $arFilter = array(); } foreach ($arFilterDefault as $key => $value) { if (!is_set($arFilter, $key)) { $arFilter[$key] = $value; } } $bAllSite = false; if ($arFilter["SITE_ID"] == "ALL") { $bAllSite = true; unset($arFilter["SITE_ID"]); } if ($arFilter["ACTIVE"] == "ALL") { unset($arFilter["ACTIVE"]); } $arWhere = array(); $strWhere = ""; $arFilterKeys = array_keys($arFilter); foreach ($arFilter as $key => $value) { $match_value_set = in_array($key . "_EXACT_MATCH", $arFilterKeys) ? true : false; $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $key = ToUpper($key); switch ($key) { // SITE_ID is unavailable for extended sorting! only direct selection; It's needed for after-select filtration. case "SITE_ID": if (strlen($value) > 0) { //$arWhere[] = GetFilterQuery("LID", $value, $match); $arWhere[] = "LID='" . $DB->ForSql($value) . "' OR LID='' OR LID IS NULL"; } break; case "ACTIVE": if (strlen($value) > 0) { $arWhere[] = "ACTIVE='" . ($value == 'N' ? 'N' : 'Y') . "'"; } break; case "SID": case "ID": if (strlen($value) > 0) { $arWhere[] = GetFilterQuery("HID", $DB->ForSql($value), $match); } break; case "HANDLER": case "PATH": if (strlen($value) > 0) { $arWhere[] = GetFilterQuery("HANDLER", $DB->ForSql($value), $match); } } } $strWhere = GetFilterSqlSearch($arWhere); $query = "\nSELECT HID AS SID\nFROM b_sale_delivery_handler\nWHERE\n" . $strWhere . "\n"; if (count($arSort) > 0) { $query .= "ORDER BY "; $bFirst = true; foreach ($arSort as $SORT => $SORT_DIR) { if ($bFirst) { $bFirst = false; } else { $query .= ", "; } $query .= $SORT . " " . $SORT_DIR; } } $dbRes = $DB->Query($query); $arLoadedHandlers = array(); $arLoadedHandlersMap = array(); while ($arRes = $dbRes->Fetch()) { $arLoadedHandlersMap[$arRes["SID"]] = $arRes; } $arHandlersList = CSaleDeliveryHandler::__getRegisteredHandlers(); if (is_array($arHandlersList)) { foreach ($arHandlersList as $key => $arHandler) { if (is_array($arLoadedHandlersMap) && !array_key_exists($arHandler["SID"], $arLoadedHandlersMap)) { unset($arHandlersList[$key]); } } $arHandlersList = array_values($arHandlersList); $arHandlersList = CSaleDeliveryHandler::__getHandlersData($arHandlersList); if ($arFilter["SITE_ID"] != "ALL" && is_array($arHandlersList)) { foreach ($arHandlersList as $key => $arHandler) { if (strlen($arHandler['LID']) > 0 && $arHandler['LID'] != $arFilter["SITE_ID"]) { unset($arHandlersList[$key]); } } } if (is_array($arFilter["COMPABILITY"]) && is_array($arHandlersList)) { foreach ($arHandlersList as $key => $arHandler) { $arProfiles = CSaleDeliveryHandler::GetHandlerCompability($arFilter["COMPABILITY"], $arHandler); if (!is_array($arProfiles) || count($arProfiles) <= 0) { unset($arHandlersList[$key]); } else { $arHandlersList[$key]["PROFILES"] = $arProfiles; } } } CSaleDeliveryHandler::__sortList($arHandlersList, $arSort); } $dbHandlers = new CDBResult(); if (is_array($arHandlersList)) { reset($arHandlersList); $dbHandlers->InitFromArray($arHandlersList); } else { $dbHandlers->InitFromArray(array()); } return $dbHandlers; }
function GetPublicList($arFilter = array(), $strSqlOrder = "ORDER BY C.C_SORT, C.ID, V.DATE_START desc") { $err_mess = CVote::err_mess() . "<br>Function: GetPublicList<br>Line: "; global $DB, $USER; $arSqlSearch = array(); $strSqlSearch = ""; $arSqlSearch_1 = array(); $strSqlSearch_1 = ""; if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); for ($i = 0; $i < count($filter_keys); $i++) { $key = $filter_keys[$i]; $val = $arFilter[$filter_keys[$i]]; if (strlen($val) <= 0 || $val == "NOT_REF") { continue; } if (is_array($val) && count($val) <= 0) { continue; } $match_value_set = in_array($key . "_EXACT_MATCH", $filter_keys) ? true : false; $key = strtoupper($key); switch ($key) { case "SITE": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch_1[] = GetFilterQuery("CS.SITE_ID", $val, $match); $strSqlSearch_1 = GetFilterSqlSearch($arSqlSearch_1); $where = " and exists (SELECT 'x' FROM b_vote_channel_2_site CS WHERE {$strSqlSearch_1} and C.ID = CS.CHANNEL_ID) "; break; case "CHANNEL": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("C.SYMBOLIC_NAME", $val, $match); break; case "FIRST_SITE_ID": case "LID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("C.FIRST_SITE_ID", $val, $match); break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $arGroups = $USER->GetUserGroupArray(); if (!is_array($arGroups)) { $arGroups[] = 2; } $groups = implode(",", $arGroups); if (!$USER->IsAdmin()) { $strSql = "\r\n\t\t\t\tSELECT\r\n\t\t\t\t\tC.TITLE CHANNEL_TITLE, \r\n\t\t\t\t\tV.ID, V.CHANNEL_ID, V.C_SORT, V.ACTIVE, V.COUNTER, V.TITLE, V.DESCRIPTION, V.DESCRIPTION_TYPE, V.IMAGE_ID, V.EVENT1, V.EVENT2, V.EVENT3, V.UNIQUE_TYPE, V.KEEP_IP_SEC, V.DELAY, V.DELAY_TYPE, V.TEMPLATE, V.RESULT_TEMPLATE, V.NOTIFY,\r\n\t\t\t\t\t" . $DB->DateToCharFunction("V.DATE_START") . "\t\tDATE_START,\r\n\t\t\t\t\t" . $DB->DateToCharFunction("V.DATE_END") . "\t\tDATE_END,\r\n\t\t\t\t\tmax(G.PERMISSION)\t\t\t\t\t\t\t\tMAX_PERMISSION,\r\n\t\t\t\t\tcase \r\n\t\t\t\t\t\twhen V.ACTIVE='N' or getdate() not between V.DATE_START and V.DATE_END then 'red'\r\n\t\t\t\t\t\telse 'green'\r\n\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\t\tLAMP\r\n\t\t\t\tFROM\r\n\t\t\t\t\tb_vote V\r\n\t\t\t\tINNER JOIN b_vote_channel C ON (C.ID = V.CHANNEL_ID and C.ACTIVE = 'Y')\r\n\t\t\t\tINNER JOIN b_vote_channel_2_group G ON (G.CHANNEL_ID = C.ID and G.GROUP_ID in ({$groups}))\r\n\t\t\t\tWHERE\r\n\t\t\t\t\t{$strSqlSearch}\r\n\t\t\t\tand V.ACTIVE = 'Y'\r\n\t\t\t\tand V.DATE_START<=getdate()\t\t\t\t\t\r\n\t\t\t\t{$where}\r\n\t\t\t\tGROUP BY\r\n\t\t\t\t\tC.ID, C.TITLE, \r\n\t\t\t\t\tV.ID, V.CHANNEL_ID, V.C_SORT, V.ACTIVE, V.COUNTER, V.TITLE, V.DESCRIPTION, V.DESCRIPTION_TYPE, V.IMAGE_ID, V.EVENT1, V.EVENT2, V.EVENT3, V.UNIQUE_TYPE, V.KEEP_IP_SEC, V.DELAY, V.DELAY_TYPE, V.TEMPLATE, V.RESULT_TEMPLATE, V.NOTIFY,\r\n\t\t\t\t\tV.DATE_START, V.DATE_END, \r\n\t\t\t\t\tC.C_SORT, C.ID\r\n\t\t\t\tHAVING \r\n\t\t\t\t\tmax(G.PERMISSION)>0\r\n\t\t\t\t{$strSqlOrder}\r\n\t\t\t\t"; } else { $strSql = "\r\n\t\t\t\tSELECT\r\n\t\t\t\t\tC.TITLE CHANNEL_TITLE, \r\n\t\t\t\t\tV.ID, V.CHANNEL_ID, V.C_SORT, V.ACTIVE, V.COUNTER, V.TITLE, V.DESCRIPTION, V.DESCRIPTION_TYPE, V.IMAGE_ID, V.EVENT1, V.EVENT2, V.EVENT3, V.UNIQUE_TYPE, V.KEEP_IP_SEC, V.DELAY, V.DELAY_TYPE, V.TEMPLATE, V.RESULT_TEMPLATE, V.NOTIFY,\r\n\t\t\t\t\t" . $DB->DateToCharFunction("V.DATE_START") . "\t\tDATE_START,\r\n\t\t\t\t\t" . $DB->DateToCharFunction("V.DATE_END") . "\t\tDATE_END,\r\n\t\t\t\t\t2\t\t\t\t\t\t\t\t\t\t\t\tMAX_PERMISSION,\r\n\t\t\t\t\tcase \r\n\t\t\t\t\t\twhen V.ACTIVE='N' or getdate() not between V.DATE_START and V.DATE_END then 'red'\r\n\t\t\t\t\t\telse 'green'\r\n\t\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\t\tLAMP\r\n\t\t\t\tFROM\r\n\t\t\t\t\tb_vote V\r\n\t\t\t\tINNER JOIN b_vote_channel C ON (C.ID = V.CHANNEL_ID and C.ACTIVE = 'Y')\r\n\t\t\t\tWHERE\r\n\t\t\t\t\t{$strSqlSearch}\r\n\t\t\t\tand V.ACTIVE = 'Y'\r\n\t\t\t\tand V.DATE_START<=getdate()\r\n\t\t\t\t{$where}\r\n\t\t\t\tGROUP BY\r\n\t\t\t\t\tC.ID, C.TITLE, \r\n\t\t\t\t\tV.ID, V.CHANNEL_ID, V.C_SORT, V.ACTIVE, V.COUNTER, V.TITLE, V.DESCRIPTION, V.DESCRIPTION_TYPE, V.IMAGE_ID, V.EVENT1, V.EVENT2, V.EVENT3, V.UNIQUE_TYPE, V.KEEP_IP_SEC, V.DELAY, V.DELAY_TYPE, V.TEMPLATE, V.RESULT_TEMPLATE, V.NOTIFY, \r\n\t\t\t\t\tV.DATE_START, V.DATE_END,\r\n\t\t\t\t\tC.C_SORT, C.ID\r\n\t\t\t\t{$strSqlOrder}\r\n\t\t\t\t"; } $res = $DB->Query($strSql, false, $err_mess . __LINE__); return $res; }
function GetList($arOrder = array('MODULE_ID' => 'asc'), $arFilter = array()) { global $DB, $USER; static $arFields = array("ID" => array("FIELD_NAME" => "O.ID", "FIELD_TYPE" => "int"), "NAME" => array("FIELD_NAME" => "O.NAME", "FIELD_TYPE" => "string"), "MODULE_ID" => array("FIELD_NAME" => "O.MODULE_ID", "FIELD_TYPE" => "string"), "BINDING" => array("FIELD_NAME" => "O.BINDING", "FIELD_TYPE" => "string")); $err_mess = CAllOperation::err_mess() . "<br>Function: GetList<br>Line: "; $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); for ($i = 0, $l = count($filter_keys); $i < $l; $i++) { $n = strtoupper($filter_keys[$i]); $val = $arFilter[$filter_keys[$i]]; if (strlen($val) <= 0 || strval($val) == "NOT_REF") { continue; } if ($n == 'ID') { $arSqlSearch[] = GetFilterQuery("O.ID", $val, 'N'); } elseif (isset($arFields[$n])) { $arSqlSearch[] = GetFilterQuery($arFields[$n]["FIELD_NAME"], $val); } } } $strOrderBy = ''; foreach ($arOrder as $by => $order) { if (isset($arFields[strtoupper($by)])) { $strOrderBy .= $arFields[strtoupper($by)]["FIELD_NAME"] . ' ' . (strtolower($order) == 'desc' ? 'desc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS LAST" : "") : 'asc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS FIRST" : "")) . ','; } } if (strlen($strOrderBy) > 0) { $strOrderBy = "ORDER BY " . rtrim($strOrderBy, ","); } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT *\n\t\t\tFROM\n\t\t\t\tb_operation O\n\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t{$strOrderBy}"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); return $res; }
public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, $arSelect = array()) { $err_mess = CWorkflowStatus::err_mess() . "<br>Function: GetList<br>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 { $by = "s_c_sort"; $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 (strlen($val) <= 0 || "{$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 (strlen($predicate) > 0 && $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 (strlen($strSqlSearch)) { $strSqlSearch .= " AND "; } $strSqlSearch .= "(" . implode(") and (", $arSqlSearch_g) . ") "; } $strSql = "\n\t\t\tSELECT\n\t\t\t\t" . implode(", ", $arSqlSelect) . "\n\t\t\tFROM\n\t\t\t\tb_workflow_status S\n\t\t\t" . (strlen($strSqlSearch_h) > 0 || array_key_exists("DOCUMENTS", $arSqlSelect) ? "LEFT JOIN b_workflow_document D ON (D.STATUS_ID = S.ID)" : "") . "\n\t\t\t" . (count($arSqlSearch_g) > 0 ? "LEFT JOIN b_workflow_status2group G ON (G.STATUS_ID = S.ID)" : "") . "\n\t\t\t" . (strlen($strSqlSearch) > 0 ? "WHERE " . $strSqlSearch : "") . "\n\t\t\t" . ($bGroup ? "GROUP BY " . implode(", ", $arSqlGroup) : "") . "\n\t\t\t" . (strlen($strSqlSearch_h) > 0 ? "HAVING " . $strSqlSearch_h : "") . "\n\t\t\t{$strSqlOrder}\n\t\t\t"; //echo "<pre>".htmlspecialcharsbx($strSql)."</pre>"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $is_filtered = strlen($strSqlSearch) > 0; return $res; }
function GetHistoryList(&$by, &$order, $arFilter = array(), &$is_filtered) { $err_mess = CWorkflow::err_mess() . "<br>Function: GetHistoryList<br>Line: "; global $DB; $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (strlen($val) <= 0 || "{$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 = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L.ID", $val, $match); break; case "DOCUMENT_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L.DOCUMENT_ID", $val, $match); break; case "DATE_MODIFY_1": if (CheckDateTime($val)) { $arSqlSearch[] = "L.TIMESTAMP_X >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE_MODIFY_2": if (CheckDateTime($val)) { $arSqlSearch[] = "L.TIMESTAMP_X < " . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY"; } break; case "MODIFIED_BY": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L.MODIFIED_BY", $val, $match); break; case "MODIFIED_USER": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.MODIFIED_BY, U.LOGIN, U.NAME, U.LAST_NAME", $val, $match); break; case "TITLE": case "SITE_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L." . $key, $val, $match); break; case "FILENAME": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.FILENAME", $val, $match, array("/", "\\", ".", "_")); break; case "BODY": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L.BODY", $val, $match, array(), "Y"); break; case "STATUS": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.STATUS_ID, S.TITLE", $val, $match); break; case "STATUS_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L.STATUS_ID", $val, $match); break; } } } if ($by == "s_id") { $strSqlOrder = "ORDER BY L.ID"; } elseif ($by == "s_document_id") { $strSqlOrder = "ORDER BY L.DOCUMENT_ID"; } elseif ($by == "s_date_modify") { $strSqlOrder = "ORDER BY L.TIMESTAMP_X"; } elseif ($by == "s_modified_by") { $strSqlOrder = "ORDER BY L.MODIFIED_BY"; } elseif ($by == "s_filename") { $strSqlOrder = "ORDER BY L.FILENAME"; } elseif ($by == "s_site_id") { $strSqlOrder = "ORDER BY L.SITE_ID"; } elseif ($by == "s_title") { $strSqlOrder = "ORDER BY L.TITLE"; } elseif ($by == "s_status") { $strSqlOrder = "ORDER BY L.STATUS_ID"; } else { $by = "s_id"; $strSqlOrder = "ORDER BY L.ID"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT DISTINCT\n\t\t\t\tL.*,\n\t\t\t\t" . $DB->DateToCharFunction("L.TIMESTAMP_X") . " TIMESTAMP_X,\n\t\t\t\tconcat('(',U.LOGIN,') ',ifnull(U.NAME,''),' ',ifnull(U.LAST_NAME,'')) USER_NAME,\n\t\t\t\tS.TITLE STATUS_TITLE\n\t\t\tFROM\n\t\t\t\tb_workflow_log L\n\t\t\t\tLEFT JOIN b_workflow_status S ON (S.ID = L.STATUS_ID)\n\t\t\t\tLEFT JOIN b_user U ON (U.ID = L.MODIFIED_BY)\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\t"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch); return $res; }
public static function GetList($Params = array()) { global $DB, $USER; $arFilter = $Params['arFilter']; $arOrder = isset($Params['arOrder']) ? $Params['arOrder'] : array('ID' => 'asc'); static $arFields = array("ID" => array("FIELD_NAME" => "MLC.ID", "FIELD_TYPE" => "int"), "NAME" => array("FIELD_NAME" => "MLC.NAME", "FIELD_TYPE" => "string"), "ACTIVE" => array("FIELD_NAME" => "MLC.ACTIVE", "FIELD_TYPE" => "string"), "DATE_UPDATE" => array("FIELD_NAME" => "MLC.DATE_UPDATE", "FIELD_TYPE" => "date"), "KEYWORDS" => array("FIELD_NAME" => "MLC.KEYWORDS", "FIELD_TYPE" => "string"), "DESCRIPTION" => array("FIELD_NAME" => "MLC.DESCRIPTION", "FIELD_TYPE" => "string"), "OWNER_ID" => array("FIELD_NAME" => "MLC.OWNER_ID", "FIELD_TYPE" => "int"), "PARENT_ID" => array("FIELD_NAME" => "MLC.PARENT_ID", "FIELD_TYPE" => "int"), "ML_TYPE" => array("FIELD_NAME" => "MLC.ML_TYPE", "FIELD_TYPE" => "string")); $err_mess = CMedialibCollection::GetErrorMess() . "<br>Function: GetList<br>Line: "; $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); for ($i = 0, $l = count($filter_keys); $i < $l; $i++) { $n = strtoupper($filter_keys[$i]); $val = $arFilter[$filter_keys[$i]]; if (is_string($val) && strlen($val) <= 0 || strval($val) == "NOT_REF") { continue; } if ($n == 'ID' || $n == 'PARENT_ID' || $n == 'OWNER_ID') { $arSqlSearch[] = GetFilterQuery($arFields[$n]["FIELD_NAME"], $val, 'N'); } elseif (isset($arFields[$n])) { $arSqlSearch[] = GetFilterQuery($arFields[$n]["FIELD_NAME"], $val); } } } $strOrderBy = ''; foreach ($arOrder as $by => $order) { if (isset($arFields[strtoupper($by)])) { $strOrderBy .= $arFields[strtoupper($by)]["FIELD_NAME"] . ' ' . (strtolower($order) == 'desc' ? 'desc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS LAST" : "") : 'asc' . (strtoupper($DB->type) == "ORACLE" ? " NULLS FIRST" : "")) . ','; } } if (strlen($strOrderBy) > 0) { $strOrderBy = "ORDER BY " . rtrim($strOrderBy, ","); } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); if (isset($arFilter['TYPES']) && is_array($arFilter['TYPES'])) { $strTypes = ""; for ($i = 0, $l = count($arFilter['TYPES']); $i < $l; $i++) { $strTypes .= "," . IntVal($arFilter['TYPES'][$i]); } $strSqlSearch .= "\n AND ML_TYPE in (" . trim($strTypes, ", ") . ")"; } $strSql = "\n\t\t\tSELECT\n\t\t\t\tMLC.*\n\t\t\tFROM\n\t\t\t\tb_medialib_collection MLC\n\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t{$strOrderBy}"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $arResult = array(); while ($arRes = $res->Fetch()) { $arResult[] = $arRes; } return $arResult; }
function GetMenuList($arFilter = array(), $check_rights = "Y") { $err_mess = CAllForm::err_mess() . "<br>Function: GetMenuList<br>Line: "; global $DB, $USER, $strError; $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); for ($i = 0; $i < count($filter_keys); $i++) { $key = $filter_keys[$i]; $val = $arFilter[$filter_keys[$i]]; if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = in_array($key . "_EXACT_MATCH", $filter_keys) ? true : false; $key = strtoupper($key); switch ($key) { case "FORM_ID": case "LID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L." . $key, $val, $match); break; case "MENU": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.MENU", $val, $match); break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); if ($check_rights == "N" || CForm::IsAdmin()) { $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tF.ID,\n\t\t\t\t\tF.NAME,\n\t\t\t\t\tL.LID,\n\t\t\t\t\tL.MENU\n\t\t\t\tFROM\n\t\t\t\t\tb_form_menu L,\n\t\t\t\t\tb_form F\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\tand L.FORM_ID = F.ID\n\t\t\t\tORDER BY F.C_SORT\n\t\t\t\t"; } else { $arGroups = $USER->GetUserGroupArray(); if (!is_array($arGroups)) { $arGroups[] = 2; } $groups = implode(",", $arGroups); $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tF.ID,\n\t\t\t\t\tF.NAME,\n\t\t\t\t\tL.LID,\n\t\t\t\t\tL.MENU\n\t\t\t\tFROM\n\t\t\t\t\tb_form_menu L,\n\t\t\t\t\tb_form F,\n\t\t\t\t\tb_form_2_group G\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\tand L.FORM_ID = F.ID\n\t\t\t\tand G.FORM_ID = F.ID\n\t\t\t\tand G.GROUP_ID in ({$groups})\n\t\t\t\tGROUP BY\n\t\t\t\t\tL.ID, L.LID, L.MENU, F.NAME, F.ID, F.C_SORT\n\t\t\t\tHAVING\n\t\t\t\t\tmax(G.PERMISSION)>=15\n\t\t\t\tORDER BY F.C_SORT\n\t\t\t\t"; } //echo "<pre>".$strSql."</pre>"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); return $res; }
/** * <p>Возвращает список почтовых шаблонов в виде объекта класса <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cdbresult/index.php">CDBResult</a>.</p> * * * * * @param string &$by = "id" Ссылка на переменную с полем для сортировки, может принимать * значения: <ul> <li> <b>site_id</b> - идентификатор сайта;</li> <li> <b>subject</b> - * тема;</li> <li> <b>timestamp_x</b> - дата изменения;</li> <li> <b>event_name</b> - тип * события;</li> <li> <b>id</b> - ID шаблона;</li> <li> <b>active</b> - активность;</li> </ul> * * * * @param string &$order = "desc" Ссылка на переменную с порядком сортировки, может принимать * значения: <ul> <li> <b>asc</b> - по возрастанию;</li> <li> <b>desc</b> - по * убыванию;</li> </ul> * * * * @param array $filter Массив вида array("фильтруемое поле"=>"значение" [, ...]), может * принимать значения: <ul> <li> <b>ID</b> - ID шаблона;</li> <li> <b>TYPE</b> - код и * заголовок типа события (допустима <a * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>);</li> <li> <b>TYPE_ID</b> - * код типа события (допустима <a * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>);</li> <li> * <b>TIMESTAMP_1</b> - левая часть интервала ("c") для поиска по дате * изменения;</li> <li> <b>TIMESTAMP_2</b> - правая часть интервала ("по") для * поиска по дате изменения;</li> <li> <b>SITE_ID</b> - идентификатор сайта * (допустимо задание массива для поиска по логике "или", либо * допустимо использование <a * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложной логики</a>);</li> <li> <b>ACTIVE</b> - * флаг активности (Y|N);</li> <li> <b>FROM</b> - поле "От кого" (допустима <a * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>);</li> <li> <b>TO</b> - * поле "Кому" (допустима <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная * логика</a>);</li> <li> <b>BCC</b> - поле "Скрытая копия" (допустима <a * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>);</li> <li> <b>SUBJECT</b> - * по теме сообщения (допустима <a * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>);</li> <li> <b>BODY_TYPE</b> * - по типу тела сообщения (text|html);</li> <li> <b>BODY</b> - по телу сообщения * (допустима <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная * логика</a>);</li> </ul> * * * * @return CDBResult * * * <h4>Example</h4> * <pre> * <? * $arFilter = Array( * "ID" => "12 | 134", * "TYPE" => "контракт & рекл", * "TYPE_ID" => "ADV_BANNER | ADV_CONTRACT", * "TIMESTAMP_1" => "12.11.2001", * "TIMESTAMP_2" => "12.11.2005", * "SITE_ID" => "ru | en", * "ACTIVE" => "Y", * "FROM" => "bitrixsoft.ru", * "TO" => "#TO#", * "BCC" => "admin", * "SUBJECT" => "конктракт", * "BODY_TYPE" => "text", * "BODY" => "auto" * ); * $rsMess = <b>CEventMessage::GetList</b>($by="site_id", $order="desc", $arFilter); * $is_filtered = $rsMess->is_filtered; * ?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/main/reference/ceventmessage/index.php">Поля шаблона * почтового сообщения</a> </li> <li> <a * href="http://dev.1c-bitrix.ru/api_help/main/reference/ceventmessage/getbyid.php">CEventMessage::GetByID</a> </li> <li> * <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cdbresult/index.php">Класс CDBResult</a> </li> </ul><a * name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/main/reference/ceventmessage/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter=Array()) { $err_mess = "<br>Class: CEventMessage<br>File: ".__FILE__."<br>Function: GetList<br>Line: "; global $DB, $USER; $arSqlSearch = Array(); $strSqlSearch = ""; $bIsLang = false; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if(is_array($val)) { if(count($val) <= 0) continue; } else { if( (strlen($val) <= 0) || ($val === "NOT_REF") ) continue; } $match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch($key) { case "ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("M.ID", $val, $match); break; case "TYPE": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.EVENT_NAME, T.NAME", $val, $match); break; case "EVENT_NAME": case "TYPE_ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("M.EVENT_NAME", $val, $match); break; case "TIMESTAMP_1": $arSqlSearch[] = "M.TIMESTAMP_X >= FROM_UNIXTIME('".MkDateTime(FmtDate($val,"D.M.Y"),"d.m.Y")."')"; break; case "TIMESTAMP_2": $arSqlSearch[] = "M.TIMESTAMP_X <= FROM_UNIXTIME('".MkDateTime(FmtDate($val,"D.M.Y")." 23:59:59","d.m.Y")."')"; break; case "LID": case "LANG": case "SITE_ID": if (is_array($val)) $val = implode(" | ",$val); $arSqlSearch[] = GetFilterQuery("MS.SITE_ID",$val,"N"); $bIsLang = true; break; case "ACTIVE": $arSqlSearch[] = ($val=="Y") ? "M.ACTIVE = 'Y'" : "M.ACTIVE = 'N'"; break; case "FROM": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.EMAIL_FROM", $val, $match); break; case "TO": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.EMAIL_TO", $val, $match); break; case "BCC": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.BCC", $val, $match); break; case "SUBJECT": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.SUBJECT", $val, $match); break; case "BODY_TYPE": $arSqlSearch[] = ($val=="text") ? "M.BODY_TYPE = 'text'" : "M.BODY_TYPE = 'html'"; break; case "BODY": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.MESSAGE", $val, $match); break; } } } if ($by == "id") $strSqlOrder = " ORDER BY M.ID "; elseif ($by == "active") $strSqlOrder = " ORDER BY M.ACTIVE "; elseif ($by == "event_name") $strSqlOrder = " ORDER BY M.EVENT_NAME "; elseif ($by == "from") $strSqlOrder = " ORDER BY M.EMAIL_FROM "; elseif ($by == "to") $strSqlOrder = " ORDER BY M.EMAIL_TO "; elseif ($by == "bcc") $strSqlOrder = " ORDER BY M.BCC "; elseif ($by == "body_type") $strSqlOrder = " ORDER BY M.BODY_TYPE "; elseif ($by == "subject") $strSqlOrder = " ORDER BY M.SUBJECT "; else { $strSqlOrder = " ORDER BY M.ID "; $by = "id"; } if ($order!="asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "SELECT M.ID, M.EVENT_NAME, M.ACTIVE, M.LID, ".($bIsLang? "MS.SITE_ID":"M.LID AS SITE_ID").", M.EMAIL_FROM, M.EMAIL_TO, M.SUBJECT, M.MESSAGE, M.BODY_TYPE, M.BCC, M.REPLY_TO, M.CC, M.IN_REPLY_TO, M.PRIORITY, M.FIELD1_NAME, M.FIELD1_VALUE, M.FIELD2_NAME, M.FIELD2_VALUE, ". $DB->DateToCharFunction("M.TIMESTAMP_X"). " TIMESTAMP_X, if(T.ID is null, M.EVENT_NAME, concat('[ ',T.EVENT_NAME,' ] ',ifnull(T.NAME,''))) EVENT_TYPE ". "FROM b_event_message M ". ($bIsLang?" LEFT JOIN b_event_message_site MS ON (M.ID = MS.EVENT_MESSAGE_ID)":"")." ". " LEFT JOIN b_event_type T ON (T.EVENT_NAME = M.EVENT_NAME and T.LID = '".LANGUAGE_ID."') ". "WHERE ". $strSqlSearch. $strSqlOrder; $res = $DB->Query($strSql, false, $err_mess.__LINE__); $res->is_filtered = (IsFiltered($strSqlSearch)); return $res; }
/** * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search">поисковых систем</a> и количество <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search_hit">хитов</a> (проиндексированных страниц) каждой из них за все время ведения статистики, за последние 3 дня, либо за указанный интервал времени.</p> * * * @param string &$by = "s_today_hits" Поле для сортировки. Возможные значения: <ul> <li> <b>s_id</b> - ID поисковой * системы; </li> <li> <b>s_date_last</b> - дата последнего хита; </li> <li> <b>s_today_hits</b> - * количество хитов за сегодня; </li> <li> <b>s_yesterday_hits</b> - количество * хитов за вчера; </li> <li> <b>s_b_yesterday_hits</b> - количество хитов за * позавчера; </li> <li> <b>s_total_hits</b> - суммарное количество хитов; </li> <li> * <b>s_period_hits</b> - количество хитов за установленный период времени * (<i>filter</i>["<b>DATE1</b>"], <i>filter</i>["<b>DATE2</b>"]); </li> <li> <b>s_name</b> - название * поисковой системы; </li> <li> <b>s_user_agent</b> - <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search_useragent">UserAgent поисковой * системы</a>. </li> </ul> * * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul> * * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве * допустимы следующие ключи: <ul> <li> <b>ID</b>* - ID поисковой системы; </li> * <li> <b>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b> * будет искаться вхождение </li> <li> <b>ACTIVE</b> - флаг активности, * возможные значения: <ul> <li> <b>Y</b> - активна; </li> <li> <b>N</b> - не активна. * </li> </ul> </li> <li> <b>SAVE_STATISTIC</b> - флаг "сохранять хиты поисковой системы", * возможные значения: <ul> <li> <b>Y</b> - да; </li> <li> <b>N</b> - нет. </li> </ul> </li> <li> * <b>DIAGRAM_DEFAULT</b> - флаг "включать в круговую диаграмму и график по * умолчанию", возможные значения: <ul> <li> <b>Y</b> - да; </li> <li> <b>N</b> - нет. </li> * </ul> </li> <li> <b>HITS1</b> - начальное значение интервала для поля * "количество хитов"; </li> <li> <b>HITS2</b> - конечное значение интервала для * поля "количество хитов"; </li> <li> <b>DATE1_PERIOD</b> - начальное значение * значение для произвольного периода; </li> <li> <b>DATE2_PERIOD</b> - конечное * значение значение для произвольного периода; </li> <li> <b>DATE1</b> - * начальное значение интервала для поля "дата последнего хита * поисковой системы"; </li> <li> <b>DATE2</b> - конечное значение интервала * для поля "дата последнего хита поисковой системы"; </li> <li> <b>NAME</b>* - * наименование поисковой системы; </li> <li> <b>NAME_EXACT_MATCH</b> - если * значение равно "Y", то при фильтрации по <b>NAME</b> будет искаться * точное совпадение; </li> <li> <b>USER_AGENT</b>* - UserAgent поисковой системы; </li> * <li> <b>USER_AGENT_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>USER_AGENT</b> будет искаться точное совпадение. </li> </ul> * - допускается * <a href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a> * * @param bool &$is_filtered Флаг отфильтрованности списка поисковых систем. Если значение * равно "true", то список был отфильтрован. * * @param mixed $limit = false Максимальное количество поисковых систем которые будут выбраны * в списке. Если значение равно false, то кол-во РК будет ограничено в * соответствии со значением параметра "Максимальное кол-во * показываемых записей в таблицах" из настроек модуля "Статистика". * * @return CDBResult * * <h4>Example</h4> * <pre> * <? * // отфильтруем данные только для поисковой системы #20 и #21 * // а также получим дополнительные данные на декабрь 2005 года * $arFilter = array( * "ID" => "20 | 21", * "DATE1_PERIOD" => "01.12.2005", * "DATE2_PERIOD" => "31.12.2005", * ); * * // получим список записей * $rs = <b>CSearcher::GetList</b>( * ($by = "s_today_hits"), * ($order = "desc"), * $arFilter, * $is_filtered * ); * * // выведем все записи * while ($ar = $rs->Fetch()) * { * echo "<pre>"; print_r($ar); echo "</pre>"; * } * ?> * </pre> * * * <h4>See Also</h4> * <ul> <li> <a * href="http://dev.1c-bitrix.ru/api_help/statistic/classes/csearcher/getdropdownlist.php">CSearcher::GetDropdownList</a> * </li> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search">Термин "Поисковая * система"</a> </li> </ul> <a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/csearcher/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, $LIMIT = false) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array("S.ID <> 1"); $arSqlSearch_h = array(); $strSqlSearch_h = ""; $filter_period = false; $strSqlPeriod = ""; $strT = ""; if (is_array($arFilter)) { ResetFilterLogic(); $date1 = $arFilter["DATE1_PERIOD"]; $date2 = $arFilter["DATE2_PERIOD"]; $date_from = MkDateTime(ConvertDateTime($date1, "D.M.Y"), "d.m.Y"); $date_to = MkDateTime(ConvertDateTime($date2, "D.M.Y") . " 23:59", "d.m.Y H:i"); if (CheckDateTime($date1) && strlen($date1) > 0) { $filter_period = true; if (strlen($date2) > 0) { $strSqlPeriod = "sum(if(D.DATE_STAT<FROM_UNIXTIME('{$date_from}'),0, if(D.DATE_STAT>FROM_UNIXTIME('{$date_to}'),0,"; $strT = ")))"; } else { $strSqlPeriod = "sum(if(D.DATE_STAT<FROM_UNIXTIME('{$date_from}'),0,"; $strT = "))"; } } elseif (CheckDateTime($date2) && strlen($date2) > 0) { ResetFilterLogic(); $filter_period = true; $strSqlPeriod = "sum(if(D.DATE_STAT>FROM_UNIXTIME('{$date_to}'),0,"; $strT = "))"; } foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("S.ID", $val, $match); break; case "ACTIVE": case "SAVE_STATISTIC": case "DIAGRAM_DEFAULT": $arSqlSearch[] = $val == "Y" ? "S." . $key . "='Y'" : "S." . $key . "='N'"; break; case "HITS1": $arSqlSearch_h[] = "(sum(ifnull(D.TOTAL_HITS,0))+ifnull(S.TOTAL_HITS,0))>='" . intval($val) . "'"; break; case "HITS2": $arSqlSearch_h[] = "(sum(ifnull(D.TOTAL_HITS,0))+ifnull(S.TOTAL_HITS,0))<='" . intval($val) . "'"; break; case "DATE1": if (CheckDateTime($val)) { $arSqlSearch_h[] = "max(D.DATE_LAST)>=" . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE2": if (CheckDateTime($val)) { $arSqlSearch_h[] = "max(D.DATE_LAST)<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY"; } break; case "NAME": case "USER_AGENT": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match); break; } } } if ($by == "s_id") { $strSqlOrder = "ORDER BY S.ID"; } elseif ($by == "s_date_last") { $strSqlOrder = "ORDER BY S_DATE_LAST"; } elseif ($by == "s_today_hits") { $strSqlOrder = "ORDER BY TODAY_HITS"; } elseif ($by == "s_yesterday_hits") { $strSqlOrder = "ORDER BY YESTERDAY_HITS"; } elseif ($by == "s_b_yesterday_hits") { $strSqlOrder = "ORDER BY B_YESTERDAY_HITS"; } elseif ($by == "s_total_hits") { $strSqlOrder = "ORDER BY TOTAL_HITS"; } elseif ($by == "s_period_hits") { $strSqlOrder = "ORDER BY PERIOD_HITS"; } elseif ($by == "s_name") { $strSqlOrder = "ORDER BY S.NAME"; } elseif ($by == "s_user_agent") { $strSqlOrder = "ORDER BY S.USER_AGENT"; } elseif ($by == "s_chart") { $strSqlOrder = "ORDER BY S.DIAGRAM_DEFAULT desc, TOTAL_HITS "; } elseif ($by == "s_stat") { $strSqlOrder = "ORDER BY TODAY_HITS desc, YESTERDAY_HITS desc, B_YESTERDAY_HITS desc, TOTAL_HITS desc, PERIOD_HITS"; } else { $by = "s_today_hits"; $strSqlOrder = "ORDER BY TODAY_HITS desc, YESTERDAY_HITS desc, B_YESTERDAY_HITS desc, TOTAL_HITS desc, PERIOD_HITS"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $limit_sql = "LIMIT " . intval(COption::GetOptionString('statistic', 'RECORDS_LIMIT')); if (intval($LIMIT) > 0) { $limit_sql = "LIMIT " . intval($LIMIT); } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); foreach ($arSqlSearch_h as $sqlWhere) { $strSqlSearch_h .= " and (" . $sqlWhere . ") "; } $strSql = "\n\t\tSELECT\n\t\t\tS.ID,\n\t\t\tS.TOTAL_HITS,\n\t\t\tS.USER_AGENT,\n\t\t\tS.DIAGRAM_DEFAULT,\n\t\t\t" . $DB->DateToCharFunction("max(D.DATE_LAST)") . "\t\t\t\t\t\tDATE_LAST,\n\t\t\tmax(ifnull(D.DATE_LAST,'1980-01-01'))\t\t\t\t\t\t\t\tS_DATE_LAST,\n\t\t\tsum(ifnull(D.TOTAL_HITS,0))+ifnull(S.TOTAL_HITS,0)\t\t\t\t\tTOTAL_HITS,\n\t\t\tsum(if(to_days(curdate())=to_days(D.DATE_STAT),ifnull(D.TOTAL_HITS,0),0))\tTODAY_HITS,\n\t\t\tsum(if(to_days(curdate())-to_days(D.DATE_STAT)=1,ifnull(D.TOTAL_HITS,0),0))\tYESTERDAY_HITS,\n\t\t\tsum(if(to_days(curdate())-to_days(D.DATE_STAT)=2,ifnull(D.TOTAL_HITS,0),0))\tB_YESTERDAY_HITS,\n\t\t\t" . ($filter_period ? $strSqlPeriod . 'ifnull(D.TOTAL_HITS,0)' . $strT . ' PERIOD_HITS, ' : '0 PERIOD_HITS,') . "\n\t\t\tS.NAME\n\t\tFROM\n\t\t\tb_stat_searcher S\n\t\tLEFT JOIN b_stat_searcher_day D ON (D.SEARCHER_ID = S.ID)\n\t\tWHERE\n\t\t{$strSqlSearch}\n\t\tand S.ID<>1\n\t\tGROUP BY S.ID\n\t\tHAVING\n\t\t\t'1'='1'\n\t\t\t{$strSqlSearch_h}\n\t\t{$strSqlOrder}\n\t\t{$limit_sql}\n\t\t"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch) || $filter_period || strlen($strSqlSearch_h) > 0; return $res; }
function GetFileList(&$by, &$order, $arFilter = array(), $checkRights = 'N') { $err_mess = CAllTicket::err_mess() . "<br>Function: GetFileList<br>Line: "; global $DB, $USER; $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); $filterKeysCount = count($filter_keys); for ($i = 0; $i < $filterKeysCount; $i++) { $key = $filter_keys[$i]; $val = $arFilter[$filter_keys[$i]]; if (is_array($val) && count($val) <= 0 || !is_array($val) && (strlen($val) <= 0 || $val === 'NOT_REF')) { continue; } $match_value_set = in_array($key . "_EXACT_MATCH", $filter_keys) ? true : false; $key = strtoupper($key); switch ($key) { case "LINK_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("MF.ID", $val, $match); break; case "MESSAGE": case "TICKET_ID": case "FILE_ID": case "HASH": case "MESSAGE_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("MF." . $key, $val, $match); break; } } } if ($by == "s_id") { $strSqlOrder = "ORDER BY MF.ID"; } elseif ($by == "s_file_id") { $strSqlOrder = "ORDER BY F.ID"; } elseif ($by == "s_message_id") { $strSqlOrder = "ORDER BY MF.MESSAGE_ID"; } else { $by = "s_id"; $strSqlOrder = "ORDER BY MF.ID"; } if ($order == "desc") { $strSqlOrder .= " desc "; $order = "desc"; } else { $strSqlOrder .= " asc "; $order = "asc"; } $messageJoin = ''; $ticketJoin = ''; if ($checkRights == 'Y') { $bAdmin = CTicket::IsAdmin() ? 'Y' : 'N'; $bSupportTeam = CTicket::IsSupportTeam() ? 'Y' : 'N'; $bSupportClient = CTicket::IsSupportClient() ? 'Y' : 'N'; $bDemo = CTicket::IsDemo() ? 'Y' : 'N'; $uid = intval($USER->GetID()); if ($bAdmin != 'Y' && $bSupportTeam != 'Y' && $bSupportClient != 'Y' && $bDemo != 'Y') { return false; } if (!($bAdmin == 'Y' || $bDemo == 'Y')) { // a list of users who own or are responsible for tickets, which we can show to our current user $ticketUsers = array($uid); // check if user has groups $result = $DB->Query('SELECT GROUP_ID FROM b_ticket_user_ugroup WHERE USER_ID = ' . $uid . ' AND CAN_VIEW_GROUP_MESSAGES = \'Y\''); if ($result) { // collect members of these groups $uGroups = array(); while ($row = $result->Fetch()) { $uGroups[] = $row['GROUP_ID']; } if (!empty($uGroups)) { $result = $DB->Query('SELECT USER_ID FROM b_ticket_user_ugroup WHERE GROUP_ID IN (' . join(',', $uGroups) . ')'); if ($result) { while ($row = $result->Fetch()) { $ticketUsers[] = $row['USER_ID']; } } } } // build sql $strSqlSearchUser = ""; if ($bSupportTeam == 'Y') { $strSqlSearchUser = '******' . join(',', $ticketUsers) . ')'; } elseif ($bSupportClient == 'Y') { $strSqlSearchUser = '******' . join(',', $ticketUsers) . ')'; } if ($strSqlSearchUser) { $ticketJoin = 'INNER JOIN b_ticket T ON (T.ID = MF.TICKET_ID)'; $arSqlSearch[] = $strSqlSearchUser; } } if ($bSupportTeam != "Y" && $bAdmin != "Y") { $messageJoin = 'INNER JOIN b_ticket_message M ON (M.ID = MF.MESSAGE_ID)'; $arSqlSearch[] = "M.IS_HIDDEN='N'"; $arSqlSearch[] = "M.IS_LOG='N'"; } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\tF.*, " . $DB->DateToCharFunction("F.TIMESTAMP_X") . " as TIMESTAMP_X,\n\t\t\t\tMF.ID as LINK_ID,\n\t\t\t\tMF.HASH,\n\t\t\t\tMF.MESSAGE_ID,\n\t\t\t\tMF.TICKET_ID,\n\t\t\t\tMF.EXTENSION_SUFFIX\n\t\t\tFROM\n\t\t\t\tb_ticket_message_2_file MF\n\t\t\tINNER JOIN b_file F ON (MF.FILE_ID = F.ID)\n\t\t\t{$ticketJoin}\n\t\t\t{$messageJoin}\n\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); return $res; }
function GetMessageDynamicList(&$by, &$order, $arFilter = array()) { $err_mess = CTicket::err_mess() . "<br>Function: GetMessageDynamicList<br>Line: "; global $DB; $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { $filterKeys = array_keys($arFilter); for ($i = 0; $i < count($filterKeys); $i++) { $key = $filterKeys[$i]; $val = $arFilter[$filterKeys[$i]]; if (is_array($val) && count($val) <= 0 || !is_array($val) && (strlen($val) <= 0 || $val === 'NOT_REF')) { continue; } $matchValueSet = in_array($key . "_EXACT_MATCH", $filterKeys) ? true : false; $key = strtoupper($key); switch ($key) { case "SITE": case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("T.SITE_ID", $val, $match); break; case "DATE_CREATE_1": if (CheckDateTime($val)) { $arSqlSearch[] = "M.DATE_CREATE>=" . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE_CREATE_2": if (CheckDateTime($val)) { $arSqlSearch[] = "M.DATE_CREATE<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY"; } break; case "OWNER": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("M.OWNER_USER_ID, U.LOGIN, U.LAST_NAME, U.NAME", $val, $match); break; case "OWNER_ID": if (intval($val) > 0) { $arSqlSearch[] = "M.OWNER_USER_ID = '" . intval($val) . "'"; } elseif ($val == 0) { $arSqlSearch[] = "(M.OWNER_USER_ID is null or M.OWNER_USER_ID=0)"; } break; case "IS_HIDDEN": case "IS_LOG": case "IS_OVERDUE": $arSqlSearch[] = $val == "Y" ? "M." . $key . "='Y'" : "M." . $key . "='N'"; break; case "SLA_ID": case "SLA": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("T.SLA_ID", $val, $match); break; case "CATEGORY_ID": case "CATEGORY": if (intval($val) > 0) { $arSqlSearch[] = "T.CATEGORY_ID = '" . intval($val) . "'"; } elseif ($val == 0) { $arSqlSearch[] = "(T.CATEGORY_ID is null or T.CATEGORY_ID=0)"; } break; case "CRITICALITY_ID": case "CRITICALITY": if (intval($val) > 0) { $arSqlSearch[] = "T.CRITICALITY_ID = '" . intval($val) . "'"; } elseif ($val == 0) { $arSqlSearch[] = "(T.CRITICALITY_ID is null or T.CRITICALITY_ID=0)"; } break; case "STATUS_ID": case "STATUS": if (intval($val) > 0) { $arSqlSearch[] = "T.STATUS_ID = '" . intval($val) . "'"; } elseif ($val == 0) { $arSqlSearch[] = "(T.STATUS_ID is null or T.STATUS_ID=0)"; } break; case "MARK_ID": case "MARK": if (intval($val) > 0) { $arSqlSearch[] = "T.MARK_ID = '" . intval($val) . "'"; } elseif ($val == 0) { $arSqlSearch[] = "(T.MARK_ID is null or T.MARK_ID=0)"; } break; case "SOURCE_ID": case "SOURCE": if (intval($val) > 0) { $arSqlSearch[] = "T.SOURCE_ID = '" . intval($val) . "'"; } elseif ($val == 0) { $arSqlSearch[] = "(T.SOURCE_ID is null or T.SOURCE_ID=0)"; } break; case "DIFFICULTY_ID": case "DIFFICULTY": if (intval($val) > 0) { $arSqlSearch[] = "T.DIFFICULTY_ID = '" . intval($val) . "'"; } elseif ($val == 0) { $arSqlSearch[] = "(T.DIFFICULTY_ID is null or T.DIFFICULTY_ID=0)"; } break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); if ($by == "s_date_create") { $strSqlOrder = "ORDER BY M.DATE_CREATE"; } else { $by = "s_date_create"; $strSqlOrder = "ORDER BY M.DATE_CREATE"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "\n\t\t\tSELECT\n\t\t\t\tcount(M.ID)\t\t\t\t\t\t\t\tCOUNTER,\n\t\t\t\tsum(if(M.EXPIRE_AGENT_DONE='Y', 1, 0))\tCOUNTER_OVERDUE,\n\t\t\t\tDAYOFMONTH(M.DAY_CREATE)\t\t\t\tCREATE_DAY,\n\t\t\t\tMONTH(M.DAY_CREATE)\t\t\t\t\t\tCREATE_MONTH,\n\t\t\t\tYEAR(M.DAY_CREATE)\t\t\t\t\t\tCREATE_YEAR\n\t\t\tFROM\n\t\t\t\tb_ticket_message M\n\t\t\tINNER JOIN b_ticket T ON (T.ID = M.TICKET_ID)\n\t\t\tLEFT JOIN b_user U ON (M.OWNER_USER_ID = U.ID)\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\tGROUP BY\n\t\t\t\tTO_DAYS(M.DAY_CREATE)\n\t\t\t{$strSqlOrder}\n\t\t\t"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); return $res; }
function GetList($aSort = array(), $arFilter = array()) { global $DB; $this->LAST_ERROR = ""; $arSqlSearch = array(); $arSqlSearch_h = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (!is_array($val) && (strlen($val) <= 0 || $val == "NOT_REF")) { continue; } switch (strtoupper($key)) { case "MSG_CHARSET": $arSqlSearch[] = "P.MSG_CHARSET = '" . $DB->ForSql($val) . "'"; break; case "ID": $arSqlSearch[] = GetFilterQuery("P.ID", $val, "N"); break; case "TIMESTAMP_1": if ($DB->IsDate($val)) { $arSqlSearch[] = "P.TIMESTAMP_X>=" . $DB->CharToDateFunction($val, "SHORT"); } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_TIMESTAMP_FROM") . "<br>"; } break; case "TIMESTAMP_2": if ($DB->IsDate($val)) { $arSqlSearch[] = "P.TIMESTAMP_X<DATE_ADD(" . $DB->CharToDateFunction($val, "SHORT") . ",INTERVAL 1 DAY)"; } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_TIMESTAMP_TILL") . "<br>"; } break; case "DATE_SENT_1": if ($DB->IsDate($val)) { $arSqlSearch[] = "P.DATE_SENT>=" . $DB->CharToDateFunction($val, "SHORT"); } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_DATE_SENT_FROM") . "<br>"; } break; case "DATE_SENT_2": if ($DB->IsDate($val)) { $arSqlSearch[] = "P.DATE_SENT<DATE_ADD(" . $DB->CharToDateFunction($val, "SHORT") . ",INTERVAL 1 DAY)"; } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_DATE_SENT_TILL") . "<br>"; } break; case "STATUS": $arSqlSearch_h[] = GetFilterQuery("STATUS_TITLE, P.STATUS", $val); break; case "STATUS_ID": $arSqlSearch[] = GetFilterQuery("P.STATUS", $val, "N"); break; case "SUBJECT": $arSqlSearch[] = GetFilterQuery("P.SUBJECT", $val); break; case "FROM": $arSqlSearch[] = GetFilterQuery("P.FROM_FIELD", $val, "Y", array("@", "_", ".")); break; case "TO": $r = GetFilterQuery("PE.EMAIL", $val, "Y", array("@", "_", ".")); if (strlen($r) > 0) { $arSqlSearch[] = "EXISTS (SELECT * FROM b_posting_email PE WHERE PE.POSTING_ID=P.ID AND PE.STATUS='N' AND " . $r . ")"; } break; case "BODY_TYPE": $arSqlSearch[] = $val == "html" ? "P.BODY_TYPE='html'" : "P.BODY_TYPE='text'"; break; case "RUB_ID": if (is_array($val) && count($val) > 0) { $rub_id = array(); foreach ($val as $i => $v) { $v = intval($v); if ($v > 0) { $rub_id[$v] = $v; } } if (count($rub_id)) { $arSqlSearch[] = "EXISTS (SELECT * from b_posting_rubric PR WHERE PR.POSTING_ID = P.ID AND PR.LIST_RUBRIC_ID in (" . implode(", ", $rub_id) . "))"; } } break; case "BODY": $arSqlSearch[] = GetFilterQuery("P.BODY", $val); break; case "AUTO_SEND_TIME_1": if ($DB->IsDate($val, false, false, "FULL")) { $arSqlSearch[] = "(P.AUTO_SEND_TIME is not null and P.AUTO_SEND_TIME>=" . $DB->CharToDateFunction($val, "FULL") . " )"; } elseif ($DB->IsDate($val, false, false, "SHORT")) { $arSqlSearch[] = "(P.AUTO_SEND_TIME is not null and P.AUTO_SEND_TIME>=" . $DB->CharToDateFunction($val, "SHORT") . " )"; } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_AUTO_FROM") . "<br>"; } break; case "AUTO_SEND_TIME_2": if ($DB->IsDate($val, false, false, "FULL")) { $arSqlSearch[] = "(P.AUTO_SEND_TIME is not null and P.AUTO_SEND_TIME<=" . $DB->CharToDateFunction($val, "FULL") . " )"; } elseif ($DB->IsDate($val, false, false, "SHORT")) { $arSqlSearch[] = "(P.AUTO_SEND_TIME is not null and P.AUTO_SEND_TIME<=" . $DB->CharToDateFunction($val, "SHORT") . " )"; } else { $this->LAST_ERROR .= GetMessage("POST_WRONG_AUTO_TILL") . "<br>"; } break; } } } $arOrder = array(); foreach ($aSort as $key => $ord) { $key = strtoupper($key); $ord = strtoupper($ord) != "ASC" ? "DESC" : "ASC"; switch ($key) { case "ID": $arOrder[$key] = "P.ID " . $ord; break; case "TIMESTAMP": $arOrder[$key] = "P.TIMESTAMP_X " . $ord; break; case "SUBJECT": $arOrder[$key] = "P.SUBJECT " . $ord; break; case "BODY_TYPE": $arOrder[$key] = "P.BODY_TYPE " . $ord; break; case "STATUS": $arOrder[$key] = "P.STATUS " . $ord; break; case "DATE_SENT": $arOrder[$key] = "P.DATE_SENT " . $ord; break; case "AUTO_SEND_TIME": $arOrder[$key] = "P.AUTO_SEND_TIME " . $ord; break; case "FROM_FIELD": $arOrder[$key] = "P.FROM_FIELD " . $ord; break; case "TO_FIELD": $arOrder[$key] = "P.TO_FIELD " . $ord; break; } } if (count($arOrder) <= 0) { $arOrder["ID"] = "P.ID DESC"; } $strSqlOrder = " ORDER BY " . implode(", ", $arOrder); $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\tif(P.STATUS='S','" . $DB->ForSql(GetMessage("POST_STATUS_SENT")) . "',\n\t\t\t\tif(P.STATUS='P','" . $DB->ForSql(GetMessage("POST_STATUS_PART")) . "',\n\t\t\t\tif(P.STATUS='E','" . $DB->ForSql(GetMessage("POST_STATUS_ERROR")) . "',\n\t\t\t\tif(P.STATUS='W','" . $DB->ForSql(GetMessage("POST_STATUS_WAIT")) . "',\n\t\t\t\t'" . $DB->ForSql(GetMessage("POST_STATUS_DRAFT")) . "')))) as STATUS_TITLE\n\t\t\t\t,P.ID\n\t\t\t\t,P.STATUS\n\t\t\t\t,P.FROM_FIELD\n\t\t\t\t,P.TO_FIELD\n\t\t\t\t,P.EMAIL_FILTER\n\t\t\t\t,P.SUBJECT\n\t\t\t\t,P.BODY_TYPE\n\t\t\t\t,P.DIRECT_SEND\n\t\t\t\t,P.CHARSET\n\t\t\t\t,P.MSG_CHARSET\n\t\t\t\t,P.SUBSCR_FORMAT\n\t\t\t\t," . $DB->DateToCharFunction("P.TIMESTAMP_X") . " TIMESTAMP_X\n\t\t\t\t," . $DB->DateToCharFunction("P.DATE_SENT") . " DATE_SENT\n\t\t\tFROM b_posting P\n\t\t\tWHERE\n\t\t\t" . $strSqlSearch . "\n\t\t"; if (count($arSqlSearch_h) > 0) { $strSqlSearch_h = GetFilterSqlSearch($arSqlSearch_h); $strSql = $strSql . " HAVING " . $strSqlSearch_h; } $strSql .= $strSqlOrder; // echo htmlspecialcharsbx($strSql); $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $res->is_filtered = IsFiltered($strSqlSearch); return $res; }
public static function GetList($aSort = array(), $arFilter = array(), $arNavStartParams = false) { global $DB; $arSqlSearch = array(); $from1 = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (!is_array($val)) { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } switch (strtoupper($key)) { case "ID": $arSqlSearch[] = GetFilterQuery("S.ID", $val, "N"); break; case "EMAIL": $arSqlSearch[] = GetFilterQuery("S.EMAIL", $val, "Y", array("@", ".", "_")); break; case "UPDATE_1": $arSqlSearch[] = "S.DATE_UPDATE>=" . $DB->CharToDateFunction($val); break; case "UPDATE_2": $arSqlSearch[] = "S.DATE_UPDATE<=" . $DB->CharToDateFunction($val . " 23:59:59"); break; case "INSERT_1": $arSqlSearch[] = "S.DATE_INSERT>=" . $DB->CharToDateFunction($val); break; case "INSERT_2": $arSqlSearch[] = "S.DATE_INSERT<=" . $DB->CharToDateFunction($val . " 23:59:59"); break; case "USER": $arSqlSearch[] = GetFilterQuery("U.ID, U.LOGIN, U.NAME, U.LAST_NAME", $val); break; case "USER_ID": $arSqlSearch[] = GetFilterQuery("S.USER_ID", $val, "N"); break; case "ANONYMOUS": $arSqlSearch[] = $val == "Y" ? "(S.USER_ID = 0 or S.USER_ID is null)" : "(S.USER_ID > 0 and S.USER_ID is not null)"; break; case "CONFIRMED": $arSqlSearch[] = $val == "Y" ? "S.CONFIRMED='Y'" : "S.CONFIRMED='N'"; break; case "ACTIVE": $arSqlSearch[] = $val == "Y" ? "S.ACTIVE='Y'" : "S.ACTIVE='N'"; break; case "FORMAT": $arSqlSearch[] = $val == "text" ? "S.FORMAT='text'" : "S.FORMAT='html'"; break; case "RUBRIC": case "RUBRIC_MULTI": case "DISTRIBUTION": if (is_array($val)) { $val = implode(" | ", $val); } if (strlen($val) > 0) { $from1 = " INNER JOIN b_subscription_rubric SR ON (SR.SUBSCRIPTION_ID=S.ID) "; $arSqlSearch[] = GetFilterQuery("SR.LIST_RUBRIC_ID", $val, "N"); } else { $arSqlSearch[] = " 1=0 "; } break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $arOrder = array(); foreach ($aSort as $by => $ord) { $by = strtoupper($by); $ord = strtoupper($ord) != "ASC" ? "DESC" : "ASC"; switch ($by) { case "ID": $arOrder[$by] = "S.ID " . $ord; break; case "DATE_INSERT": $arOrder[$by] = "S.DATE_INSERT " . $ord; break; case "DATE_UPDATE": $arOrder[$by] = "S.DATE_UPDATE " . $ord; break; case "DATE_CONFIRM": $arOrder[$by] = "S.DATE_CONFIRM " . $ord; break; case "ACT": $arOrder[$by] = "S.ACTIVE " . $ord; break; case "CONF": $arOrder[$by] = "S.CONFIRMED " . $ord; break; case "EMAIL": $arOrder[$by] = "S.EMAIL " . $ord; break; case "FMT": $arOrder[$by] = "S.FORMAT " . $ord; break; case "USER": $arOrder[$by] = "S.USER_ID " . $ord; break; case "CONFIRM_CODE": $arOrder[$by] = "S.CONFIRM_CODE " . $ord; break; } } if (count($arOrder) <= 0) { $arOrder["ID"] = "S.ID DESC"; } if (is_array($arNavStartParams)) { $strSql = "\n\t\t\t\tSELECT count(" . ($from1 != "" ? "DISTINCT S.ID" : "'x'") . ") as C\n\t\t\t\tFROM\n\t\t\t\t\tb_subscription S\n\t\t\t\t\tLEFT JOIN b_user U ON (S.USER_ID=U.ID)\n\t\t\t\t\t{$from1}\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch; $res_cnt = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $res_cnt = $res_cnt->Fetch(); $cnt = $res_cnt["C"]; $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tS.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED,\n\t\t\t\t\t" . $DB->DateToCharFunction("S.DATE_UPDATE") . " DATE_UPDATE,\n\t\t\t\t\t" . $DB->DateToCharFunction("S.DATE_INSERT") . " DATE_INSERT,\n\t\t\t\t\t" . $DB->DateToCharFunction("S.DATE_CONFIRM") . " DATE_CONFIRM,\n\t\t\t\t\tU.LOGIN USER_LOGIN,\n\t\t\t\t\tU.NAME USER_NAME,\n\t\t\t\t\tU.LAST_NAME USER_LAST_NAME\n\t\t\t\tFROM\n\t\t\t\t\tb_subscription S\n\t\t\t\t\tLEFT JOIN b_user U ON (S.USER_ID=U.ID)\n\t\t\t\t\t{$from1}\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\t" . ($from1 != "" ? "GROUP BY S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED, S.DATE_CONFIRM, S.DATE_UPDATE, S.DATE_INSERT, U.LOGIN, U.NAME, U.LAST_NAME" : "") . "\n\t\t\t\tORDER BY " . implode(", ", $arOrder); $res = new CDBResult(); $res->NavQuery($strSql, $cnt, $arNavStartParams); $res->is_filtered = IsFiltered($strSqlSearch); return $res; } else { $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tS.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED,\n\t\t\t\t\t" . $DB->DateToCharFunction("S.DATE_UPDATE") . " DATE_UPDATE,\n\t\t\t\t\t" . $DB->DateToCharFunction("S.DATE_INSERT") . " DATE_INSERT,\n\t\t\t\t\t" . $DB->DateToCharFunction("S.DATE_CONFIRM") . " DATE_CONFIRM,\n\t\t\t\t\tU.LOGIN USER_LOGIN,\n\t\t\t\t\tU.NAME USER_NAME,\n\t\t\t\t\tU.LAST_NAME USER_LAST_NAME\n\t\t\t\tFROM\n\t\t\t\t\tb_subscription S\n\t\t\t\t\tLEFT JOIN b_user U ON (S.USER_ID=U.ID)\n\t\t\t\t\t{$from1}\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\t" . ($from1 != "" ? "GROUP BY S.ID, S.USER_ID, S.ACTIVE, S.EMAIL, S.FORMAT, S.CONFIRM_CODE, S.CONFIRMED, S.DATE_CONFIRM, S.DATE_UPDATE, S.DATE_INSERT, U.LOGIN, U.NAME, U.LAST_NAME" : "") . "\n\t\t\t\tORDER BY " . implode(", ", $arOrder); $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $res->is_filtered = IsFiltered($strSqlSearch); return $res; } }
public static function GetGraphArray($arFilter, &$arLegend, $sort = false, $top = 0) { $err_mess = "File: " . __FILE__ . "<br>Line: "; global $arCityColor; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "COUNTRY_ID": if ($val != "NOT_REF") { $arSqlSearch[] = GetFilterQuery("C.COUNTRY_ID", $val, "N"); } break; case "DATE1": if (CheckDateTime($val)) { $arSqlSearch[] = "D.DATE_STAT>=" . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE2": if (CheckDateTime($val)) { $arSqlSearch[] = "D.DATE_STAT<=" . $DB->CharToDateFunction($val . " 23:59:59", "FULL"); } break; } } } $arrDays = array(); $arLegend = array(); $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\t" . $DB->DateToCharFunction("D.DATE_STAT", "SHORT") . " DATE_STAT,\n\t\t\t\t" . $DB->DateFormatToDB("DD", "D.DATE_STAT") . " DAY,\n\t\t\t\t" . $DB->DateFormatToDB("MM", "D.DATE_STAT") . " MONTH,\n\t\t\t\t" . $DB->DateFormatToDB("YYYY", "D.DATE_STAT") . " YEAR,\n\t\t\t\tD.CITY_ID,\n\t\t\t\tD.SESSIONS,\n\t\t\t\tD.NEW_GUESTS,\n\t\t\t\tD.HITS,\n\t\t\t\tD.C_EVENTS,\n\t\t\t\tC.NAME,\n\t\t\t\tC.SESSIONS TOTAL_SESSIONS,\n\t\t\t\tC.NEW_GUESTS TOTAL_NEW_GUESTS,\n\t\t\t\tC.HITS TOTAL_HITS,\n\t\t\t\tC.C_EVENTS TOTAL_C_EVENTS\n\t\t\tFROM\n\t\t\t\tb_stat_city_day D\n\t\t\t\tINNER JOIN b_stat_city C ON (C.ID = D.CITY_ID)\n\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\tORDER BY\n\t\t\t\tD.DATE_STAT, D.CITY_ID\n\t\t"; $rsD = $DB->Query($strSql, false, $err_mess . __LINE__); while ($arD = $rsD->Fetch()) { $arrDays[$arD["DATE_STAT"]]["D"] = $arD["DAY"]; $arrDays[$arD["DATE_STAT"]]["M"] = $arD["MONTH"]; $arrDays[$arD["DATE_STAT"]]["Y"] = $arD["YEAR"]; $arrDays[$arD["DATE_STAT"]][$arD["CITY_ID"]]["SESSIONS"] = $arD["SESSIONS"]; $arrDays[$arD["DATE_STAT"]][$arD["CITY_ID"]]["NEW_GUESTS"] = $arD["NEW_GUESTS"]; $arrDays[$arD["DATE_STAT"]][$arD["CITY_ID"]]["HITS"] = $arD["HITS"]; $arrDays[$arD["DATE_STAT"]][$arD["CITY_ID"]]["C_EVENTS"] = $arD["C_EVENTS"]; $arLegend[$arD["CITY_ID"]]["CITY_ID"] = intval($arD["CITY_ID"]); $arLegend[$arD["CITY_ID"]]["NAME"] = $arD["NAME"]; $arLegend[$arD["CITY_ID"]]["SESSIONS"] += $arD["SESSIONS"]; $arLegend[$arD["CITY_ID"]]["NEW_GUESTS"] += $arD["NEW_GUESTS"]; $arLegend[$arD["CITY_ID"]]["HITS"] += $arD["HITS"]; $arLegend[$arD["CITY_ID"]]["C_EVENTS"] += $arD["C_EVENTS"]; $arLegend[$arD["CITY_ID"]]["TOTAL_SESSIONS"] = $arD["TOTAL_SESSIONS"]; $arLegend[$arD["CITY_ID"]]["TOTAL_NEW_GUESTS"] = $arD["TOTAL_NEW_GUESTS"]; $arLegend[$arD["CITY_ID"]]["TOTAL_HITS"] = $arD["TOTAL_HITS"]; $arLegend[$arD["CITY_ID"]]["TOTAL_C_EVENTS"] = $arD["TOTAL_C_EVENTS"]; } if ($sort) { CStatisticSort::Sort($arLegend, $sort); } if ($top) { $totals = array("CITY_ID" => 0, "NAME" => GetMessage("STAT_CITY_OTHER"), "SESSIONS" => 0, "NEW_GUESTS" => 0, "HITS" => 0, "C_EVENTS" => 0, "TOTAL_SESSIONS" => 0, "TOTAL_NEW_GUESTS" => 0, "TOTAL_HITS" => 0, "TOTAL_C_EVENTS" => 0); $i = 0; while (count($arLegend) > $top) { $i++; $tail = array_pop($arLegend); $totals["SESSIONS"] += $tail["SESSIONS"]; $totals["NEW_GUESTS"] += $tail["NEW_GUESTS"]; $totals["HITS"] += $tail["HITS"]; $totals["C_EVENTS"] += $tail["C_EVENTS"]; $totals["TOTAL_SESSIONS"] += $tail["TOTAL_SESSIONS"]; $totals["TOTAL_NEW_GUESTS"] += $tail["TOTAL_NEW_GUESTS"]; $totals["TOTAL_HITS"] += $tail["TOTAL_HITS"]; $totals["TOTAL_C_EVENTS"] += $tail["TOTAL_C_EVENTS"]; } if ($i) { $arLegend[0] = $totals; } foreach ($arrDays as $DATE_STAT => $arDate) { foreach ($arDate as $CITY_ID => $arCity) { if (intval($CITY_ID) > 0) { if (!array_key_exists($CITY_ID, $arLegend)) { $arrDays[$DATE_STAT][0]["CITY_ID"] = 0; $arrDays[$DATE_STAT][0]["NAME"] = GetMessage("STAT_CITY_OTHER"); $arrDays[$DATE_STAT][0]["SESSIONS"] += $arCity["SESSIONS"]; $arrDays[$DATE_STAT][0]["NEW_GUESTS"] += $arCity["NEW_GUESTS"]; $arrDays[$DATE_STAT][0]["HITS"] += $arCity["HITS"]; $arrDays[$DATE_STAT][0]["C_EVENTS"] += $arCity["C_EVENTS"]; unset($arrDays[$DATE_STAT][$CITY_ID]); } } } } } $total = count($arLegend); foreach ($arLegend as $key => $arr) { if (strlen($arCountryColor[$key]) > 0) { $color = $arCountryColor[$key]; } else { $color = GetNextRGB($color_getnext, $total); $color_getnext = $color; } $arr["COLOR"] = $color; $arLegend[$key] = $arr; } return $arrDays; }
/** * <p>Метод производит выборку уведомлений с сортировкой и фильтрацией. Статичный метод.</p> * * * @param array $arSort = array() Сортировка осуществляется по: <ul> <li> <b>ID</b> - идентификатору * сообщения;</li> <li> <b>MODULE_ID</b> - идентификатору модуля, к которому * относится сообщение.</li> </ul> * * @param array $arFilter = array() Фильтрация осуществляется по: <ul> <li> <b>ID</b> - идентификатору * сообщения;</li> <li> <b>MODULE_ID</b> - идентификатору модуля, к которому * относится сообщение;</li> <li> <b>TAG</b> - тегу;</li> <li> <b>ENABLE_CLOSE</b>- * разрешению на ручное закрытие.</li> </ul> * * @return mixed <p>Возвращается экземляр класса <a * href="http://dev.1c-bitrix.ru/api_help/main/reference/cdbresult/index.php">CDBResult</a> для дальней * обработки.</p> * * <h4>Example</h4> * <pre> * CAdminNotify::GetList(array('ID' => 'DESC'), array('MODULE_ID'=>'main')); * </pre> * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cdbresult/index.php">CDBResult</a> </li> </ul><a * name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/main/reference/cadminnotify/getlist.php * @author Bitrix */ public static function GetList($arSort = array(), $arFilter = array()) { global $DB; $arSqlSearch = array(); $strSqlSearch = ''; $err_mess = self::err_mess() . '<br />Function: GetList<br />Line: '; if (!is_array($arFilter)) { $arFilter = array(); } if (!isset($arFilter['LID'])) { $arFilter['LID'] = LANGUAGE_ID; } if (!isset($arFilter['PUBLIC_SECTION'])) { $arFilter['PUBLIC_SECTION'] = 'N'; } $strFrom = ''; $strSelect = "AN.ID, AN.MODULE_ID, AN.TAG, AN.MESSAGE, AN.ENABLE_CLOSE, AN.PUBLIC_SECTION"; if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); for ($i = 0, $ic = count($filter_keys); $i < $ic; $i++) { $val = $arFilter[$filter_keys[$i]]; if (strlen($val) <= 0 || $val == 'NOT_REF') { continue; } switch (strtoupper($filter_keys[$i])) { case 'ID': $arSqlSearch[] = GetFilterQuery('AN.ID', $val, 'N'); break; case 'MODULE_ID': $arSqlSearch[] = GetFilterQuery('AN.MODULE_ID', $val); break; case 'TAG': $arSqlSearch[] = GetFilterQuery('AN.TAG', $val); break; case 'MESSAGE': $arSqlSearch[] = GetFilterQuery('AN.MESSAGE', $val); break; case 'ENABLE_CLOSE': $arSqlSearch[] = $val == 'Y' ? "AN.ENABLE_CLOSE='Y'" : "AN.ENABLE_CLOSE='N'"; break; case 'LID': $strSelect .= ", ANL.MESSAGE as MESSAGE_LANG"; $strFrom = 'LEFT JOIN b_admin_notify_lang ANL ON (AN.ID = ANL.NOTIFY_ID AND ANL.LID = \'' . $DB->ForSQL($val) . '\')'; break; case 'PUBLIC_SECTION': $arSqlSearch[] = $val == 'Y' ? "AN.PUBLIC_SECTION='Y'" : "AN.PUBLIC_SECTION='N'"; } } } $sOrder = ''; foreach ($arSort as $key => $val) { $ord = strtoupper($val) != 'ASC' ? 'DESC' : 'ASC'; switch (strtoupper($key)) { case 'ID': $sOrder .= ', AN.ID ' . $ord; break; case 'MODULE_ID': $sOrder .= ', AN.MODULE_ID ' . $ord; break; case 'ENABLE_CLOSE': $sOrder .= ', AN.ENABLE_CLOSE ' . $ord; break; } } if (strlen($sOrder) <= 0) { $sOrder = 'AN.ID DESC'; } $strSqlOrder = ' ORDER BY ' . TrimEx($sOrder, ','); $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "SELECT " . $strSelect . " FROM b_admin_notify AN " . $strFrom . " WHERE " . $strSqlSearch . " " . $strSqlOrder; $res = $DB->Query($strSql, false, $err_mess . __LINE__); return $res; }
function GetList(&$by, &$order, $arFilter = array(), &$is_filtered) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": case "SEARCHER_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match); break; case "URL": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.URL", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "URL_404": $arSqlSearch[] = $val == "Y" ? "H.URL_404='Y'" : "H.URL_404='N'"; break; case "SEARCHER": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.NAME", $val, $match); break; case "DATE1": if (CheckDateTime($val)) { $arSqlSearch[] = "H.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE2": if (CheckDateTime($val)) { $arSqlSearch[] = "H.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); } break; case "IP": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.IP", $val, $match, array(".")); break; case "USER_AGENT": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.USER_AGENT", $val, $match); break; case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("H.SITE_ID", $val, $match); break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); if ($by == "s_id") { $strSqlOrder = "ORDER BY H.ID"; } elseif ($by == "s_site_id") { $strSqlOrder = "ORDER BY H.SITE_ID"; } elseif ($by == "s_date_hit") { $strSqlOrder = "ORDER BY H.DATE_HIT"; } elseif ($by == "s_searcher_id") { $strSqlOrder = "ORDER BY H.SEARCHER_ID"; } elseif ($by == "s_user_agent") { $strSqlOrder = "ORDER BY H.USER_AGENT"; } elseif ($by == "s_ip") { $strSqlOrder = "ORDER BY H.IP"; } elseif ($by == "s_url") { $strSqlOrder = "ORDER BY H.URL "; } else { $by = "s_date_hit"; $strSqlOrder = "ORDER BY H.DATE_HIT"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "\n\t\t\tSELECT /*TOP*/\n\t\t\t\tH.ID, H.SEARCHER_ID, H.URL, H.URL_404, H.IP, H.USER_AGENT, H.HIT_KEEP_DAYS, H.SITE_ID,\n\t\t\t\tS.NAME SEARCHER_NAME,\n\t\t\t\t" . $DB->DateToCharFunction("H.DATE_HIT") . " DATE_HIT\n\t\t\tFROM\n\t\t\t\tb_stat_searcher_hit H\n\t\t\tINNER JOIN b_stat_searcher S ON (S.ID = H.SEARCHER_ID)\n\t\t\tWHERE\n\t\t\t" . $strSqlSearch . "\n\t\t\t" . $strSqlOrder . "\n\t\t"; $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch); return $res; }
public function GetList($aSort=array(), $arFilter=Array(), $getCommon=true) { global $DB; $err_mess = (CAdminFilter::err_mess())."<br>Function: GetList<br>Line: "; $arSqlSearch = Array(); if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (strlen($val)<=0 || $val=="NOT_REF") continue; switch(strtoupper($key)) { case "ID": $arSqlSearch[] = GetFilterQuery("F.ID",$val,"N"); break; case "USER_ID": if($getCommon) $arSqlSearch[] = "F.USER_ID=".intval($val)." OR F.COMMON='Y'"; else $arSqlSearch[] = "F.USER_ID = ".intval($val); break; case "FILTER_ID": $arSqlSearch[] = GetFilterQuery("F.FILTER_ID", $val); break; case "NAME": $arSqlSearch[] = GetFilterQuery("F.NAME", $val); break; case "FIELDS": $arSqlSearch[] = GetFilterQuery("F.FIELDS", $val); break; case "COMMON": $arSqlSearch[] = "F.COMMON = '".$DB->ForSql($val,1)."'"; break; case "PRESET": $arSqlSearch[] = "F.PRESET = '".$DB->ForSql($val,1)."'"; break; case "LANGUAGE_ID": $arSqlSearch[] = "F.LANGUAGE_ID = '".$DB->ForSql($val,2)."'"; break; case "PRESET_ID": $arSqlSearch[] = GetFilterQuery("F.PRESET_ID", $val); break; case "SORT": $arSqlSearch[] = GetFilterQuery("F.SORT", $val); break; case "SORT_FIELD": $arSqlSearch[] = GetFilterQuery("F.SORT_FIELD", $val); break; } } } $sOrder = ""; foreach($aSort as $key=>$val) { $ord = (strtoupper($val) <> "ASC"? "DESC":"ASC"); switch (strtoupper($key)) { case "ID": $sOrder .= ", F.ID ".$ord; break; case "USER_ID": $sOrder .= ", F.USER_ID ".$ord; break; case "FILTER_ID": $sOrder .= ", F.FILTER_ID ".$ord; break; case "NAME": $sOrder .= ", F.NAME ".$ord; break; case "FIELDS": $sOrder .= ", F.FIELDS ".$ord; break; case "COMMON": $sOrder .= ", F.COMMON ".$ord; break; case "PRESET": $sOrder .= ", F.PRESET ".$ord; break; case "LANGUAGE_ID": $sOrder .= ", F.LANGUAGE_ID ".$ord; break; case "PRESET_ID": $sOrder .= ", F.PRESET_ID ".$ord; break; case "SORT": $sOrder .= ", F.SORT ".$ord; break; case "SORT_FIELD": $sOrder .= ", F.SORT_FIELD ".$ord; break; } } if (strlen($sOrder)<=0) $sOrder = "F.ID ASC"; $strSqlOrder = " ORDER BY ".TrimEx($sOrder,","); $strSqlSearch = GetFilterSqlSearch($arSqlSearch,"noFilterLogic"); $strSql = " SELECT F.ID, F.USER_ID, F.NAME, F.FILTER_ID, F.FIELDS, F.COMMON, F.PRESET, F.LANGUAGE_ID, F.PRESET_ID, F.SORT, F.SORT_FIELD FROM b_filters F WHERE ".$strSqlSearch." ".$strSqlOrder; $res = $DB->Query($strSql, false, $err_mess.__LINE__); return $res; }
function GetList($arSort = null, $arFilter = null) { $err_mess = self::err_mess() . "<br>Function: GetList<br>Line: "; global $DB, $USER, $APPLICATION; $table = self::TABLE; $arSqlSearch = array(); if (!is_array($arFilter)) { $arFilter = array(); } foreach ($arFilter as $key => $val) { if (is_array($val) && count($val) <= 0 || !is_array($val) && (strlen($val) <= 0 || $val === 'NOT_REF')) { continue; } $key = strtoupper($key); if (is_array($val)) { $val = implode(" | ", $val); } switch ($key) { case "ID": $arSqlSearch[] = GetFilterQuery("T.ID", $val, "N"); break; case "~NAME": //case "DESCRIPTION": $arSqlSearch[] = GetFilterQuery("T.NAME", $val, "N"); break; } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $arSort = is_array($arSort) ? $arSort : array(); if (isset($arSort["DESCRIPTION"])) { unset($arSort["DESCRIPTION"]); } if (count($arSort) > 0) { $ar1 = array_merge($DB->GetTableFieldsList($table), array()); $ar2 = array_keys($arSort); $arDiff = array_diff($ar2, $ar1); if (is_array($arDiff) && count($arDiff) > 0) { foreach ($arDiff as $value) { unset($arSort[$value]); } } } if (count($arSort) <= 0) { $arSort = array("ID" => "asc"); } foreach ($arSort as $by => $order) { if (strtoupper($order) != "DESC") { $order = "ASC"; } $arSqlOrder[] = $by . " " . $order; } if (is_array($arSqlOrder) && count($arSqlOrder) > 0) { $strSqlOrder = " ORDER BY " . implode(",", $arSqlOrder); } $strSql = "\n\t\t\tSELECT\n\t\t\t\tT.*\n\t\t\tFROM\n\t\t\t\t{$table} T\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\t"; $rs = $DB->Query($strSql, false, $err_mess . __LINE__); return $rs; }
/** * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#referer">ссылающихся сайтов (страниц)</a>.</p> * * * * * @param string &$by = "s_id" Поле для сортировки. В зависимости от группировки списка, набор * доступных значений данной переменной может быть различным. <ul> * <li>при группировке по ссылающейся странице (<i>filter</i>["<b>GROUP</b>"]="U"): <ul> * <li> <b>s_url_from</b> - ссылающаяся страница; </li> <li> <b>s_quantity</b> - количество * заходов с ссылающейся страницы; </li> <li> <b>s_average_hits</b> - среднее * количество <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a>, * производимое посетителями заходящими с той или ссылающейся * страницы. </li> </ul> </li> <li>при группировке по ссылающемуся домену * (<i>filter</i>["<b>GROUP</b>"]="S"): <ul> <li> <b>s_url_from</b> - ссылающийся домен; </li> <li> * <b>s_quantity</b> - количество заходов с ссылающегося домена; </li> <li> * <b>s_average_hits</b> - среднее количество хитов, производимое * посетителями. </li> </ul> </li> <li>когда группировка не установлена: <ul> <li> * <b>s_id</b> - ID записи; </li> <li> <b>s_site_id</b> - ID сайта, на который пришли; </li> <li> * <b>s_url_from</b> - ссылающаяся страница (с которой пришли); </li> <li> <b>s_url_to</b> * - страница на которую пришли; </li> <li> <b>s_date_hit</b> - дата; </li> <li> * <b>s_session_id</b> - ID сессии. </li> </ul> </li> </ul> * * * * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul> * * * * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве * допустимы следующие ключи: <ul> <li> <b>ID</b> - ID записи; </li> <li> * <b>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b> * будет искаться вхождение; </li> <li> <b>SESSION_ID</b> - ID сессии; </li> <li> * <b>SESSION_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>SESSION_ID</b> будет искаться вхождение; </li> <li> <b>DATE1</b> - начальное * значение интервала для поля "дата"; </li> <li> <b>DATE2</b> - конечное * значение интервала для поля "дата"; </li> <li> <b>FROM_PROTOCOL</b> - протокол * ссылающейся страницы; </li> <li> <b>FROM_PROTOCOL_EXACT_MATCH</b> - если значение * равно "Y", то при фильтрации по <b>FROM_PROTOCOL</b> будет искаться точное * совпадение; </li> <li> <b>FROM_DOMAIN</b> - домен ссылающейся страницы; </li> <li> * <b>FROM_DOMAIN_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>FROM_DOMAIN</b> будет искаться точное совпадение; </li> <li> <b>FROM_PAGE</b> - * ссылающаяся страница; </li> <li> <b>FROM_PAGE_EXACT_MATCH</b> - если значение равно * "Y", то при фильтрации по <b>FROM_PAGE</b> будет искаться точное * совпадение; </li> <li> <b>FROM</b> - протокол + домен + ссылающаяся страница; * </li> <li> <b>FROM_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>FROM</b> будет искаться точное совпадение; </li> <li> <b>TO</b>* - страница на * которую пришли; </li> <li> <b>TO_EXACT_MATCH</b> - если значение равно "Y", то при * фильтрации по <b>TO</b> будет искаться точное совпадение; </li> <li> * <b>TO_404</b> - была ли <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a> * на странице, на которую пришли, возможные значения: <ul> <li> <b>Y</b> - * была; </li> <li> <b>N</b> - не была. </li> </ul> </li> <li> <b>SITE_ID</b> - ID сайта на который * пришли; </li> <li> <b>GROUP</b> - группировка результирующего списка; * возможные значения: <ul> <li> <b>S</b> - группировка по ссылающемуся * домену (сайту); </li> <li> <b>U</b> - группировка по ссылающейся странице. * </li> </ul> </li> </ul> * - допускается <a * href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a> * * * * @param bool &$is_filtered Флаг отфильтрованности результирующего списка. Если значение * равно "true", то список был отфильтрован. * * * * @param int &$total Суммарные количество заходов с ссылающихся страниц. * * * * @param string &$group_by Группировка результирующего списка. Возможные значения: <ul> <li> * <b>U</b> - группировка по ссылающейся странице; </li> <li> <b>S</b> - * группировка по ссылающемуся домену. </li> </ul> * * * * @param int &$max Количество заходов с самой популярной ссылающейся страницы. * * * * @return CDBResult * * * <h4>Example</h4> * <pre> * <? * // отфильтруем только заходы с доменов "google" * // сгруппировав по ссылающемуся домену * $arFilter = array( * "FROM_DOMAIN" => "google", * "GROUP" => "S" * ); * * // получим список записей * $rs = <b>CReferer::GetList</b>( * ($by = "s_url_from"), * ($order = "desc"), * $arFilter, * $is_filtered, * $total, * $group_by, * $max * ); * * // выведем все записи * while ($ar = $rs->Fetch()) * { * echo "<pre>"; print_r($ar); echo "</pre>"; * } * ?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#referer">Термин "Ссылающийся * сайт (страница)"</a> </li> </ul> <a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/creferer/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, &$total, &$grby, &$max) { $err_mess = "File: " . __FILE__ . "<br>Line: "; global $grby, $total; $DB = CDatabase::GetModuleConnection('statistic'); $group = false; $strSqlGroup = "GROUP BY L.PROTOCOL, L.SITE_NAME, L.URL_FROM, R.HITS, R.SESSIONS"; $url_from = $DB->Concat("L.PROTOCOL", "L.SITE_NAME", "L.URL_FROM"); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": case "SESSION_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L." . $key, $val, $match); break; case "DATE1": if (CheckDateTime($val)) { $arSqlSearch[] = "L.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE2": if (CheckDateTime($val)) { $arSqlSearch[] = "L.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); } break; case "FROM_PROTOCOL": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.PROTOCOL", $val, $match, array("/", "\\", ":")); break; case "FROM_DOMAIN": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.SITE_NAME", $val, $match, array(".")); break; case "FROM_PAGE": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.URL_FROM", $val, $match, array("/", "\\", ".", "?", "#", ":", ":")); break; case "FROM": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery($url_from, $val, $match, array("/", "\\", ".", "?", "#", ":"), "N", "N"); break; case "TO": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.URL_TO", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "TO_404": $arSqlSearch[] = $val == "Y" ? "L.URL_TO_404='Y'" : "L.URL_TO_404='N'"; break; case "GROUP": $group = true; if ($val == "S") { $find_group = "S"; $strSqlGroup = "GROUP BY L.SITE_NAME, R.HITS, R.SESSIONS"; $url_from = "L.SITE_NAME"; } else { $find_group = "U"; } break; case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L.SITE_ID", $val, $match); break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $grby = $find_group == "U" || $find_group == "S" ? $find_group : ""; $strSqlOrder = ""; if (strlen($grby) <= 0) { if ($by == "s_id") { $strSqlOrder = " ORDER BY L.ID "; } elseif ($by == "s_site_id") { $strSqlOrder = " ORDER BY L.SITE_ID "; } elseif ($by == "s_url_from") { $strSqlOrder = " ORDER BY URL_FROM "; } elseif ($by == "s_url_to") { $strSqlOrder = " ORDER BY L.URL_TO "; } elseif ($by == "s_date_hit") { $strSqlOrder = " ORDER BY L.DATE_HIT "; } elseif ($by == "s_session_id") { $strSqlOrder = " ORDER BY L.SESSION_ID "; } else { $by = "s_id"; $strSqlOrder = "ORDER BY L.ID"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\t" . $url_from . " as URL_FROM,\n\t\t\t\t\tL.ID,\n\t\t\t\t\tL.SESSION_ID,\n\t\t\t\t\tL.SITE_ID,\n\t\t\t\t\t" . $DB->DateToCharFunction("L.DATE_HIT") . " DATE_HIT,\n\t\t\t\t\tL.URL_TO,\n\t\t\t\t\tL.URL_TO_404\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t"; } elseif (IsFiltered($strSqlSearch) || $grby == "U") { if ($by == "s_url_from") { $strSqlOrder = "ORDER BY URL_FROM"; } elseif ($by == "s_quantity") { $strSqlOrder = "ORDER BY QUANTITY"; } elseif ($by == "s_average_hits") { $strSqlOrder = "ORDER BY AVERAGE_HITS"; } else { $by = "s_quantity"; $strSqlOrder = "ORDER BY QUANTITY"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tcount(L.ID) as COUNTER\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\t\tLEFT JOIN b_stat_referer R ON (R.ID = L.REFERER_ID)\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlGroup . "\n\t\t\t"; $c = $DB->Query($strSql, false, $err_mess . __LINE__); $total = 0; $arrCount = array(); while ($cr = $c->Fetch()) { $total += intval($cr["COUNTER"]); $arrCount[] = intval($cr["COUNTER"]); } if (count($arrCount) > 0) { $max = max($arrCount); } $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\t" . $url_from . " URL_FROM,\n\t\t\t\t\tcount(L.ID) QUANTITY,\n\t\t\t\t\t(count(L.ID)*100)/{$total} C_PERCENT,\n\t\t\t\t\tR.HITS/R.SESSIONS AVERAGE_HITS\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\t\tLEFT JOIN b_stat_referer R ON (R.ID = L.REFERER_ID)\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlGroup . "\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t"; } elseif ($grby == "S") { if ($by == "s_url_from") { $strSqlOrder = "ORDER BY URL_FROM"; } elseif ($by == "s_quantity") { $strSqlOrder = "ORDER BY QUANTITY"; } elseif ($by == "s_average_hits") { $strSqlOrder = "ORDER BY AVERAGE_HITS"; } else { $by = "s_quantity"; $strSqlOrder = "ORDER BY QUANTITY"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "SELECT sum(R.SESSIONS) TOTAL, max(R.SESSIONS) MAX FROM b_stat_referer R"; $c = $DB->Query($strSql, false, $err_mess . __LINE__); $cr = $c->Fetch(); $total = intval($cr["TOTAL"]); $max = intval($cr["MAX"]); $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\tR.SITE_NAME URL_FROM,\n\t\t\t\t\tsum(R.SESSIONS) QUANTITY,\n\t\t\t\t\t(sum(R.SESSIONS)*100)/{$total} C_PERCENT,\n\t\t\t\t\tsum(R.HITS)/sum(R.SESSIONS) AVERAGE_HITS\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer R\n\t\t\t\tGROUP BY R.SITE_NAME\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t"; } $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch) || $group; return $res; }
function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, $CHECK_RIGHTS = "Y") { $err_mess = CAdvType_all::err_mess() . "<br>Function: GetList<br>Line: "; global $DB; $arSqlSearch = array(); if ($CHECK_RIGHTS == "Y") { $isAdmin = CAdvContract::IsAdmin(); $isDemo = CAdvContract::IsDemo(); $isManager = CAdvContract::IsManager(); $isAdvertiser = CAdvContract::IsAdvertiser(); } else { $isAdmin = true; $isDemo = true; $isManager = true; $isAdvertiser = true; } if ($isAdmin || $isDemo || $isManager || $isAdvertiser) { if (CAdvType::CheckFilter($arFilter)) { if (is_array($arFilter)) { $filter_keys = array_keys($arFilter); for ($i = 0, $n = count($filter_keys); $i < $n; $i++) { $key = $filter_keys[$i]; $val = $arFilter[$filter_keys[$i]]; if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = in_array($key . "_EXACT_MATCH", $filter_keys) ? true : false; $key = strtoupper($key); switch ($key) { case "SID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("T.SID", $val, $match); break; case "DATE_MODIFY_1": $arSqlSearch[] = "T.DATE_MODIFY>=" . $DB->CharToDateFunction($val, "SHORT"); break; case "DATE_MODIFY_2": $arSqlSearch[] = "T.DATE_MODIFY<=" . $DB->CharToDateFunction($val . " 23:59:59", "FULL"); break; case "ACTIVE": $arSqlSearch[] = $val == "Y" ? "T.ACTIVE='Y'" : "T.ACTIVE='N'"; break; case "NAME": case "DESCRIPTION": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("T." . $key, $val, $match); break; } } } } if ($by == "s_sid") { $strSqlOrder = " ORDER BY T.SID "; } elseif ($by == "s_date_modify") { $strSqlOrder = " ORDER BY T.DATE_MODIFY "; } elseif ($by == "s_modified_by") { $strSqlOrder = " ORDER BY T.MODIFIED_BY "; } elseif ($by == "s_date_create") { $strSqlOrder = " ORDER BY T.DATE_CREATE "; } elseif ($by == "s_created_by") { $strSqlOrder = " ORDER BY T.CREATED_BY "; } elseif ($by == "s_active") { $strSqlOrder = " ORDER BY T.ACTIVE "; } elseif ($by == "s_name") { $strSqlOrder = " ORDER BY T.NAME "; } elseif ($by == "s_banners") { $strSqlOrder = " ORDER BY BANNER_COUNT "; } elseif ($by == "s_description") { $strSqlOrder = " ORDER BY T.DESCRIPTION "; } else { $strSqlOrder = " ORDER BY T.SORT "; $by = "s_sort"; } if ($order != "desc") { $strSqlOrder .= " asc "; $order = "asc"; } else { $strSqlOrder .= " desc "; $order = "desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strContracts = ""; if (!$isAdmin && !$isDemo && !$isManager) { $strContracts = "0"; $arPermissions = CAdvContract::GetUserPermissions(); foreach ($arPermissions as $contract_id => $arContractPerms) { if (is_array($arContractPerms) && !empty($arContractPerms)) { $strContracts .= "," . $contract_id; } } } $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tT.SID,\n\t\t\t\t\tT.ACTIVE,\n\t\t\t\t\tT.SORT,\n\t\t\t\t\tT.NAME,\n\t\t\t\t\tT.DESCRIPTION,\n\t\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE") . "\tDATE_CREATE,\n\t\t\t\t\t" . $DB->DateToCharFunction("T.DATE_MODIFY") . "\tDATE_MODIFY,\n\t\t\t\t\tT.CREATED_BY,\n\t\t\t\t\tT.MODIFIED_BY,\n\t\t\t\t\tcount(distinct B.ID)\t\t\t\t\t\t\tBANNER_COUNT\n\t\t\t\tFROM\n\t\t\t\t\tb_adv_type T\n\t\t\t\t\tLEFT JOIN b_adv_banner B ON (B.TYPE_SID=T.SID" . ($strContracts == "" ? "" : " AND B.CONTRACT_ID IN (" . $strContracts . ")") . ")\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch} " . ($strContracts == "" ? "" : "and exists(select 'x' from b_adv_contract_2_type CT where (CT.TYPE_SID=T.SID OR CT.TYPE_SID='ALL') AND CT.CONTRACT_ID IN (" . $strContracts . ")) ") . " and T.SID<>'ALL'\n\t\t\t\tGROUP BY\n\t\t\t\t\tT.SID, T.ACTIVE, T.SORT, T.NAME, T.DESCRIPTION,\tT.DATE_CREATE, T.DATE_MODIFY, T.CREATED_BY, T.MODIFIED_BY\n\t\t\t\t{$strSqlOrder}\n\t\t\t\t"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch); return $res; } return null; }