Example #1
0
 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;
 }
Example #2
0
 function GetList($arOrder = array('CSORT' => 'ASC'), $arFilter = array(), $arFields = array())
 {
     global $DB;
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         $filter_keys = array_keys($arFilter);
         for ($i = 0, $cnt = count($filter_keys); $i < $cnt; $i++) {
             $val = $arFilter[$filter_keys[$i]];
             $key = $filter_keys[$i];
             switch (strtoupper($filter_keys[$i])) {
                 case "ID":
                     $arSqlSearch[] = 'ID=' . intval($val);
                     break;
                 case "ACTIVE":
                     $arSqlSearch[] = GetFilterQuery("ACTIVE", $val);
                     break;
                 case "NAME":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("NAME", $val, $match);
                     break;
                 case "RATE":
                     $arSqlSearch[] = 'RATE=\'' . doubleval($val) . '\'';
                     //GetFilterQuery('RATE', $val);
                     break;
             }
         }
     }
     $sOrder = "";
     $sort_keys = array_keys($arOrder);
     for ($i = 0, $intCount = count($sort_keys); $i < $intCount; $i++) {
         $ord = strtoupper($arOrder[$sort_keys[$i]]) != "ASC" ? "DESC" : "ASC";
         switch (strtoupper($sort_keys[$i])) {
             case "ID":
                 $sOrder .= ", ID " . $ord;
                 break;
             case "C_SORT":
                 $sOrder .= ", C_SORT " . $ord;
                 break;
             case "ACTIVE":
                 $sOrder .= ", ACTIVE " . $ord;
                 break;
             case "NAME":
                 $sOrder .= ", NAME " . $ord;
                 break;
             case "RATE":
                 $sOrder .= ", RATE " . $ord;
                 break;
         }
     }
     if (strlen($sOrder) <= 0) {
         $sOrder = "C_SORT ASC";
     }
     $strSqlOrder = " ORDER BY " . TrimEx($sOrder, ",");
     $arDefaultFields = array('ID', 'TIMESTAMP_X', 'ACTIVE', 'C_SORT', 'NAME', 'RATE');
     if (!is_array($arFields) || count($arFields) <= 0) {
         $arQueryFields = $arDefaultFields;
     } else {
         $arQueryFields = array();
         foreach ($arFields as $fld) {
             if (in_array($fld, $arDefaultFields)) {
                 $arQueryFields[] = $fld;
             }
         }
         if (count($arQueryFields) <= 0) {
             $arQueryFields = $arDefaultFields;
         }
     }
     $strSqlFields = implode(', ', $arQueryFields);
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\nSELECT\n" . $strSqlFields . "\nFROM b_catalog_vat\nWHERE\n" . $strSqlSearch . "\n" . $strSqlOrder . "\n";
     //echo $strSql;
     $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $res->is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #3
0
 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;
 }
Example #4
0
 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;
     }
 }
Example #5
0
 /**
  * <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>
  * &lt;?
  * // выберем хиты сессии #1056
  * $arFilter = array(
  *     "SESSION_ID" =&gt; 1056
  *     );
  * 
  * // получим список записей
  * $rs = <b>CHit::GetList</b>(
  *     ($by = "s_id"), 
  *     ($order = "desc"), 
  *     $arFilter, 
  *     $is_filtered
  *     );
  * 
  * // выведем все записи
  * while ($ar = $rs-&gt;Fetch())
  * {
  *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
  * }
  * ?&gt;
  * </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;
 }
Example #6
0
	/**
	 * <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>
	 * &lt;?
	 * // выберем только тех посетителей UserAgent которых содержит "Opera"
	 * $arFilter = array(
	 *     "USER_AGENT" =&gt; "Opera"
	 *     );
	 * 
	 * // получим список записей
	 * $rs = <b>CGuest::GetList</b>(
	 *     ($by = "s_id"), 
	 *     ($order = "desc"), 
	 *     $arFilter, 
	 *     $is_filtered
	 *     );
	 * 
	 * // выведем все записи
	 * while ($ar = $rs-&gt;Fetch())
	 * {
	 *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
	 * }
	 * ?&gt;
	 * </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;
	}
Example #7
0
 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;
 }
Example #8
0
	/**
	 * <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("фильтруемое поле"=&gt;"значение" [, ...]), может
	 * принимать значения: <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>
	 * &lt;?
	 * $arFilter = Array(
	 *     "ID"            =&gt; "12 | 134",
	 *     "TYPE"          =&gt; "контракт &amp; рекл",
	 *     "TYPE_ID"       =&gt; "ADV_BANNER | ADV_CONTRACT",
	 *     "TIMESTAMP_1"   =&gt; "12.11.2001",
	 *     "TIMESTAMP_2"   =&gt; "12.11.2005",
	 *     "SITE_ID"       =&gt; "ru | en",
	 *     "ACTIVE"        =&gt; "Y",
	 *     "FROM"          =&gt; "bitrixsoft.ru",
	 *     "TO"            =&gt; "#TO#",
	 *     "BCC"           =&gt; "admin",
	 *     "SUBJECT"       =&gt; "конктракт",
	 *     "BODY_TYPE"     =&gt; "text",
	 *     "BODY"          =&gt; "auto"
	 *     );
	 * $rsMess = <b>CEventMessage::GetList</b>($by="site_id", $order="desc", $arFilter);
	 * $is_filtered = $rsMess-&gt;is_filtered;
	 * ?&gt;
	 * </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;
	}
Example #9
0
 function GetSimpleList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = 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);
             switch ($key) {
                 case "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("A." . $key, $val, $match);
                     break;
                 case "REFERER1":
                 case "REFERER2":
                 case "DESCRIPTION":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("A." . $key, $val, $match);
                     break;
             }
         }
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $order = $order != "desc" ? "asc" : "desc";
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY A.ID " . $order;
     } elseif ($by == "s_referer1") {
         $strSqlOrder = "ORDER BY A.REFERER1 " . $order . ", A.REFERER2";
     } elseif ($by == "s_referer2") {
         $strSqlOrder = "ORDER BY A.REFERER2 " . $order;
     } elseif ($by == "s_description") {
         $strSqlOrder = "ORDER BY A.DESCRIPTION " . $order;
     } else {
         $by = "s_referer1";
         $strSqlOrder = "ORDER BY A.REFERER1 " . $order . ", A.REFERER2";
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tA.ID,\n\t\t\t\tA.REFERER1,\n\t\t\t\tA.REFERER2,\n\t\t\t\tA.DESCRIPTION\n\t\t\tFROM\n\t\t\t\tb_stat_adv A\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\tLIMIT " . intval(COption::GetOptionString('statistic', 'RECORDS_LIMIT')) . "\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #10
0
 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":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("S.ID", $val, $match);
                     break;
                 case "DATE_START_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_START >= " . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_START_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_START < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
                     }
                     break;
                 case "DATE_END_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_END >= " . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_END_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_END < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
                     }
                     break;
                 case "ACTIVE":
                 case "SAVE_STATISTIC":
                     $arSqlSearch[] = $val == "Y" ? "S." . $key . "='Y'" : "S." . $key . "='N'";
                     break;
                 case "IP_1":
                 case "IP_2":
                 case "IP_3":
                 case "IP_4":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match);
                     break;
                 case "URL_FROM":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S.URL_FROM", $val, $match, array("/", "\\", ".", "?", "#", ":"));
                     break;
                 case "USER_AGENT":
                 case "MESSAGE":
                 case "COMMENTS":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match);
                     break;
                 case "URL_TO":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S.URL_TO", $val, $match, array("/", "\\", ".", "?", "#", ":"));
                     break;
                 case "URL_REDIRECT":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S.URL_REDIRECT", $val, $match, array("/", "\\", ".", "?", "#", ":"));
                     break;
                 case "SITE_ID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("S.SITE_ID", $val, $match);
                     break;
             }
         }
     }
     $strSqlOrder = "";
     if ($order != "asc") {
         $order = "desc";
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY S.ID {$order}";
     } elseif ($by == "s_date_start") {
         $strSqlOrder = "ORDER BY S.DATE_START {$order}";
     } elseif ($by == "s_site_id") {
         $strSqlOrder = "ORDER BY S.SITE_ID {$order}";
     } elseif ($by == "s_date_end") {
         $strSqlOrder = "ORDER BY S.DATE_END {$order}";
     } elseif ($by == "s_active") {
         $strSqlOrder = "ORDER BY S.ACTIVE {$order}";
     } elseif ($by == "s_save_statistic") {
         $strSqlOrder = "ORDER BY S.SAVE_STATISTIC {$order}";
     } elseif ($by == "s_ip") {
         $strSqlOrder = "ORDER BY S.IP_1 {$order}, S.IP_2 {$order}, S.IP_3 {$order}, S.IP_4 {$order}";
     } elseif ($by == "s_mask") {
         $strSqlOrder = "ORDER BY S.MASK_1 {$order}, S.MASK_2 {$order}, S.MASK_3 {$order}, S.MASK_4 {$order}";
     } elseif ($by == "s_url_to") {
         $strSqlOrder = "ORDER BY S.URL_TO {$order}";
     } elseif ($by == "s_url_from") {
         $strSqlOrder = "ORDER BY S.URL_FROM {$order}";
     } else {
         $strSqlOrder = "ORDER BY S.ID {$order}";
         $by = "s_id";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tS.ID, S.ACTIVE, S.SAVE_STATISTIC,\n\t\t\t\tS.IP_1, S.IP_2, S.IP_3, S.IP_4,\n\t\t\t\tS.MASK_1, S.MASK_2, S.MASK_3, S.MASK_4,\n\t\t\t\tS.USER_AGENT, S.USER_AGENT_IS_NULL,\n\t\t\t\tS.URL_TO, S.URL_FROM, S.MESSAGE, S.MESSAGE_LID,\n\t\t\t\tS.URL_REDIRECT, S.COMMENTS, S.TEST, S.SITE_ID,\n\t\t\t\t" . $DB->DateToCharFunction("S.TIMESTAMP_X") . "\tTIMESTAMP_X,\n\t\t\t\t" . $DB->DateToCharFunction("S.DATE_END") . "\t\tDATE_END,\n\t\t\t\t" . $DB->DateToCharFunction("S.DATE_START") . "\t\tDATE_START,\n\t\t\t\tif ((\n\t\t\t\t\t(S.DATE_START<=now() or S.DATE_START is null) and\n\t\t\t\t\t(S.DATE_END>=now() or S.DATE_END is null) and\n\t\t\t\t\tS.ACTIVE='Y'),\n\t\t\t\t\t'green',\n\t\t\t\t\t'red') as LAMP\n\t\t\tFROM\n\t\t\t\tb_stop_list S\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\tLIMIT " . COption::GetOptionString('statistic', 'RECORDS_LIMIT') . "\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #11
0
 function GetList(&$by, &$order, $arFilter = array(), &$isFiltered)
 {
     $err_mess = CTicketDictionary::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB;
     $arSqlSearch = array();
     $strSqlSearch = "";
     $leftJoinSite = "";
     $leftJoinUser = "";
     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;
             }
             $match_value_set = in_array($key . "_EXACT_MATCH", $filterKeys) ? true : false;
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                 case "SID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D." . $key, $val, $match);
                     break;
                 case "SITE":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DS.SITE_ID", $val, $match);
                     $leftJoinSite .= "LEFT JOIN b_ticket_dictionary_2_site DS ON (D.ID = DS.DICTIONARY_ID)";
                     $select_user = "******";
                     break;
                 case "TYPE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D.C_TYPE", $val, $match);
                     break;
                 case "NAME":
                 case "DESCR":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("D." . $key, $val, $match);
                     break;
                 case "RESPONSIBLE_ID":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "D.RESPONSIBLE_USER_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(D.RESPONSIBLE_USER_ID is null or D.RESPONSIBLE_USER_ID=0)";
                     }
                     break;
                 case "RESPONSIBLE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("D.RESPONSIBLE_USER_ID, U.LOGIN, U.LAST_NAME, U.NAME", $val, $match);
                     $select_user = "******";
                     $leftJoinUser = "******";
                     break;
                 case "DEFAULT":
                     $arSqlSearch[] = $val == "Y" ? "D.SET_AS_DEFAULT='Y'" : "D.SET_AS_DEFAULT='N'";
                     break;
                 case "LID":
                 case "FIRST_SITE_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D.FIRST_SITE_ID", $val, $match);
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "D.ID";
     } elseif ($by == "s_c_sort") {
         $strSqlOrder = "D.C_SORT";
     } elseif ($by == "s_sid") {
         $strSqlOrder = "D.SID";
     } elseif ($by == "s_lid") {
         $strSqlOrder = "D.FIRST_SITE_ID";
     } elseif ($by == "s_name") {
         $strSqlOrder = "D.NAME";
     } elseif ($by == "s_responsible") {
         $strSqlOrder = "D.RESPONSIBLE_USER_ID";
     } elseif ($by == "s_dropdown") {
         $strSqlOrder = "D.C_SORT, D.ID, D.NAME";
     } else {
         $by = "s_c_sort";
         $strSqlOrder = "D.C_SORT";
     }
     if ($order != "desc") {
         $strSqlOrder .= " asc ";
         $order = "asc";
     } else {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tD.*,\n\t\t\t\tD.FIRST_SITE_ID\t\t\t\t\t\tLID,\n\t\t\t\tD.ID\t\t\t\t\t\t\t\tREFERENCE_ID,\n\t\t\t\tD.NAME\t\t\t\t\t\t\t\tREFERENCE\n\t\t\t\t{$select_user}\n\t\t\tFROM\n\t\t\t\tb_ticket_dictionary D\n\t\t\t{$leftJoinUser}\n\t\t\t{$leftJoinSite}\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\tGROUP BY\n\t\t\t\tD.ID\n\t\t\tORDER BY\n\t\t\t\tcase D.C_TYPE\n\t\t\t\t\twhen 'C'\tthen '1'\n\t\t\t\t\twhen 'F'\tthen '2'\n\t\t\t\t\twhen 'S'\tthen '3'\n\t\t\t\t\twhen 'M'\tthen '4'\n\t\t\t\t\twhen 'K'\tthen '5'\n\t\t\t\t\twhen 'SR'\tthen '6'\n\t\t\t\t\twhen 'D'\tthen '7'\n\t\t\t\t\telse ''\tend,\n\t\t\t{$strSqlOrder}\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $isFiltered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #12
0
 public static function GetList($VOTE_ID, &$by, &$order, $arFilter = array(), &$is_filtered)
 {
     global $DB;
     $err_mess = CAllVoteQuestion::err_mess() . "<br>Function: GetList<br>Line: ";
     $VOTE_ID = intval($VOTE_ID);
     $arSqlSearch = array();
     $arFilter = is_array($arFilter) ? $arFilter : array($arFilter);
     foreach ($arFilter as $key => $val) {
         if (empty($key) || empty($val) || $val === "NOT_REF") {
             continue;
         }
         $key_res = VoteGetFilterOperation($key);
         $strNegative = $key_res["NEGATIVE"];
         $strOperation = $key_res["OPERATION"];
         $key = strtoupper($key_res["FIELD"]);
         switch ($key) {
             case "ID":
                 $match = $arFilter[$key . "_EXACT_MATCH"] == "N" ? "Y" : "N";
                 //turn off
                 $arSqlSearch[] = GetFilterQuery("Q.ID", $val, $match);
                 break;
             case "DIAGRAM":
             case "ACTIVE":
             case "REQUIRED":
                 $arSqlSearch[] = ($strNegative == "Y" ? " Q." . $key . " IS NULL OR NOT " : "") . " (Q." . $key . " " . $strOperation . " '" . $DB->ForSql($val) . "')";
                 break;
             case "QUESTION":
                 $match = $arFilter[$key . "_EXACT_MATCH"] != "N" ? "Y" : "N";
                 //turn on
                 $arSqlSearch[] = GetFilterQuery("Q.QUESTION", $val, $match);
                 break;
         }
     }
     if ($VOTE_ID > 0) {
         $arSqlSearch[] = "Q.VOTE_ID = " . $VOTE_ID;
     }
     // Order
     $by1 = strtoupper(strpos($by, "s_") === 0 ? substr($by, 2) : $by);
     $order = $order != "desc" ? "asc" : "desc";
     $order1 = strtoupper($order);
     if (in_array($by1, array("ID", "TIMESTAMP_X", "ACTIVE", "DIAGRAM", "C_SORT", "REQUIRED"))) {
         $strSqlOrder = "Q." . $by1 . " " . $order1;
     } else {
         $by = "s_c_sort";
         $strSqlOrder = "Q.C_SORT " . $order1;
     }
     // Sql
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT Q.*,\n\t\t\t\t" . $DB->DateToCharFunction("Q.TIMESTAMP_X", "SHORT") . " TIMESTAMP_X\n\t\t\tFROM b_vote_question Q\n\t\t\tWHERE " . $strSqlSearch . "\n\t\t\tORDER BY " . $strSqlOrder;
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
 /**
  * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопросов</a>/<a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">полей</a> веб-формы в виде объекта класса <a href="http://dev.1c-bitrix.ru/api_help/main/reference/cdbresult/index.php">CDBResult</a>.</p>
  *
  *
  * @param int $form_id  ID веб-формы.</bod
  *
  * @param string $get_only_fields  Может принимать следующие значения: <ul> <li> <b>Y</b> - возвращаемый
  * список должен содержать только <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> веб-формы; </li> <li> <b>N</b> -
  * возвращаемый список должен содержать только <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопросы</a> веб-формы; </li> <li>
  * <b>ALL</b> - возвращаемый список должен содержать и <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопросы</a> и <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> веб-формы. </li> </ul>
  *
  * @param string &$by = "s_sort" Ссылка на переменную с полем для сортировки результирующего
  * списка, может принимать значения: <ul> <li> <b>s_id</b> - ID; </li> <li> <b>s_active</b> -
  * флаг активности; </li> <li> <b>s_sid</b> - символьный идентификатор; </li> <li>
  * <b>s_sort</b> - индекс сортировки; </li> <li> <b>s_title</b> - текст <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a> или заголовок <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> веб-формы; </li> <li>
  * <b>s_comments</b> - служебный комментарий; </li> <li> <b>s_required</b> - флаг
  * обязательности ответа на <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a> веб-формы; </li> <li>
  * <b>s_in_results_table</b> - флаг включения в HTML таблицу результатов; </li> <li>
  * <b>s_in_excel_table</b> - флаг включения в Excel таблицу результатов; </li> <li>
  * <b>s_field_type</b> - тип <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a>
  * веб-формы. </li> </ul>
  *
  * @param string &$order = "asc" Ссылка на переменную с порядком сортировки, может принимать
  * значения: <ul> <li> <b>asc</b> - по возрастанию; </li> <li> <b>desc</b> - по убыванию.
  * </li> </ul>
  *
  * @param array $filter = array() Массив для фильтрации. Необязательный параметр. В массиве
  * допустимы следующие ключи: <ul> <li> <b>ID</b>* - ID <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> (по умолчанию будет
  * искаться точное совпадение); </li> <li> <b>ID_EXACT_MATCH</b> - если значение
  * равно "N", то при фильтрации по <b>ID</b> будет искаться вхождение; </li>
  * <li> <b>SID</b>* - символьный идентификатор <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> (по умолчанию будет
  * искаться точное совпадение); </li> <li> <b>SID_EXACT_MATCH</b> - если значение
  * равно "N", то при фильтрации по <b>SID</b> будет искаться вхождение; </li>
  * <li> <b>TITLE</b>* - текст <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>
  * или заголовок <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> веб-формы
  * (по умолчанию будет искаться вхождение); </li> <li> <b>TITLE_EXACT_MATCH</b> - если
  * значение равно "Y", то при фильтрации по <b>TITLE</b> будет искаться
  * точное совпадение; </li> <li> <b>COMMENTS</b>* - служебный комментарий (по
  * умолчанию будет искаться вхождение); </li> <li> <b>COMMENTS_EXACT_MATCH</b> - если
  * значение равно "Y", то при фильтрации по <b>COMMENTS</b> будет искаться
  * точное совпадение; </li> <li> <b>ACTIVE</b> - флаг активности [Y|N] </li> <li>
  * <b>IN_RESULTS_TABLE</b> - флаг включения в HTML таблицу результатов [Y|N]; </li> <li>
  * <b>IN_EXCEL_TABLE</b> - флаг включения в Excel таблицу результатов [Y|N]; </li> <li>
  * <b>IN_FILTER</b> - флаг включения в HTML таблицу результатов [Y|N]; </li> <li>
  * <b>REQUIRED</b> - флаг обязательности ответа на <a
  * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a> веб-формы [Y|N]. </li> </ul> *
  * - допускается сложная логика
  *
  * @param bool &$is_filtered  Ссылка на переменную, хранящую флаг отфильтрованности
  * результирующего списка. Если значение равно "true", то список был
  * отфильтрован.
  *
  * @return CDBResult 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $FORM_ID = 4; // ID веб-формы
  * 
  * // сформируем массив фильтра
  * $arFilter = Array(
  *   "ID"                    =&gt; "140 | 141",     // вопрос с ID=140 или с ID=141
  *   "ID_EXACT_MATCH"        =&gt; "Y",             // точное совпадение при фильтрации по ID
  *   "SID"                   =&gt; "VS_BIRTHDAY",   // символьный идентификатор
  *   "SID_EXACT_MATCH"       =&gt; "Y",             // точное совпадение с симв. идентификатором
  *   "TITLE"                 =&gt; "День рождения", // текст вопроса
  *   "TITLE_EXACT_MATCH"     =&gt; "N",             // вхождение при фильтрации по тексту вопроса
  *   "ACTIVE"                =&gt; "Y",             // флаг активности
  *   "IN_RESULTS_TABLE"      =&gt; "Y",             // флаг вхождение в HTML таблицу результатов
  *   "IN_EXCEL_TABLE"        =&gt; "N",             // флаг вхождения в Excel таблицу результатов
  *   "IN_FILTER"             =&gt; "Y",             // флаг вхождения в фильтр
  *   "REQUIRED"              =&gt; "Y",             // флаг обязательности ответа на <a href="/api_help/form/terms.php#question">вопрос</a>
  * );
  * 
  * // получим список всех вопросов веб-формы #4
  * $rsQuestions = <b>CFormField::GetList</b>(
  *     $FORM_ID, 
  *     "N", 
  *     $by="s_id", 
  *     $order="desc", 
  *     $arFilter, 
  *     $is_filtered
  *     );
  * while ($arQuestion = $rsQuestions-&gt;Fetch())
  * {
  *     echo "&lt;pre&gt;"; print_r($arQuestion); echo "&lt;/pre&gt;";
  * }
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cformfield/index.php">Поля CFormField</a> </li>
  * <li> <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cformfield/getbyid.php">CFormField::GetByID</a> </li> <li>
  * <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cformfield/getbysid.php">CFormField::GetBySID</a> <br> </li>
  * </ul></b<a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/form/classes/cformfield/getlist.php
  * @author Bitrix
  */
 public static function GetList($WEB_FORM_ID, $get_fields, &$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = CAllFormField::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB, $strError;
     $WEB_FORM_ID = intval($WEB_FORM_ID);
     $str = "";
     if (strlen($get_fields) > 0 && $get_fields != "ALL") {
         InitBVar($get_fields);
         $str = "and ADDITIONAL='{$get_fields}'";
     }
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         if (isset($arFilter["SID"]) && strlen($arFilter["SID"]) > 0) {
             $arFilter["VARNAME"] = $arFilter["SID"];
         } elseif (isset($arFilter["VARNAME"]) && strlen($arFilter["VARNAME"]) > 0) {
             $arFilter["SID"] = $arFilter["VARNAME"];
         }
         $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 "ID":
                 case "SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("F." . $key, $val, $match);
                     break;
                 case "TITLE":
                 case "COMMENTS":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("F." . $key, $val, $match);
                     break;
                 case "ACTIVE":
                 case "IN_RESULTS_TABLE":
                 case "IN_EXCEL_TABLE":
                 case "IN_FILTER":
                 case "REQUIRED":
                     $arSqlSearch[] = $val == "Y" ? "F." . $key . "='Y'" : "F." . $key . "='N'";
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY F.ID";
     } elseif ($by == "s_active") {
         $strSqlOrder = "ORDER BY F.ACTIVE";
     } elseif ($by == "s_varname" || $by == "s_sid") {
         $strSqlOrder = "ORDER BY F.SID";
     } elseif ($by == "s_c_sort" || $by == "s_sort") {
         $strSqlOrder = "ORDER BY F.C_SORT";
     } elseif ($by == "s_title") {
         $strSqlOrder = "ORDER BY F.TITLE";
     } elseif ($by == "s_comments") {
         $strSqlOrder = "ORDER BY F.COMMENTS";
     } elseif ($by == "s_required") {
         $strSqlOrder = "ORDER BY F.REQUIRED";
     } elseif ($by == "s_in_results_table") {
         $strSqlOrder = "ORDER BY F.IN_RESULTS_TABLE";
     } elseif ($by == "s_in_excel_table") {
         $strSqlOrder = "ORDER BY F.IN_EXCEL_TABLE";
     } elseif ($by == "s_field_type") {
         $strSqlOrder = "ORDER BY F.FIELD_TYPE";
     } else {
         $by = "s_sort";
         $strSqlOrder = "ORDER BY F.C_SORT";
     }
     if ($order != "desc") {
         $strSqlOrder .= " asc ";
         $order = "asc";
     } else {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tF.*,\n\t\t\t\tF.SID as VARNAME,\n\t\t\t\t" . $DB->DateToCharFunction("F.TIMESTAMP_X") . "\tTIMESTAMP_X\n\t\t\tFROM\n\t\t\t\tb_form_field F\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$str}\n\t\t\tand FORM_ID='{$WEB_FORM_ID}'\n\t\t\t{$strSqlOrder}\n\t\t\t";
     //echo "<pre>".$strSql."</pre>";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #14
