PageRenderTime 26ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 1ms

/modules/statistic/classes/mysql/session.php

https://gitlab.com/alexprowars/bitrix
PHP | 317 lines | 304 code | 13 blank | 0 comment | 45 complexity | 5b627e609774ec3de15aad6e1d0cbe7b MD5 | raw file
  1. <?php
  2. class CSession
  3. {
  4. public static function GetAttentiveness($DATE_STAT, $SITE_ID=false)
  5. {
  6. $err_mess = "File: ".__FILE__."<br>Line: ";
  7. $DB = CDatabase::GetModuleConnection('statistic');
  8. if ($SITE_ID!==false)
  9. $str = " and S.FIRST_SITE_ID = '".$DB->ForSql($SITE_ID,2)."' ";
  10. else
  11. $str = "";
  12. $strSql = "
  13. SELECT
  14. sum(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST))/count(S.ID) AM_AVERAGE_TIME,
  15. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<60,1,0)) AM_1,
  16. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=60
  17. and UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<180,1,0)) AM_1_3,
  18. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=180
  19. and UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<360,1,0)) AM_3_6,
  20. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=360
  21. and UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<540,1,0)) AM_6_9,
  22. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=540
  23. and UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<720,1,0)) AM_9_12,
  24. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=720
  25. and UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<900,1,0)) AM_12_15,
  26. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=900
  27. and UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<1080,1,0)) AM_15_18,
  28. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=1080
  29. and UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<1260,1,0)) AM_18_21,
  30. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=1260
  31. and UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)<1440,1,0)) AM_21_24,
  32. sum(if(UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST)>=1440,1,0)) AM_24,
  33. sum(S.HITS)/count(S.ID) AH_AVERAGE_HITS,
  34. sum(if(S.HITS<=1, 1, 0)) AH_1,
  35. sum(if(S.HITS>=2 and S.HITS<=5, 1, 0)) AH_2_5,
  36. sum(if(S.HITS>=6 and S.HITS<=9, 1, 0)) AH_6_9,
  37. sum(if(S.HITS>=10 and S.HITS<=13, 1, 0)) AH_10_13,
  38. sum(if(S.HITS>=14 and S.HITS<=17, 1, 0)) AH_14_17,
  39. sum(if(S.HITS>=18 and S.HITS<=21, 1, 0)) AH_18_21,
  40. sum(if(S.HITS>=22 and S.HITS<=25, 1, 0)) AH_22_25,
  41. sum(if(S.HITS>=26 and S.HITS<=29, 1, 0)) AH_26_29,
  42. sum(if(S.HITS>=30 and S.HITS<=33, 1, 0)) AH_30_33,
  43. sum(if(S.HITS>=34, 1, 0)) AH_34
  44. FROM
  45. b_stat_session S
  46. WHERE
  47. S.DATE_STAT = cast(".$DB->CharToDateFunction($DATE_STAT, "SHORT")." as date)
  48. $str
  49. ";
  50. $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
  51. $ar = $rs->Fetch();
  52. $arKeys = array_keys($ar);
  53. foreach($arKeys as $key)
  54. {
  55. if ($key=="AM_AVERAGE_TIME" || $key=="AH_AVERAGE_HITS")
  56. {
  57. $ar[$key] = (float) $ar[$key];
  58. $ar[$key] = round($ar[$key],2);
  59. }
  60. else
  61. {
  62. $ar[$key] = intval($ar[$key]);
  63. }
  64. }
  65. return $ar;
  66. }
  67. public static function GetList($by = 's_id', $order = 'desc', $arFilter = [])
  68. {
  69. $err_mess = "File: ".__FILE__."<br>Line: ";
  70. $DB = CDatabase::GetModuleConnection('statistic');
  71. $arSqlSearch = Array();
  72. $select = "";
  73. $from1 = "";
  74. $from2 = "";
  75. if (is_array($arFilter))
  76. {
  77. foreach ($arFilter as $key => $val)
  78. {
  79. if(is_array($val))
  80. {
  81. if(count($val) <= 0)
  82. continue;
  83. }
  84. else
  85. {
  86. if( ((string)$val == '') || ($val === "NOT_REF") )
  87. continue;
  88. }
  89. $match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter);
  90. $key = strtoupper($key);
  91. switch($key)
  92. {
  93. case "ID":
  94. case "GUEST_ID":
  95. case "ADV_ID":
  96. case "STOP_LIST_ID":
  97. case "USER_ID":
  98. $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
  99. $arSqlSearch[] = GetFilterQuery("S.".$key,$val,$match);
  100. break;
  101. case "COUNTRY_ID":
  102. $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
  103. $arSqlSearch[] = GetFilterQuery("S.COUNTRY_ID",$val,$match);
  104. break;
  105. case "CITY_ID":
  106. $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
  107. $arSqlSearch[] = GetFilterQuery("S.CITY_ID",$val,$match);
  108. break;
  109. case "DATE_START_1":
  110. if (CheckDateTime($val))
  111. $arSqlSearch[] = "S.DATE_FIRST>=".$DB->CharToDateFunction($val, "SHORT");
  112. break;
  113. case "DATE_START_2":
  114. if (CheckDateTime($val))
  115. $arSqlSearch[] = "S.DATE_FIRST<".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY";
  116. break;
  117. case "DATE_END_1":
  118. if (CheckDateTime($val))
  119. $arSqlSearch[] = "S.DATE_LAST>=".$DB->CharToDateFunction($val, "SHORT");
  120. break;
  121. case "DATE_END_2":
  122. if (CheckDateTime($val))
  123. $arSqlSearch[] = "S.DATE_LAST<".$DB->CharToDateFunction($val, "SHORT")." + INTERVAL 1 DAY";
  124. break;
  125. case "IP":
  126. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  127. $arSqlSearch[] = GetFilterQuery("S.IP_LAST",$val,$match,array("."));
  128. break;
  129. case "REGISTERED":
  130. $arSqlSearch[] = ($val=="Y") ? "S.USER_ID>0" : "(S.USER_ID<=0 or S.USER_ID is null)";
  131. break;
  132. case "EVENTS1":
  133. $arSqlSearch[] = "S.C_EVENTS>='".intval($val)."'";
  134. break;
  135. case "EVENTS2":
  136. $arSqlSearch[] = "S.C_EVENTS<='".intval($val)."'";
  137. break;
  138. case "HITS1":
  139. $arSqlSearch[] = "S.HITS>='".intval($val)."'";
  140. break;
  141. case "HITS2":
  142. $arSqlSearch[] = "S.HITS<='".intval($val)."'";
  143. break;
  144. case "ADV":
  145. if ($val=="Y")
  146. $arSqlSearch[] = "(S.ADV_ID>0 and S.ADV_ID is not null)";
  147. elseif ($val=="N")
  148. $arSqlSearch[] = "(S.ADV_ID<=0 or S.ADV_ID is null)";
  149. break;
  150. case "REFERER1":
  151. case "REFERER2":
  152. case "REFERER3":
  153. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  154. $arSqlSearch[] = GetFilterQuery("S.".$key, $val, $match);
  155. break;
  156. case "USER_AGENT":
  157. $val = preg_replace("/[\n\r]+/", " ", $val);
  158. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  159. $arSqlSearch[] = GetFilterQuery("S.USER_AGENT", $val, $match);
  160. break;
  161. case "STOP":
  162. $arSqlSearch[] = ($val=="Y") ? "S.STOP_LIST_ID>0" : "(S.STOP_LIST_ID<=0 or S.STOP_LIST_ID is null)";
  163. break;
  164. case "COUNTRY":
  165. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  166. $arSqlSearch[] = GetFilterQuery("C.NAME", $val, $match);
  167. $from2 = "INNER JOIN b_stat_country C ON (C.ID = S.COUNTRY_ID)";
  168. break;
  169. case "REGION":
  170. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  171. $arSqlSearch[] = GetFilterQuery("CITY.REGION", $val, $match);
  172. break;
  173. case "CITY":
  174. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  175. $arSqlSearch[] = GetFilterQuery("CITY.NAME", $val, $match);
  176. break;
  177. case "URL_TO":
  178. case "URL_LAST":
  179. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  180. $arSqlSearch[] = GetFilterQuery("S.".$key,$val,$match,array("/","\\",".","?","#",":"));
  181. break;
  182. case "ADV_BACK":
  183. case "NEW_GUEST":
  184. case "FAVORITES":
  185. case "URL_LAST_404":
  186. case "URL_TO_404":
  187. case "USER_AUTH":
  188. $arSqlSearch[] = ($val=="Y") ? "S.".$key."='Y'" : "S.".$key."='N'";
  189. break;
  190. case "USER":
  191. $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
  192. $arSqlSearch[] = "ifnull(S.USER_ID,0)>0";
  193. $arSqlSearch[] = GetFilterQuery("S.USER_ID,A.LOGIN,A.LAST_NAME,A.NAME", $val, $match);
  194. $from1 = "LEFT JOIN b_user A ON (A.ID = S.USER_ID)";
  195. $select = " , A.LOGIN, concat(ifnull(A.NAME,''),' ',ifnull(A.LAST_NAME,'')) USER_NAME";
  196. break;
  197. case "LAST_SITE_ID":
  198. case "FIRST_SITE_ID":
  199. if (is_array($val)) $val = implode(" | ", $val);
  200. $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
  201. $arSqlSearch[] = GetFilterQuery("S.".$key, $val, $match);
  202. break;
  203. }
  204. }
  205. }
  206. if ($by == "s_id") $strSqlOrder = "ORDER BY S.ID";
  207. elseif ($by == "s_last_site_id") $strSqlOrder = "ORDER BY S.LAST_SITE_ID";
  208. elseif ($by == "s_first_site_id") $strSqlOrder = "ORDER BY S.FIRST_SITE_ID";
  209. elseif ($by == "s_date_first") $strSqlOrder = "ORDER BY S.DATE_FIRST";
  210. elseif ($by == "s_date_last") $strSqlOrder = "ORDER BY S.DATE_LAST";
  211. elseif ($by == "s_user_id") $strSqlOrder = "ORDER BY S.USER_ID";
  212. elseif ($by == "s_guest_id") $strSqlOrder = "ORDER BY S.GUEST_ID";
  213. elseif ($by == "s_ip") $strSqlOrder = "ORDER BY S.IP_LAST";
  214. elseif ($by == "s_hits") $strSqlOrder = "ORDER BY S.HITS ";
  215. elseif ($by == "s_events") $strSqlOrder = "ORDER BY S.C_EVENTS ";
  216. elseif ($by == "s_adv_id") $strSqlOrder = "ORDER BY S.ADV_ID ";
  217. elseif ($by == "s_country_id") $strSqlOrder = "ORDER BY S.COUNTRY_ID ";
  218. elseif ($by == "s_region_name") $strSqlOrder = "ORDER BY CITY.REGION ";
  219. elseif ($by == "s_city_id") $strSqlOrder = "ORDER BY S.CITY_ID ";
  220. elseif ($by == "s_url_last") $strSqlOrder = "ORDER BY S.URL_LAST ";
  221. elseif ($by == "s_url_to") $strSqlOrder = "ORDER BY S.URL_TO ";
  222. else
  223. {
  224. $strSqlOrder = "ORDER BY S.ID";
  225. }
  226. if ($order!="asc")
  227. {
  228. $strSqlOrder .= " desc ";
  229. }
  230. $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
  231. $strSql = "
  232. SELECT
  233. S.ID,
  234. S.GUEST_ID,
  235. S.NEW_GUEST,
  236. S.USER_ID,
  237. S.USER_AUTH,
  238. S.C_EVENTS,
  239. S.HITS,
  240. S.FAVORITES,
  241. S.URL_FROM,
  242. S.URL_TO,
  243. S.URL_TO_404,
  244. S.URL_LAST,
  245. S.URL_LAST_404,
  246. S.USER_AGENT,
  247. S.IP_FIRST,
  248. S.IP_LAST,
  249. S.FIRST_HIT_ID,
  250. S.LAST_HIT_ID,
  251. S.PHPSESSID,
  252. S.ADV_ID,
  253. S.ADV_BACK,
  254. S.REFERER1,
  255. S.REFERER2,
  256. S.REFERER3,
  257. S.STOP_LIST_ID,
  258. S.COUNTRY_ID,
  259. CITY.REGION REGION_NAME,
  260. S.CITY_ID,
  261. CITY.NAME CITY_NAME,
  262. S.FIRST_SITE_ID,
  263. S.LAST_SITE_ID,
  264. UNIX_TIMESTAMP(S.DATE_LAST)-UNIX_TIMESTAMP(S.DATE_FIRST) SESSION_TIME,
  265. ".$DB->DateToCharFunction("S.DATE_FIRST")." DATE_FIRST,
  266. ".$DB->DateToCharFunction("S.DATE_LAST")." DATE_LAST
  267. $select
  268. FROM
  269. b_stat_session S
  270. $from1
  271. $from2
  272. LEFT JOIN b_stat_city CITY ON (CITY.ID = S.CITY_ID)
  273. WHERE
  274. $strSqlSearch
  275. $strSqlOrder
  276. LIMIT ".intval(COption::GetOptionString('statistic','RECORDS_LIMIT'))."
  277. ";
  278. $res = $DB->Query($strSql, false, $err_mess.__LINE__);
  279. return $res;
  280. }
  281. public static function GetByID($ID)
  282. {
  283. $statDB = CDatabase::GetModuleConnection('statistic');
  284. $ID = intval($ID);
  285. $res = $statDB->Query("
  286. SELECT
  287. S.*,
  288. UNIX_TIMESTAMP(S.DATE_LAST) - UNIX_TIMESTAMP(S.DATE_FIRST) SESSION_TIME,
  289. ".$statDB->DateToCharFunction("S.DATE_FIRST")." DATE_FIRST,
  290. ".$statDB->DateToCharFunction("S.DATE_LAST")." DATE_LAST,
  291. C.NAME COUNTRY_NAME,
  292. CITY.REGION REGION_NAME,
  293. CITY.NAME CITY_NAME
  294. FROM
  295. b_stat_session S
  296. INNER JOIN b_stat_country C ON (C.ID = S.COUNTRY_ID)
  297. LEFT JOIN b_stat_city CITY ON (CITY.ID = S.CITY_ID)
  298. WHERE
  299. S.ID = ".$ID."
  300. ");
  301. $res = new CStatResult($res);
  302. return $res;
  303. }
  304. }