PageRenderTime 44ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/statistic/classes/mysql/stoplist.php

https://gitlab.com/alexprowars/bitrix
PHP | 272 lines | 248 code | 13 blank | 11 comment | 39 complexity | 561e4bf1eb668eb4b307683dd6eae74d MD5 | raw file
  1. <?php
  2. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/classes/general/stoplist.php");
  3. class CStoplist extends CAllStopList
  4. {
  5. public static function GetList($by = 's_id', $order = 'desc', $arFilter = [])
  6. {
  7. $err_mess = "File: ".__FILE__."<br>Line: ";
  8. $DB = CDatabase::GetModuleConnection('statistic');
  9. $arSqlSearch = Array();
  10. if (is_array($arFilter))
  11. {
  12. foreach ($arFilter as $key => $val)
  13. {
  14. if(is_array($val))
  15. {
  16. if(count($val) <= 0)
  17. continue;
  18. }
  19. else
  20. {
  21. if( ((string)$val == '') || ($val === "NOT_REF") )
  22. continue;
  23. }
  24. $match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter);
  25. $key = strtoupper($key);
  26. switch($key)
  27. {
  28. case "ID":
  29. $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
  30. $arSqlSearch[] = GetFilterQuery("S.ID",$val,$match);
  31. break;
  32. case "DATE_START_1":
  33. if (CheckDateTime($val))
  34. $arSqlSearch[] = "S.DATE_START >= ".$DB->CharToDateFunction($val, "SHORT");
  35. break;
  36. case "DATE_START_2":
  37. if (CheckDateTime($val))
  38. $arSqlSearch[] = "S.DATE_START < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
  39. break;
  40. case "DATE_END_1":
  41. if (CheckDateTime($val))
  42. $arSqlSearch[] = "S.DATE_END >= ".$DB->CharToDateFunction($val, "SHORT");
  43. break;
  44. case "DATE_END_2":
  45. if (CheckDateTime($val))
  46. $arSqlSearch[] = "S.DATE_END < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1);
  47. break;
  48. case "ACTIVE":
  49. case "SAVE_STATISTIC":
  50. $arSqlSearch[] = ($val=="Y") ? "S.".$key."='Y'" : "S.".$key."='N'";
  51. break;
  52. case "IP_1":
  53. case "IP_2":
  54. case "IP_3":
  55. case "IP_4":
  56. $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
  57. $arSqlSearch[] = GetFilterQuery("S.".$key,$val,$match);
  58. break;
  59. case "URL_FROM":
  60. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  61. $arSqlSearch[] = GetFilterQuery("S.URL_FROM",$val,$match,array("/","\\",".","?","#",":"));
  62. break;
  63. case "USER_AGENT":
  64. case "MESSAGE":
  65. case "COMMENTS":
  66. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  67. $arSqlSearch[] = GetFilterQuery("S.".$key, $val, $match);
  68. break;
  69. case "URL_TO":
  70. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  71. $arSqlSearch[] = GetFilterQuery("S.URL_TO",$val,$match,array("/","\\",".","?","#",":"));
  72. break;
  73. case "URL_REDIRECT":
  74. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  75. $arSqlSearch[] = GetFilterQuery("S.URL_REDIRECT",$val,$match,array("/","\\",".","?","#",":"));
  76. break;
  77. case "SITE_ID":
  78. if (is_array($val)) $val = implode(" | ", $val);
  79. $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
  80. $arSqlSearch[] = GetFilterQuery("S.SITE_ID", $val, $match);
  81. break;
  82. }
  83. }
  84. }
  85. if ($order!="asc")
  86. $order = "desc";
  87. if ($by == "s_id")
  88. $strSqlOrder = "ORDER BY S.ID $order";
  89. elseif ($by == "s_date_start")
  90. $strSqlOrder = "ORDER BY S.DATE_START $order";
  91. elseif ($by == "s_site_id")
  92. $strSqlOrder = "ORDER BY S.SITE_ID $order";
  93. elseif ($by == "s_date_end")
  94. $strSqlOrder = "ORDER BY S.DATE_END $order";
  95. elseif ($by == "s_active")
  96. $strSqlOrder = "ORDER BY S.ACTIVE $order";
  97. elseif ($by == "s_save_statistic")
  98. $strSqlOrder = "ORDER BY S.SAVE_STATISTIC $order";
  99. elseif ($by == "s_ip")
  100. $strSqlOrder = "ORDER BY S.IP_1 $order, S.IP_2 $order, S.IP_3 $order, S.IP_4 $order";
  101. elseif ($by == "s_mask")
  102. $strSqlOrder = "ORDER BY S.MASK_1 $order, S.MASK_2 $order, S.MASK_3 $order, S.MASK_4 $order";
  103. elseif ($by == "s_url_to")
  104. $strSqlOrder = "ORDER BY S.URL_TO $order";
  105. elseif ($by == "s_url_from")
  106. $strSqlOrder = "ORDER BY S.URL_FROM $order";
  107. else
  108. {
  109. $strSqlOrder = "ORDER BY S.ID $order";
  110. }
  111. $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
  112. $strSql = "
  113. SELECT
  114. S.ID, S.ACTIVE, S.SAVE_STATISTIC,
  115. S.IP_1, S.IP_2, S.IP_3, S.IP_4,
  116. S.MASK_1, S.MASK_2, S.MASK_3, S.MASK_4,
  117. S.USER_AGENT, S.USER_AGENT_IS_NULL,
  118. S.URL_TO, S.URL_FROM, S.MESSAGE, S.MESSAGE_LID,
  119. S.URL_REDIRECT, S.COMMENTS, S.TEST, S.SITE_ID,
  120. ".$DB->DateToCharFunction("S.TIMESTAMP_X")." TIMESTAMP_X,
  121. ".$DB->DateToCharFunction("S.DATE_END")." DATE_END,
  122. ".$DB->DateToCharFunction("S.DATE_START")." DATE_START,
  123. if ((
  124. (S.DATE_START<=now() or S.DATE_START is null) and
  125. (S.DATE_END>=now() or S.DATE_END is null) and
  126. S.ACTIVE='Y'),
  127. 'green',
  128. 'red') as LAMP
  129. FROM
  130. b_stop_list S
  131. WHERE
  132. $strSqlSearch
  133. $strSqlOrder
  134. LIMIT ".intval(COption::GetOptionString('statistic','RECORDS_LIMIT'))."
  135. ";
  136. $res = $DB->Query($strSql, false, $err_mess.__LINE__);
  137. return $res;
  138. }
  139. public static function Check($test="N", $arParams = false)
  140. {
  141. $DB = CDatabase::GetModuleConnection('statistic');
  142. $test = ($test=="Y") ? "Y" : "N";
  143. $arStopRecord = false;
  144. $zr = false;
  145. //We did not use cache or it was cache miss
  146. if(!$arStopRecord)
  147. {
  148. $user_agent = "";
  149. $url_from = "";
  150. $url_to = "";
  151. $site_id = "";
  152. $site_where = "";
  153. $ip = array(0, 0, 0, 0);
  154. if ($arParams===false)
  155. {
  156. $ip = explode(".", $_SERVER["REMOTE_ADDR"]);
  157. $user_agent = trim($_SERVER["HTTP_USER_AGENT"]);
  158. $url_from = isset($_SERVER["HTTP_REFERER"])? $_SERVER["HTTP_REFERER"]: "";
  159. $url_to = __GetFullRequestUri();
  160. if (defined("SITE_ID"))
  161. $site_id = SITE_ID;
  162. }
  163. elseif(is_array($arParams))
  164. {
  165. $ip = explode(".", $arParams["IP"]);
  166. $user_agent = trim($arParams["USER_AGENT"]);
  167. $url_from = $arParams["URL_FROM"];
  168. $url_to = $arParams["URL_TO"];
  169. $site_id = $arParams["SITE_ID"];
  170. }
  171. $user_agent_len = mb_strlen($user_agent);
  172. $user_agent = $DB->ForSql($user_agent, 500);
  173. $url_from = $DB->ForSql($url_from, 2000);
  174. $url_to = $DB->ForSql($url_to, 2000);
  175. if ($site_id <> '')
  176. {
  177. $site_where = "and (SITE_ID = '".$DB->ForSql($site_id, 2)."' or SITE_ID is null or length(SITE_ID)<=0)";
  178. }
  179. $strSql = "
  180. SELECT
  181. ID,
  182. MESSAGE,
  183. MESSAGE_LID,
  184. SAVE_STATISTIC,
  185. URL_REDIRECT,
  186. TEST
  187. FROM
  188. b_stop_list
  189. WHERE
  190. ACTIVE='Y'
  191. and TEST='$test'
  192. $site_where
  193. and (DATE_START<=now() or DATE_START is null)
  194. and (DATE_END>=now() or DATE_END is null)
  195. and ((((MASK_1 & ".intval($ip[0]).")=IP_1 and
  196. (MASK_2 & ".intval($ip[1]).")=IP_2 and
  197. (MASK_3 & ".intval($ip[2]).")=IP_3 and
  198. (MASK_4 & ".intval($ip[3]).")=IP_4)
  199. or (IP_1 is null and IP_2 is null and IP_3 is null and IP_4 is null))
  200. and (upper('".$DB->ForSql($user_agent)."') like concat('%',upper(USER_AGENT),'%')
  201. or length(USER_AGENT)<=0 or USER_AGENT is null)
  202. and ($user_agent_len=0 or USER_AGENT_IS_NULL<>'Y')
  203. and (upper('$url_from') like concat('%',upper(URL_FROM),'%')
  204. or length(URL_FROM)<=0 or URL_FROM is null)
  205. and (upper('$url_to') like concat('%',upper(URL_TO),'%')
  206. or length(URL_TO)<=0 or URL_TO is null)
  207. )
  208. ";
  209. $z = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
  210. if($zr = $z->Fetch())
  211. {
  212. $arStopRecord = array(
  213. "STOP" => "Y",
  214. "STOP_SAVE_STATISTIC" => $zr["SAVE_STATISTIC"],
  215. "STOP_MESSAGE" => $zr["MESSAGE"],
  216. "STOP_REDIRECT_URL" => $zr["URL_REDIRECT"],
  217. "STOP_MESSAGE_LID" => $zr["MESSAGE_LID"],
  218. "STOP_LIST_ID" => $zr["ID"],
  219. );
  220. }
  221. else
  222. {
  223. $arStopRecord = array(
  224. "STOP" => "N",
  225. "STOP_SAVE_STATISTIC" => "Y",
  226. "STOP_MESSAGE" => "",
  227. "STOP_REDIRECT_URL" => "",
  228. "STOP_MESSAGE_LID" => "",
  229. "STOP_LIST_ID" => 0,
  230. );
  231. }
  232. }
  233. /*
  234. //Save session cache
  235. if($test == "N" && CACHED_b_stop_list !== false)
  236. {
  237. $_SESSION["STAT_STOP_LIST"] = array(
  238. "TIMESTAMP_X" => $TIMESTAMP_X,
  239. "DATA" => $arStopRecord,
  240. );
  241. }
  242. */
  243. if($test == "N")
  244. {
  245. foreach($arStopRecord as $key => $value)
  246. {
  247. $GLOBALS[$key] = $value;
  248. }
  249. return false;
  250. }
  251. else
  252. {
  253. if($zr)
  254. return intval($zr["ID"]);
  255. else
  256. return false;
  257. }
  258. }
  259. }