0
 public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = CVoteChannel::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB;
     $arSqlSearch = array();
     $left_join = "";
     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("C.ID", $val, $match);
                     break;
                 case "SITE_ID":
                 case "SITE":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("CS.SITE_ID", $val, $match);
                     $left_join = "LEFT JOIN b_vote_channel_2_site CS ON (C.ID = CS.CHANNEL_ID)";
                     break;
                 case "TITLE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("C.TITLE", $val, $match);
                     break;
                 case "SID":
                 case "SYMBOLIC_NAME":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("C.SYMBOLIC_NAME", $val, $match);
                     break;
                 case "HIDDEN":
                 case "ACTIVE":
                     $arSqlSearch[] = $val == "Y" ? "C." . $key . "='Y'" : "C." . $key . "='N'";
                     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;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY C.ID";
     } elseif ($by == "s_timestamp") {
         $strSqlOrder = "ORDER BY C.TIMESTAMP_X";
     } elseif ($by == "s_c_sort") {
         $strSqlOrder = "ORDER BY C.C_SORT";
     } elseif ($by == "s_active") {
         $strSqlOrder = "ORDER BY C.ACTIVE";
     } elseif ($by == "s_hidden") {
         $strSqlOrder = "ORDER BY C.HIDDEN";
     } elseif ($by == "s_symbolic_name") {
         $strSqlOrder = "ORDER BY C.SYMBOLIC_NAME";
     } elseif ($by == "s_title") {
         $strSqlOrder = "ORDER BY C.TITLE ";
     } elseif ($by == "s_votes") {
         $strSqlOrder = "ORDER BY VOTES";
     } else {
         $by = "s_id";
         $strSqlOrder = "ORDER BY C.ID";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\tSELECT CC.*, C.*, C.FIRST_SITE_ID LID, C.SYMBOLIC_NAME SID,\n\t\t\t\t" . $DB->DateToCharFunction("C.TIMESTAMP_X") . " TIMESTAMP_X\n\t\tFROM (\n\t\t\tSELECT C.ID, count(V.ID) VOTES\n\t\t\tFROM b_vote_channel C\n\t\t\t\tLEFT JOIN b_vote V ON (V.CHANNEL_ID = C.ID)\n\t\t\t\t" . $left_join . "\n\t\t\tWHERE " . $strSqlSearch . "\n\t\t\tGROUP BY C.ID) CC\n\t\tINNER JOIN b_vote_channel C ON (C.ID = CC.ID)\n\t\t" . $strSqlOrder;
     $is_filtered = IsFiltered($strSqlSearch);
     if (VOTE_CACHE_TIME === false || strpos($_SERVER['REQUEST_URI'], '/bitrix/admin/') !== false) {
         $res = $DB->Query($strSql, false, $err_mess . __LINE__);
         return $res;
     } else {
         global $CACHE_MANAGER;
         $md5 = md5($strSql);
         $arCache = array();
         if ($CACHE_MANAGER->Read(VOTE_CACHE_TIME, "b_vote_channel_" . $md5, "b_vote_channel")) {
             $arCache = $CACHE_MANAGER->Get("b_vote_channel_" . $md5);
         } else {
             $res = $DB->Query($strSql, false, $err_mess . __LINE__);
             while ($ar = $res->Fetch()) {
                 $arCache[] = $ar;
             }
             $CACHE_MANAGER->Set("b_vote_channel_" . $md5, $arCache);
         }
         $r = new CDBResult();
         $r->InitFromArray($arCache);
         unset($arCache);
         return $r;
     }
 }
Example #15
0
 /**
  * <p>Функция предназначена для получения списка баннеров.</p>
  *
  *
  *
  *
  * @param varchar &$by  Идентификатор позволяющий задать имя поля для сортировки.
  * Допустимы следующие значения: <ul> <li>s_id - по ID </li> <li>s_lamp - по
  * индикатору </li> <li>s_name - по имени баннера </li> <li>s_type_sid - по типу
  * баннера </li> <li>s_contract_id - по ID контракта </li> <li>s_group_sid - по имени группы
  * </li> <li>s_show_count - по количеству показов </li> <li>s_max_show_count - по
  * максимальному количеству показов </li> <li>s_date_last_show - по дате
  * последнего показа </li> <li>s_click_count - по количеству кликов на баннер
  * </li> <li>s_max_click_count - по максимальному количеству кликов </li>
  * <li>s_date_last_click - по дате последнего клика </li> <li>s_active - по флагу
  * активности </li> <li>s_weight - по весу баннера </li> <li>s_status_sid - по статусу
  * баннера </li> <li>s_date_show_from - по дате начала показов </li> <li>s_date_show_to - по
  * дате окончания показов </li> <li>s_ctr - по CTR баннера</li> </ul>
  *
  *
  *
  * @param varchar &$order  Порядок сортировки. Допустимы следующие значения: <ul> <li>desc - по
  * убыванию (значение по умолчанию) </li> <li>asc - по возрастанию</li> </ul>
  *
  *
  *
  * @param array $arFilter = array() Массив для фильтрации значений. Необязательный параметр. В
  * массиве допустимы следующие индексы: <ul> <li>ID - ID баннера
  * (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>)
  * </li> <li>ID_EXACT_MATCH - "Y" - при фильтрации по ID баннера будет искаться
  * точное совпадение (по умолчанию); "N" - в противном случае будет
  * искаться вхождение </li> <li>ACTIVE - активность, значения Y/N</li> <li>LAMP -
  * значение индикатора: "red", "green" </li> <li>LANG - двухсимвольный
  * идентификатор языковой части сайта в которой будет показываться
  * баннер </li> <li>SHOW_COUNT_1 - левая часть интервала для числа показов </li>
  * <li>SHOW_COUNT_2 - правая часть интервала для числа показов </li> <li>CLICK_COUNT_1 -
  * левая часть интервала для числа кликов </li> <li>CLICK_COUNT_2 - правая
  * часть интервала для числа кликов </li> <li>CTR_1 - левая часть интервала
  * для CTR баннера </li> <li>CTR_2 - правая часть интервала для CTR баннера </li>
  * <li>GROUP - имя группы баннера (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li> <li>GROUP_EXACT_MATCH
  * - "Y" - при фильтрации по имени группы будет искаться точное
  * совпадение; "N" - в противном случае будет искаться вхождение (по
  * умолчанию) </li> <li>STATUS_SID - символьный код статуса (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>); символьный
  * код статуса может принимать следующие значения: <ul> <li>PUBLISHED -
  * баннер подтвержден и опубликован</li> <li>READY - баннер на
  * рассмотрении</li> <li>REJECTED - баннер отклонен</li> </ul> </li> <li>CONTRACT_ID - ID
  * контракта (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная
  * логика</a>) </li> <li>CONTRACT_ID_EXACT_MATCH - "Y" - при фильтрации по ID контракта
  * будет искаться точное совпадение (по умолчанию); "N" - в противном
  * случае будет искаться вхождение </li> <li>CONTRACT - ID, имя, описание
  * контракта (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная
  * логика</a>) </li> <li>CONTRACT_EXACT_MATCH - "Y" - при фильтрации по ID, имени,
  * описанию контракта будет искаться точное совпадение; "N" - в
  * противном случае будет искаться вхождение (по умолчанию) </li>
  * <li>TYPE_SID - символьный код типа баннера (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li>
  * <li>TYPE_SID_EXACT_MATCH - "Y" - при фильтрации по символьному коду типа
  * баннера будет искаться точное совпадение (по умолчанию); "N" - в
  * противном случае будет искаться вхождение </li> <li>NAME - имя баннера
  * (допускается <a href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>)
  * </li> <li>NAME_EXACT_MATCH - "Y" - при фильтрации по имени баннера будет
  * искаться точное совпадение; "N" - в противном случае будет искаться
  * вхождение (по умолчанию) </li> <li>CODE - код баннера (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li> <li>CODE_EXACT_MATCH
  * - "Y" - при фильтрации по коду баннера будет искаться точное
  * совпадение; "N" - в противном случае будет искаться вхождение (по
  * умолчанию) </li> <li>COMMENTS - комментарий к баннеру (допускается <a
  * href="http://dev.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>) </li>
  * <li>COMMENTS_EXACT_MATCH - "Y" - при фильтрации по комментарию к баннеру будет
  * искаться точное совпадение; "N" - в противном случае будет искаться
  * вхождение (по умолчанию) </li> <li>SITE - для фильтрации по сайтам.</li> </ul>
  *
  *
  *
  * @param boolean &$is_filtered  Переменная возвращающая true в том случае если список баннеров
  * отфильтрован по какому либо критерию; либо false в противном случае.
  *
  *
  *
  * @param char(1) $CHECK_RIGHTS = "Y" Параметр проверяет уровень доступа к модулю Реклама
  * (администратор рекламы, рекламодатель и т.д.). Если параметр
  * определён как "N", то считается, что текущий пользователь обладает
  * административными правами доступа к модулю Реклама. Если
  * параметр пропущен либо равен "Y", то функция проверяет уровень
  * доступа к модулю. Необязательный параметр.
  *
  *
  *
  * @return record 
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * $FilterArr = Array(
  * 	"find_id",
  * 	"find_id_exact_match",
  * 	"find_lamp",
  * 	"find_lang",
  * 	"find_show_count_1",
  * 	"find_show_count_2",
  * 	"find_click_count_1",
  * 	"find_click_count_2",
  * 	"find_ctr_1",
  * 	"find_ctr_2",
  * 	"find_contract_id",
  * 	"find_contract",
  * 	"find_contract_exact_match",
  * 	"find_group",
  * 	"find_group_exact_match",
  * 	"find_status_sid",
  * 	"find_type_sid",
  * 	"find_type",
  * 	"find_type_exact_match",
  * 	"find_name",
  * 	"find_name_exact_match",
  * 	"find_code",
  * 	"find_code_exact_match",
  * 	"find_comments",
  * 	"find_comments_exact_match"
  * 	);
  * if (strlen($set_filter)&gt;0) InitFilterEx($FilterArr,"ADV_BANNER_LIST","set"); 
  * else InitFilterEx($FilterArr,"ADV_BANNER_LIST","get");
  * if (strlen($del_filter)&gt;0) DelFilterEx($FilterArr,"ADV_BANNER_LIST");
  * InitBVar($find_id_exact_match);
  * InitBVar($find_status_exact_match);
  * InitBVar($find_group_exact_match);
  * InitBVar($find_contract_exact_match);
  * InitBVar($find_type_exact_match);
  * InitBVar($find_name_exact_match);
  * InitBVar($find_code_exact_match);
  * InitBVar($find_comments_exact_match);
  * $arFilter = Array(
  * 	"ID"					=&gt; $find_id,
  * 	"ID_EXACT_MATCH"		=&gt; $find_id_exact_match,
  * 	"LAMP"				  =&gt; $find_lamp,
  * 	"LANG"				  =&gt; $find_lang,
  * 	"SHOW_COUNT_1"		  =&gt; $find_show_count_1,
  * 	"SHOW_COUNT_2"		  =&gt; $find_show_count_2,
  * 	"CLICK_COUNT_1"		 =&gt; $find_click_count_1,
  * 	"CLICK_COUNT_2"		 =&gt; $find_click_count_2,
  * 	"CTR_1"				 =&gt; $find_ctr_1,
  * 	"CTR_2"				 =&gt; $find_ctr_2,
  * 	"GROUP"				 =&gt; $find_group,
  * 	"GROUP_EXACT_MATCH"	 =&gt; $find_group_exact_match,
  * 	"STATUS_SID"			=&gt; $find_status_sid,
  * 	"CONTRACT_ID"		   =&gt; $find_contract_id,
  * 	"CONTRACT"			  =&gt; $find_contract,
  * 	"CONTRACT_EXACT_MATCH"  =&gt; $find_contract_exact_match,
  * 	"TYPE_SID"			  =&gt; $find_type_sid,
  * 	"TYPE"				  =&gt; $find_type,
  * 	"TYPE_EXACT_MATCH"	  =&gt; $find_type_exact_match,
  * 	"NAME"				  =&gt; $find_name,
  * 	"NAME_EXACT_MATCH"	  =&gt; $find_name_exact_match,
  * 	"CODE"				  =&gt; $find_code,
  * 	"CODE_EXACT_MATCH"	  =&gt; $find_code_exact_match,
  * 	"COMMENTS"			  =&gt; $find_comments,
  * 	"COMMENTS_EXACT_MATCH"  =&gt; $find_comments_exact_match
  * 	);
  * $rsBanners = <b>CAdvBanner::GetList</b>($by, $order, $arFilter, $is_filtered, "N");
  * $rsBanners-&gt;NavStart(20);
  * $rsBanners-&gt;NavPrint("Баннеры");
  * while($arBanner = $rsBanners-&gt;NavNext(true, "f_"))
  * {
  * 	echo "&lt;pre&gt;"; print_r($arBanner); echo "&lt;/pre&gt;";
  * }
  * ?&gt;
  * </bo
  * &lt;?
  * Array
  * (
  * 	[LAMP] =&gt; green
  * 	[ID] =&gt; 88
  * 	[CONTRACT_ID] =&gt; 1
  * 	[TYPE_SID] =&gt; TOP
  * 	[GROUP_SID] =&gt; 
  * 	[STATUS_SID] =&gt; PUBLISHED
  * 	[STATUS_COMMENTS] =&gt;
  * 	[NAME] =&gt;
  * 	[ACTIVE] =&gt; Y
  * 	[LID] =&gt; 
  * 	[WEIGHT] =&gt; 100
  * 	[MAX_SHOW_COUNT] =&gt; 300
  * 	[MAX_CLICK_COUNT] =&gt; 100
  * 	[SHOW_COUNT] =&gt; 102
  * 	[CLICK_COUNT] =&gt; 4
  * 	[IMAGE_ID] =&gt; 1032
  * 	[IMAGE_ALT] =&gt;
  * 	[URL] =&gt; http://www.1c-bitrix.ru?banner_param=<code>#EVENT_GID#</code>
  * 	[URL_TARGET] =&gt; _parent
  * 	[CODE] =&gt; &lt;TABLE class=smalltext cellSpacing=0 cellPadding=0 width=145&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD&gt;
  * &lt;DIV align=center&gt;
  * &lt;A class=righthead href="/ru/partners/partnership.php"&gt;Партнёрская программа&lt;/A&gt;
  * &lt;/DIV&gt;
  * &lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD height=8&gt;&lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD width=5&gt;&lt;/TD&gt;
  * &lt;TD vAlign=bottom&gt;
  * &lt;DIV align=center&gt;
  * &lt;A href="/ru/partners/partnership.php"&gt;
  * &lt;IMG height=95 src="/images/advert/free.gif" width=100 border=0&gt;&lt;/A&gt;
  * &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD height=5&gt;&lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD&gt;Разработчики сайтов и интеграторы получают:&lt;BR&gt;
  * &lt;B&gt;&lt;FONT class=smalltext&gt;
  * &lt;IMG height=8 src="/images/list_bullet.gif" width=8&gt;
  * &lt;/FONT&gt;&lt;/B&gt; 
  * &lt;FONT color=#ff5a31&gt;скидки до 50%&lt;/FONT&gt; &lt;BR&gt;
  * &lt;B&gt;&lt;FONT class=smalltext&gt;
  * &lt;IMG height=8 src="/images/list_bullet.gif" width=8&gt;
  * &lt;/FONT&gt;&lt;/B&gt; 
  * &lt;FONT color=#ff5a31&gt;бесплатную копиию&lt;/FONT&gt;
  * &lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD height=5&gt;&lt;/TD&gt;&lt;/TR&gt;
  * &lt;TR&gt;
  * &lt;TD&gt;&lt;/TD&gt;
  * &lt;TD&gt;
  * &lt;DIV align=right&gt;
  * &lt;A class=bottomlinks href="/ru/partners/partnership.php"&gt;Подробнее&lt;/A&gt;
  * &lt;IMG height=7 src="/images/main_button_more_3.gif" width=7&gt;
  * &lt;/DIV&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;
  * 	[CODE_TYPE] =&gt; html
  * 	[STAT_EVENT_1] =&gt; 
  * 	[STAT_EVENT_2] =&gt; 
  * 	[STAT_EVENT_3] =&gt; 
  * 	[FOR_NEW_GUEST] =&gt; 
  * 	[COMMENTS] =&gt; 
  * 	[CREATED_BY] =&gt; 2
  * 	[MODIFIED_BY] =&gt; 2
  * 	[CTR] =&gt; 3.92
  * 	[DATE_LAST_SHOW] =&gt; 24.06.2004 17:39:50
  * 	[DATE_LAST_CLICK] =&gt; 24.06.2004 14:47:53
  * 	[DATE_SHOW_FROM] =&gt; 10.06.2004
  * 	[DATE_SHOW_TO] =&gt; 07.07.2007
  * 	[DATE_CREATE] =&gt; 10.06.2004 11:25:59
  * 	[DATE_MODIFY] =&gt; 24.06.2004 14:33:56
  * 	[CONTRACT_NAME] =&gt; Default
  * 	[TYPE_NAME] =&gt; Top banner
  * )
  * ?&gt;
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/advertising/classes/cadvbanner/getlist.php
  * @author Bitrix
  */
 public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, $CHECK_RIGHTS = "Y")
 {
     $err_mess = CAdvBanner::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB, $USER, $APPLICATION;
     if ($CHECK_RIGHTS == "Y") {
         $USER_ID = intval($USER->GetID());
         $isAdmin = CAdvContract::IsAdmin();
         $isDemo = CAdvContract::IsDemo();
         $isManager = CAdvContract::IsManager();
         $isAdvertiser = CAdvContract::IsAdvertiser();
     } else {
         if (is_object($USER)) {
             $USER_ID = intval($USER->GetID());
         } else {
             $USER_ID = 0;
         }
         $isAdmin = true;
         $isDemo = true;
         $isManager = true;
         $isAdvertiser = true;
     }
     $arSqlSearch = array();
     $strSqlSearch = "";
     $DONT_USE_CONTRACT = COption::GetOptionString("advertising", "DONT_USE_CONTRACT", "N");
     if ($DONT_USE_CONTRACT == "Y") {
         $lamp = "\n\t\t\t\tif ((\n\t\t\t\t\t(B.DATE_SHOW_FROM<=now() or B.DATE_SHOW_FROM is null or length(B.DATE_SHOW_FROM)<=0) and\n\t\t\t\t\t(B.DATE_SHOW_TO>=now() or B.DATE_SHOW_TO is null or length(B.DATE_SHOW_TO)<=0) and\n\t\t\t\t\t(ifnull(B.MAX_SHOW_COUNT,0)>ifnull(B.SHOW_COUNT,0) or ifnull(B.MAX_SHOW_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(B.MAX_CLICK_COUNT,0)>ifnull(B.CLICK_COUNT,0) or ifnull(B.MAX_CLICK_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(B.MAX_VISITOR_COUNT,0)>ifnull(B.VISITOR_COUNT,0) or ifnull(B.MAX_VISITOR_COUNT,0)=0) and\n\t\t\t\t\t(B.ACTIVE='Y') and\n\t\t\t\t\t(B.STATUS_SID='PUBLISHED') and\n\t\t\t\t\t(T.ACTIVE='Y')\n\t\t\t\t\t),\n\t\t\t\t\t'green',\n\t\t\t\t\t'red')\n\t\t\t\t";
     } else {
         $lamp = "\n\t\t\t\tif ((\n\t\t\t\t\t(B.DATE_SHOW_FROM<=now() or B.DATE_SHOW_FROM is null or length(B.DATE_SHOW_FROM)<=0) and\n\t\t\t\t\t(B.DATE_SHOW_TO>=now() or B.DATE_SHOW_TO is null or length(B.DATE_SHOW_TO)<=0) and\n\t\t\t\t\t(ifnull(B.MAX_SHOW_COUNT,0)>ifnull(B.SHOW_COUNT,0) or ifnull(B.MAX_SHOW_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(B.MAX_CLICK_COUNT,0)>ifnull(B.CLICK_COUNT,0) or ifnull(B.MAX_CLICK_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(B.MAX_VISITOR_COUNT,0)>ifnull(B.VISITOR_COUNT,0) or ifnull(B.MAX_VISITOR_COUNT,0)=0) and\n\t\t\t\t\t(B.ACTIVE='Y') and\n\t\t\t\t\t(B.STATUS_SID='PUBLISHED') and\n\t\t\t\t\t(T.ACTIVE='Y') and\n\t\t\t\t\t(C.DATE_SHOW_FROM<=now() or C.DATE_SHOW_FROM is null or length(C.DATE_SHOW_FROM)<=0) and\n\t\t\t\t\t(C.DATE_SHOW_TO>=now() or C.DATE_SHOW_TO is null or length(C.DATE_SHOW_TO)<=0) and\n\t\t\t\t\t(ifnull(C.MAX_SHOW_COUNT,0)>ifnull(C.SHOW_COUNT,0) or ifnull(C.MAX_SHOW_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(C.MAX_CLICK_COUNT,0)>ifnull(C.CLICK_COUNT,0) or ifnull(C.MAX_CLICK_COUNT,0)=0) and\n\t\t\t\t\t(ifnull(C.MAX_VISITOR_COUNT,0)>ifnull(C.VISITOR_COUNT,0) or ifnull(C.MAX_VISITOR_COUNT,0)=0) and\n\t\t\t\t\t(C.ACTIVE='Y')\n\t\t\t\t\t),\n\t\t\t\t\t'green',\n\t\t\t\t\t'red')\n\t\t\t\t";
     }
     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) && count($val) <= 0) {
                 continue;
             }
             if ($val == '' || $val == "NOT_REF") {
                 continue;
             }
             $match_value_set = in_array($key . "_EXACT_MATCH", $filter_keys) ? true : false;
             $key = strtoupper($key);
             switch ($key) {
                 case "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("B.ID", $val, $match);
                     break;
                 case "LAMP":
                     $arSqlSearch[] = " " . $lamp . " = '" . $DB->ForSQL($val) . "'";
                     break;
                 case "SITE":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("BS.SITE_ID", $val, $match);
                     $left_join = "LEFT JOIN b_adv_banner_2_site BS ON (B.ID = BS.BANNER_ID)";
                     break;
                 case "DATE_MODIFY_1":
                     $arSqlSearch[] = "B.DATE_MODIFY>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_MODIFY_2":
                     $arSqlSearch[] = "B.DATE_MODIFY<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     break;
                 case "DATE_CREATE_1":
                     $arSqlSearch[] = "B.DATE_CREATE>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_CREATE_2":
                     $arSqlSearch[] = "B.DATE_CREATE<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     break;
                 case "DATE_SHOW_FROM_1":
                     $arSqlSearch[] = "B.DATE_SHOW_FROM>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_SHOW_FROM_2":
                     $arSqlSearch[] = "B.DATE_SHOW_FROM<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     break;
                 case "DATE_SHOW_TO_1":
                     $arSqlSearch[] = "B.DATE_SHOW_TO>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_SHOW_TO_2":
                     $arSqlSearch[] = "B.DATE_SHOW_TO<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     break;
                 case "ACTIVE":
                 case "FIX_SHOW":
                     $arSqlSearch[] = $val == "Y" ? "B." . $key . "='Y'" : "B." . $key . "='N'";
                     break;
                 case "WEIGHT_1":
                     $arSqlSearch[] = "ifnull(B.WEIGHT,0)>='" . intval($val) . "'";
                     break;
                 case "WEIGHT_2":
                     $arSqlSearch[] = "ifnull(B.WEIGHT,0)<='" . intval($val) . "'";
                     break;
                 case "MAX_VISITOR_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.MAX_VISITOR_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "MAX_VISITOR_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.MAX_VISITOR_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "VISITOR_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.VISITOR_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "VISITOR_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.VISITOR_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "MAX_SHOW_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.MAX_SHOW_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "MAX_SHOW_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.MAX_SHOW_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "SHOW_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.SHOW_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "SHOW_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.SHOW_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "MAX_CLICK_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.MAX_CLICK_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "MAX_CLICK_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.MAX_CLICK_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "CLICK_COUNT_1":
                     $arSqlSearch[] = "ifnull(B.CLICK_COUNT,0)>='" . intval($val) . "'";
                     break;
                 case "CLICK_COUNT_2":
                     $arSqlSearch[] = "ifnull(B.CLICK_COUNT,0)<='" . intval($val) . "'";
                     break;
                 case "CTR_1":
                     $arSqlSearch[] = "if(B.SHOW_COUNT<=0,0,round((B.CLICK_COUNT*100)/B.SHOW_COUNT,2))>='" . DoubleVal(str_replace(',', '.', $val)) . "'";
                     break;
                 case "CTR_2":
                     $arSqlSearch[] = "if(B.SHOW_COUNT<=0,0,round((B.CLICK_COUNT*100)/B.SHOW_COUNT,2))<='" . DoubleVal(str_replace(',', '.', $val)) . "'";
                     break;
                 case "GROUP":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("B.GROUP_SID", $val, $match);
                     break;
                 case "STATUS":
                 case "STATUS_SID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $arSqlSearch[] = GetFilterQuery("B.STATUS_SID", $val, "N");
                     break;
                 case "CONTRACT_ID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("B.CONTRACT_ID", $val, $match);
                     break;
                 case "CONTRACT":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("B.CONTRACT_ID, C.NAME, C.DESCRIPTION", $val, $match);
                     break;
                 case "TYPE_SID":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("B.TYPE_SID", $val, $match);
                     break;
                 case "TYPE":
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("B.TYPE_SID, T.NAME, T.DESCRIPTION", $val, $match);
                     break;
                 case "SHOW_USER_GROUP":
                     if ($val == "Y") {
                         $arSqlSearch[] = "B.SHOW_USER_GROUP='Y'";
                     } else {
                         $arSqlSearch[] = "B.SHOW_USER_GROUP <> 'Y'";
                     }
                     break;
                 case "NAME":
                 case "CODE":
                 case "COMMENTS":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("B." . $key, $val, $match);
                     break;
                     // совместимость со старой версией
                 // совместимость со старой версией
                 case "LANG":
                 case "FIRST_SITE_ID":
                     $arSqlSearch[] = GetFilterQuery("B.FIRST_SITE_ID", $val, "N");
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = " ORDER BY B.ID ";
     } elseif ($by == "s_lamp") {
         $strSqlOrder = " ORDER BY LAMP ";
     } elseif ($by == "s_name") {
         $strSqlOrder = " ORDER BY B.NAME ";
     } elseif ($by == "s_type_sid") {
         $strSqlOrder = " ORDER BY B.TYPE_SID ";
     } elseif ($by == "s_contract_id") {
         $strSqlOrder = " ORDER BY B.CONTRACT_ID ";
     } elseif ($by == "s_group_sid") {
         $strSqlOrder = " ORDER BY B.GROUP_SID ";
     } elseif ($by == "s_visitor_count") {
         $strSqlOrder = " ORDER BY B.VISITOR_COUNT ";
     } elseif ($by == "s_max_visitor_count") {
         $strSqlOrder = " ORDER BY ifnull(B.MAX_VISITOR_COUNT,0) ";
     } elseif ($by == "s_show_count") {
         $strSqlOrder = " ORDER BY B.SHOW_COUNT ";
     } elseif ($by == "s_max_show_count") {
         $strSqlOrder = " ORDER BY ifnull(B.MAX_SHOW_COUNT,0) ";
     } elseif ($by == "s_date_last_show") {
         $strSqlOrder = " ORDER BY B.DATE_LAST_SHOW ";
     } elseif ($by == "s_click_count") {
         $strSqlOrder = " ORDER BY B.CLICK_COUNT ";
     } elseif ($by == "s_max_click_count") {
         $strSqlOrder = " ORDER BY ifnull(B.MAX_CLICK_COUNT,0) ";
     } elseif ($by == "s_date_last_click") {
         $strSqlOrder = " ORDER BY B.DATE_LAST_CLICK ";
     } elseif ($by == "s_active") {
         $strSqlOrder = " ORDER BY B.ACTIVE ";
     } elseif ($by == "s_weight") {
         $strSqlOrder = " ORDER BY B.WEIGHT ";
     } elseif ($by == "s_status_sid") {
         $strSqlOrder = " ORDER BY B.STATUS_SID ";
     } elseif ($by == "s_date_show_from") {
         $strSqlOrder = " ORDER BY B.DATE_SHOW_FROM ";
     } elseif ($by == "s_date_show_to") {
         $strSqlOrder = " ORDER BY B.DATE_SHOW_TO ";
     } elseif ($by == "s_dropdown") {
         $strSqlOrder = " ORDER BY B.CONTRACT_ID desc, B.ID ";
     } elseif ($by == "s_ctr") {
         $strSqlOrder = " ORDER BY CTR ";
     } elseif ($by == "s_date_create") {
         $strSqlOrder = " ORDER BY B.DATE_CREATE ";
     } elseif ($by == "s_date_modify") {
         $strSqlOrder = " ORDER BY B.DATE_MODIFY ";
     } else {
         $strSqlOrder = " ORDER BY B.ID ";
         $by = "s_id";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     if ($isAdmin || $isDemo || $isManager) {
         $strSql = "\n\t\t\t\tSELECT DISTINCT\n\t\t\t\t\t{$lamp}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLAMP,\n\t\t\t\t\tB.*,\n\t\t\t\t\tB.FIRST_SITE_ID,\n\t\t\t\t\tB.FIRST_SITE_ID\t\t\t\t\t\t\t\t\t\t\t\t\t\tLID,\n\t\t\t\t\tif(B.SHOW_COUNT<=0,0,round((B.CLICK_COUNT*100)/B.SHOW_COUNT,2))\t\tCTR,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_LAST_SHOW") . "\t\t\t\t\t\tDATE_LAST_SHOW,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_LAST_CLICK") . "\t\t\t\t\tDATE_LAST_CLICK,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_FROM") . "\t\t\tDATE_SHOW_FROM,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_TO") . "\t\t\t\tDATE_SHOW_TO,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_FIRST") . "\t\t\tDATE_SHOW_FIRST,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_CREATE") . "\t\t\t\t\t\tDATE_CREATE,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_MODIFY") . "\t\t\t\t\t\tDATE_MODIFY,\n\t\t\t\t\tC.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCONTRACT_NAME,\n\t\t\t\t\tT.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTYPE_NAME\n\t\t\t\tFROM\n\t\t\t\t\tb_adv_banner B\n\t\t\t\tINNER JOIN b_adv_type T ON (T.SID = B.TYPE_SID)\n\t\t\t\tINNER JOIN b_adv_contract C ON (C.ID = B.CONTRACT_ID)\n\t\t\t\t{$left_join}\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\n\t\t\t\t{$strSqlOrder}\n\t\t\t\t";
     } else {
         $strSql = "\n\t\t\t\tSELECT DISTINCT\n\t\t\t\t\t{$lamp}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLAMP,\n\t\t\t\t\tB.*,\n\t\t\t\t\tB.FIRST_SITE_ID,\n\t\t\t\t\tB.FIRST_SITE_ID\t\t\t\t\t\t\t\t\t\t\t\t\t\tLID,\n\t\t\t\t\tif(B.SHOW_COUNT<=0,0,round((B.CLICK_COUNT*100)/B.SHOW_COUNT,2))\t\tCTR,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_LAST_SHOW") . "\t\t\t\t\t\tDATE_LAST_SHOW,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_LAST_CLICK") . "\t\t\t\t\tDATE_LAST_CLICK,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_FROM") . "\t\t\tDATE_SHOW_FROM,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_TO") . "\t\t\t\tDATE_SHOW_TO,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_SHOW_FIRST") . "\t\t\tDATE_SHOW_FIRST,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_CREATE") . "\t\t\t\t\t\tDATE_CREATE,\n\t\t\t\t\t" . $DB->DateToCharFunction("B.DATE_MODIFY") . "\t\t\t\t\t\tDATE_MODIFY,\n\t\t\t\t\tC.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCONTRACT_NAME,\n\t\t\t\t\tT.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTYPE_NAME\n\t\t\t\tFROM\n\t\t\t\t\tb_adv_banner B\n\t\t\t\tINNER JOIN b_adv_type T ON (T.SID = B.TYPE_SID)\n\t\t\t\tINNER JOIN b_adv_contract C ON (C.ID = B.CONTRACT_ID)\n\t\t\t\tINNER JOIN b_adv_contract_2_user CU ON (CU.CONTRACT_ID=C.ID and CU.USER_ID={$USER_ID})\n\t\t\t\t{$left_join}\n\t\t\t\tWHERE\n\t\t\t\t{$strSqlSearch}\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;
 }
Example #16
0
 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;
 }
Example #17
0
 function GetList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = CVote::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB;
     $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 (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 "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("V.ID", $val, $match);
                     break;
                 case "ACTIVE":
                     $arSqlSearch[] = $val == "Y" ? "V.ACTIVE='Y'" : "V.ACTIVE='N'";
                     break;
                 case "DATE_START_1":
                     $arSqlSearch[] = "V.DATE_START >= " . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_START_2":
                     $arSqlSearch[] = "V.DATE_START < dateadd(day, 1, " . $DB->CharToDateFunction($val, "SHORT") . ")";
                     break;
                 case "DATE_END_1":
                     $arSqlSearch[] = "V.DATE_END >= " . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_END_2":
                     $arSqlSearch[] = "V.DATE_END < dateadd(day, 1, " . $DB->CharToDateFunction($val, "SHORT") . ")";
                     break;
                 case "LAMP":
                     if ($val == "red") {
                         $arSqlSearch[] = "(V.ACTIVE<>'Y' or getdate()<V.DATE_START or getdate()>V.DATE_END)";
                     } elseif ($val == "green") {
                         $arSqlSearch[] = "(V.ACTIVE='Y' and getdate()>=V.DATE_START and getdate()<=V.DATE_END)";
                     }
                     break;
                 case "CHANNEL":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("C.ID, C.TITLE, C.SYMBOLIC_NAME", $val, $match);
                     break;
                 case "CHANNEL_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("V.CHANNEL_ID", $val, $match);
                     break;
                 case "TITLE":
                 case "DESCRIPTION":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("V." . $key, $val, $match);
                     break;
                 case "COUNTER_1":
                     $arSqlSearch[] = "V.COUNTER>='" . intval($val) . "'";
                     break;
                 case "COUNTER_2":
                     $arSqlSearch[] = "V.COUNTER<='" . intval($val) . "'";
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY V.ID";
     } elseif ($by == "s_title") {
         $strSqlOrder = "ORDER BY V.TITLE";
     } elseif ($by == "s_date_start") {
         $strSqlOrder = "ORDER BY V.DATE_START";
     } elseif ($by == "s_date_end") {
         $strSqlOrder = "ORDER BY V.DATE_END";
     } elseif ($by == "s_lamp") {
         $strSqlOrder = "ORDER BY LAMP";
     } elseif ($by == "s_counter") {
         $strSqlOrder = "ORDER BY V.COUNTER";
     } elseif ($by == "s_active") {
         $strSqlOrder = "ORDER BY V.ACTIVE";
     } elseif ($by == "s_c_sort") {
         $strSqlOrder = "ORDER BY V.C_SORT";
     } elseif ($by == "s_channel") {
         $strSqlOrder = "ORDER BY V.CHANNEL_ID";
     } else {
         $by = "s_id";
         $strSqlOrder = "ORDER BY V.ID";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\r\n\t\t\tSELECT\r\n\t\t\t\tC.TITLE as CHANNEL_TITLE,\r\n\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" . $DB->DateToCharFunction("V.DATE_START") . "\tDATE_START,\r\n\t\t\t\t" . $DB->DateToCharFunction("V.DATE_END") . "\tDATE_END,\r\n\t\t\t\tdatediff(second, V.DATE_START, V.DATE_END)\tPERIOD,\r\n\t\t\t\tcount(Q.ID) QUESTIONS,\r\n\t\t\t\tcase \r\n\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\telse 'green'\r\n\t\t\t\tend\t\t\t\t\t\t\t\t\t\t\tLAMP\r\n\t\t\tFROM\r\n\t\t\t\tb_vote V\r\n\t\t\tINNER JOIN b_vote_channel C ON (C.ID=V.CHANNEL_ID)\r\n\t\t\tLEFT JOIN b_vote_question Q ON (Q.VOTE_ID=V.ID)\r\n\t\t\tWHERE\r\n\t\t\t{$strSqlSearch}\r\n\t\t\tGROUP BY \r\n\t\t\t\tC.TITLE,\r\n\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\tV.DATE_START, V.DATE_END\r\n\t\t\t{$strSqlOrder}\r\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #18
0
 /**
  * <p>Функция предназначена для получения списка обращений в техподдержку.</p>
  *
  *
  *
  *
  * @param varchar &$by  Идентификатор, позволяющий задать имя поля для сортировки.
  * Допустимы следующие значения: <ul> <li>s_id - по ID </li> <li>s_lid - по сайту,
  * для которого было создано обращение </li> <li>s_lamp - по индикатору </li>
  * <li>s_date_create - по дате создания </li> <li>s_timestamp - по дате изменения </li>
  * <li>s_date_close - по дате закрытия </li> <li>s_owner - по автору </li> <li>s_modified_by - по
  * ID пользователя - изменившего обращение </li> <li>s_title - по заголовку
  * </li> <li>s_responsible - по ID ответственного </li> <li>s_messages - по количеству
  * сообщений </li> <li>s_category - по ID категории </li> <li>s_criticality - по ID
  * критичности </li> <li>s_status - по ID статуса </li> <li>s_mark - по ID оценки </li>
  * <li>s_online - по количеству пользователей </li> </ul>
  *
  *
  *
  * @param varchar &$order  Порядок сортировки. Допустимы следующие значения: <ul> <li>desc - по
  * убыванию (значение по умолчанию) </li> <li>asc - по возрастанию </li> </ul>
  *
  *
  *
  * @param array $arFilter = array() Массив для фильтрации значений. Необязательный параметр. В
  * массиве допустимы следующие индексы: <ul> <li>ID - ID обращения
  * (допускается сложная логика) </li> <li>ID_EXACT_MATCH - "Y" - при фильтрации по
  * ID обращения будет искаться точное совпадение (по умолчанию); "N" - в
  * противном случае будет искаться вхождение </li> <li>LID - ID сайта </li>
  * <li>LID_EXACT_MATCH - "Y" - при фильтрации по ID языка будет искаться точное
  * совпадение (по умолчанию); "N" - в противном случае будет искаться
  * вхождение </li> <li>LAMP - массив индикаторов: "red", "yellow", "green", "green_s", "grey"
  * </li> <li>DATE_CREATE_1 - левая часть интервала для даты создания обращения
  * </li> <li>DATE_CREATE_2 - правая часть интервала для даты создания обращения
  * </li> <li>DATE_TIMESTAMP_1 - левая часть интервала для даты модификации
  * обращения </li> <li>DATE_TIMESTAMP_2 - правая часть интервала для даты
  * модификации обращения </li> <li>DATE_CLOSE_1 - левая часть интервала для
  * даты закрытия обращения </li> <li>DATE_CLOSE_2 - правая часть интервала для
  * даты закрытия обращения </li> <li>AUTO_CLOSE_DAYS1 - левая часть интервала
  * для количества дней по истечении которых обращение будет
  * автоматически закрыто при отсутствии ответа от автора </li>
  * <li>AUTO_CLOSE_DAYS2 - правая часть интервала для количества дней по
  * истечении которых обращение будет автоматически закрыто при
  * отсутствии ответа от автора </li> <li>TICKET_TIME_1 - левая часть интервала
  * для количества дней прошедших с даты создания до даты закрытия
  * обращения </li> <li>TICKET_TIME_2 - правая часть интервала для количества
  * дней прошедших с даты создания до даты закрытия обращения </li>
  * <li>TITLE - заголовок обращения (допускается сложная логика) </li>
  * <li>TITLE_EXACT_MATCH - "Y" - при фильтрации по заголовку обращения будет
  * искаться точное совпадение (по умолчанию); "N" - в противном случае
  * будет искаться вхождение </li> <li>MESSAGES1 - левая часть интервала для
  * количества сообщений в обращении </li> <li>MESSAGES2 - правая часть
  * интервала для количества сообщений в обращении </li> <li>OWNER - автор
  * обращения, поиск осуществляется по ID пользователя, логину, имени,
  * фамилии, символному коду (допускается сложная логика) </li>
  * <li>OWNER_EXACT_MATCH - "Y" - при фильтрации по автору обращения будет
  * искаться точное совпадение (по умолчанию); "N" - в противном случае
  * будет искаться вхождение </li> <li>CREATED_BY - кем было создано обращение,
  * поиск осуществляется по ID пользователя, логину, имени, фамилии,
  * названии модуля из которого было создано обращение (допускается
  * сложная логика) </li> <li>CREATED_BY_EXACT_MATCH - "Y" - при фильтрации по
  * создателю обращения будет искаться точное совпадение (по
  * умолчанию); "N" - в противном случае будет искаться вхождение </li>
  * <li>MODIFIED_BY - изменивший обращение, поиск осуществляется по ID
  * пользователя, логину, имени, фамилии, названии модуля из которого
  * было изменено обращение (допускается сложная логика) </li>
  * <li>MODIFIED_BY_EXACT_MATCH - "Y" - при фильтрации по символьному коду статуса
  * будет искаться точное совпадение (по умолчанию); "N" - в противном
  * случае будет искаться вхождение </li> <li>RESPONSIBLE - ответственный за
  * обращение, поиск осуществляется по ID пользователя, логину, имени,
  * фамилии (допускается сложная логика) </li> <li>RESPONSIBLE_EXACT_MATCH - "Y" - при
  * фильтрации по ответственному за обращение будет искаться точное
  * совпадение (по умолчанию); "N" - в противном случае будет искаться
  * вхождение </li> <li>RESPONSIBLE_ID - ID пользователя ответственного за
  * обращение, при задании "0" будут выбраны только те обращения у
  * которых нет ответственного </li> <li>CATEGORY - ID категории обращения (0 -
  * без категории) </li> <li>CATEGORY_SID - символьный код категории обращения
  * (допускается сложная логика) </li> <li>CATEGORY_SID_EXACT_MATCH - "Y" - при
  * фильтрации по символьному коду категории будет искаться точное
  * совпадение (по умолчанию); "N" - в противном случае будет искаться
  * вхождение </li> <li>CRITICALITY - ID критичности обращения (0 - без
  * критичности) </li> <li>CRITICALITY_SID - символьный код критичности
  * обращения (допускается сложная логика) </li> <li>CRITICALITY_SID_EXACT_MATCH - "Y" -
  * при фильтрации по символьному коду критичности будет искаться
  * точное совпадение (по умолчанию); "N" - в противном случае будет
  * искаться вхождение </li> <li>STATUS - ID статуса обращения (0 - без статуса)
  * </li> <li>STATUS_SID - символьный код статуса обращения (допускается
  * сложная логика) </li> <li>STATUS_SID_EXACT_MATCH - "Y" - при фильтрации по
  * символьному коду статуса будет искаться точное совпадение (по
  * умолчанию); "N" - в противном случае будет искаться вхождение </li>
  * <li>STATUS_SID_EXACT_MATCH - "Y" - при фильтрации по символьному коду оценки
  * ответа будет искаться точное совпадение (по умолчанию); "N" - в
  * противном случае будет искаться вхождение </li> <li>MARK - ID оценки
  * ответов (0 - без оценки) </li> <li>MARK_SID - символьный код оценки ответов
  * (допускается сложная логика) </li> <li>SOURCE - ID источника (0 - источник
  * "web") </li> <li>SOURCE_SID - символьный код источника (допускается сложная
  * логика) </li> <li>SOURCE_SID_EXACT_MATCH - "Y" - при фильтрации по символьному коду
  * источника будет искаться точное совпадение (по умолчанию); "N" - в
  * противном случае будет искаться вхождение </li> <li>MESSAGE - текст
  * сообщения (допускается сложная логика) </li> <li>MESSAGE_EXACT_MATCH - "Y" - при
  * фильтрации по сообщению будет искаться точное совпадение (по
  * умолчанию); "N" - в противном случае будет искаться вхождение </li>
  * <li>LAST_MESSAGE_USER_ID - ID пользователя написавшего последнее сообщение в
  * обращении (допускается сложная логика) </li> <li>LAST_MESSAGE_USER_ID_EXACT_MATCH - "Y"
  * - при фильтрации по ID пользователя написавшего последнее
  * сообщение в обращении будет искаться точное совпадение (по
  * умолчанию); "N" - в противном случае будет искаться вхождение </li>
  * <li>LAST_MESSAGE_SID - символьный идентификатор написавшего последнее
  * сообщение в обращении (если источник "email", то это может быть email,
  * если источник "телефон", то это может быть номер телефона)
  * (допускается сложная логика) </li> <li>LAST_MESSAGE_SID_EXACT_MATCH - "Y" - при
  * фильтрации по символьному идентификатору пользователя
  * написавшего последнее сообщение в обращении будет искаться
  * точное совпадение (по умолчанию); "N" - в противном случае будет
  * искаться вхождение </li> <li>SUPPORT_COMMENTS - комментарий техподдержки,
  * видимый в стандартных формах только для пользователей входящих в
  * группу техподдержки </li> <li>SUPPORT_COMMENTS_EXACT_MATCH - "Y" - при фильтрации по ID
  * пользователя написавшего последнее сообщение в обращении будет
  * искаться точное совпадение (по умолчанию); "N" - в противном случае
  * будет искаться вхождение </li> <li>SITE_ID - идентификатор сайта</li> <li>CLOSE
  * - Y\N - закрыт тикет, или нет</li> <li>S_SPAM - Y\N - флаг, является ли тикет
  * спамом</li> <li>IS_OVERDUE - Y\N - флаг, просрочен ли тикет.</li> <li>SLA_ID - по ID
  * уровня техподдержки (допускается сложная логика).</li>
  * <li>SUPPORTTEAM_GROUP_ID - по ID группы техподдержки (число или массив
  * чисел).</li> <li>CLIENT_GROUP_ID - Y\N - по ID группы клиентов (число или массив
  * чисел).</li> </ul>
  *
  *
  *
  * @param boolean &$is_filtered  Переменная возвращающая true в том случае если список результатов
  * отфильтрован по какому либо критерию; либо false в противном случае.
  * Изменен на <b>isFiltered</b> c 12.0.0
  *
  *
  *
  * @param char(1) $CHECK_RIGHTS = "Y" Необязательный параметр. "Y" - будут выбраны только те обращения
  * которые текущий пользователь может просматривать (по умолчанию);
  * "N" - выбирать все обращения независимо от прав текущего
  * пользователя. Изменен на <b>checkRights</b> c 12.0.0
  *
  *
  *
  * @param char(1) $get_user_name = "Y" Необязательный параметр. "Y" - при выборке обращений будут также
  * выбраны такие поля как OWNER_LOGIN, OWNER_NAME, RESPONSIBLE_LOGIN, RESPONSIBLE_NAME, MODIFIED_LOGIN,
  * MODIFIED_NAME, LAST_MESSAGE_LOGIN, LAST_MESSAGE_NAME, CREATED_LOGIN, CREATED_EMAIL, CREATED_NAME, описывающие
  * параметры пользователей имевших отношение к данному обращению
  * (по умолчанию); "N" - вышеперечисленные поля не будут выбраны, но
  * зато это ускорит работу функции. Изменен на <b>getUserName</b> c 12.0.0
  *
  *
  *
  * @param char(1) $get_dictionary_name = "Y" Необязательный параметр. "Y" - при выборке обращений будут также
  * выбраны такие поля как CATEGORY_NAME, CATEGORY_SID, CRITICALITY_NAME, CRITICALITY_SID, STATUS_NAME,
  * STATUS_SID, MARK_NAME, MARK_SID, SOURCE_NAME, SOURCE_SID, описывающие поля из справочника
  * техподдержки (по умолчанию); "N" - вышеперечисленные поля не будут
  * выбраны, но зато это ускорит работу функции. Удален с 4.0.6
  *
  *
  *
  * @param char(2) $lang = LANG Двухсимвольный код языка в формате которого необходимо выбрать
  * временные параметры обращения (время создания, изменения,
  * закрытия); необязательный параметр, по умолчанию - код текущего
  * сайта. Удален с 4.0.0
  *
  *
  *
  * @return record 
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?<br>$FilterArr = Array(<br>	"find_id",<br>	"find_lid",<br>	"find_lamp",<br>	"find_date_create1",<br>	"find_date_create2",<br>	"find_date_timestamp1",<br>	"find_date_timestamp2",<br>	"find_date_close1",<br>	"find_date_close2",<br>	"find_close",<br>	"find_ticket_time_1",<br>	"find_ticket_time_2",<br>	"find_title",<br>	"find_messages1",<br>	"find_messages2",<br>	"find_owner",<br>	"find_created_by",<br>	"find_responsible",<br>	"find_responsible_id",<br>	"find_category_id",<br>	"find_criticality_id",<br>	"find_status_id",<br>	"find_mark_id",<br>	"find_source_id",<br>	"find_modified_by",<br>	"find_message"<br>	);<br>if (strlen($set_filter)&gt;0) InitFilterEx($FilterArr,"TICKET_LIST","set",true); else InitFilterEx($FilterArr,"TICKET_LIST","get",true);<br>if (strlen($del_filter)&gt;0) DelFilterEx($FilterArr,"TICKET_LIST",true);<br>if (CheckFilter())<br>{<br>	$arFilter = Array(<br>		"ID"                =&gt; $find_id,<br>		"LID"               =&gt; $find_lid,<br>		"LAMP"              =&gt; $find_lamp,<br>		"DATE_CREATE_1"     =&gt; $find_date_create1,<br>		"DATE_CREATE_2"     =&gt; $find_date_create2,<br>		"DATE_TIMESTAMP_1"  =&gt; $find_date_timestamp1,<br>		"DATE_TIMESTAMP_2"  =&gt; $find_date_timestamp2,<br>		"DATE_CLOSE_1"      =&gt; $find_date_close1,<br>		"DATE_CLOSE_2"      =&gt; $find_date_close2,<br>		"CLOSE"             =&gt; $find_close,<br>		"TICKET_TIME_1"     =&gt; $find_ticket_time_1,<br>		"TICKET_TIME_2"     =&gt; $find_ticket_time_2,<br>		"TITLE"             =&gt; $find_title,<br>		"MESSAGES1"         =&gt; $find_messages1,<br>		"MESSAGES2"         =&gt; $find_messages2,<br>		"OWNER"             =&gt; $find_owner,<br>		"CREATED_BY"        =&gt; $find_created_by,<br>		"RESPONSIBLE"       =&gt; $find_responsible,<br>		"RESPONSIBLE_ID"    =&gt; $find_responsible_id,<br>		"CATEGORY"          =&gt; $find_category_id,<br>		"CRITICALITY"       =&gt; $find_criticality_id,<br>		"STATUS"            =&gt; $find_status_id,<br>		"MARK"              =&gt; $find_mark_id,<br>		"SOURCE"            =&gt; $find_source_id,<br>		"MODIFIED_BY"       =&gt; $find_modified_by,<br>		"MESSAGE"           =&gt; $find_message<br>		);<br>}<br>$tickets = <b>CTicket::GetList</b>($by, $order, $arFilter, $is_filtered);<br>?&gt;<br>
  * </pre>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/support/classes/cticket/getlist.php
  * @author Bitrix
  */
 public static function GetList(&$by, &$order, $arFilter = array(), &$isFiltered, $checkRights = "Y", $getUserName = "******", $getExtraNames = "Y", $siteID = false, $arParams = array())
 {
     $err_mess = CTicket::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB, $USER, $USER_FIELD_MANAGER;
     /** @var string $d_join Dictionary join */
     $d_join = "";
     $bAdmin = 'N';
     $bSupportTeam = 'N';
     $bSupportClient = 'N';
     $bDemo = 'N';
     /** @var string $messJoin Messages join */
     $messJoin = "";
     /** @var string $searchJoin Search table join */
     $searchJoin = '';
     $need_group = false;
     $arSqlHaving = array();
     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());
     } else {
         $bAdmin = 'Y';
         $bSupportTeam = 'Y';
         $bSupportClient = 'Y';
         $bDemo = 'Y';
         if (is_object($USER)) {
             $uid = intval($USER->GetID());
         } else {
             $uid = -1;
         }
     }
     if ($bAdmin != 'Y' && $bSupportTeam != 'Y' && $bSupportClient != 'Y' && $bDemo != 'Y') {
         return false;
     }
     if ($bSupportTeam == 'Y' || $bAdmin == 'Y' || $bDemo == 'Y') {
         $lamp = "\n\t\t\t\tif(ifnull(T.DATE_CLOSE,'x')<>'x', 'grey',\n\t\t\t\t\tif(ifnull(T.LAST_MESSAGE_USER_ID,0)='{$uid}', 'green',\n\t\t\t\t\t\tif(ifnull(T.OWNER_USER_ID,0)='{$uid}', 'red',\n\t\t\t\t\t\t\tif(T.LAST_MESSAGE_BY_SUPPORT_TEAM='Y','green_s',\n\t\t\t\t\t\t\t\tif(ifnull(T.RESPONSIBLE_USER_ID,0)='{$uid}', 'red',\n\t\t\t\t\t\t\t\t\t'yellow')))))\n\t\t\t\t";
     } else {
         $lamp = "\n\t\t\t\tif(ifnull(T.DATE_CLOSE,'x')<>'x', 'grey',\n\t\t\t\t\tif(T.LAST_MESSAGE_BY_SUPPORT_TEAM='Y', 'red', 'green'))\n\t\t\t\t";
     }
     $bJoinSupportTeamTbl = $bJoinClientTbl = false;
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         $filterKeys = array_keys($arFilter);
         $filterKeysCount = count($filterKeys);
         for ($i = 0; $i < $filterKeysCount; $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 "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T.ID", $val, $match);
                     break;
                 case "HOLD_ON":
                     $arSqlSearch[] = $val == "Y" ? "T.HOLD_ON='Y'" : "T.HOLD_ON = 'N'";
                     break;
                 case "LID":
                 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 "LAMP":
                     if (is_array($val)) {
                         if (count($val) > 0) {
                             $str = "";
                             foreach ($val as $value) {
                                 $str .= ", '" . $DB->ForSQL($value) . "'";
                             }
                             $str = TrimEx($str, ",");
                             $arSqlSearch[] = " " . $lamp . " in (" . $str . ")";
                         }
                     } elseif (strlen($val) > 0) {
                         $arSqlSearch[] = " " . $lamp . " = '" . $DB->ForSQL($val) . "'";
                     }
                     break;
                 case "DATE_CREATE_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.DATE_CREATE>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_CREATE_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.DATE_CREATE<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "DATE_TIMESTAMP_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.TIMESTAMP_X>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_TIMESTAMP_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.TIMESTAMP_X<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "DATE_CLOSE_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.DATE_CLOSE>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_CLOSE_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.DATE_CLOSE<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "CLOSE":
                     $arSqlSearch[] = $val == "Y" ? "T.DATE_CLOSE is not null" : "T.DATE_CLOSE is null";
                     break;
                 case "AUTO_CLOSE_DAYS1":
                     $arSqlSearch[] = "T.AUTO_CLOSE_DAYS>='" . intval($val) . "'";
                     break;
                 case "AUTO_CLOSE_DAYS2":
                     $arSqlSearch[] = "T.AUTO_CLOSE_DAYS<='" . intval($val) . "'";
                     break;
                 case "TICKET_TIME_1":
                     $arSqlSearch[] = "UNIX_TIMESTAMP(T.DATE_CLOSE) - UNIX_TIMESTAMP(T.DATE_CREATE)>='" . intval($val) * 86400 . "'";
                     break;
                 case "TICKET_TIME_2":
                     $arSqlSearch[] = "UNIX_TIMESTAMP(T.DATE_CLOSE) - UNIX_TIMESTAMP(T.DATE_CREATE)<='" . intval($val) * 86400 . "'";
                     break;
                 case "TITLE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.TITLE", $val, $match);
                     break;
                 case "MESSAGES1":
                     $arSqlSearch[] = "T.MESSAGES>='" . intval($val) . "'";
                     break;
                 case "MESSAGES2":
                     $arSqlSearch[] = "T.MESSAGES<='" . intval($val) . "'";
                     break;
                 case "PROBLEM_TIME1":
                     $arSqlSearch[] = "T.PROBLEM_TIME>='" . intval($val) . "'";
                     break;
                 case "PROBLEM_TIME2":
                     $arSqlSearch[] = "T.PROBLEM_TIME<='" . intval($val) . "'";
                     break;
                 case "OVERDUE_MESSAGES1":
                     $arSqlSearch[] = "T.OVERDUE_MESSAGES>='" . intval($val) . "'";
                     break;
                 case "OVERDUE_MESSAGES2":
                     $arSqlSearch[] = "T.OVERDUE_MESSAGES<='" . intval($val) . "'";
                     break;
                 case "AUTO_CLOSE_DAYS_LEFT1":
                     $arSqlSearch[] = "CASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y' THEN\n\t\t\t\t\t\t\tTO_DAYS(ADDDATE(T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY)) - TO_DAYS(now()) ELSE -1 END >='" . intval($val) . "'";
                     break;
                 case "AUTO_CLOSE_DAYS_LEFT2":
                     $arSqlSearch[] = "CASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y' THEN\n\t\t\t\t\t\t\tTO_DAYS(ADDDATE(T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY))-TO_DAYS(now()) ELSE 999 END <='" . intval($val) . "'";
                     break;
                 case "OWNER":
                     $getUserName = "******";
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("UO.ID, UO.LOGIN, UO.LAST_NAME, UO.NAME", $val, $match, array("@", "."));
                     //T.OWNER_USER_ID,
                     break;
                 case "OWNER_USER_ID":
                 case "OWNER_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T." . $key, $val, $match);
                     break;
                 case "SLA_ID":
                 case "SLA":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T.SLA_ID", $val, $match);
                     break;
                 case "CREATED_BY":
                     $getUserName = "******";
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.CREATED_USER_ID, UC.LOGIN, UC.LAST_NAME, UC.NAME, T.CREATED_MODULE_NAME", $val, $match);
                     break;
                 case "RESPONSIBLE":
                     $getUserName = "******";
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.RESPONSIBLE_USER_ID, UR.LOGIN, UR.LAST_NAME, UR.NAME", $val, $match);
                     break;
                 case "RESPONSIBLE_ID":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "T.RESPONSIBLE_USER_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(T.RESPONSIBLE_USER_ID is null or T.RESPONSIBLE_USER_ID=0)";
                     }
                     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 "CATEGORY_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DC.SID", $val, $match);
                     $d_join = "\n\t\t\tLEFT JOIN b_ticket_dictionary DC ON (DC.ID = T.CATEGORY_ID and DC.C_TYPE = 'C')";
                     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 "CRITICALITY_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DK.SID", $val, $match);
                     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 "STATUS_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DS.SID", $val, $match);
                     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 "MARK_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DM.SID", $val, $match);
                     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 "SOURCE_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DSR.SID", $val, $match);
                     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;
                 case "DIFFICULTY_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DD.SID", $val, $match);
                     break;
                 case "MODIFIED_BY":
                     $getUserName = "******";
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.MODIFIED_USER_ID, T.MODIFIED_MODULE_NAME, UM.LOGIN, UM.LAST_NAME, UM.NAME", $val, $match);
                     break;
                 case "MESSAGE":
                     global $strError;
                     if (strlen($val) <= 0) {
                         break;
                     }
                     if (CSupportSearch::CheckModule() && CSupportSearch::isIndexExists()) {
                         // new indexed search
                         $searchSqlParams = CSupportSearch::getSql($val);
                         $searchOn = $searchSqlParams['WHERE'];
                         $searchHaving = $searchSqlParams['HAVING'];
                         if ($searchOn) {
                             $searchJoin = 'INNER JOIN b_ticket_search TS ON TS.TICKET_ID = T.ID AND ' . $searchOn;
                             if (!empty($searchHaving)) {
                                 // 2 or more search words
                                 $arSqlHaving[] = $searchHaving;
                                 $need_group = true;
                             }
                         }
                     } else {
                         if ($bSupportTeam == "Y" || $bAdmin == "Y" || $bDemo == "Y") {
                             $messJoin = "INNER JOIN b_ticket_message M ON (M.TICKET_ID=T.ID)";
                         } else {
                             $messJoin = "INNER JOIN b_ticket_message M ON (M.TICKET_ID=T.ID and M.IS_HIDDEN='N' and M.IS_LOG='N')";
                         }
                         $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                         $f = new CFilterQuery("OR", "yes", $match, array(), "N", "Y", "N");
                         $query = $f->GetQueryString("T.TITLE,M.MESSAGE_SEARCH", $val);
                         $error = $f->error;
                         if (strlen(trim($error)) > 0) {
                             $strError .= $error . "<br>";
                             $query = "0";
                         } else {
                             $arSqlSearch[] = $query;
                         }
                     }
                     break;
                 case "LAST_MESSAGE_USER_ID":
                 case "LAST_MESSAGE_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T." . $key, $val, $match);
                     break;
                 case "LAST_MESSAGE_BY_SUPPORT_TEAM":
                     $arSqlSearch[] = "T.LAST_MESSAGE_BY_SUPPORT_TEAM= '" . ($val == 'Y' ? 'Y' : 'N') . "'";
                     break;
                 case "SUPPORT_COMMENTS":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.SUPPORT_COMMENTS", $val, $match);
                     break;
                 case "IS_SPAM":
                     $arSqlSearch[] = $val == "Y" ? "T.IS_SPAM ='Y'" : "(T.IS_SPAM = 'N' or T.IS_SPAM is null)";
                     break;
                 case "IS_OVERDUE":
                     $arSqlSearch[] = $val == "Y" ? "T.IS_OVERDUE ='Y'" : "(T.IS_OVERDUE = 'N' or T.IS_OVERDUE is null)";
                     break;
                 case "IS_SPAM_MAYBE":
                     $arSqlSearch[] = $val == "Y" ? "T.IS_SPAM='N'" : "(T.IS_SPAM='Y' or T.IS_SPAM is null)";
                     break;
                 case 'SUPPORTTEAM_GROUP_ID':
                 case 'CLIENT_GROUP_ID':
                     if ($key == 'SUPPORTTEAM_GROUP_ID') {
                         $table = 'UGS';
                         $bJoinSupportTeamTbl = true;
                     } else {
                         $table = 'UGC';
                         $bJoinClientTbl = true;
                     }
                     if (is_array($val)) {
                         $val = array_map('intval', $val);
                         $val = array_unique($val);
                         $val = array_filter($val);
                         if (count($val) > 0) {
                             $arSqlSearch[] = '(' . $table . '.GROUP_ID IS NOT NULL AND ' . $table . '.GROUP_ID IN (' . implode(',', $val) . '))';
                         }
                     } else {
                         $val = intval($val);
                         if ($val > 0) {
                             $arSqlSearch[] = '(' . $table . '.GROUP_ID IS NOT NULL AND ' . $table . '.GROUP_ID=\'' . $val . '\')';
                         }
                     }
                     break;
                 case 'COUPON':
                     $match = $matchValueSet && $arFilter[$key . "_EXACT_MATCH"] != "Y" ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T." . $key, $val, $match);
                     break;
             }
         }
     }
     $obUserFieldsSql = new CUserTypeSQL();
     $obUserFieldsSql->SetEntity("SUPPORT", "T.ID");
     $obUserFieldsSql->SetSelect($arParams["SELECT"]);
     $obUserFieldsSql->SetFilter($arFilter);
     $obUserFieldsSql->SetOrder(array($by => $order));
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY T.ID";
     } elseif ($by == "s_last_message_date") {
         $strSqlOrder = "ORDER BY T.LAST_MESSAGE_DATE";
     } elseif ($by == "s_site_id" || $by == "s_lid") {
         $strSqlOrder = "ORDER BY T.SITE_ID";
     } elseif ($by == "s_lamp") {
         $strSqlOrder = "ORDER BY LAMP";
     } elseif ($by == "s_is_overdue") {
         $strSqlOrder = "ORDER BY T.IS_OVERDUE";
     } elseif ($by == "s_is_notified") {
         $strSqlOrder = "ORDER BY T.IS_NOTIFIED";
     } elseif ($by == "s_date_create") {
         $strSqlOrder = "ORDER BY T.DATE_CREATE";
     } elseif ($by == "s_timestamp" || $by == "s_timestamp_x") {
         $strSqlOrder = "ORDER BY T.TIMESTAMP_X";
     } elseif ($by == "s_date_close") {
         $strSqlOrder = "ORDER BY T.DATE_CLOSE";
     } elseif ($by == "s_owner") {
         $strSqlOrder = "ORDER BY T.OWNER_USER_ID";
     } elseif ($by == "s_modified_by") {
         $strSqlOrder = "ORDER BY T.MODIFIED_USER_ID";
     } elseif ($by == "s_title") {
         $strSqlOrder = "ORDER BY T.TITLE ";
     } elseif ($by == "s_responsible") {
         $strSqlOrder = "ORDER BY T.RESPONSIBLE_USER_ID";
     } elseif ($by == "s_messages") {
         $strSqlOrder = "ORDER BY T.MESSAGES";
     } elseif ($by == "s_category") {
         $strSqlOrder = "ORDER BY T.CATEGORY_ID";
     } elseif ($by == "s_criticality") {
         $strSqlOrder = "ORDER BY T.CRITICALITY_ID";
     } elseif ($by == "s_sla") {
         $strSqlOrder = "ORDER BY T.SLA_ID";
     } elseif ($by == "s_status") {
         $strSqlOrder = "ORDER BY T.STATUS_ID";
     } elseif ($by == "s_difficulty") {
         $strSqlOrder = "ORDER BY T.DIFFICULTY_ID";
     } elseif ($by == "s_problem_time") {
         $strSqlOrder = "ORDER BY T.PROBLEM_TIME";
     } elseif ($by == "s_mark") {
         $strSqlOrder = "ORDER BY T.MARK_ID";
     } elseif ($by == "s_online") {
         $strSqlOrder = "ORDER BY USERS_ONLINE";
     } elseif ($by == "s_support_comments") {
         $strSqlOrder = "ORDER BY T.SUPPORT_COMMENTS";
     } elseif ($by == "s_auto_close_days_left") {
         $strSqlOrder = "ORDER BY AUTO_CLOSE_DAYS_LEFT";
     } elseif ($by == 's_coupon') {
         $strSqlOrder = 'ORDER BY T.COUPON';
     } elseif ($by == 's_deadline') {
         $strSqlOrder = 'ORDER BY T.SUPPORT_DEADLINE';
     } elseif ($s = $obUserFieldsSql->GetOrder($by)) {
         $strSqlOrder = "ORDER BY " . strtoupper($s);
     } else {
         $by = "s_default";
         $strSqlOrder = "ORDER BY IS_SUPER_TICKET DESC, T.IS_OVERDUE DESC, T.IS_NOTIFIED DESC, T.LAST_MESSAGE_DATE";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $arSqlSearch[] = $obUserFieldsSql->GetFilter();
     if ($getUserName == "Y") {
         $u_select = "\n\t\t\t\t,\n\t\t\t\tUO.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tOWNER_LOGIN,\n\t\t\t\tUO.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tOWNER_EMAIL,\n\t\t\t\tconcat(ifnull(UO.NAME,''),' ',ifnull(UO.LAST_NAME,''))\t\tOWNER_NAME,\n\t\t\t\tUR.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tRESPONSIBLE_LOGIN,\n\t\t\t\tUR.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tRESPONSIBLE_EMAIL,\n\t\t\t\tconcat(ifnull(UR.NAME,''),' ',ifnull(UR.LAST_NAME,''))\t\tRESPONSIBLE_NAME,\n\t\t\t\tUM.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tMODIFIED_BY_LOGIN,\n\t\t\t\tUM.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tMODIFIED_BY_EMAIL,\n\t\t\t\tconcat(ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,''))\t\tMODIFIED_BY_NAME,\n\t\t\t\tUM.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tMODIFIED_LOGIN,\n\t\t\t\tUM.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tMODIFIED_EMAIL,\n\t\t\t\tconcat(ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,''))\t\tMODIFIED_NAME,\n\t\t\t\tUL.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tLAST_MESSAGE_LOGIN,\n\t\t\t\tUL.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tLAST_MESSAGE_EMAIL,\n\t\t\t\tconcat(ifnull(UL.NAME,''),' ',ifnull(UL.LAST_NAME,''))\t\tLAST_MESSAGE_NAME,\n\t\t\t\tUC.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tCREATED_LOGIN,\n\t\t\t\tUC.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tCREATED_EMAIL,\n\t\t\t\tconcat(ifnull(UC.NAME,''),' ',ifnull(UC.LAST_NAME,''))\t\tCREATED_NAME\n\t\t\t";
         $u_join = "\n\t\t\tLEFT JOIN b_user UO ON (UO.ID = T.OWNER_USER_ID)\n\t\t\tLEFT JOIN b_user UR ON (UR.ID = T.RESPONSIBLE_USER_ID)\n\t\t\tLEFT JOIN b_user UM ON (UM.ID = T.MODIFIED_USER_ID)\n\t\t\tLEFT JOIN b_user UL ON (UL.ID = T.LAST_MESSAGE_USER_ID)\n\t\t\tLEFT JOIN b_user UC ON (UC.ID = T.CREATED_USER_ID)\n\t\t\t";
     }
     if ($getExtraNames == "Y") {
         $d_select = "\n\t\t\t\t,\n\t\t\t\tDC.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\tCATEGORY_NAME,\n\t\t\t\tDC.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tCATEGORY_DESC,\n\t\t\t\tDC.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tCATEGORY_SID,\n\t\t\t\tDK.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\tCRITICALITY_NAME,\n\t\t\t\tDK.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tCRITICALITY_DESC,\n\t\t\t\tDK.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tCRITICALITY_SID,\n\t\t\t\tDS.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\tSTATUS_NAME,\n\t\t\t\tDS.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tSTATUS_DESC,\n\t\t\t\tDS.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tSTATUS_SID,\n\t\t\t\tDM.NAME\t\t\t\t\t\t\t\t\t\t\t\t\tMARK_NAME,\n\t\t\t\tDM.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tMARK_DESC,\n\t\t\t\tDM.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tMARK_SID,\n\t\t\t\tDSR.NAME\t\t\t\t\t\t\t\t\t\t\t\t\tSOURCE_NAME,\n\t\t\t\tDSR.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tSOURCE_DESC,\n\t\t\t\tDSR.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tSOURCE_SID,\n\t\t\t\tDD.NAME\t\t\t\t\t\t\t\t\t\t\t\t\tDIFFICULTY_NAME,\n\t\t\t\tDD.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tDIFFICULTY_DESC,\n\t\t\t\tDD.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tDIFFICULTY_SID,\n\t\t\t\tSLA.NAME\t\t\t\t\t\t\t\t\t\t\t\t\tSLA_NAME\n\t\t\t";
         $d_join = "\n\t\t\tLEFT JOIN b_ticket_dictionary DC ON (DC.ID = T.CATEGORY_ID and DC.C_TYPE = 'C')\n\t\t\tLEFT JOIN b_ticket_dictionary DK ON (DK.ID = T.CRITICALITY_ID and DK.C_TYPE = 'K')\n\t\t\tLEFT JOIN b_ticket_dictionary DS ON (DS.ID = T.STATUS_ID and DS.C_TYPE = 'S')\n\t\t\tLEFT JOIN b_ticket_dictionary DM ON (DM.ID = T.MARK_ID and DM.C_TYPE = 'M')\n\t\t\tLEFT JOIN b_ticket_dictionary DSR ON (DSR.ID = T.SOURCE_ID and DSR.C_TYPE = 'SR')\n\t\t\tLEFT JOIN b_ticket_dictionary DD ON (DD.ID = T.DIFFICULTY_ID and DD.C_TYPE = 'D')\n\t\t\tLEFT JOIN b_ticket_sla SLA ON (SLA.ID = T.SLA_ID)\n\t\t\t";
     }
     if (strlen($siteID) > 0) {
         $dates_select = "\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE", "FULL", $siteID, true) . "\tDATE_CREATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.TIMESTAMP_X", "FULL", $siteID, true) . "\tTIMESTAMP_X,\n\t\t\t\t" . $DB->DateToCharFunction("T.LAST_MESSAGE_DATE", "FULL", $siteID, true) . "\tLAST_MESSAGE_DATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CLOSE", "FULL", $siteID, true) . "\tDATE_CLOSE,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE", "SHORT", $siteID, true) . "\tDATE_CREATE_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.TIMESTAMP_X", "SHORT", $siteID, true) . "\tTIMESTAMP_X_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CLOSE", "SHORT", $siteID, true) . "\tDATE_CLOSE_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.SUPPORT_DEADLINE", "FULL", $siteID, true) . "\tSUPPORT_DEADLINE,\n\t\t\t\tCASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y' THEN " . $DB->DateToCharFunction("ADDDATE(T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY)", "FULL", $siteID, true) . " ELSE NULL END AUTO_CLOSE_DATE\n\t\t\t";
     } else {
         $dates_select = "\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE", "FULL") . "\t\tDATE_CREATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.TIMESTAMP_X", "FULL") . "\t\tTIMESTAMP_X,\n\t\t\t\t" . $DB->DateToCharFunction("T.LAST_MESSAGE_DATE", "FULL") . "\tLAST_MESSAGE_DATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CLOSE", "FULL") . "\t\tDATE_CLOSE,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE", "SHORT") . "\tDATE_CREATE_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.TIMESTAMP_X", "SHORT") . "\tTIMESTAMP_X_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CLOSE", "SHORT") . "\t\tDATE_CLOSE_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.SUPPORT_DEADLINE", "FULL") . "\tSUPPORT_DEADLINE,\n\t\t\t\tCASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y' THEN " . $DB->DateToCharFunction("ADDDATE(T.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY)", "FULL") . " ELSE NULL END AUTO_CLOSE_DATE\n\t\t\t";
     }
     $ugroupJoin = '';
     if ($bJoinSupportTeamTbl) {
         $ugroupJoin .= "\n\t\t\tLEFT JOIN b_ticket_user_ugroup UGS ON (UGS.USER_ID = T.RESPONSIBLE_USER_ID) ";
         $need_group = true;
     }
     if ($bJoinClientTbl) {
         $ugroupJoin .= "\n\t\t\tLEFT JOIN b_ticket_user_ugroup UGC ON (UGC.USER_ID = T.OWNER_USER_ID) ";
         $need_group = true;
     }
     // add permissions check
     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) . ')';
         }
         $arSqlSearch[] = $strSqlSearchUser;
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $onlineInterval = intval(COption::GetOptionString("support", "ONLINE_INTERVAL"));
     $strSqlSelect = "\n\t\t\tSELECT\n\t\t\t\tT.*,\n\t\t\t\tT.SITE_ID,\n\t\t\t\tT.SITE_ID\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLID,\n\t\t\t\t{$dates_select},\n\t\t\t\tUNIX_TIMESTAMP(T.DATE_CLOSE)-UNIX_TIMESTAMP(T.DATE_CREATE)\t\t\t\t\t\t\tTICKET_TIME,\n\t\t\t\tCASE WHEN (UNIX_TIMESTAMP(T.DATE_CLOSE) IS NULL OR UNIX_TIMESTAMP(T.DATE_CLOSE) = 0) AND T.LAST_MESSAGE_BY_SUPPORT_TEAM = 'Y' THEN\n\t\t\t\t\tTO_DAYS(\n\t\t\t\t\t\tADDDATE(\n\t\t\t\t\t\t\tT.LAST_MESSAGE_DATE, INTERVAL T.AUTO_CLOSE_DAYS DAY\n\t\t\t\t\t\t)\n\t\t\t\t\t) - TO_DAYS(now())\n\t\t\t\tELSE -1 END AUTO_CLOSE_DAYS_LEFT,\n\t\t\t\t(SELECT COUNT(DISTINCT USER_ID) FROM b_ticket_online WHERE TICKET_ID = T.ID AND TIMESTAMP_X >= DATE_ADD(now(), INTERVAL - " . $onlineInterval . " SECOND)) USERS_ONLINE,\n\t\t\t\tif(T.COUPON IS NOT NULL, 1, 0)\t\t\t\t\t\t\t\t\t\t\t\t\t\tIS_SUPER_TICKET,\n\t\t\t\t{$lamp}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLAMP\n\t\t\t\t{$d_select}\n\t\t\t\t{$u_select}\n\t\t\t\t" . $obUserFieldsSql->GetSelect();
     $strSqlFrom = "\n\t\t\tFROM\n\t\t\t\tb_ticket T\n\t\t\t{$u_join}\n\t\t\t{$d_join}\n\t\t\t{$messJoin}\n\t\t\t{$searchJoin}\n\t\t\t{$ugroupJoin}\n\t\t\t\t" . $obUserFieldsSql->GetJoin("T.ID");
     $strSqlWhere = "\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t";
     $strSqlGroup = $need_group ? ' GROUP BY T.ID  ' : '';
     $strSqlHaving = $arSqlHaving ? ' HAVING ' . join(' AND ', $arSqlHaving) . ' ' : '';
     $strSql = $strSqlSelect . $strSqlFrom . $strSqlWhere . $strSqlGroup . $strSqlHaving . $strSqlOrder;
     if (is_array($arParams) && isset($arParams["NAV_PARAMS"]) && is_array($arParams["NAV_PARAMS"])) {
         $nTopCount = isset($arParams['NAV_PARAMS']['nTopCount']) ? intval($arParams['NAV_PARAMS']['nTopCount']) : 0;
         if ($nTopCount > 0) {
             $strSql = $DB->TopSql($strSql, $nTopCount);
             $res = $DB->Query($strSql, false, $err_mess . __LINE__);
             $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("SUPPORT"));
         } else {
             $cntSql = "SELECT COUNT(T.ID) as C " . $strSqlFrom . $strSqlWhere . $strSqlGroup . $strSqlHaving;
             if (!empty($strSqlGroup)) {
                 $cntSql = 'SELECT COUNT(1) AS C FROM (' . $cntSql . ') tt';
             }
             $res_cnt = $DB->Query($cntSql);
             $res_cnt = $res_cnt->Fetch();
             $res = new CDBResult();
             $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("SUPPORT"));
             $res->NavQuery($strSql, $res_cnt["C"], $arParams["NAV_PARAMS"]);
         }
     } else {
         $res = $DB->Query($strSql, false, $err_mess . __LINE__);
         $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("SUPPORT"));
     }
     $isFiltered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #19
0
 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;
 }
Example #20
0
 function GetList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = array();
     $select = "";
     $from1 = "";
     $from2 = "";
     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 "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 "CITY_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("S.CITY_ID", $val, $match);
                     break;
                 case "DATE_START_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_FIRST>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_START_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_FIRST<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "DATE_END_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_LAST>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_END_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "S.DATE_LAST<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     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 "EVENTS1":
                     $arSqlSearch[] = "S.C_EVENTS>='" . intval($val) . "'";
                     break;
                 case "EVENTS2":
                     $arSqlSearch[] = "S.C_EVENTS<='" . intval($val) . "'";
                     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 "USER_AGENT":
                     $val = preg_replace("/[\n\r]+/", " ", $val);
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S.USER_AGENT", $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 "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 "URL_TO":
                 case "URL_LAST":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match, array("/", "\\", ".", "?", "#", ":"));
                     break;
                 case "ADV_BACK":
                 case "NEW_GUEST":
                 case "FAVORITES":
                 case "URL_LAST_404":
                 case "URL_TO_404":
                 case "USER_AUTH":
                     $arSqlSearch[] = $val == "Y" ? "S." . $key . "='Y'" : "S." . $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;
                 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("S." . $key, $val, $match);
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY S.ID";
     } elseif ($by == "s_last_site_id") {
         $strSqlOrder = "ORDER BY S.LAST_SITE_ID";
     } elseif ($by == "s_first_site_id") {
         $strSqlOrder = "ORDER BY S.FIRST_SITE_ID";
     } 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_events") {
         $strSqlOrder = "ORDER BY S.C_EVENTS ";
     } 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_region_name") {
         $strSqlOrder = "ORDER BY CITY.REGION ";
     } elseif ($by == "s_city_id") {
         $strSqlOrder = "ORDER BY S.CITY_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 = "\n\t\t\tSELECT\n\t\t\t\tS.ID,\n\t\t\t\tS.GUEST_ID,\n\t\t\t\tS.NEW_GUEST,\n\t\t\t\tS.USER_ID,\n\t\t\t\tS.USER_AUTH,\n\t\t\t\tS.C_EVENTS,\n\t\t\t\tS.HITS,\n\t\t\t\tS.FAVORITES,\n\t\t\t\tS.URL_FROM,\n\t\t\t\tS.URL_TO,\n\t\t\t\tS.URL_TO_404,\n\t\t\t\tS.URL_LAST,\n\t\t\t\tS.URL_LAST_404,\n\t\t\t\tS.USER_AGENT,\n\t\t\t\tS.IP_FIRST,\n\t\t\t\tS.IP_LAST,\n\t\t\t\tS.FIRST_HIT_ID,\n\t\t\t\tS.LAST_HIT_ID,\n\t\t\t\tS.PHPSESSID,\n\t\t\t\tS.ADV_ID,\n\t\t\t\tS.ADV_BACK,\n\t\t\t\tS.REFERER1,\n\t\t\t\tS.REFERER2,\n\t\t\t\tS.REFERER3,\n\t\t\t\tS.STOP_LIST_ID,\n\t\t\t\tS.COUNTRY_ID,\n\t\t\t\tCITY.REGION REGION_NAME,\n\t\t\t\tS.CITY_ID,\n\t\t\t\tCITY.NAME CITY_NAME,\n\t\t\t\tS.FIRST_SITE_ID,\n\t\t\t\tS.LAST_SITE_ID,\n\t\t\t\tUNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST) SESSION_TIME,\n\t\t\t\t" . $DB->DateToCharFunction("S.DATE_FIRST") . " DATE_FIRST,\n\t\t\t\t" . $DB->DateToCharFunction("S.DATE_LAST") . " DATE_LAST\n\t\t\t\t{$select}\n\t\t\tFROM\n\t\t\t\tb_stat_session S\n\t\t\t{$from1}\n\t\t\t{$from2}\n\t\t\t\tLEFT JOIN b_stat_city CITY ON (CITY.ID = S.CITY_ID)\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\tLIMIT " . intval(COption::GetOptionString('statistic', 'RECORDS_LIMIT')) . "\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #21
0
 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;
 }
Example #22
0
 function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, $get_user = "******")
 {
     $err_mess = CAllVoteEvent::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB;
     $arSqlSearch = array();
     $strSqlSearch = "";
     if (is_array($arFilter)) {
         $filter_keys = array_keys($arFilter);
         $count = count($filter_keys);
         for ($i = 0; $i < $count; $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 "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("E.ID", $val, $match);
                     break;
                 case "VALID":
                     $arSqlSearch[] = $val == "Y" ? "E.VALID='Y'" : "E.VALID='N'";
                     break;
                 case "DATE_1":
                     $arSqlSearch[] = "E.DATE_VOTE>=" . $DB->CharToDateFunction($val, "SHORT");
                     break;
                 case "DATE_2":
                     $arSqlSearch[] = "E.DATE_VOTE<=" . $DB->CharToDateFunction($val . " 23:59:59", "FULL");
                     break;
                 case "VOTE_USER":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("E.VOTE_USER_ID", $val, $match);
                     break;
                 case "USER_ID":
                     if ($get_user == "Y") {
                         $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                         $arSqlSearch[] = GetFilterQuery("U.AUTH_USER_ID", $val, $match);
                     }
                     break;
                 case "SESSION":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("E.STAT_SESSION_ID", $val, $match);
                     break;
                 case "IP":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("E.IP", $val, $match, array("."));
                     break;
                 case "VOTE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("E.VOTE_ID, V.TITLE", $val, $match);
                     break;
                 case "VOTE_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("E.VOTE_ID", $val, $match);
                     break;
             }
         }
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY E.ID";
     } elseif ($by == "s_valid") {
         $strSqlOrder = "ORDER BY E.VALID";
     } elseif ($by == "s_date") {
         $strSqlOrder = "ORDER BY E.DATE_VOTE";
     } elseif ($by == "s_session") {
         $strSqlOrder = "ORDER BY E.STAT_SESSION_ID";
     } elseif ($by == "s_vote_user") {
         $strSqlOrder = "ORDER BY E.VOTE_USER_ID";
     } elseif ($by == "s_vote") {
         $strSqlOrder = "ORDER BY E.VOTE_ID";
     } elseif ($by == "s_ip") {
         $strSqlOrder = "ORDER BY E.IP";
     } else {
         $by = "s_id";
         $strSqlOrder = "ORDER BY E.ID";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     if ($get_user == "Y") {
         $select = " ,\n\t\t\t\tU.AUTH_USER_ID, U.STAT_GUEST_ID,\n\t\t\t\tA.LOGIN,\n\t\t\t\t" . $DB->Concat("A.LAST_NAME", "' '", "A.NAME") . "\tAUTH_USER_NAME\n\t\t\t";
         $from = "\n\t\t\tLEFT JOIN b_vote_user U ON (U.ID = E.VOTE_USER_ID)\n\t\t\tLEFT JOIN b_user A ON (A.ID = U.AUTH_USER_ID)\n\t\t\t";
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT \n\t\t\t\tE.*,\n\t\t\t\t" . $DB->DateToCharFunction("E.DATE_VOTE") . "\tDATE_VOTE,\n\t\t\t\tV.TITLE, V.DESCRIPTION, V.DESCRIPTION_TYPE\n\t\t\t\t{$select}\n\t\t\tFROM\n\t\t\t\tb_vote_event E\n\t\t\tINNER JOIN b_vote V ON (V.ID=E.VOTE_ID)\n\t\t\t{$from}\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;
 }
Example #23
0
 /**
  * <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>
  * &lt;?
  * // отфильтруем данные только для поисковой системы #20 и #21
  * // а также получим дополнительные данные на декабрь 2005 года
  * $arFilter = array(
  *     "ID"           =&gt; "20 | 21",
  *     "DATE1_PERIOD" =&gt; "01.12.2005",
  *     "DATE2_PERIOD" =&gt; "31.12.2005",
  *     );
  * 
  * // получим список записей
  * $rs = <b>CSearcher::GetList</b>(
  *     ($by = "s_today_hits"), 
  *     ($order = "desc"), 
  *     $arFilter, 
  *     $is_filtered
  *     );
  * 
  * // выведем все записи
  * while ($ar = $rs-&gt;Fetch())
  * {
  *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
  * }
  * ?&gt;
  * </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;
 }
Example #24
0
 /**
  * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#event_type">типов событий</a> в упрощённом виде.</p>
  *
  *
  *
  *
  * @param string &$by = "s_event1" Поле для сортировки. Возможные значения: <ul> <li> <b>s_id</b> - ID типа
  * события; </li> <li> <b>s_event1</b> - <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#event_type_id">идентификатор event1</a> типа
  * события; </li> <li> <b>s_event2</b> - идентификатор event2 типа события; </li> <li>
  * <b>s_name</b> - название типа события; </li> <li> <b>s_description</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>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b>
  * будет искаться вхождение; </li> <li> <b>EVENT1</b>* - идентификатор event1 типа
  * события; </li> <li> <b>EVENT1_EXACT_MATCH</b> - если значение равно "Y", то при
  * фильтрации по <b>EVENT1</b> будет искаться точное совпадение; </li> <li>
  * <b>EVENT2</b>* - идентификатор event2 типа события; </li> <li> <b>EVENT2_EXACT_MATCH</b> -
  * если значение равно "Y", то при фильтрации по <b>EVENT2</b> будет
  * искаться точное совпадение; </li> <li> <b>NAME</b>* - название типа события;
  * </li> <li> <b>NAME_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по
  * <b>NAME</b> будет искаться точное совпадение; </li> <li> <b>DESCRIPTION</b>* -
  * описание типа события; </li> <li> <b>DESCRIPTION_EXACT_MATCH</b> - если значение
  * равно "Y", то при фильтрации по <b>DESCRIPTION</b> будет искаться точное
  * совпадение; </li> <li> <b>KEYWORDS</b> - event1, event2, название и описание типа
  * события; </li> <li> <b>KEYWORDS_EXACT_MATCH</b> - если значение равно "Y", то при
  * фильтрации по <b>KEYWORDS</b> будет искаться точное совпадение. </li> </ul> * -
  * допускается <a href="http://www.1c-bitrix.ru/user_help/general/filter.php">сложная логика</a>
  *
  *
  *
  * @param bool &$is_filtered  Флаг отфильтрованности результирующего списка. Если значение
  * равно "true", то список был отфильтрован.
  *
  *
  *
  * @return CDBResult 
  *
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // выберем только те типы событий у которых в event1 входит "download"
  * $arFilter = array(
  *     "EVENT1" =&gt; "download"
  *     );
  * 
  * // получим список записей
  * $rs = <b>CStatEventType::GetSimpleList</b>(
  *     ($by="s_event2"), 
  *     ($order="desc"), 
  *     $arFilter, 
  *     $is_filtered
  *     );
  * 
  * // выведем все записи
  * while ($ar = $rs-&gt;Fetch())
  * {
  *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
  * }
  * ?&gt;
  * </pre>
  *
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/classes/cstateventtype/getdynamiclist.php">CStatEventType::GetDynamicList</a>
  * </li> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/classes/cstateventtype/getlist.php">CStatEventType::GetList</a> </li>
  * <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#event_type">Термин "Тип события"</a>
  * </li> </ul> </ht<a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/cstateventtype/getsimplelist.php
  * @author Bitrix
  */
 public static function GetSimpleList(&$by, &$order, $arFilter = array(), &$is_filtered)
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = 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);
             switch ($key) {
                 case "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("E." . $key, $val, $match);
                     break;
                 case "EVENT1":
                 case "EVENT2":
                 case "NAME":
                 case "DESCRIPTION":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("E." . $key, $val, $match);
                     break;
                 case "KEYWORDS":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("E.EVENT1, E.EVENT2, E.DESCRIPTION, E.NAME", $val, $match);
                     break;
             }
         }
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $order = $order != "desc" ? "asc" : "desc";
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY E.ID " . $order;
     } elseif ($by == "s_event1") {
         $strSqlOrder = "ORDER BY E.EVENT1 " . $order . ", E.EVENT2";
     } elseif ($by == "s_event2") {
         $strSqlOrder = "ORDER BY E.EVENT2 " . $order;
     } elseif ($by == "s_name") {
         $strSqlOrder = "ORDER BY E.NAME " . $order;
     } elseif ($by == "s_description") {
         $strSqlOrder = "ORDER BY E.DESCRIPTION " . $order;
     } else {
         $by = "s_event1";
         $strSqlOrder = "ORDER BY E.EVENT1 " . $order . ", E.EVENT2";
     }
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tE.ID, E.EVENT1, E.EVENT2, E.NAME, E.DESCRIPTION,\n\t\t\t\tif (length(E.NAME)>0, E.NAME,\n\t\t\t\t\tconcat(ifnull(E.EVENT1,''),' / ',ifnull(E.EVENT2,'')))\t\tEVENT\n\t\t\tFROM\n\t\t\t\tb_stat_event E\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\tLIMIT " . intval(COption::GetOptionString('statistic', 'RECORDS_LIMIT')) . "\n\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #25
0
 function GetList(&$by, &$order, $arFilter = array(), &$isFiltered, $checkRights = "Y", $getUserName = "******", $getExtraNames = "Y", $siteID = false, $arParams = array())
 {
     $err_mess = CTicket::err_mess() . "<br>Function: GetList<br>Line: ";
     global $DB, $USER, $USER_FIELD_MANAGER;
     $bAdmin = 'N';
     $bSupportTeam = 'N';
     $bSupportClient = 'N';
     $bDemo = 'N';
     $messJoin = "";
     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());
     } else {
         $bAdmin = 'Y';
         $bSupportTeam = 'Y';
         $bSupportClient = 'Y';
         $bDemo = 'Y';
         if (is_object($USER)) {
             $uid = intval($USER->GetID());
         } else {
             $uid = -1;
         }
     }
     if ($bAdmin != 'Y' && $bSupportTeam != 'Y' && $bSupportClient != 'Y' && $bDemo != 'Y') {
         return false;
     }
     if ($bSupportTeam == 'Y' || $bAdmin == 'Y' || $bDemo == 'Y') {
         $lamp = "\n\t\t\t\tif(ifnull(T.DATE_CLOSE,'x')<>'x', 'grey',\n\t\t\t\t\tif(ifnull(T.LAST_MESSAGE_USER_ID,0)='{$uid}', 'green',\n\t\t\t\t\t\tif(ifnull(T.OWNER_USER_ID,0)='{$uid}', 'red',\n\t\t\t\t\t\t\tif(T.LAST_MESSAGE_BY_SUPPORT_TEAM='Y','green_s',\n\t\t\t\t\t\t\t\tif(ifnull(T.RESPONSIBLE_USER_ID,0)='{$uid}', 'red',\n\t\t\t\t\t\t\t\t\t'yellow')))))\n\t\t\t\t";
     } else {
         $lamp = "\n\t\t\t\tif(ifnull(T.DATE_CLOSE,'x')<>'x', 'grey',\n\t\t\t\t\tif(ifnull(T.LAST_MESSAGE_USER_ID,0)='{$uid}', 'green', 'red'))\n\t\t\t\t";
     }
     $bJoinSupportTeamTbl = $bJoinClientTbl = false;
     $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 "ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T.ID", $val, $match);
                     break;
                 case "HOLD_ON":
                     $arSqlSearch[] = $val == "Y" ? "T.HOLD_ON='Y'" : "T.HOLD_ON = 'N'";
                     break;
                 case "LID":
                 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 "LAMP":
                     if (is_array($val)) {
                         if (count($val) > 0) {
                             foreach ($val as $value) {
                                 $str .= ", '" . $DB->ForSQL($value) . "'";
                             }
                             $str = TrimEx($str, ",");
                             $arSqlSearch[] = " " . $lamp . " in (" . $str . ")";
                         }
                     } elseif (strlen($val) > 0) {
                         $arSqlSearch[] = " " . $lamp . " = '" . $DB->ForSQL($val) . "'";
                     }
                     break;
                 case "DATE_CREATE_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.DATE_CREATE>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_CREATE_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.DATE_CREATE<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "DATE_TIMESTAMP_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.TIMESTAMP_X>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_TIMESTAMP_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.TIMESTAMP_X<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "DATE_CLOSE_1":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.DATE_CLOSE>=" . $DB->CharToDateFunction($val, "SHORT");
                     }
                     break;
                 case "DATE_CLOSE_2":
                     if (CheckDateTime($val)) {
                         $arSqlSearch[] = "T.DATE_CLOSE<" . $DB->CharToDateFunction($val, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "CLOSE":
                     $arSqlSearch[] = $val == "Y" ? "T.DATE_CLOSE is not null" : "T.DATE_CLOSE is null";
                     break;
                 case "AUTO_CLOSE_DAYS1":
                     $arSqlSearch[] = "T.AUTO_CLOSE_DAYS>='" . intval($val) . "'";
                     break;
                 case "AUTO_CLOSE_DAYS2":
                     $arSqlSearch[] = "T.AUTO_CLOSE_DAYS<='" . intval($val) . "'";
                     break;
                 case "TICKET_TIME_1":
                     $arSqlSearch[] = "UNIX_TIMESTAMP(T.DATE_CLOSE) - UNIX_TIMESTAMP(T.DATE_CREATE)>='" . intval($val) * 86400 . "'";
                     break;
                 case "TICKET_TIME_2":
                     $arSqlSearch[] = "UNIX_TIMESTAMP(T.DATE_CLOSE) - UNIX_TIMESTAMP(T.DATE_CREATE)<='" . intval($val) * 86400 . "'";
                     break;
                 case "TITLE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.TITLE", $val, $match);
                     break;
                 case "MESSAGES1":
                     $arSqlSearch[] = "T.MESSAGES>='" . intval($val) . "'";
                     break;
                 case "MESSAGES2":
                     $arSqlSearch[] = "T.MESSAGES<='" . intval($val) . "'";
                     break;
                 case "PROBLEM_TIME1":
                     $arSqlSearch[] = "T.PROBLEM_TIME>='" . intval($val) . "'";
                     break;
                 case "PROBLEM_TIME2":
                     $arSqlSearch[] = "T.PROBLEM_TIME<='" . intval($val) . "'";
                     break;
                 case "OVERDUE_MESSAGES1":
                     $arSqlSearch[] = "T.OVERDUE_MESSAGES>='" . intval($val) . "'";
                     break;
                 case "OVERDUE_MESSAGES2":
                     $arSqlSearch[] = "T.OVERDUE_MESSAGES<='" . intval($val) . "'";
                     break;
                 case "AUTO_CLOSE_DAYS_LEFT1":
                     $arSqlSearch[] = "TO_DAYS(ADDDATE(T.TIMESTAMP_X, INTERVAL T.AUTO_CLOSE_DAYS DAY))-TO_DAYS(now())>='" . intval($val) . "'";
                     break;
                 case "AUTO_CLOSE_DAYS_LEFT2":
                     $arSqlSearch[] = "TO_DAYS(ADDDATE(T.TIMESTAMP_X, INTERVAL T.AUTO_CLOSE_DAYS DAY))-TO_DAYS(now())<='" . intval($val) . "'";
                     break;
                 case "OWNER":
                     $getUserName = "******";
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.OWNER_USER_ID, UO.LOGIN, UO.LAST_NAME, UO.NAME, T.OWNER_SID", $val, $match, array("@", "."));
                     break;
                 case "OWNER_USER_ID":
                 case "OWNER_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T." . $key, $val, $match);
                     break;
                 case "SLA_ID":
                 case "SLA":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T.SLA_ID", $val, $match);
                     break;
                 case "CREATED_BY":
                     $getUserName = "******";
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.CREATED_USER_ID, UC.LOGIN, UC.LAST_NAME, UC.NAME, T.CREATED_MODULE_NAME", $val, $match);
                     break;
                 case "RESPONSIBLE":
                     $getUserName = "******";
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.RESPONSIBLE_USER_ID, UR.LOGIN, UR.LAST_NAME, UR.NAME", $val, $match);
                     break;
                 case "RESPONSIBLE_ID":
                     if (intval($val) > 0) {
                         $arSqlSearch[] = "T.RESPONSIBLE_USER_ID = '" . intval($val) . "'";
                     } elseif ($val == 0) {
                         $arSqlSearch[] = "(T.RESPONSIBLE_USER_ID is null or T.RESPONSIBLE_USER_ID=0)";
                     }
                     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 "CATEGORY_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DC.SID", $val, $match);
                     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 "CRITICALITY_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DK.SID", $val, $match);
                     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 "STATUS_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DS.SID", $val, $match);
                     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 "MARK_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DM.SID", $val, $match);
                     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 "SOURCE_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DSR.SID", $val, $match);
                     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;
                 case "DIFFICULTY_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("DD.SID", $val, $match);
                     break;
                 case "MODIFIED_BY":
                     $getUserName = "******";
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.MODIFIED_USER_ID, T.MODIFIED_MODULE_NAME, UM.LOGIN, UM.LAST_NAME, UM.NAME", $val, $match);
                     break;
                 case "MESSAGE":
                     global $strError;
                     if (strlen($val) <= 0) {
                         break;
                     }
                     if ($bSupportTeam == "Y" || $bAdmin == "Y" || $bDemo == "Y") {
                         $messJoin = "INNER JOIN b_ticket_message M ON (M.TICKET_ID=T.ID)";
                     } else {
                         $messJoin = "INNER JOIN b_ticket_message M ON (M.TICKET_ID=T.ID and M.IS_HIDDEN='N' and M.IS_LOG='N')";
                     }
                     if (CSupportSearch::checkModule()) {
                         $arSqlSearch[] = CSupportSearch::GetFilterQuery($val, "M.ID", "T.TITLE", "M.MESSAGE", $strError);
                     } else {
                         $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                         $f = new CFilterQuery("OR", "yes", $match, array(), "N", "Y", "N");
                         $query = $f->GetQueryString("T.TITLE,M.MESSAGE_SEARCH", $val);
                         $error = $f->error;
                         if (strlen(trim($error)) > 0) {
                             $strError .= $error . "<br>";
                             $query = "0";
                         } else {
                             $arSqlSearch[] = $query;
                         }
                     }
                     break;
                 case "LAST_MESSAGE_USER_ID":
                 case "LAST_MESSAGE_SID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $matchValueSet ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T." . $key, $val, $match);
                     break;
                 case "SUPPORT_COMMENTS":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $matchValueSet ? "N" : "Y";
                     $arSqlSearch[] = GetFilterQuery("T.SUPPORT_COMMENTS", $val, $match);
                     break;
                 case "IS_SPAM":
                     $arSqlSearch[] = $val == "Y" ? "T.IS_SPAM ='Y'" : "(T.IS_SPAM = 'N' or T.IS_SPAM is null)";
                     break;
                 case "IS_OVERDUE":
                     $arSqlSearch[] = $val == "Y" ? "T.IS_OVERDUE ='Y'" : "(T.IS_OVERDUE = 'N' or T.IS_OVERDUE is null)";
                     break;
                 case "IS_SPAM_MAYBE":
                     $arSqlSearch[] = $val == "Y" ? "T.IS_SPAM='N'" : "(T.IS_SPAM='Y' or T.IS_SPAM is null)";
                     break;
                 case 'SUPPORTTEAM_GROUP_ID':
                 case 'CLIENT_GROUP_ID':
                     if ($key == 'SUPPORTTEAM_GROUP_ID') {
                         $table = 'UGS';
                         $bJoinSupportTeamTbl = true;
                     } else {
                         $table = 'UGC';
                         $bJoinClientTbl = true;
                     }
                     if (is_array($val)) {
                         $val = array_map('intval', $val);
                         $val = array_unique($val);
                         $val = array_filter($val);
                         if (count($val) > 0) {
                             $arSqlSearch[] = '(' . $table . '.GROUP_ID IS NOT NULL AND ' . $table . '.GROUP_ID IN (' . implode(',', $val) . '))';
                         }
                     } else {
                         $val = intval($val);
                         if ($val > 0) {
                             $arSqlSearch[] = '(' . $table . '.GROUP_ID IS NOT NULL AND ' . $table . '.GROUP_ID=\'' . $val . '\')';
                         }
                     }
                     break;
                 case 'COUPON':
                     $match = $matchValueSet && $arFilter[$key . "_EXACT_MATCH"] != "Y" ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("T." . $key, $val, $match);
                     break;
             }
         }
     }
     $obUserFieldsSql = new CUserTypeSQL();
     $obUserFieldsSql->SetEntity("SUPPORT", "T.ID");
     $obUserFieldsSql->SetSelect($arParams["SELECT"]);
     $obUserFieldsSql->SetFilter($arFilter);
     $obUserFieldsSql->SetOrder(array($by => $order));
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY T.ID";
     } elseif ($by == "s_last_message_date") {
         $strSqlOrder = "ORDER BY T.LAST_MESSAGE_DATE";
     } elseif ($by == "s_site_id" || $by == "s_lid") {
         $strSqlOrder = "ORDER BY T.SITE_ID";
     } elseif ($by == "s_lamp") {
         $strSqlOrder = "ORDER BY LAMP";
     } elseif ($by == "s_is_overdue") {
         $strSqlOrder = "ORDER BY T.IS_OVERDUE";
     } elseif ($by == "s_is_notified") {
         $strSqlOrder = "ORDER BY T.IS_NOTIFIED";
     } elseif ($by == "s_date_create") {
         $strSqlOrder = "ORDER BY T.DATE_CREATE";
     } elseif ($by == "s_timestamp") {
         $strSqlOrder = "ORDER BY T.TIMESTAMP_X";
     } elseif ($by == "s_date_close") {
         $strSqlOrder = "ORDER BY T.DATE_CLOSE";
     } elseif ($by == "s_owner") {
         $strSqlOrder = "ORDER BY T.OWNER_USER_ID";
     } elseif ($by == "s_modified_by") {
         $strSqlOrder = "ORDER BY T.MODIFIED_USER_ID";
     } elseif ($by == "s_title") {
         $strSqlOrder = "ORDER BY T.TITLE ";
     } elseif ($by == "s_responsible") {
         $strSqlOrder = "ORDER BY T.RESPONSIBLE_USER_ID";
     } elseif ($by == "s_messages") {
         $strSqlOrder = "ORDER BY T.MESSAGES";
     } elseif ($by == "s_category") {
         $strSqlOrder = "ORDER BY T.CATEGORY_ID";
     } elseif ($by == "s_criticality") {
         $strSqlOrder = "ORDER BY T.CRITICALITY_ID";
     } elseif ($by == "s_sla") {
         $strSqlOrder = "ORDER BY T.SLA_ID";
     } elseif ($by == "s_status") {
         $strSqlOrder = "ORDER BY T.STATUS_ID";
     } elseif ($by == "s_difficulty") {
         $strSqlOrder = "ORDER BY T.DIFFICULTY_ID";
     } elseif ($by == "s_problem_time") {
         $strSqlOrder = "ORDER BY T.PROBLEM_TIME";
     } elseif ($by == "s_mark") {
         $strSqlOrder = "ORDER BY T.MARK_ID";
     } elseif ($by == "s_online") {
         $strSqlOrder = "ORDER BY USERS_ONLINE";
     } elseif ($by == "s_support_comments") {
         $strSqlOrder = "ORDER BY T.SUPPORT_COMMENTS";
     } elseif ($by == "s_auto_close_days_left") {
         $strSqlOrder = "ORDER BY AUTO_CLOSE_DAYS_LEFT";
     } elseif ($by == 's_coupon') {
         $strSqlOrder = 'ORDER BY T.COUPON';
     } elseif ($by == 's_deadline') {
         $strSqlOrder = 'ORDER BY T.SUPPORT_DEADLINE';
     } elseif ($s = $obUserFieldsSql->GetOrder($by)) {
         $strSqlOrder = "ORDER BY " . strtoupper($s);
     } else {
         $by = "s_default";
         $strSqlOrder = "ORDER BY IS_SUPER_TICKET DESC, T.IS_OVERDUE DESC, T.IS_NOTIFIED DESC, T.LAST_MESSAGE_DATE";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $arSqlSearch[] = $obUserFieldsSql->GetFilter();
     if ($getUserName == "Y") {
         $u_select = "\n\t\t\t\t,\n\t\t\t\tUO.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tOWNER_LOGIN,\n\t\t\t\tUO.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tOWNER_EMAIL,\n\t\t\t\tconcat(ifnull(UO.NAME,''),' ',ifnull(UO.LAST_NAME,''))\t\tOWNER_NAME,\n\t\t\t\tUR.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tRESPONSIBLE_LOGIN,\n\t\t\t\tUR.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tRESPONSIBLE_EMAIL,\n\t\t\t\tconcat(ifnull(UR.NAME,''),' ',ifnull(UR.LAST_NAME,''))\t\tRESPONSIBLE_NAME,\n\t\t\t\tUM.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tMODIFIED_BY_LOGIN,\n\t\t\t\tUM.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tMODIFIED_BY_EMAIL,\n\t\t\t\tconcat(ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,''))\t\tMODIFIED_BY_NAME,\n\t\t\t\tUM.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tMODIFIED_LOGIN,\n\t\t\t\tUM.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tMODIFIED_EMAIL,\n\t\t\t\tconcat(ifnull(UM.NAME,''),' ',ifnull(UM.LAST_NAME,''))\t\tMODIFIED_NAME,\n\t\t\t\tUL.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tLAST_MESSAGE_LOGIN,\n\t\t\t\tUL.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tLAST_MESSAGE_EMAIL,\n\t\t\t\tconcat(ifnull(UL.NAME,''),' ',ifnull(UL.LAST_NAME,''))\t\tLAST_MESSAGE_NAME,\n\t\t\t\tUC.LOGIN\t\t\t\t\t\t\t\t\t\t\t\t\tCREATED_LOGIN,\n\t\t\t\tUC.EMAIL\t\t\t\t\t\t\t\t\t\t\t\t\tCREATED_EMAIL,\n\t\t\t\tconcat(ifnull(UC.NAME,''),' ',ifnull(UC.LAST_NAME,''))\t\tCREATED_NAME\n\t\t\t";
         $u_join = "\n\t\t\tLEFT JOIN b_user UO ON (UO.ID = T.OWNER_USER_ID)\n\t\t\tLEFT JOIN b_user UR ON (UR.ID = T.RESPONSIBLE_USER_ID)\n\t\t\tLEFT JOIN b_user UM ON (UM.ID = T.MODIFIED_USER_ID)\n\t\t\tLEFT JOIN b_user UL ON (UL.ID = T.LAST_MESSAGE_USER_ID)\n\t\t\tLEFT JOIN b_user UC ON (UC.ID = T.CREATED_USER_ID)\n\t\t\t";
     }
     if ($getExtraNames == "Y") {
         $d_select = "\n\t\t\t\t,\n\t\t\t\tDC.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\tCATEGORY_NAME,\n\t\t\t\tDC.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tCATEGORY_DESC,\n\t\t\t\tDC.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tCATEGORY_SID,\n\t\t\t\tDK.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\tCRITICALITY_NAME,\n\t\t\t\tDK.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tCRITICALITY_DESC,\n\t\t\t\tDK.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tCRITICALITY_SID,\n\t\t\t\tDS.NAME\t\t\t\t\t\t\t\t\t\t\t\t\t\tSTATUS_NAME,\n\t\t\t\tDS.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tSTATUS_DESC,\n\t\t\t\tDS.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tSTATUS_SID,\n\t\t\t\tDM.NAME\t\t\t\t\t\t\t\t\t\t\t\t\tMARK_NAME,\n\t\t\t\tDM.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tMARK_DESC,\n\t\t\t\tDM.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tMARK_SID,\n\t\t\t\tDSR.NAME\t\t\t\t\t\t\t\t\t\t\t\t\tSOURCE_NAME,\n\t\t\t\tDSR.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tSOURCE_DESC,\n\t\t\t\tDSR.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tSOURCE_SID,\n\t\t\t\tDD.NAME\t\t\t\t\t\t\t\t\t\t\t\t\tDIFFICULTY_NAME,\n\t\t\t\tDD.DESCR\t\t\t\t\t\t\t\t\t\t\t\t\tDIFFICULTY_DESC,\n\t\t\t\tDD.SID\t\t\t\t\t\t\t\t\t\t\t\t\t\tDIFFICULTY_SID,\n\t\t\t\tSLA.NAME\t\t\t\t\t\t\t\t\t\t\t\t\tSLA_NAME\n\t\t\t";
         $d_join = "\n\t\t\tLEFT JOIN b_ticket_dictionary DC ON (DC.ID = T.CATEGORY_ID and DC.C_TYPE = 'C')\n\t\t\tLEFT JOIN b_ticket_dictionary DK ON (DK.ID = T.CRITICALITY_ID and DK.C_TYPE = 'K')\n\t\t\tLEFT JOIN b_ticket_dictionary DS ON (DS.ID = T.STATUS_ID and DS.C_TYPE = 'S')\n\t\t\tLEFT JOIN b_ticket_dictionary DM ON (DM.ID = T.MARK_ID and DM.C_TYPE = 'M')\n\t\t\tLEFT JOIN b_ticket_dictionary DSR ON (DSR.ID = T.SOURCE_ID and DSR.C_TYPE = 'SR')\n\t\t\tLEFT JOIN b_ticket_dictionary DD ON (DD.ID = T.DIFFICULTY_ID and DD.C_TYPE = 'D')\n\t\t\tLEFT JOIN b_ticket_sla SLA ON (SLA.ID = T.SLA_ID)\n\t\t\t";
     }
     if (strlen($siteID) > 0) {
         $dates_select = "\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE", "FULL", $siteID, true) . "\tDATE_CREATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.TIMESTAMP_X", "FULL", $siteID, true) . "\tTIMESTAMP_X,\n\t\t\t\t" . $DB->DateToCharFunction("T.LAST_MESSAGE_DATE", "FULL", $siteID, true) . "\tLAST_MESSAGE_DATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CLOSE", "FULL", $siteID, true) . "\tDATE_CLOSE,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE", "SHORT", $siteID, true) . "\tDATE_CREATE_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.TIMESTAMP_X", "SHORT", $siteID, true) . "\tTIMESTAMP_X_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CLOSE", "SHORT", $siteID, true) . "\tDATE_CLOSE_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.SUPPORT_DEADLINE", "FULL", $siteID, true) . "\tSUPPORT_DEADLINE,\n\t\t\t\t" . $DB->DateToCharFunction("ADDDATE(T.TIMESTAMP_X, INTERVAL T.AUTO_CLOSE_DAYS DAY)", "FULL", $siteID, true) . "\tAUTO_CLOSE_DATE\n\t\t\t";
     } else {
         $dates_select = "\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE", "FULL") . "\t\tDATE_CREATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.TIMESTAMP_X", "FULL") . "\t\tTIMESTAMP_X,\n\t\t\t\t" . $DB->DateToCharFunction("T.LAST_MESSAGE_DATE", "FULL") . "\tLAST_MESSAGE_DATE,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CLOSE", "FULL") . "\t\tDATE_CLOSE,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CREATE", "SHORT") . "\tDATE_CREATE_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.TIMESTAMP_X", "SHORT") . "\tTIMESTAMP_X_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.DATE_CLOSE", "SHORT") . "\t\tDATE_CLOSE_SHORT,\n\t\t\t\t" . $DB->DateToCharFunction("T.SUPPORT_DEADLINE", "FULL") . "\tSUPPORT_DEADLINE,\n\t\t\t\t" . $DB->DateToCharFunction("ADDDATE(T.TIMESTAMP_X, INTERVAL T.AUTO_CLOSE_DAYS DAY)", "FULL") . "\tAUTO_CLOSE_DATE\n\t\t\t";
     }
     $ugroupJoin = '';
     $strSqlSearchUser = '';
     if ($bJoinSupportTeamTbl || !($bAdmin == 'Y' || $bDemo == 'Y') && $bSupportTeam == 'Y') {
         $ugroupJoin .= "\n\t\t\t\tLEFT JOIN b_ticket_user_ugroup UGS ON (UGS.USER_ID = T.RESPONSIBLE_USER_ID) ";
     }
     if ($bJoinClientTbl || !($bAdmin == 'Y' || $bDemo == 'Y') && $bSupportClient == 'Y') {
         $ugroupJoin .= "\n\t\t\t\tLEFT JOIN b_ticket_user_ugroup UGC ON (UGC.USER_ID = T.OWNER_USER_ID) ";
     }
     if (!($bAdmin == 'Y' || $bDemo == 'Y')) {
         $strSqlSearchUser = "******";
         if ($bSupportTeam == 'Y') {
             $strSqlSearchUser .= " OR (UGS2.USER_ID IS NOT NULL AND UGS2.USER_ID='{$uid}' AND UUS.IS_TEAM_GROUP IS NOT NULL AND UUS.IS_TEAM_GROUP='Y')";
             $ugroupJoin .= "\n\t\t\t\t\tLEFT JOIN b_ticket_user_ugroup UGS2 ON (UGS2.GROUP_ID = UGS.GROUP_ID AND UGS2.CAN_VIEW_GROUP_MESSAGES = 'Y')\n\t\t\t\t\tLEFT JOIN b_ticket_ugroups UUS ON (UUS.ID = UGS.GROUP_ID) ";
         } elseif ($bSupportClient == 'Y') {
             $strSqlSearchUser .= " OR (UGC2.USER_ID IS NOT NULL AND UGC2.USER_ID='{$uid}' AND UUC.IS_TEAM_GROUP IS NOT NULL AND UUC.IS_TEAM_GROUP<>'Y')";
             $ugroupJoin .= "\n\t\t\t\t\tLEFT JOIN b_ticket_user_ugroup UGC2 ON (UGC2.GROUP_ID = UGC.GROUP_ID AND UGC2.CAN_VIEW_GROUP_MESSAGES = 'Y')\n\t\t\t\t\tLEFT JOIN b_ticket_ugroups UUC ON (UUC.ID = UGC.GROUP_ID) ";
         }
         $strSqlSearchUser .= ')';
         $arSqlSearch[] = $strSqlSearchUser;
     }
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $onlineInterval = intval(COption::GetOptionString("support", "ONLINE_INTERVAL"));
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tT.*,\n\t\t\t\tT.SITE_ID,\n\t\t\t\tT.SITE_ID\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLID,\n\t\t\t\t{$dates_select},\n\t\t\t\tUNIX_TIMESTAMP(T.DATE_CLOSE)-UNIX_TIMESTAMP(T.DATE_CREATE)\t\t\t\t\t\t\tTICKET_TIME,\n\t\t\t\tTO_DAYS(ADDDATE(T.TIMESTAMP_X, INTERVAL T.AUTO_CLOSE_DAYS DAY))-TO_DAYS(now())\t\tAUTO_CLOSE_DAYS_LEFT,\n\t\t\t\tcount(distinct TN.USER_ID)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tUSERS_ONLINE,\n\t\t\t\tif(T.COUPON IS NOT NULL, 1, 0)\t\t\t\t\t\t\t\t\t\t\t\t\t\tIS_SUPER_TICKET,\n\t\t\t\t{$lamp}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tLAMP\n\t\t\t\t{$d_select}\n\t\t\t\t{$u_select}\n\t\t\t\t" . $obUserFieldsSql->GetSelect() . "\n\t\t\tFROM\n\t\t\t\tb_ticket T\n\t\t\tLEFT JOIN b_ticket_online TN ON (TN.TICKET_ID = T.ID and TN.TIMESTAMP_X >= DATE_ADD(now(), INTERVAL - {$onlineInterval} SECOND))\n\t\t\t{$u_join}\n\t\t\t{$d_join}\n\t\t\t{$messJoin}\n\t\t\t{$ugroupJoin}\n\t\t\t\t" . $obUserFieldsSql->GetJoin("T.ID") . "\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\tGROUP BY\n\t\t\t\tT.ID\n\t\t\t{$strSqlOrder}\n\t\t\t";
     $res = $DB->Query($strSql, false, $err_mess . __LINE__);
     $res->SetUserFields($USER_FIELD_MANAGER->GetUserFields("SUPPORT"));
     $isFiltered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #26
0
 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 (strlen($val) <= 0 || $val == "NOT_REF") {
                 continue;
             }
             switch (strtoupper($key)) {
                 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<DATEADD(DAY, +1, " . $DB->CharToDateFunction($val, "SHORT") . ")";
                     } 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<DATEADD(DAY, +1, " . $DB->CharToDateFunction($val, "SHORT") . ")";
                     } 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":
                     $arSqlSearch[] = GetFilterQuery("P.SENT_BCC", $val, "Y", array("@", "_", "."));
                     break;
                 case "BODY_TYPE":
                     $arSqlSearch[] = $val == "html" ? "P.BODY_TYPE='html'" : "P.BODY_TYPE='text'";
                     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;
             }
         }
     }
     $sOrder = "";
     $sort_keys = array_keys($aSort);
     for ($i = 0; $i < count($sort_keys); $i++) {
         $ord = strtoupper($aSort[$sort_keys[$i]]) != "ASC" ? "DESC" : "ASC";
         switch (strtoupper($sort_keys[$i])) {
             case "ID":
                 $sOrder .= ", P.ID " . $ord;
                 break;
             case "TIMESTAMP":
                 $sOrder .= ", P.TIMESTAMP_X " . $ord;
                 break;
             case "SUBJECT":
                 $sOrder .= ", P.SUBJECT " . $ord;
                 break;
             case "BODY_TYPE":
                 $sOrder .= ", P.BODY_TYPE " . $ord;
                 break;
             case "STATUS":
                 $sOrder .= ", P.STATUS " . $ord;
                 break;
             case "DATE_SENT":
                 $sOrder .= ", P.DATE_SENT " . $ord;
                 break;
             case "AUTO_SEND_TIME":
                 $sOrder .= ", P.AUTO_SEND_TIME " . $ord;
                 break;
             case "FROM_FIELD":
                 $sOrder .= ", P.FROM_FIELD " . $ord;
                 break;
             case "TO_FIELD":
                 $sOrder .= ", P.TO_FIELD " . $ord;
                 break;
         }
     }
     if ($sOrder == "") {
         $sOrder = "P.ID DESC";
     }
     $strSqlOrder = " ORDER BY " . TrimEx($sOrder, ",");
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tCASE\n\t\t\t\tWHEN P.STATUS='S' THEN '" . $DB->ForSql(GetMessage("POST_STATUS_SENT")) . "'\n\t\t\t\tWHEN P.STATUS='P' THEN '" . $DB->ForSql(GetMessage("POST_STATUS_PART")) . "'\n\t\t\t\tWHEN P.STATUS='E' THEN '" . $DB->ForSql(GetMessage("POST_STATUS_ERROR")) . "'\n\t\t\t\tWHEN P.STATUS='W' THEN '" . $DB->ForSql(GetMessage("POST_STATUS_WAIT")) . "'\n\t\t\t\tELSE '" . $DB->ForSql(GetMessage("POST_STATUS_DRAFT")) . "'\n\t\t\t\tEND 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.SUBSCR_FORMAT\n\t\t\t\t," . $DB->DateToCharFunction("P.TIMESTAMP_X") . "\tTIMESTAMP_X\n\t\t\t\t," . $DB->DateToCharFunction("P.DATE_SENT") . "\tDATE_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 = "SELECT * FROM (" . $strSql . ") AS P WHERE " . $strSqlSearch_h;
     }
     $strSql .= $strSqlOrder;
     //		echo htmlspecialchars($strSql);
     $res = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $res->is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #27
0
 /**
  * <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>
  * &lt;?
  * $filter = Array
  * (
  *     "ID"             =&gt; "1 | 2",
  *     "TIMESTAMP_1"    =&gt; "04.02.2004", // в формате текущего сайта
  *     "TIMESTAMP_2"    =&gt; "04.02.2005",
  *     "ACTIVE"         =&gt; "Y",
  *     "NAME"           =&gt; "Техподдержка",
  *     "DESCRITION"     =&gt; "специальная | поддержка",
  *     "USERS_1"        =&gt; "2", // от 2 пользователей
  *     "USERS_2"        =&gt; "10" // до 10 пользователей
  * );
  * $rsGroups = <b>CGroup::GetList</b>(($by="c_sort"), ($order="desc"), $filter); // выбираем группы
  * $is_filtered = $rsGroups-&gt;is_filtered; // отфильтрована ли выборка ?
  * $rsGroups-&gt;NavStart(50); // разбиваем постранично по 50 записей
  * echo $rsGroups-&gt;NavPrint(GetMessage("PAGES")); // печатаем постраничную навигацию
  * while($rsGroups-&gt;NavNext(true, "f_")) :
  * 	echo "[".$f_ID."] ".$f_NAME." ".$f_DESCRIPTION."&lt;br&gt;";	
  * endwhile;
  * ?&gt;
  * 
  * Фильтровать можно по полю "STRING_ID" - символьному идентификатору группы. Например:
  * 
  * // Возвращает группу по символьному идентификатору
  * function GetGroupByCode ($code)
  * {
  *    $rsGroups = CGroup::GetList ($by = "c_sort", $order = "asc", Array ("STRING_ID" =&gt; $code));
  *    return $rsGroups-&gt;Fetch();
  * } 
  * 
  * $rsGroups = CGroup::GetList($by = "c_sort", $order = "asc", array("STRING_ID"=&gt;'groupe code|groupe code|groupe code'));
  * if(intval($rsGroups-&gt;SelectedRowsCount()) &gt; 0)
  * {
  *    while($arGroups = $rsGroups-&gt;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;
 }
Example #28
0
 function GetList(&$by, &$order, $arFilter = array())
 {
     $arSearch = array();
     $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";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=' . $key] = $val;
                     break;
                 case "TYPE":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch[] = array('LOGIC' => 'OR', 'EVENT_NAME' => $val, 'EVENT_MESSAGE_TYPE.NAME' => $val);
                     break;
                 case "EVENT_NAME":
                 case "TYPE_ID":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=EVENT_NAME'] = $val;
                     break;
                 case "TIMESTAMP_1":
                     $arSqlSearch[] = "M.TIMESTAMP_X>=TO_DATE('" . FmtDate($val, "D.M.Y") . " 00:00:00','dd.mm.yyyy hh24:mi:ss')";
                     $arSearch['>=TIMESTAMP_X'] = $val . " 00:00:00";
                     break;
                 case "TIMESTAMP_2":
                     $arSqlSearch[] = "M.TIMESTAMP_X<=TO_DATE('" . FmtDate($val, "D.M.Y") . " 23:59:59','dd.mm.yyyy hh24:mi:ss')";
                     $arSearch['<=TIMESTAMP_X'] = $val . " 23:59:59";
                     break;
                 case "LID":
                 case "LANG":
                 case "SITE_ID":
                     $bIsLang = true;
                     $arSearch["=SITE_ID"] = $val;
                     break;
                 case "ACTIVE":
                     $arSearch['=' . $key] = $val;
                     break;
                 case "FROM":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=EMAIL_FROM'] = $val;
                     break;
                 case "TO":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=EMAIL_TO'] = $val;
                     break;
                 case "BCC":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=' . $key] = $val;
                     break;
                 case "SUBJECT":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=' . $key] = $val;
                     break;
                 case "BODY_TYPE":
                     $arSearch[$key] = $val == "text" ? 'text' : 'html';
                     break;
                 case "BODY":
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y";
                     if ($match == 'Y') {
                         $val = '%' . $val . '%';
                     }
                     $arSearch['%=MESSAGE'] = $val;
                     break;
             }
         }
     }
     if ($by == "id") {
         $strSqlOrder = "ID";
     } elseif ($by == "active") {
         $strSqlOrder = "ACTIVE";
     } elseif ($by == "event_name") {
         $strSqlOrder = "EVENT_NAME";
     } elseif ($by == "from") {
         $strSqlOrder = "EMAIL_FROM";
     } elseif ($by == "to") {
         $strSqlOrder = "EMAIL_TO";
     } elseif ($by == "bcc") {
         $strSqlOrder = "BCC";
     } elseif ($by == "body_type") {
         $strSqlOrder = "BODY_TYPE";
     } elseif ($by == "subject") {
         $strSqlOrder = "SUBJECT";
     } else {
         $strSqlOrder = "ID";
         $by = "id";
     }
     if ($order != "asc") {
         $strSqlOrderBy = "DESC";
         $order = "desc";
     } else {
         $strSqlOrderBy = "ASC";
         $order = "asc";
     }
     $arSelect = array('*', 'EVENT_MESSAGE_TYPE_ID' => 'EVENT_MESSAGE_TYPE.ID', 'EVENT_MESSAGE_TYPE_NAME' => 'EVENT_MESSAGE_TYPE.NAME', 'EVENT_MESSAGE_TYPE_EVENT_NAME' => 'EVENT_MESSAGE_TYPE.EVENT_NAME');
     if ($bIsLang) {
         $arSelect['SITE_ID'] = 'EVENT_MESSAGE_SITE.SITE_ID';
     } else {
         $arSelect['SITE_ID'] = 'LID';
     }
     $resultDb = Mail\Internal\EventMessageTable::getList(array('select' => $arSelect, 'filter' => $arSearch, 'order' => array($strSqlOrder => $strSqlOrderBy), 'runtime' => array('EVENT_MESSAGE_TYPE' => array('data_type' => 'Bitrix\\Main\\Mail\\Internal\\EventType', 'reference' => array('=this.EVENT_NAME' => 'ref.EVENT_NAME', '=ref.LID' => new \Bitrix\Main\DB\SqlExpression('?', LANGUAGE_ID))))));
     $resultDb->addFetchDataModifier(array('CEventMessage', 'GetListDataModifier'));
     $res = new CDBResult($resultDb);
     $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
     $res->is_filtered = IsFiltered($strSqlSearch);
     return $res;
 }
Example #29
0
 /**
  * <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>
  * &lt;?
  * // отфильтруем только заходы с доменов "google"
  * // сгруппировав по ссылающемуся домену
  * $arFilter = array(
  *     "FROM_DOMAIN"  =&gt; "google",
  *     "GROUP"        =&gt; "S"
  *     );
  * 
  * // получим список записей
  * $rs = <b>CReferer::GetList</b>(
  *     ($by = "s_url_from"), 
  *     ($order = "desc"), 
  *     $arFilter, 
  *     $is_filtered,
  *     $total,
  *     $group_by,
  *     $max
  *     );
  * 
  * // выведем все записи
  * while ($ar = $rs-&gt;Fetch())
  * {
  *     echo "&lt;pre&gt;"; print_r($ar); echo "&lt;/pre&gt;";    
  * }
  * ?&gt;
  * </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;
 }
Example #30
0
 /**
  * <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#host">хостов</a>, <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#event">событий</a>, коэфициенты оценки внимательности посетителей в разрезе по дням.</p>
  *
  *
  * @param string &$by = "s_date" Поле для сортировки. Возможные значения: <ul> <li> <b>s_id</b> - ID записи;
  * </li> <li> <b>s_date</b> - дата; </li> <li> <b>s_hits</b> - количество хитов; </li> <li>
  * <b>s_hosts</b> - количество хостов; </li> <li> <b>s_sessions</b> - количество сессий;
  * </li> <li> <b>s_events</b> - количество событий; </li> <li> <b>s_guests</b> - количество
  * посетителей; </li> <li> <b>s_new_guests</b> - количество <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#new_guest">новых посетителей</a>; </li> <li>
  * <b>s_favorites</b> - количество посетителей, добавивших сайт в "<a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#favorites">Избранное</a>". </li> </ul>
  *
  * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по
  * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul>
  *
  * @param array &$max_min  Ссылка на массив содержащий максимальную и минимальную даты из
  * выбранного результирующего списка. Структура данного массива: <pre
  * style="font-size: 95%;">Array ( [DATE_FIRST] =&gt; минимальная дата [MIN_DAY] =&gt; день
  * минимальной даты (1-31) [MIN_MONTH] =&gt; месяц минимальной даты (1-12) [MIN_YEAR]
  * =&gt; год минимальной даты [DATE_LAST] =&gt; максимальная дата [MAX_DAY] =&gt;
  * день максимальной даты (1-31) [MAX_MONTH] =&gt; месяц максимальной даты (1-12)
  * [MAX_YEAR] =&gt; год максимальной даты )</pre>
  *
  * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве
  * допустимы следующие ключи: <ul> <li> <b>ID</b>* - ID записи; </li> <li>
  * <b>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b>
  * будет искаться вхождение; </li> <li> <b>DATE1</b> - начальное значение
  * интервала для поля "дата"; </li> <li> <b>DATE2</b> - конечное значение
  * интервала для поля "дата"; </li> <li> <b>HITS_1</b> - начальное значение
  * интервала для поля "количество хитов"; </li> <li> <b>HITS_2</b> - конечное
  * значение интервала для поля "количество хитов"; </li> <li> <b>HOSTS_1</b> -
  * начальное значение интервала для поля "количество хостов"; </li> <li>
  * <b>HOSTS_2</b> - начальное значение интервала для поля "количество
  * хостов"; </li> <li> <b>SESSIONS_1</b> - начальное значение интервала для поля
  * "количество сессий"; </li> <li> <b>SESSIONS_2</b> - конечное значение интервала
  * для поля "количество сессий"; </li> <li> <b>EVENTS_1</b> - начальное значение
  * интервала для поля "количество событий"; </li> <li> <b>EVENTS_2</b> - конечное
  * значение интервала для поля "количество событий"; </li> <li> <b>GUESTS_1</b> -
  * начальное значение интервала для поля "количество посетителей";
  * </li> <li> <b>GUESTS_2</b> - конечное значение интервала для поля "количество
  * посетителей"; </li> <li> <b>NEW_GUESTS_1</b> - начальное значение интервала для
  * поля "количество новых посетителей"; </li> <li> <b>NEW_GUESTS_2</b> - конечное
  * значение интервала для поля "количество новых посетителей"; </li> <li>
  * <b>FAVORITES_1</b> - начальное значение интервала для поля "количество
  * посетителей добавивших сайт в "Избранное""; </li> <li> <b>FAVORITES_2</b> -
  * конечное значение интервала для поля "количество посетителей
  * добавивших сайт в "Избранное"; </li> <li> <b>SITE_ID</b>* - ID сайта; </li> <li>
  * <b>SITE_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по
  * <b>SITE_ID</b> будет искаться вхождение. </li> </ul> * - допускается <a
  * href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a>
  *
  * @param bool &$is_filtered  Флаг отфильтрованности результирующего списка. Если значение
  * равно "true", то список был отфильтрован.
  *
  * @param string $get_maxmin = "Y" Если значение данной переменной равно "Y", то в параметр <i>max_min</i>
  * будет возвращен соответствующий массив содержащий максимальную
  * и минимальную даты из выбранного результирующего списка.
  *
  * @return CDBResult 
  *
  * <h4>Example</h4> 
  * <pre>
  * &lt;?
  * // ограничимся данными только за декабрь 2007 года
  * $arFilter = array(
  *     "DATE1" =&gt; "01.12.2007",
  *     "DATE2" =&gt; "31.12.2007"
  *     );
  * 
  * // получим данные по посещаемости
  * $rsDays = <b>CTraffic::GetDailyList</b>(
  *     ($by="s_date"), 
  *     ($order="desc"), 
  *     $arMaxMin, 
  *     $arFilter, 
  *     $is_filtered
  *     );
  * 
  * while ($arDay = $rsDays-&gt;Fetch())
  * {
  *     echo "дата: ".$arDay["DATE_STAT"]."&lt;br&gt;";
  *     echo "количество хитов: ".$arDay["HITS"]."&lt;br&gt;";
  *     echo "количество хостов: ".$arDay["C_HOSTS"]."&lt;br&gt;";
  *     echo "количество сессий: ".$arDay["SESSIONS"]."&lt;br&gt;";
  *     echo "количество событий: ".$arDay["C_EVENTS"]."&lt;br&gt;";
  *     echo "количество посетителей: ".$arDay["GUESTS"]."&lt;br&gt;";
  * }
  * ?&gt;
  * </pre>
  *
  *
  * <h4>See Also</h4> 
  * <ul> <li> <a
  * href="http://dev.1c-bitrix.ru/api_help/statistic/classes/ctraffic/getcommonvalues.php">CTraffic::GetCommonValues</a>
  * </li> <li> <a href="http://www.1c-bitrix.ru/user_help/statistic/site_traffic/traffic.php">Отчет "Динамика
  * посещаемости"</a> </li> </ul> <a name="examples"></a>
  *
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/ctraffic/getdailylist.php
  * @author Bitrix
  */
 public static function GetDailyList(&$by, &$order, &$arMaxMin, $arFilter = array(), &$is_filtered, $get_maxmin = "Y")
 {
     $err_mess = "File: " . __FILE__ . "<br>Line: ";
     $DB = CDatabase::GetModuleConnection('statistic');
     $arSqlSearch = array();
     $strSqlSearch = "";
     $site_filtered = 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("D.ID", $val, $match);
                     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, "SHORT") . " + INTERVAL 1 DAY";
                     }
                     break;
                 case "HITS_1":
                     $arSqlSearch[] = "D.HITS>='" . intval($val) . "'";
                     break;
                 case "HITS_2":
                     $arSqlSearch[] = "D.HITS<='" . intval($val) . "'";
                     break;
                 case "SESSIONS_1":
                     $arSqlSearch[] = "D.SESSIONS>='" . intval($val) . "'";
                     break;
                 case "SESSIONS_2":
                     $arSqlSearch[] = "D.SESSIONS<='" . intval($val) . "'";
                     break;
                 case "NEW_GUESTS_1":
                     $arSqlSearch[] = "D.NEW_GUESTS>='" . intval($val) . "'";
                     break;
                 case "NEW_GUESTS_2":
                     $arSqlSearch[] = "D.NEW_GUESTS<='" . intval($val) . "'";
                     break;
                 case "FAVORITES_1":
                     $arSqlSearch[] = "D.FAVORITES>='" . intval($val) . "'";
                     break;
                 case "FAVORITES_2":
                     $arSqlSearch[] = "D.FAVORITES<='" . intval($val) . "'";
                     break;
                 case "GUESTS_1":
                     $arSqlSearch[] = "D.GUESTS>='" . intval($val) . "'";
                     break;
                 case "GUESTS_2":
                     $arSqlSearch[] = "D.GUESTS<='" . intval($val) . "'";
                     break;
                 case "HOSTS_1":
                     $arSqlSearch[] = "D.C_HOSTS>='" . intval($val) . "'";
                     break;
                 case "HOSTS_2":
                     $arSqlSearch[] = "D.C_HOSTS<='" . intval($val) . "'";
                     break;
                 case "EVENTS_1":
                     $arSqlSearch[] = "D.C_EVENTS>='" . intval($val) . "'";
                     break;
                 case "EVENTS_2":
                     $arSqlSearch[] = "D.C_EVENTS<='" . intval($val) . "'";
                     break;
                 case "SITE_ID":
                     $site_filtered = true;
                     if (is_array($val)) {
                         $val = implode(" | ", $val);
                     }
                     $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N";
                     $arSqlSearch[] = GetFilterQuery("D.SITE_ID", $val, $match);
                     break;
             }
         }
     }
     foreach ($arSqlSearch as $sqlWhere) {
         $strSqlSearch .= " and (" . $sqlWhere . ") ";
     }
     if ($by == "s_id") {
         $strSqlOrder = "ORDER BY D.ID";
     } elseif ($by == "s_date") {
         $strSqlOrder = "ORDER BY D.DATE_STAT";
     } elseif ($by == "s_hits") {
         $strSqlOrder = "ORDER BY D.HITS";
     } elseif ($by == "s_hosts") {
         $strSqlOrder = "ORDER BY D.C_HOSTS";
     } elseif ($by == "s_sessions") {
         $strSqlOrder = "ORDER BY D.SESSIONS";
     } elseif ($by == "s_events") {
         $strSqlOrder = "ORDER BY D.C_EVENTS";
     } elseif ($by == "s_guests") {
         $strSqlOrder = "ORDER BY D.GUESTS";
     } elseif ($by == "s_new_guests") {
         $strSqlOrder = "ORDER BY D.NEW_GUESTS";
     } elseif ($by == "s_favorites") {
         $strSqlOrder = "ORDER BY D.FAVORITES";
     } else {
         $by = "s_date";
         $strSqlOrder = "ORDER BY D.DATE_STAT";
     }
     if ($order != "asc") {
         $strSqlOrder .= " desc ";
         $order = "desc";
     }
     $table_name = $site_filtered ? "b_stat_day_site" : "b_stat_day";
     $strSql = "\n\t\t\tSELECT\n\t\t\t\tD.ID,\n\t\t\t\tD.HITS,\n\t\t\t\tD.C_HOSTS,\n\t\t\t\tD.SESSIONS,\n\t\t\t\tD.C_EVENTS,\n\t\t\t\tD.GUESTS,\n\t\t\t\tD.NEW_GUESTS,\n\t\t\t\tD.FAVORITES,\n\t\t\t\tD.AM_AVERAGE_TIME,\n\t\t\t\tD.AM_1,D.AM_1_3, D.AM_3_6, D.AM_6_9, D.AM_9_12, D.AM_12_15, D.AM_15_18, D.AM_18_21, D.AM_21_24, D.AM_24,\n\t\t\t\tD.AH_AVERAGE_HITS,\n\t\t\t\tD.AH_1, D.AH_2_5, D.AH_6_9, D.AH_10_13, D.AH_14_17, D.AH_18_21, D.AH_22_25, D.AH_26_29, D.AH_30_33, D.AH_34,\n\t\t\t\t" . $DB->DateToCharFunction("D.DATE_STAT", "SHORT") . " DATE_STAT,\n\t\t\t\tDAYOFMONTH(D.DATE_STAT) DAY,\n\t\t\t\tMONTH(D.DATE_STAT) MONTH,\n\t\t\t\tYEAR(D.DATE_STAT) YEAR,\n\t\t\t\tWEEKDAY(D.DATE_STAT) WDAY\n\t\t\tFROM\n\t\t\t\t" . $table_name . " D\n\t\t\tWHERE\n\t\t\t\t1=1\n\t\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);
     if ($get_maxmin == "Y") {
         $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tmax(D.DATE_STAT) DATE_LAST,\n\t\t\t\t\tmin(D.DATE_STAT) DATE_FIRST,\n\t\t\t\t\tDAYOFMONTH(max(D.DATE_STAT)) MAX_DAY,\n\t\t\t\t\tMONTH(max(D.DATE_STAT)) MAX_MONTH,\n\t\t\t\t\tYEAR(max(D.DATE_STAT)) MAX_YEAR,\n\t\t\t\t\tDAYOFMONTH(min(D.DATE_STAT)) MIN_DAY,\n\t\t\t\t\tMONTH(min(D.DATE_STAT)) MIN_MONTH,\n\t\t\t\t\tYEAR(min(D.DATE_STAT)) MIN_YEAR\n\t\t\t\tFROM\n\t\t\t\t\t" . $table_name . " D\n\t\t\t\tWHERE\n\t\t\t\t\t1=1\n\t\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t";
         $a = $DB->Query($strSql, false, $err_mess . __LINE__);
         $ar = $a->Fetch();
         if (!is_array($arMaxMin)) {
             $arMaxMin = array();
         }
         $arMaxMin["MAX_DAY"] = $ar["MAX_DAY"];
         $arMaxMin["MAX_MONTH"] = $ar["MAX_MONTH"];
         $arMaxMin["MAX_YEAR"] = $ar["MAX_YEAR"];
         $arMaxMin["MIN_DAY"] = $ar["MIN_DAY"];
         $arMaxMin["MIN_MONTH"] = $ar["MIN_MONTH"];
         $arMaxMin["MIN_YEAR"] = $ar["MIN_YEAR"];
     }
     return $res;
 }