1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
keepstatistic.php
См. документацию.
1<?php
2
4{
5 static $HIT_ID = 0;
6
7 public static function GetCuurentHitID()
8 {
9 return self::$HIT_ID;
10 }
11
12 protected static function checkGroups()
13 {
14 global $USER;
15
16 $arUserGroups = is_object($USER) ? $USER->GetUserGroupArray() : [2];
17 $arSkipGroups = explode(",", COption::GetOptionString("statistic", "SKIP_STATISTIC_GROUPS"));
18 foreach ($arSkipGroups as $key => $value)
19 {
20 if (in_array(intval($value), $arUserGroups))
21 {
22 return false;
23 }
24 }
25
26 return true;
27 }
28
29 protected static function checkRanges()
30 {
31 if (preg_match("/^.*?(\d+)\.(\d+)\.(\d+)\.(\d+)[\s-]*/", $_SERVER["REMOTE_ADDR"], $arIPAdress))
32 {
33 $arSkipIPRanges = explode("\n", COption::GetOptionString("statistic", "SKIP_STATISTIC_IP_RANGES"));
34 foreach ($arSkipIPRanges as $key => $value)
35 {
36 if (preg_match("/^.*?(\d+)\.(\d+)\.(\d+)\.(\d+)[\s-]*(\d+)\.(\d+)\.(\d+)\.(\d+)/", $value, $arIPRange))
37 {
38 if (
39 intval($arIPAdress[1]) >= intval($arIPRange[1]) && intval($arIPAdress[1]) <= intval($arIPRange[5]) &&
40 intval($arIPAdress[2]) >= intval($arIPRange[2]) && intval($arIPAdress[2]) <= intval($arIPRange[6]) &&
41 intval($arIPAdress[3]) >= intval($arIPRange[3]) && intval($arIPAdress[3]) <= intval($arIPRange[7]) &&
42 intval($arIPAdress[4]) >= intval($arIPRange[4]) && intval($arIPAdress[4]) <= intval($arIPRange[8])
43 )
44 {
45 return false;
46 }
47 }
48 }
49 }
50
51 return true;
52 }
53
54 public static function CheckSkip()
55 {
56 $skipMode = COption::GetOptionString("statistic", "SKIP_STATISTIC_WHAT");
57 switch ($skipMode)
58 {
59 case "groups":
60 $GO = static::checkGroups();
61 break;
62 case "ranges":
63 $GO = static::checkRanges();
64 break;
65 case "both":
66 $GO = static::checkGroups() && static::checkRanges();
67 break;
68 default:
69 $GO = true;
70 }
71
72 return $GO;
73 }
74
75 // Main statistics function
77 public static function Keep($HANDLE_CALL=false)
78 {
80 __GoogleAd();
81
82 $GO = true;
83 if (defined("STOP_STATISTICS"))
84 {
85 $GO = false;
86 }
87 if ($HANDLE_CALL)
88 {
89 $GO = true;
90 }
91
92 if(
93 $GO
94 && (!isset($_SESSION["SESS_NO_KEEP_STATISTIC"]) || $_SESSION["SESS_NO_KEEP_STATISTIC"]!="Y")
95 && !defined("NO_KEEP_STATISTIC")
96 )
97 {
98 static $wasCalled = false;
99 if ($wasCalled)
100 {
101 return;
102 }
103 $wasCalled = true;
104
105 $GLOBALS["DB"]->StartUsingMasterOnly();
106 if(CStatistics::CheckSkip())
107 CStatistics::ReallyKeep();
108 $GLOBALS["DB"]->StopUsingMasterOnly();
109 }
110 }
111
112 public static function ReallyKeep()
113 {
114 global $USER, $APPLICATION, $STOP_SAVE_STATISTIC, $STOP_MESSAGE, $STOP_REDIRECT_URL, $STOP, $STOP_LIST_ID, $STOP_MESSAGE_LID;
115 $DB = CDatabase::GetModuleConnection('statistic');
116
117 $SITE_ID = "";
118 if (defined("ADMIN_SECTION") && ADMIN_SECTION===true) $sql_site = "null";
119 elseif (defined("SITE_ID"))
120 {
121 $sql_site = "'".$DB->ForSql(SITE_ID,2)."'";
123 }
124 else $sql_site = "null";
125
126 $ADV_NA = COption::GetOptionString("statistic", "ADV_NA");
127 __SetReferer("referer1", "REFERER1_SYN");
128 __SetReferer("referer2", "REFERER2_SYN");
129 __SetReferer("referer3", "REFERER3_SYN");
130
131 $SAVE_HITS = (COption::GetOptionString("statistic", "SAVE_HITS")=="N") ? "N" : "Y";
132 $SAVE_VISITS = (COption::GetOptionString("statistic", "SAVE_VISITS")=="N") ? "N" : "Y";
133 $SAVE_REFERERS = (COption::GetOptionString("statistic", "SAVE_REFERERS")=="N") ? "N" : "Y";
134 $SAVE_PATH_DATA = (COption::GetOptionString("statistic", "SAVE_PATH_DATA")=="N") ? "N" : "Y";
135
136 $stmp = time();
137 $hour = date("G", $stmp); // 0..23
138 $weekday = date("w", $stmp); // 0..6
139 if ($weekday==0) $weekday = 7;
140 $month = date("n", $stmp); // 1..12
141
142 if ($STOP_SAVE_STATISTIC!="N" or $STOP!="Y")
143 {
144 if (isset($_SESSION["SESS_ADD_TO_FAVORITES"]) && $_SESSION["SESS_ADD_TO_FAVORITES"]=="Y")
145 {
146 $FAVORITES="Y";
147 $_SESSION["SESS_ADD_TO_FAVORITES"]="";
148 }
149 else
150 {
151 $FAVORITES = "N";
152 }
153
154 $ERROR_404 = (defined("ERROR_404") && ERROR_404=="Y") ? "Y" : "N";
155 $DB_now = $DB->GetNowFunction(); // save function for use in sql
156 $DB_now_date = $DB->GetNowDate(); // save function for use in sql
157 $STOP_LIST_ID = intval($STOP_LIST_ID);
158 if ($ERROR_404=="Y") init_get_params($APPLICATION->GetCurUri());
159
160 $IS_USER_AUTHORIZED = (isset($_SESSION["SESS_LAST_USER_ID"]) && intval($_SESSION["SESS_LAST_USER_ID"])>0 && is_object($USER) && $USER->IsAuthorized()) ? "Y" : "N";
161
162 stat_session_register("SESS_SEARCHER_ID");
163 stat_session_register("SESS_SEARCHER_NAME");
164 stat_session_register("SESS_SEARCHER_CHECK_ACTIVITY");
165 stat_session_register("SESS_SEARCHER_SAVE_STATISTIC");
166 stat_session_register("SESS_SEARCHER_HIT_KEEP_DAYS");
167 stat_session_register("SESS_LAST_PROTOCOL");
168 stat_session_register("SESS_LAST_URI");
169 stat_session_register("SESS_LAST_HOST");
170 stat_session_register("SESS_LAST_PAGE");
171 stat_session_register("SESS_LAST_DIR");
172 stat_session_register("SESS_HTTP_REFERER");
173 stat_session_register("SESS_COUNTRY_ID");
174 stat_session_register("SESS_CITY_ID");
175 stat_session_register("SESS_SESSION_ID");
176 stat_session_register("SESS_REFERER_ID");
177 stat_session_register("FROM_SEARCHER_ID");
178 stat_session_register("SESS_FROM_SEARCHERS");
179 stat_session_register("SESS_REQUEST_URI_CHANGE");
180 stat_session_register("SESS_LAST_DIR_ID");
181 stat_session_register("SESS_LAST_PAGE_ID");
182 stat_session_register("SESS_GRABBER_STOP_TIME");
183 stat_session_register("SESS_GRABBER_DEFENCE_STACK");
184 stat_session_register("ACTIVITY_EXCEEDING_NOTIFIED");
185
186 // SESSION_DATA_ID will be false when there is no sessions stored
187 // true when session was not found in database
188 // and an integer when was found and populated to $SESSION array
189 $SESSION_DATA_ID = CKeepStatistics::RestoreSession();
190
191 // Let's check activity limit
192 $BLOCK_ACTIVITY = CStatistics::BlockVisitorActivity();
193
194 // Activity under the limit
195 if (!$BLOCK_ACTIVITY)
196 {
197 //Check if searcher was not deleted from searchers list
198 if (isset($_SESSION["SESS_SEARCHER_ID"]) && intval($_SESSION["SESS_SEARCHER_ID"]) > 0)
199 {
200 $strSql = "
201 SELECT ID
202 FROM b_stat_searcher
203 WHERE ID = '".intval($_SESSION["SESS_SEARCHER_ID"])."'
204 ";
205 $z = $DB->Query($strSql);
206 if(!$z->Fetch())
207 unset($_SESSION["SESS_SEARCHER_ID"]);
208 }
209
210 // We did not check for searcher
211 if(!isset($_SESSION["SESS_SEARCHER_ID"]) || $_SESSION["SESS_SEARCHER_ID"] == '')
212 {
213 // is it searcher hit?
214 $strSql = "
215 SELECT
216 ID, NAME, SAVE_STATISTIC, HIT_KEEP_DAYS, CHECK_ACTIVITY
217 FROM
218 b_stat_searcher
219 WHERE
220 ACTIVE = 'Y'
221 and ".$DB->Length("USER_AGENT").">0
222 and upper('".$DB->ForSql($_SERVER["HTTP_USER_AGENT"] ?? '', 500)."') like ".$DB->Concat("'%'", "upper(USER_AGENT)", "'%'")."
223 ORDER BY ".$DB->Length("USER_AGENT")." desc, ID
224 ";
225
226 $z = $DB->Query($strSql);
227 if ($zr = $z->Fetch())
228 {
229 $_SESSION["SESS_SEARCHER_ID"] = intval($zr["ID"]);
230 $_SESSION["SESS_SEARCHER_NAME"] = $zr["NAME"];
231 $_SESSION["SESS_SEARCHER_CHECK_ACTIVITY"] = $zr["CHECK_ACTIVITY"];
232 $_SESSION["SESS_SEARCHER_SAVE_STATISTIC"] = $zr["SAVE_STATISTIC"];
233 $_SESSION["SESS_SEARCHER_HIT_KEEP_DAYS"] = $zr["HIT_KEEP_DAYS"];
234 //Here was warning "A session is active. You cannot change the session module's ini settings at this time."
235 //@ini_set("url_rewriter.tags", "");
236 }
237 $_SESSION["SESS_SEARCHER_ID"] = intval($_SESSION["SESS_SEARCHER_ID"] ?? 0);
238 }
239
240 /************************************************
241 Searcher section
242 ************************************************/
243
244 // searcher detected
245 if (intval($_SESSION["SESS_SEARCHER_ID"])>0)
246 {
247 $_SESSION["SESS_SEARCHER_ID"] = intval($_SESSION["SESS_SEARCHER_ID"]);
248
249 // let's update day counter
250 $arFields = Array(
251 "DATE_LAST" => $DB_now,
252 "TOTAL_HITS" => "TOTAL_HITS + 1"
253 );
254 $rows = $DB->Update("b_stat_searcher_day",$arFields,"WHERE SEARCHER_ID='".$_SESSION["SESS_SEARCHER_ID"]."' and DATE_STAT=".$DB_now_date,"File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
255 // there is no stat for the day yet
256 if (intval($rows)<=0)
257 {
258 // add it
259 $arFields_i = Array(
260 "DATE_STAT" => $DB_now_date,
261 "DATE_LAST" => $DB_now,
262 "SEARCHER_ID" => $_SESSION["SESS_SEARCHER_ID"],
263 "TOTAL_HITS" => 1
264 );
265 $DB->Insert("b_stat_searcher_day",$arFields_i, "File: ".__FILE__."<br>Line: ".__LINE__);
266 }
267 elseif (intval($rows)>1) // have to cleanup duplicates
268 {
269 $strSql = "SELECT ID FROM b_stat_searcher_day WHERE SEARCHER_ID='".$_SESSION["SESS_SEARCHER_ID"]."' and DATE_STAT=".$DB_now_date." ORDER BY ID";
270 $i=0;
271 $rs = $DB->Query($strSql);
272 while ($ar = $rs->Fetch())
273 {
274 $i++;
275 if ($i>1)
276 {
277 $strSql = "DELETE FROM b_stat_searcher_day WHERE ID = ".$ar["ID"];
278 $DB->Query($strSql);
279 }
280 }
281 }
282
283 // save indexed page if neccessary
284 if ($_SESSION["SESS_SEARCHER_SAVE_STATISTIC"]=="Y")
285 {
286 $sql_HIT_KEEP_DAYS = ($_SESSION["SESS_SEARCHER_HIT_KEEP_DAYS"] <> '') ? intval($_SESSION["SESS_SEARCHER_HIT_KEEP_DAYS"]) : "null";
287 $arFields = Array(
288 "DATE_HIT" => $DB_now,
289 "SEARCHER_ID" => intval($_SESSION["SESS_SEARCHER_ID"]),
290 "URL" => "'".$DB->ForSql(__GetFullRequestUri(),2000)."'",
291 "URL_404" => "'".$ERROR_404."'",
292 "IP" => "'".$DB->ForSql($_SERVER["REMOTE_ADDR"],15)."'",
293 "USER_AGENT" => "'".$DB->ForSql($_SERVER["HTTP_USER_AGENT"],500)."'",
294 "HIT_KEEP_DAYS" => $sql_HIT_KEEP_DAYS,
295 "SITE_ID" => $sql_site
296 );
297 $id = $DB->Insert("b_stat_searcher_hit",$arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
298 if ($ERROR_404=="N")
299 {
300 CStatistics::Set404("b_stat_searcher_hit", "ID = ".intval($id), array("URL_404" => "Y"));
301 }
302 }
303 }
304 else // it is not searcher
305 {
306
307 /************************************************
308 Visitor section
309 ************************************************/
310
311 /************************************************
312 Variables which describe current page
313 ************************************************/
314
315 $CURRENT_DIR = __GetCurrentDir();
316 $CURRENT_PAGE = __GetCurrentPage();
317
318 $CURRENT_PROTOCOL = (CMain::IsHTTPS()) ? "https://" : "http://"; // protocol
319 $CURRENT_PORT = $_SERVER["SERVER_PORT"]; // port
320 $CURRENT_HOST = $_SERVER["HTTP_HOST"]; // domain
321 $CURRENT_PAGE = __GetFullRequestUri($CURRENT_PAGE);// w/o parameters
322 $CURRENT_URI = __GetFullRequestUri(); // with params
323 $CURRENT_DIR = __GetFullRequestUri($CURRENT_DIR); // catalog
324
325 /************************************************
326 Country detection
327 ************************************************/
328
329 if(!isset($_SESSION["SESS_COUNTRY_ID"]) || $_SESSION["SESS_COUNTRY_ID"] == '')
330 {
331 $obCity = new CCity;
332 $_SESSION["SESS_COUNTRY_ID"] = $obCity->GetCountryCode();
333 $_SESSION["SESS_CITY_ID"] = $obCity->GetCityID();
334 }
335
336 /************************************************
337 IP => number
338 ************************************************/
339
340 $REMOTE_ADDR_NUMBER = ip2number($_SERVER["REMOTE_ADDR"]);
341
342 /************************************************
343 Advertising campaign
344 ************************************************/
345
346 CStatistics::Set_Adv();
347
348 /************************************************
349 Guest ID detection
350 ************************************************/
351
352 $arGuest = CStatistics::Set_Guest();
353
354 // Setup default advertising campaign
355 if ($ADV_NA=="Y" && intval($_SESSION["SESS_ADV_ID"])<=0 && intval($_SESSION["SESS_LAST_ADV_ID"])<=0)
356 {
357 $_SESSION["referer1"] = COption::GetOptionString("statistic", "AVD_NA_REFERER1");
358 $_SESSION["referer2"] = COption::GetOptionString("statistic", "AVD_NA_REFERER2");
359 CStatistics::Set_Adv();
360 $arGuest = CStatistics::Set_Guest();
361 }
362
363 /************************************************
364 Session section
365 ************************************************/
366
367 $_SESSION["SESS_SESSION_ID"] = intval($_SESSION["SESS_SESSION_ID"] ?? 0);
368
369 //session already exists
370 if($_SESSION["SESS_SESSION_ID"] > 0)
371 {
372 $SESSION_NEW = "N";
373 // update
374 $arFields = Array(
375 "USER_ID" => intval($_SESSION["SESS_LAST_USER_ID"]),
376 "USER_AUTH" => "'".$IS_USER_AUTHORIZED."'",
377 "USER_AGENT" => "'".$DB->ForSql($_SERVER["HTTP_USER_AGENT"] ?? '', 500)."'",
378 "DATE_LAST" => $DB_now,
379 "IP_LAST" => "'".$DB->ForSql($_SERVER["REMOTE_ADDR"],15)."'",
380 "IP_LAST_NUMBER" => $REMOTE_ADDR_NUMBER,
381 "HITS" => "HITS + 1",
382 );
383 $rows = $DB->Update("b_stat_session", $arFields, "WHERE ID='".$_SESSION["SESS_SESSION_ID"]."'", "File: ".__FILE__."<br>Line: ".__LINE__);
384 // was cleaned up
385 if (intval($rows)<=0)
386 {
387 // store as new
388 $_SESSION["SESS_SESSION_ID"] = 0;
389 if ($ADV_NA=="Y" && intval($_SESSION["SESS_ADV_ID"])<=0 && intval($_SESSION["SESS_LAST_ADV_ID"])<=0)
390 {
391 $_SESSION["referer1"] = COption::GetOptionString("statistic", "AVD_NA_REFERER1");
392 $_SESSION["referer2"] = COption::GetOptionString("statistic", "AVD_NA_REFERER2");
393 }
394 CStatistics::Set_Adv();
395 $arGuest = CStatistics::Set_Guest();
396 }
397 }
398
399 // it is new session
400 if($_SESSION["SESS_SESSION_ID"] <= 0)
401 {
402 $SESSION_NEW = "Y";
403 $sessionId = \Bitrix\Main\Application::getInstance()->getKernelSession()->getId();
404 // save session data
405 $arFields = Array(
406 "GUEST_ID" => intval($_SESSION["SESS_GUEST_ID"]),
407 "NEW_GUEST" => "'".$DB->ForSql($_SESSION["SESS_GUEST_NEW"])."'",
408 "USER_ID" => intval($_SESSION["SESS_LAST_USER_ID"]),
409 "USER_AUTH" => "'".$DB->ForSql($IS_USER_AUTHORIZED)."'",
410 "URL_FROM" => "'".$DB->ForSql($_SERVER["HTTP_REFERER"] ?? '', 2000)."'",
411 "URL_TO" => "'".$DB->ForSql($CURRENT_URI,2000)."'",
412 "URL_TO_404" => "'".$DB->ForSql($ERROR_404)."'",
413 "URL_LAST" => "'".$DB->ForSql($CURRENT_URI,2000)."'",
414 "URL_LAST_404" => "'".$DB->ForSql($ERROR_404)."'",
415 "USER_AGENT" => "'".$DB->ForSql($_SERVER["HTTP_USER_AGENT"] ?? '', 500)."'",
416 "DATE_STAT" => $DB_now_date,
417 "DATE_FIRST" => $DB_now,
418 "DATE_LAST" => $DB_now,
419 "IP_FIRST" => "'".$DB->ForSql($_SERVER["REMOTE_ADDR"],15)."'",
420 "IP_FIRST_NUMBER" => "'".$DB->ForSql($REMOTE_ADDR_NUMBER)."'",
421 "IP_LAST" => "'".$DB->ForSql($_SERVER["REMOTE_ADDR"],15)."'",
422 "IP_LAST_NUMBER" => "'".$DB->ForSql($REMOTE_ADDR_NUMBER)."'",
423 "PHPSESSID" => "'".$DB->ForSql($sessionId,255)."'",
424 "STOP_LIST_ID" => "'".$DB->ForSql($STOP_LIST_ID)."'",
425 "COUNTRY_ID" => "'".$DB->ForSql($_SESSION["SESS_COUNTRY_ID"],2)."'",
426 "CITY_ID" => $_SESSION["SESS_CITY_ID"] > 0? intval($_SESSION["SESS_CITY_ID"]): "null",
427 "ADV_BACK" => "null",
428 "FIRST_SITE_ID" => $sql_site,
429 "LAST_SITE_ID" => $sql_site,
430 "HITS" => 1,
431 );
432
433 // campaign?
434 if (intval($_SESSION["SESS_ADV_ID"])>0)
435 {
436 $arFields["ADV_ID"] = intval($_SESSION["SESS_ADV_ID"]);
437 $arFields["ADV_BACK"] = "'N'";
438 $arFields["REFERER1"] = "'".$DB->ForSql($_SESSION["referer1"],255)."'";
439 $arFields["REFERER2"] = "'".$DB->ForSql($_SESSION["referer2"],255)."'";
440 $arFields["REFERER3"] = "'".$DB->ForSql($_SESSION["referer3"],255)."'";
441 }
442 elseif (intval($_SESSION["SESS_LAST_ADV_ID"])>0) // comeback?
443 {
444 $arFields["ADV_ID"] = intval($_SESSION["SESS_LAST_ADV_ID"]);
445 $arFields["ADV_BACK"] = "'Y'";
446 $arFields["REFERER1"] = "'".$DB->ForSql($arGuest["last_referer1"],255)."'";
447 $arFields["REFERER2"] = "'".$DB->ForSql($arGuest["last_referer2"],255)."'";
448 }
449
450 // look for the same IP?
451 $day_host_counter = 1;
452 $day_host_counter_site = $SITE_ID <> ''? 1: 0;
453 $strSql = "
454 SELECT S.FIRST_SITE_ID
455 FROM b_stat_session S
456 WHERE S.IP_FIRST_NUMBER = ".$REMOTE_ADDR_NUMBER."
457 AND S.DATE_STAT=".$DB_now_date."
458 ";
459 $e = $DB->Query($strSql);
460 while($er = $e->Fetch())
461 {
462 $day_host_counter = 0;
463 if ($SITE_ID==$er["FIRST_SITE_ID"])
464 {
465 $day_host_counter_site = 0;
466 break;
467 }
468 }
469
470 $_SESSION["SESS_SESSION_ID"] = intval($DB->Insert("b_stat_session",$arFields, "File: ".__FILE__."<br>Line: ".__LINE__));
471
472 if ($ERROR_404=="N")
473 {
474 CStatistics::Set404("b_stat_session", "ID = ".$_SESSION["SESS_SESSION_ID"], array("URL_TO_404" => "Y", "URL_LAST_404" => "Y"));
475 }
476
477 $day_guest_counter = 0;
478 $new_guest_counter = 0;
479 // new guest
480 if ($_SESSION["SESS_GUEST_NEW"]=="Y")
481 {
482 // update day statistic
483 $day_guest_counter = 1;
484 $new_guest_counter = 1;
485 }
486 else // guest was here
487 {
488 // first hit for today
489 if (!isset($_SESSION["SESS_LAST"]) || $_SESSION["SESS_LAST"] != "Y")
490 {
491 // update day statistic
492 $day_guest_counter = 1;
493 $_SESSION["SESS_LAST"] = "Y";
494 }
495 }
496
497 // update day counter
498 $arFields = Array(
499 "SESSIONS" => 1,
500 "C_HOSTS" => intval($day_host_counter),
501 "GUESTS" => intval($day_guest_counter),
502 "NEW_GUESTS" => intval($new_guest_counter),
503 "SESSION" => 1,
504 "HOST" => intval($day_host_counter),
505 "GUEST" => intval($day_guest_counter),
506 "NEW_GUEST" => intval($new_guest_counter),
507 );
508 // when current day is already exists
509 // we have to update it
511 if ($rows!==false && $rows<=0)
512 // otherwise
513 {
514 // add new one
516 1, // HOSTS
517 0, // TOTAL_HOSTS (now ignored)
518 1, // SESSIONS
519 0, // HITS
520 intval($new_guest_counter), // NEW_GUESTS
521 1 // GUESTS
522 );
523
524 // and update it
526 array(
527 "SESSION" => 1,
528 "HOST" => 1,
529 "GUEST" => 1,
530 "NEW_GUEST" => intval($new_guest_counter),
531 )
532 );
533 }
534
535 // site is not defined
536 if ($SITE_ID <> '')
537 {
538 // обновляем счетчик "по дням" для текущего сайта
539 $arFields = Array(
540 "SESSIONS" => 1,
541 "C_HOSTS" => intval($day_host_counter_site),
542 "SESSION" => 1,
543 "HOST" => intval($day_host_counter_site),
544 );
545 // обновим счетчики траффика для текущего дня
547 // если текущего дня для сайта в базе еще нет то
548 if ($rows!==false && intval($rows)<=0)
549 {
550 // добавляем его
552 $SITE_ID,
553 1, // HOSTS
554 0, // TOTAL_HOSTS (now ignored)
555 1 // SESSIONS
556 );
557
558 // обновим счетчики траффика для текущего дня
560 array(),
561 array(
562 "SESSION" => 1,
563 "HOST" => 1,
564 ),
566 );
567 }
568 }
569
570 // если страна определена то
571 if ($_SESSION["SESS_COUNTRY_ID"] <> '')
572 {
573 $arFields = Array(
574 "SESSIONS" => 1,
575 "NEW_GUESTS" => $new_guest_counter,
576 );
577 CStatistics::UpdateCountry($_SESSION["SESS_COUNTRY_ID"], $arFields);
578 }
579
580 if($_SESSION["SESS_CITY_ID"] > 0)
581 {
582 $arFields = Array(
583 "SESSIONS" => 1,
584 "NEW_GUESTS" => $new_guest_counter,
585 );
586 CStatistics::UpdateCity($_SESSION["SESS_CITY_ID"], $arFields);
587 }
588
589 // обновляем гостя
590 $arFields = Array(
591 "SESSIONS" => "SESSIONS + 1",
592 "LAST_SESSION_ID" => $_SESSION["SESS_SESSION_ID"],
593 "LAST_USER_AGENT" => "'".$DB->ForSql($_SERVER["HTTP_USER_AGENT"] ?? '', 500)."'",
594 "LAST_COUNTRY_ID" => "'".$DB->ForSql($_SESSION["SESS_COUNTRY_ID"],2)."'",
595 "LAST_CITY_ID" => $_SESSION["SESS_CITY_ID"] > 0? intval($_SESSION["SESS_CITY_ID"]): "null",
596 );
597 //
598 if($obCity)
599 {
600 $arFields["LAST_CITY_INFO"] = "'".$obCity->ForSQL()."'";
601 }
602 // если это прямой заход по рекламной кампании то
603 if (intval($_SESSION["SESS_ADV_ID"])>0)
604 {
605 // обновляем рекламную кампанию последнего захода гостя
606 $arFields["LAST_ADV_ID"] = intval($_SESSION["SESS_ADV_ID"]);
607 $arFields["LAST_ADV_BACK"] = "'N'";
608 $arFields["LAST_REFERER1"] = "'".$DB->ForSql($_SESSION["referer1"],255)."'";
609 $arFields["LAST_REFERER2"] = "'".$DB->ForSql($_SESSION["referer2"],255)."'";
610 $arFields["LAST_REFERER3"] = "'".$DB->ForSql($_SESSION["referer3"],255)."'";
611 }
612 elseif (intval($_SESSION["SESS_LAST_ADV_ID"])>0) // иначе если это возврат то
613 {
614 // взводим флаг возврата на последнем заходе гостя
615 $arFields["LAST_ADV_BACK"] = "'Y'";
616 $arFields["LAST_REFERER1"] = "'".$DB->ForSql($arGuest["last_referer1"],255)."'";
617 $arFields["LAST_REFERER2"] = "'".$DB->ForSql($arGuest["last_referer2"],255)."'";
618 }
619
620 if ($_SESSION["SESS_GUEST_NEW"]=="Y")
621 $arFields["FIRST_SESSION_ID"] = $_SESSION["SESS_SESSION_ID"];
622 $rows = $DB->Update("b_stat_guest",$arFields,"WHERE ID=".intval($_SESSION["SESS_GUEST_ID"]),"File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
623
624 // обновляем рекламные кампании
625 if (intval($_SESSION["SESS_ADV_ID"])>0 || intval($_SESSION["SESS_LAST_ADV_ID"])>0)
626 {
627 CStatistics::Update_Adv();
628 }
629
630 /************************************************
631 Referring sites
632 ************************************************/
633 if(
634 $SAVE_REFERERS != "N"
635 && __GetReferringSite($PROT, $SN, $SN_WithoutPort, $PAGE_FROM)
636 && $SN <> ''
637 && $SN != $_SERVER["HTTP_HOST"]
638 )
639 {
640 $REFERER_LIST_ID = CStatistics::GetRefererListID($PROT, $SN, $PAGE_FROM, $CURRENT_URI, $ERROR_404, $sql_site);
641
642 /************************************************
643 Search phrases
644 ************************************************/
645
646 if (mb_substr($SN, 0, 4) == "www.")
647 $sql = "('".$DB->ForSql(mb_substr($SN, 4), 255)."' like P.DOMAIN or '".$DB->ForSql($SN,255)."' like P.DOMAIN)";
648 else
649 $sql = "'".$DB->ForSql($SN,255)."' like P.DOMAIN";
650 $strSql = "
651 SELECT
652 S.ID,
653 S.NAME,
654 P.DOMAIN,
655 P.VARIABLE,
656 P.CHAR_SET
657 FROM
658 b_stat_searcher S,
659 b_stat_searcher_params P
660 WHERE
661 S.ACTIVE='Y'
662 and P.SEARCHER_ID = S.ID
663 and ".$sql."
664 ";
665 $q = $DB->Query($strSql);
666 if ($qr = $q->Fetch())
667 {
668 $_SESSION["FROM_SEARCHER_ID"] = $qr["ID"];
669 $FROM_SEARCHER_NAME = $qr["NAME"];
670 $FROM_SEARCHER_PHRASE = "";
671 if ($qr["VARIABLE"] <> '')
672 {
673 $page = mb_substr($PAGE_FROM, mb_strpos($PAGE_FROM, "?") + 1);
675 parse_str($page, $arr);
676 $arrVar = explode(",",$qr["VARIABLE"]);
677 foreach ($arrVar as $var)
678 {
679 $var = trim($var);
680 $phrase = $arr[$var];
681
682 if(!$utf && $qr["CHAR_SET"] <> '')
683 {
684 $phrase_temp = trim(\Bitrix\Main\Text\Encoding::convertEncoding($phrase, $qr["CHAR_SET"], "UTF-8"));
685 if($phrase_temp <> '')
686 {
687 $phrase = $phrase_temp;
688 }
689 }
690
691 $phrase = trim($phrase);
692 if($phrase <> '')
693 {
694 $FROM_SEARCHER_PHRASE .= ($FROM_SEARCHER_PHRASE <> '')? " / ".$phrase : $phrase;
695 }
696 }
697 }
698 //echo "FROM_SEARCHER_PHRASE = ".$FROM_SEARCHER_PHRASE."<br>\n";
699 // если извлекли поисковую фразу, то занесем ее в базу
700 if ($FROM_SEARCHER_PHRASE <> '')
701 {
702 $arFields = Array(
703 "DATE_HIT" => $DB_now,
704 "SEARCHER_ID" => intval($_SESSION["FROM_SEARCHER_ID"]),
705 "REFERER_ID" => $REFERER_LIST_ID,
706 "PHRASE" => "'".$DB->ForSql($FROM_SEARCHER_PHRASE,255)."'",
707 "URL_FROM" => "'".$DB->ForSql($PROT.$SN.$PAGE_FROM,2000)."'",
708 "URL_TO" => "'".$DB->ForSql($CURRENT_URI,2000)."'",
709 "URL_TO_404" => "'".$ERROR_404."'",
710 "SESSION_ID" => $_SESSION["SESS_SESSION_ID"],
711 "SITE_ID" => $sql_site,
712 );
713 $id = $DB->Insert("b_stat_phrase_list", $arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
714 if ($ERROR_404=="N")
715 {
716 CStatistics::Set404("b_stat_phrase_list", "ID = ".intval($id), array("URL_TO_404" => "Y"));
717 }
718
719 // запомним поисковую фразу в сессии
720 $_SESSION["SESS_SEARCH_PHRASE"] = $FROM_SEARCHER_PHRASE;
721
722 // увеличим счетчик фраз у поисковой системы
723 $_SESSION["SESS_FROM_SEARCHERS"][] = $_SESSION["FROM_SEARCHER_ID"];
724 $arFields = Array("PHRASES" => "PHRASES + 1");
725 $rows = $DB->Update("b_stat_searcher",$arFields,"WHERE ID=".intval($_SESSION["FROM_SEARCHER_ID"]), "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
726
727 }
728 }
729 }
730 }
731
732 /************************************************
733 Hits
734 ************************************************/
735
736 if($_SESSION["SESS_SESSION_ID"] > 0)
737 {
738 if ($SAVE_HITS!="N")
739 {
740 // добавляем хит
741 $arFields = Array(
742 "SESSION_ID" => $_SESSION["SESS_SESSION_ID"],
743 "DATE_HIT" => $DB_now,
744 "GUEST_ID" => intval($_SESSION["SESS_GUEST_ID"]),
745 "NEW_GUEST" => "'".$DB->ForSql($_SESSION["SESS_GUEST_NEW"])."'",
746 "USER_ID" => intval($_SESSION["SESS_LAST_USER_ID"]),
747 "USER_AUTH" => "'".$IS_USER_AUTHORIZED."'",
748 "URL" => "'".$DB->ForSql($CURRENT_URI,2000)."'",
749 "URL_404" => "'".$ERROR_404."'",
750 "URL_FROM" => "'".$DB->ForSql(isset($_SERVER["HTTP_REFERER"])? $_SERVER["HTTP_REFERER"]: "", 2000)."'",
751 "IP" => "'".$DB->ForSql($_SERVER["REMOTE_ADDR"],15)."'",
752 "METHOD" => "'".$DB->ForSql($_SERVER["REQUEST_METHOD"],10)."'",
753 "COOKIES" => "'".$DB->ForSql(GetCookieString(),2000)."'",
754 "USER_AGENT" => "'".$DB->ForSql($_SERVER["HTTP_USER_AGENT"] ?? '', 500)."'",
755 "STOP_LIST_ID" => "'".$STOP_LIST_ID."'",
756 "COUNTRY_ID" => "'".$DB->ForSql($_SESSION["SESS_COUNTRY_ID"],2)."'",
757 "CITY_ID" => $_SESSION["SESS_CITY_ID"] > 0? intval($_SESSION["SESS_CITY_ID"]): "null",
758 "SITE_ID" => $sql_site,
759 );
760 self::$HIT_ID = intval($DB->Insert("b_stat_hit", $arFields, "File: ".__FILE__."<br>Line: ".__LINE__));
761 if($ERROR_404=="N")
762 {
763 CStatistics::Set404("b_stat_hit", "ID = ".self::$HIT_ID, array("URL_404" => "Y"));
764 }
765 }
766
767 // если гость на данном хите добавил в фавориты и до этого еще не добавлял то
768 $favorites_counter = 0;
769 if ($FAVORITES=="Y" && $_SESSION["SESS_GUEST_FAVORITES"]=="N")
770 {
771 $ALLOW_ADV_FAVORITES = "Y";
772 $_SESSION["SESS_GUEST_FAVORITES"] = "Y";
773 $favorites_counter = 1;
774 }
775 // обновляем счетчик "по дням"
776 $arFields = Array(
777 "HITS" => 1,
778 "FAVORITES" => $favorites_counter,
779 "HIT" => 1,
780 "FAVORITE" => $favorites_counter,
781 );
782 // если текущий день есть в базе то
783 // обновим счетчики траффика для текущего дня
785 if($rows!==false && intval($rows)<=0)
786 {
787 // если текущий день не определен в базе то
788 // добавляем его
789 $new_guest_counter = ($_SESSION["SESS_GUEST_NEW"]=="Y") ? 1 : 0;
791 1, // HOSTS
792 0, // TOTAL_HOSTS (now ignored)
793 1, // SESSIONS
794 1, // HITS
795 $new_guest_counter, // NEW_GUESTS
796 1, // GUESTS
797 $favorites_counter // FAVORITES
798 );
799
800 // обновим счетчики траффика для текущего дня
802 array(
803 "SESSION" => 1,
804 "HIT" => 1,
805 "HOST" => 1,
806 "GUEST" => 1,
807 "NEW_GUEST" => $new_guest_counter,
808 "FAVORITE" => $favorites_counter
809 )
810 );
811 }
812
813 // если сайт определен то
814 if ($SITE_ID <> '')
815 {
816 // обновляем счетчик "по дням"
817 $arFields = Array(
818 "HITS" => 1,
819 "HIT" => 1,
820 );
821 // если текущий день сайта определен в базе то
822 // обновим счетчики траффика для текущего дня
824 if($rows!==false && intval($rows)<=0)
825 {
826 // если текущий день сайта не определен в базе то
827 // добавляем его
829 $SITE_ID,
830 1, // HOSTS
831 0, // TOTAL_HOSTS (now ignored)
832 1, // SESSIONS
833 1 // HITS
834 );
835
836 // обновим счетчики траффика для текущего дня
838 array(),
839 array(
840 "SESSION" => 1,
841 "HIT" => 1,
842 "HOST" => 1,
843 ),
845 );
846 }
847 }
848
849 /************************************************
850 Пути по сайту
851 ************************************************/
852
853 if ($SAVE_PATH_DATA!="N")
854 CStatistics::SavePathData($SITE_ID, $CURRENT_PAGE, $ERROR_404);
855
856 /************************************************
857 Посещение разделов и страниц
858 ************************************************/
859
860 if ($SAVE_VISITS!="N")
861 CStatistics::SaveVisits($sql_site, $SESSION_NEW, $CURRENT_DIR, $CURRENT_PAGE, $ERROR_404);
862
863 // обновляем сессию
864 $arFields = Array(
865 //"HITS" => "HITS + 1",
866 "LAST_HIT_ID" => self::$HIT_ID,
867 "URL_LAST" => "'".$DB->ForSql($CURRENT_URI,2000)."'",
868 "URL_LAST_404" => "'".$ERROR_404."'",
869 "DATE_LAST" => $DB_now,
870 "LAST_SITE_ID" => $sql_site
871 );
872 if ($SESSION_NEW=="Y") $arFields["FIRST_HIT_ID"] = self::$HIT_ID;
873 if ($FAVORITES=="Y") $arFields["FAVORITES"] = "'Y'";
874 $DB->Update("b_stat_session",$arFields,"WHERE ID=".$_SESSION["SESS_SESSION_ID"], "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
875 if ($ERROR_404=="N")
876 {
877 CStatistics::Set404("b_stat_session", "ID = ".$_SESSION["SESS_SESSION_ID"], array("URL_LAST_404" => "Y"));
878 }
879
880 // обновляем гостя
881 $arFields = Array(
882 "HITS" => "HITS + 1",
883 "LAST_SESSION_ID" => $_SESSION["SESS_SESSION_ID"],
884 "LAST_DATE" => $DB_now,
885 "LAST_USER_ID" => intval($_SESSION["SESS_LAST_USER_ID"]),
886 "LAST_USER_AUTH" => "'".$IS_USER_AUTHORIZED."'",
887 "LAST_URL_LAST" => "'".$DB->ForSql($CURRENT_URI,2000)."'",
888 "LAST_URL_LAST_404" => "'".$ERROR_404."'",
889 "LAST_USER_AGENT" => "'".$DB->ForSql($_SERVER["HTTP_USER_AGENT"] ?? '', 500)."'",
890 "LAST_IP" => "'".$DB->ForSql($_SERVER["REMOTE_ADDR"],15)."'",
891 "LAST_COOKIE" => "'".$DB->ForSql(GetCookieString(),2000)."'",
892 "LAST_LANGUAGE" => "'".$DB->ForSql($_SERVER["HTTP_ACCEPT_LANGUAGE"] ?? '', 255)."'",
893 "LAST_SITE_ID" => $sql_site
894 );
895 if ($FAVORITES=="Y") $arFields["FAVORITES"] = "'Y'";
896 $DB->Update("b_stat_guest",$arFields,"WHERE ID=".intval($_SESSION["SESS_GUEST_ID"]),"File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
897 if ($ERROR_404=="N")
898 {
899 CStatistics::Set404("b_stat_guest", "ID = ".intval($_SESSION["SESS_GUEST_ID"]), array("LAST_URL_LAST_404" => "Y"));
900 }
901
902 // обновляем прямые рекламные кампании
903 if (intval($_SESSION["SESS_ADV_ID"])>0)
904 {
905 // увеличиваем счетчик хитов на прямом заходе
906 $arFields = Array(
907 "DATE_LAST" => $DB_now,
908 "HITS" => "HITS+1"
909 );
910 if ($FAVORITES=="Y" && $ALLOW_ADV_FAVORITES=="Y")
911 {
912 // увеличиваем счетчик посетителей добавивших в избранное на прямом заходе
913 $arFields["FAVORITES"] = "FAVORITES + 1";
914 $favorite = 1;
915 }
916 $DB->Update("b_stat_adv",$arFields,"WHERE ID=".intval($_SESSION["SESS_ADV_ID"]), "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
917
918 // обновляем счетчик хитов по дням
919 $arFields = Array("HITS" => "HITS+1", "FAVORITES" => "FAVORITES + ".intval($favorite));
920 $rows = $DB->Update("b_stat_adv_day",$arFields,"WHERE ADV_ID=".intval($_SESSION["SESS_ADV_ID"])." and DATE_STAT=".$DB_now_date,"File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
921 // если его нет то
922 if (intval($rows)<=0)
923 {
924 // добавляем его
925 $arFields = Array(
926 "ADV_ID" => intval($_SESSION["SESS_ADV_ID"]),
927 "DATE_STAT" => $DB_now_date,
928 "HITS" => 1,
929 "FAVORITES" => intval($favorite)
930 );
931 $DB->Insert("b_stat_adv_day",$arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
932 }
933 }
934 // обновляем рекламные кампании по возврату
935 elseif (intval($_SESSION["SESS_LAST_ADV_ID"])>0)
936 {
937 // увеличиваем счетчик хитов на возврате
938 $arFields = Array(
939 "DATE_LAST" => $DB_now,
940 "HITS_BACK" => "HITS_BACK+1"
941 );
942 if ($FAVORITES=="Y" && $ALLOW_ADV_FAVORITES=="Y")
943 {
944 // увеличиваем счетчик посетителей добавивших в избранное на возврате
945 $arFields["FAVORITES_BACK"] = "FAVORITES_BACK + 1";
946 $favorite = 1;
947 }
948 $DB->Update("b_stat_adv",$arFields,"WHERE ID=".intval($_SESSION["SESS_LAST_ADV_ID"]), "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
949
950 $arFields = Array("HITS_BACK" => "HITS_BACK+1", "FAVORITES_BACK" => "FAVORITES_BACK + ".intval($favorite));
951 // обновляем счетчик хитов по дням
952 $rows = $DB->Update("b_stat_adv_day",$arFields,"WHERE ADV_ID=".intval($_SESSION["SESS_LAST_ADV_ID"])." and DATE_STAT=".$DB_now_date,"File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
953 // если его нет то
954 if (intval($rows)<=0)
955 {
956 // добавляем его
957 $arFields = Array(
958 "ADV_ID" => intval($_SESSION["SESS_LAST_ADV_ID"]),
959 "DATE_STAT" => $DB_now_date,
960 "HITS_BACK" => 1,
961 "FAVORITES_BACK" => intval($favorite),
962 );
963 $DB->Insert("b_stat_adv_day",$arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
964 }
965 }
966
967 // обрабатываем событие
968 if (defined("GENERATE_EVENT") && GENERATE_EVENT=="Y")
969 {
970 global $event1, $event2, $event3, $goto, $money, $currency, $site_id;
971 if($site_id == '')
972 $site_id = false;
973 CStatistics::Set_Event($event1, $event2, $event3, $goto, $money, $currency, $site_id);
974 }
975
976 // увеличиваем счетчик хитов у страны
977 if ($_SESSION["SESS_COUNTRY_ID"] <> '')
978 {
979 CStatistics::UpdateCountry($_SESSION["SESS_COUNTRY_ID"], Array("HITS" => 1));
980 }
981
982 if($_SESSION["SESS_CITY_ID"] > 0)
983 {
984 CStatistics::UpdateCity($_SESSION["SESS_CITY_ID"], Array("HITS" => 1));
985 }
986
987 if (
988 isset($_SESSION["SESS_FROM_SEARCHERS"])
989 && is_array($_SESSION["SESS_FROM_SEARCHERS"])
990 && !empty($_SESSION["SESS_FROM_SEARCHERS"])
991 )
992 {
993 // обновляем счетчик хитов у поисковых фраз для поисковиков
994 $arFields = Array("PHRASES_HITS" => "PHRASES_HITS+1");
995 $_SESSION["SESS_FROM_SEARCHERS"] = array_unique($_SESSION["SESS_FROM_SEARCHERS"]);
996 if(count($_SESSION["SESS_FROM_SEARCHERS"]) > 0)
997 {
998 $str = "0";
999 foreach($_SESSION["SESS_FROM_SEARCHERS"] as $value)
1000 $str .= ", ".intval($value);
1001 $DB->Update("b_stat_searcher",$arFields,"WHERE ID in ($str)", "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1002 }
1003 }
1004
1005 if (isset($_SESSION["SESS_REFERER_ID"]) && intval($_SESSION["SESS_REFERER_ID"])>0)
1006 {
1007 // обновляем ссылающиеся
1008 $arFields = Array("HITS"=>"HITS+1");
1009 $DB->Update("b_stat_referer", $arFields, "WHERE ID=".intval($_SESSION["SESS_REFERER_ID"]), "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1010 }
1011 }
1012
1013 /*******************************************************
1014 Переменные хранящие параметры предыдущей страницы
1015 *******************************************************/
1016
1017 $_SESSION["SESS_HTTP_REFERER"] = $_SESSION["SESS_LAST_URI"] ?? '';
1018 $_SESSION["SESS_LAST_PROTOCOL"] = $CURRENT_PROTOCOL;
1019 $_SESSION["SESS_LAST_PORT"] = $CURRENT_PORT;
1020 $_SESSION["SESS_LAST_HOST"] = $CURRENT_HOST;
1021 $_SESSION["SESS_LAST_URI"] = $CURRENT_URI;
1022 $_SESSION["SESS_LAST_PAGE"] = $CURRENT_PAGE;
1023 $_SESSION["SESS_LAST_DIR"] = $CURRENT_DIR;
1024 }
1025 }
1026 else // if (!$BLOCK_ACTIVITY)
1027 {
1028 /************************************************
1029 Обработка превышения лимита активности
1030 *************************************************/
1031
1032 $fname = $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/activity_limit.php";
1033 if(file_exists($fname))
1034 {
1035 include($fname);
1036 }
1037 else
1038 {
1039 CHTTP::SetStatus("503 Service Unavailable");
1040 die();
1041 }
1042 }
1043
1044 /************************************************************
1045 Обрабатываем ситуацию когда не поддерживаются
1046 сессии и/или не сохраняются куки
1047 *************************************************************/
1048
1049 // если мы делали select из таблицы b_stat_session_data то
1050 if($SESSION_DATA_ID)
1051 {
1052 $arrSTAT_SESSION = stat_session_register(true);
1053 $sess_data_for_db = ($DB->type == "ORACLE") ? "'".$DB->ForSql(serialize($arrSTAT_SESSION), 2000)."'" : "'".$DB->ForSql(serialize($arrSTAT_SESSION))."'";
1054 // если в результате этого select'а были выбраны данные то
1055 if((intval($SESSION_DATA_ID) > 0) && ($SESSION_DATA_ID !== true))
1056 {
1057 // обновляем их
1058 $arFields = array(
1059 "DATE_LAST" => $DB_now,
1060 "GUEST_MD5" => "'".get_guest_md5()."'",
1061 "SESS_SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]),
1062 "SESSION_DATA" => $sess_data_for_db
1063 );
1064 $DB->Update("b_stat_session_data", $arFields, "WHERE ID = ".intval($SESSION_DATA_ID), "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1065 }
1066 else
1067 {
1068 // иначе вставляем эти данные
1069 $arFields = array(
1070 "DATE_FIRST" => $DB_now,
1071 "DATE_LAST" => $DB_now,
1072 "GUEST_MD5" => "'".get_guest_md5()."'",
1073 "SESS_SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]),
1074 "SESSION_DATA" => $sess_data_for_db
1075 );
1076 $DB->Insert("b_stat_session_data", $arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
1077 }
1078 }
1079 } // if ($STOP_SAVE_STATISTIC!="N" or $STOP!="Y")
1080
1081 if ($STOP=="Y")
1082 {
1083 $z = CLanguage::GetByID($STOP_MESSAGE_LID);
1084 $zr = $z->Fetch();
1085 $charset = ($zr["CHARSET"] <> '') ? $zr["CHARSET"] : "windows-1251";
1086
1087 //We have URL with no MESSAGE
1088 if(($STOP_REDIRECT_URL <> '') && ($STOP_MESSAGE == ''))
1089 {//So just do redirect
1090 LocalRedirect($STOP_REDIRECT_URL, true);
1091 }
1092 //We have some to say
1093 elseif($STOP_MESSAGE <> '')
1094 {
1095 $STOP_MESSAGE .= " [".$STOP_LIST_ID."]";
1096echo '<html>
1097 <head>
1098 <meta http-equiv="Content-Type" content="text/html; charset='.$charset.'">
1099 '.($STOP_REDIRECT_URL <> ''? '<meta http-equiv="Refresh" content="3;URL='.htmlspecialcharsbx($STOP_REDIRECT_URL).'">': '').'
1100 </head>
1101 <body>
1102 <div align="center"><h3>'.$STOP_MESSAGE.'</h3></div>
1103 </body>
1104</html>';
1105 }
1106 die();
1107 }
1108 }
1109
1110 public static function RestoreSession()
1111 {
1112 global $APPLICATION;
1113 // if there is no session ID
1114 if(!isset($_SESSION["SESS_SESSION_ID"]) || intval($_SESSION["SESS_SESSION_ID"]) <= 0)
1115 {
1116 if(COption::GetOptionString("statistic", "SAVE_SESSION_DATA") == "Y")
1117 {
1118 // try to use coockie
1119 $COOKIE_GUEST_ID = intval($APPLICATION->get_cookie("GUEST_ID"));
1120 if($COOKIE_GUEST_ID <= 0)
1121 {
1122 // restore session data from b_stat_session_data
1124 if($zr = $z->Fetch())
1125 {
1126 $arrSESSION_DATA = unserialize($zr["SESSION_DATA"], ['allowed_classes' => false]);
1127 if(is_array($arrSESSION_DATA))
1128 {
1129 foreach($arrSESSION_DATA as $key => $value)
1130 $_SESSION[$key] = $value;
1131 }
1132 return intval($zr["ID"]); //Guest was found
1133 }
1134 return true; //Just tried to restore session data
1135 }
1136 }
1137 }
1138 return false; //We have no choice to restore guest session
1139 }
1140
1141 // обновляем счетчики сессий и новых посетителей у страны
1142 public static function UpdateCountry($COUNTRY_ID, $arFields, $DATE=false, $DATE_FORMAT="SHORT", $SIGN="+")
1143 {
1144 $DB = CDatabase::GetModuleConnection('statistic');
1145 $COUNTRY_ID = $DB->ForSql($COUNTRY_ID, 2);
1146
1147 $ar = array();
1148 foreach($arFields as $name=>$value)
1149 {
1150 $ar[$name] = $name.$SIGN.intval($value);
1151 }
1152 $DB->Update("b_stat_country", $ar, "WHERE ID='".$COUNTRY_ID."'","",false,false,false);
1153
1154 $rows = $DB->Update("b_stat_country_day", $ar, "WHERE COUNTRY_ID='".$COUNTRY_ID."' and ".CStatistics::DBDateCompare("DATE_STAT", $DATE, $DATE_FORMAT),"",false,false,false);
1155 if(intval($rows)<=0 && $SIGN=="+")
1156 {
1157 $ar = array();
1158 foreach($arFields as $name=>$value)
1159 {
1160 $ar[$name] = intval($value);
1161 }
1162 $ar["COUNTRY_ID"]="'".$COUNTRY_ID."'";
1163 $ar["DATE_STAT"]= $DB->GetNowDate();
1164 $DB->Insert("b_stat_country_day",$ar);
1165 }
1166 elseif(intval($rows)>1) // если обновили более одного дня то
1167 {
1168 // удалим лишние
1169 $rs = $DB->Query("SELECT ID FROM b_stat_country_day WHERE COUNTRY_ID='".$COUNTRY_ID."' and ".CStatistics::DBDateCompare("DATE_STAT", $DATE, $DATE_FORMAT)." ORDER BY ID", false);
1170 $ar = $rs->Fetch();
1171 while($ar = $rs->Fetch())
1172 {
1173 $DB->Query("DELETE FROM b_stat_country_day WHERE ID = ".$ar["ID"], false);
1174 }
1175 }
1176 }
1177
1178 public static function UpdateCity($CITY_ID, $arFields, $DATE=false, $DATE_FORMAT="SHORT", $SIGN="+")
1179 {
1180 $DB = CDatabase::GetModuleConnection('statistic');
1181 $CITY_ID = intval($CITY_ID);
1182
1183 $ar = array();
1184 foreach($arFields as $name=>$value)
1185 {
1186 $ar[$name] = $name.$SIGN.intval($value);
1187 }
1188 $DB->Update("b_stat_city", $ar, "WHERE ID = ".$CITY_ID, "", false, false, false);
1189
1190 $rows = $DB->Update("b_stat_city_day", $ar, "WHERE CITY_ID = ".$CITY_ID." and ".CStatistics::DBDateCompare("DATE_STAT", $DATE, $DATE_FORMAT),"",false,false,false);
1191 if(intval($rows)<=0 && $SIGN=="+")
1192 {
1193 $ar = array();
1194 foreach($arFields as $name=>$value)
1195 {
1196 $ar[$name] = intval($value);
1197 }
1198 $ar["CITY_ID"] = $CITY_ID;
1199 $ar["DATE_STAT"] = $DB->GetNowDate();
1200 $DB->Insert("b_stat_city_day", $ar);
1201 }
1202 elseif(intval($rows)>1) // если обновили более одного дня то
1203 {
1204 // удалим лишние
1205 $rs = $DB->Query("SELECT ID FROM b_stat_city_day WHERE CITY_ID = ".$CITY_ID." and ".CStatistics::DBDateCompare("DATE_STAT", $DATE, $DATE_FORMAT)." ORDER BY ID", false);
1206 $ar = $rs->Fetch();
1207 while($ar = $rs->Fetch())
1208 {
1209 $DB->Query("DELETE FROM b_stat_city_day WHERE ID = ".$ar["ID"], false);
1210 }
1211 }
1212 }
1213
1214 public static function SavePathData($SITE_ID, $CURRENT_PAGE, $ERROR_404)
1215 {
1216 $DB = CDatabase::GetModuleConnection('statistic');
1217 $DB_now = $DB->GetNowFunction();
1218 $DB_now_date = $DB->GetNowDate();
1219 $STEPS = intval(COption::GetOptionString("statistic", "MAX_PATH_STEPS"));
1220
1221 if(isset($_SESSION["SESS_LAST_PAGE"]) && $_SESSION["SESS_LAST_PAGE"] == $CURRENT_PAGE)
1222 return;
1223
1224 $COUNTER_ABNORMAL = 0; // счетчик показывающий сколько раз прошли по данному пути без поддержки HTTP_REFERER
1225
1226 // получим ссылающуюся страницу
1227 if (empty($_SERVER["HTTP_REFERER"]))
1228 {
1229 if (!empty($_SESSION["SESS_LAST_PAGE"]))
1230 {
1231 $COUNTER_ABNORMAL = 1;
1232 }
1233 $PATH_REFERER = __GetFullReferer($_SESSION["SESS_LAST_PAGE"] ?? '');
1234 }
1235 else
1236 {
1237 $PATH_REFERER = __GetFullReferer();
1238 }
1239
1240 if($PATH_REFERER==$CURRENT_PAGE)
1241 return;
1242
1243 // получим из кэша данные по предыдущему пути: ID пути, набор страниц и т.д.
1244 if($PATH_REFERER <> '')
1245 {
1246 $where1 = " and C.PATH_LAST_PAGE = '".$DB->ForSql($PATH_REFERER,255)."'";
1247 }
1248 else
1249 {
1250 $where1 = " and (C.PATH_LAST_PAGE is null or ".$DB->Length("C.PATH_LAST_PAGE")."<=0)";
1251 }
1252 $strSql = CStatistics::DBTopSql("
1253 SELECT /*TOP*/
1254 C.ID as CACHE_ID,
1255 C.PATH_ID,
1256 C.PATH_PAGES,
1257 C.PATH_FIRST_PAGE,
1258 C.PATH_FIRST_PAGE_SITE_ID,
1259 C.PATH_FIRST_PAGE_404,
1260 C.PATH_STEPS,
1261 C.PATH_LAST_PAGE,
1262 C.IS_LAST_PAGE
1263 FROM
1264 b_stat_path_cache C
1265 WHERE
1266 C.SESSION_ID = ".intval($_SESSION['SESS_SESSION_ID'])."
1267 $where1
1268 ORDER BY
1269 C.ID desc
1270 ", 1);
1271
1272 $rsPREV_PATH = $DB->Query($strSql);
1273 $arPREV_PATH = $rsPREV_PATH->Fetch();
1274
1275 if (!$arPREV_PATH)
1276 {
1277 $arPREV_PATH = [
1278 "PATH_ID" => '',
1279 "PATH_PAGES" => '',
1280 "PATH_STEPS" => '',
1281 "PATH_FIRST_PAGE" => '',
1282 "PATH_LAST_PAGE" => '',
1283 "IS_LAST_PAGE" => '',
1284 ];
1285 }
1286
1287 $arrUpdate404_1 = array();
1288 $arrUpdate404_2 = array();
1289
1290 // сформируем переменные описывающие текущий путь
1291 $CURRENT_PATH_ID = GetStatPathID($CURRENT_PAGE, $arPREV_PATH["PATH_ID"]);
1292 $tmp_SITE_ID = ($SITE_ID <> '') ? "[".$SITE_ID."] " : "";
1293 $CURRENT_PATH_PAGES_404 = $arPREV_PATH["PATH_PAGES"].$tmp_SITE_ID."ERROR_404: ".$CURRENT_PAGE."\n";
1294
1295 if ($ERROR_404=="Y")
1296 {
1297 $CURRENT_PATH_PAGES = $CURRENT_PATH_PAGES_404;
1298 }
1299 else
1300 {
1301 $CURRENT_PATH_PAGES = $arPREV_PATH["PATH_PAGES"].$tmp_SITE_ID.$CURRENT_PAGE."\n";
1302
1303 if($DB->type == "ORACLE")
1304 $arrUpdate404_1["PATH_PAGES"] = mb_substr($CURRENT_PATH_PAGES_404, 0, 2000);
1305 elseif($DB->type == "MSSQL")
1306 $arrUpdate404_1["PATH_PAGES"] = mb_substr($CURRENT_PATH_PAGES_404, 0, 7000);
1307 else
1308 $arrUpdate404_1["PATH_PAGES"] = $CURRENT_PATH_PAGES_404;
1309
1310 $arrUpdate404_2["PAGES"] = $arrUpdate404_1["PATH_PAGES"];
1311 }
1312
1313 $CURRENT_PATH_STEPS = intval($arPREV_PATH["PATH_STEPS"])+1;
1314 if ($arPREV_PATH["PATH_FIRST_PAGE"] <> '')
1315 {
1316 $FIRST_PAGE = $arPREV_PATH["PATH_FIRST_PAGE"];
1317 $FIRST_PAGE_SITE_ID = $arPREV_PATH["PATH_FIRST_PAGE_SITE_ID"];
1318 $FIRST_PAGE_404 = ($arPREV_PATH["PATH_FIRST_PAGE_404"]=="Y") ? "Y" : "N";
1319 }
1320 else
1321 {
1322 $FIRST_PAGE = $CURRENT_PAGE;
1323 $FIRST_PAGE_SITE_ID = $SITE_ID;
1324 $FIRST_PAGE_404 = $ERROR_404;
1325
1326 if ($ERROR_404=="N")
1327 {
1328 $arrUpdate404_1["PATH_FIRST_PAGE_404"] = "Y";
1329 $arrUpdate404_2["FIRST_PAGE_404"] = "Y";
1330 }
1331 }
1332
1333 $sql_CURRENT_PATH_PAGES = $DB->ForSql($CURRENT_PATH_PAGES);
1334
1335 $sql_FIRST_PAGE_SITE_ID = $FIRST_PAGE_SITE_ID <> '' ? "'".$DB->ForSql($FIRST_PAGE_SITE_ID,2)."'" : "null";
1336
1337 $sql_LAST_PAGE_SITE_ID = $SITE_ID <> '' ? "'".$DB->ForSql($SITE_ID,2)."'" : "null";
1338
1339 // вставим данный путь в кэш
1340 $arFields = array(
1341 "SESSION_ID" => intval($_SESSION['SESS_SESSION_ID']),
1342 "PATH_ID" => intval($CURRENT_PATH_ID),
1343 "PATH_PAGES" => "'".$sql_CURRENT_PATH_PAGES."'",
1344 "PATH_FIRST_PAGE" => "'".$DB->ForSql($FIRST_PAGE, 255)."'",
1345 "PATH_FIRST_PAGE_404" => "'".$DB->ForSql($FIRST_PAGE_404)."'",
1346 "PATH_FIRST_PAGE_SITE_ID" => $sql_FIRST_PAGE_SITE_ID,
1347 "PATH_LAST_PAGE" => "'".$DB->ForSql($CURRENT_PAGE,255)."'",
1348 "PATH_LAST_PAGE_404" => "'".$DB->ForSql($ERROR_404)."'",
1349 "PATH_LAST_PAGE_SITE_ID" => $sql_LAST_PAGE_SITE_ID,
1350 "PATH_STEPS" => $CURRENT_PATH_STEPS,
1351 "DATE_HIT" => $DB_now,
1352 "IS_LAST_PAGE" => "'Y'"
1353 );
1354 $id = $DB->Insert("b_stat_path_cache",$arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
1355 if ($ERROR_404=="N")
1356 {
1357 $arrUpdate404_1["PATH_LAST_PAGE_404"] = "Y";
1358 $arrUpdate404_2["LAST_PAGE_404"] = "Y";
1359 }
1360 CStatistics::Set404("b_stat_path_cache", "ID = ".intval($id), $arrUpdate404_1);
1361
1362 // увеличим счетчик динамики по текущему пути
1363 $arFields = array(
1364 "COUNTER" => "COUNTER + 1",
1365 "COUNTER_FULL_PATH" => "COUNTER_FULL_PATH + 1",
1366 "COUNTER_ABNORMAL" => "COUNTER_ABNORMAL + ".intval($COUNTER_ABNORMAL),
1367 );
1368 $rows = $DB->Update("b_stat_path",$arFields,"WHERE PATH_ID='".$CURRENT_PATH_ID."' and DATE_STAT=".$DB_now_date, "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1369
1370 if (intval($rows)<=0)
1371 {
1372 $sql_PARENT_PATH_ID = ($arPREV_PATH["PATH_ID"] <> '') ? $arPREV_PATH["PATH_ID"] : "null";
1373 $arFields = array(
1374 "PATH_ID" => intval($CURRENT_PATH_ID),
1375 "PARENT_PATH_ID" => $sql_PARENT_PATH_ID,
1376 "DATE_STAT" => $DB_now_date,
1377 "COUNTER" => 1,
1378 "COUNTER_FULL_PATH" => 1,
1379 "COUNTER_ABNORMAL" => intval($COUNTER_ABNORMAL),
1380 "PAGES" => "'".$sql_CURRENT_PATH_PAGES."'",
1381 "FIRST_PAGE" => "'".$DB->ForSql($FIRST_PAGE,255)."'",
1382 "FIRST_PAGE_SITE_ID" => $sql_FIRST_PAGE_SITE_ID,
1383 "FIRST_PAGE_404" => "'".$DB->ForSql($FIRST_PAGE_404)."'",
1384 "PREV_PAGE" => "'".$DB->ForSql($arPREV_PATH["PATH_LAST_PAGE"])."'",
1385 "PREV_PAGE_HASH" => crc32ex($arPREV_PATH["PATH_LAST_PAGE"]),
1386 "LAST_PAGE" => "'".$DB->ForSql($CURRENT_PAGE,255)."'",
1387 "LAST_PAGE_404" => "'".$DB->ForSql($ERROR_404)."'",
1388 "LAST_PAGE_SITE_ID" => $sql_LAST_PAGE_SITE_ID,
1389 "LAST_PAGE_HASH" => crc32ex($CURRENT_PAGE),
1390 "STEPS" => $CURRENT_PATH_STEPS
1391 );
1392 if($CURRENT_PATH_STEPS<=$STEPS)
1393 {
1394 $id = $DB->Insert("b_stat_path",$arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
1395 CStatistics::Set404("b_stat_path", "ID = ".intval($id), $arrUpdate404_2);
1396 }
1397 }
1398
1399 // если предыдущая страница считалась последней страницей в пути то
1400 if ($arPREV_PATH["IS_LAST_PAGE"]=="Y")
1401 {
1402 // сбросим счетчик конечных путей для предыдущей страницы
1403 $arFields = array("COUNTER_FULL_PATH" => "COUNTER_FULL_PATH - 1");
1404 $DB->Update("b_stat_path",$arFields,"WHERE PATH_ID='".$arPREV_PATH["PATH_ID"]."' and DATE_STAT=".$DB_now_date, "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1405
1406 // сбросим флаг того что предудущая страница - последняя страница в пути
1407 $arFields = array("IS_LAST_PAGE" => "'N'");
1408 $DB->Update("b_stat_path_cache",$arFields,"WHERE ID='".$arPREV_PATH["CACHE_ID"]."'","File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1409 }
1410
1411 // зафиксируем счетчик пути в связке с рекламной кампанией
1412 if (intval($_SESSION["SESS_ADV_ID"])>0)
1413 {
1414 $ADV_ID = intval($_SESSION["SESS_ADV_ID"]);
1415 $arFields = array(
1416 "COUNTER" => "COUNTER + 1",
1417 "COUNTER_FULL_PATH" => "COUNTER_FULL_PATH + 1"
1418 );
1419 $sql_COUNTER = 1;
1420 $sql_COUNTER_FULL_PATH = 1;
1421 $sql_COUNTER_BACK = 0;
1422 $sql_COUNTER_FULL_PATH_BACK = 0;
1423 $ADV_BACK = "N";
1424 }
1425 elseif (intval($_SESSION["SESS_LAST_ADV_ID"])>0)
1426 {
1427 $ADV_ID = intval($_SESSION["SESS_LAST_ADV_ID"]);
1428 $arFields = array(
1429 "COUNTER_BACK" => "COUNTER_BACK + 1",
1430 "COUNTER_FULL_PATH_BACK" => "COUNTER_FULL_PATH_BACK + 1"
1431 );
1432 $sql_COUNTER = 0;
1433 $sql_COUNTER_FULL_PATH = 0;
1434 $sql_COUNTER_BACK = 1;
1435 $sql_COUNTER_FULL_PATH_BACK = 1;
1436 $ADV_BACK = "Y";
1437 }
1438 else
1439 return; //ADV_ID == 0
1440
1441 $rows = $DB->Update("b_stat_path_adv",$arFields,"WHERE ADV_ID=".intval($ADV_ID)." and PATH_ID='".$CURRENT_PATH_ID."' and DATE_STAT=".$DB_now_date, "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1442 if (intval($rows)<=0)
1443 {
1444 $arFields = array(
1445 "ADV_ID" => intval($ADV_ID),
1446 "PATH_ID" => intval($CURRENT_PATH_ID),
1447 "DATE_STAT" => $DB_now_date,
1448 "COUNTER" => $sql_COUNTER,
1449 "COUNTER_BACK" => $sql_COUNTER_BACK,
1450 "COUNTER_FULL_PATH" => $sql_COUNTER_FULL_PATH,
1451 "COUNTER_FULL_PATH_BACK" => $sql_COUNTER_FULL_PATH_BACK,
1452 "STEPS" => $CURRENT_PATH_STEPS,
1453 );
1454 if($CURRENT_PATH_STEPS<=$STEPS)
1455 {
1456 $DB->Insert("b_stat_path_adv", $arFields, "File: ".__FILE__."<br>Line: ".__LINE__);
1457 }
1458 }
1459 if ($arPREV_PATH["IS_LAST_PAGE"]=="Y")
1460 {
1461 if ($ADV_BACK=="N")
1462 {
1463 $arFields = array("COUNTER_FULL_PATH" => "COUNTER_FULL_PATH - 1");
1464 $DB->Update("b_stat_path_adv", $arFields, "WHERE ADV_ID='".$ADV_ID."' and PATH_ID='".$arPREV_PATH["PATH_ID"]."' and DATE_STAT=".$DB_now_date, "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1465 }
1466 elseif ($ADV_BACK=="Y")
1467 {
1468 $arFields = array("COUNTER_FULL_PATH_BACK" => "COUNTER_FULL_PATH_BACK - 1");
1469 $DB->Update("b_stat_path_adv", $arFields, "WHERE ADV_ID='".$ADV_ID."' and PATH_ID='".$arPREV_PATH["PATH_ID"]."' and DATE_STAT=".$DB_now_date, "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1470 }
1471 }
1472 }
1473
1474 public static function SaveVisits($sql_site, $SESSION_NEW, $CURRENT_DIR, $CURRENT_PAGE, $ERROR_404)
1475 {
1476 $DB = CDatabase::GetModuleConnection('statistic');
1477 $DB_now_date = $DB->GetNowDate();
1478 $enter_counter = ($SESSION_NEW=="Y") ? 1 : 0;
1479 if ($CURRENT_DIR <> '' && $CURRENT_PAGE <> '')
1480 {
1481 $LAST_DIR_ID = intval($_SESSION["SESS_LAST_DIR_ID"] ?? 0);
1482 $LAST_PAGE_ID = intval($_SESSION["SESS_LAST_PAGE_ID"] ?? 0);
1483 $CURRENT_DIR_ID = 0;
1484 $CURRENT_PAGE_ID = 0;
1485 $exit_dir_counter = 0; // счетчик точки выхода для раздела
1486 $exit_page_counter = 0; // счетчик точки выхода для страницы
1487 if (!isset($_SESSION["SESS_LAST_DIR"]) || $_SESSION["SESS_LAST_DIR"] != $CURRENT_DIR || !isset($_SESSION["SESS_LAST_PAGE"]) || $_SESSION["SESS_LAST_PAGE"] != $CURRENT_PAGE)
1488 {
1489 $strSql = "
1490 SELECT
1491 ID,
1492 DIR
1493 FROM
1494 b_stat_page
1495 WHERE
1496 DATE_STAT = ".$DB_now_date."
1497 and (
1498 (URL='".$DB->ForSql($CURRENT_DIR,2000)."' and DIR='Y') or
1499 (URL='".$DB->ForSql($CURRENT_PAGE,2000)."' and DIR='N')
1500 )
1501 ";
1502
1503 $rsID = $DB->Query($strSql);
1504 while ($arID = $rsID->Fetch())
1505 {
1506 if ($arID["DIR"]=="Y") $CURRENT_DIR_ID = $arID["ID"];
1507 elseif ($arID["DIR"]=="N") $CURRENT_PAGE_ID = $arID["ID"];
1508 }
1509 if ($CURRENT_DIR_ID!=$LAST_DIR_ID) $exit_dir_counter = 1;
1510 if ($CURRENT_PAGE_ID!=$LAST_PAGE_ID) $exit_page_counter = 1;
1511 }
1512 else
1513 {
1514 $CURRENT_DIR_ID = $LAST_DIR_ID;
1515 $CURRENT_PAGE_ID = $LAST_PAGE_ID;
1516 }
1517
1518 // определим ID рекламной кампании
1519 if (intval($_SESSION["SESS_ADV_ID"])>0)
1520 {
1521 $ADV_ID = intval($_SESSION["SESS_ADV_ID"]);
1522 $bADV_BACK = false;
1523 }
1524 elseif (intval($_SESSION["SESS_LAST_ADV_ID"])>0)
1525 {
1526 $ADV_ID = intval($_SESSION["SESS_LAST_ADV_ID"]);
1527 $bADV_BACK = true;
1528 }
1529 else
1530 $ADV_ID = 0;
1531
1532 // обновляем раздел
1533 if ($LAST_DIR_ID>0 && $exit_dir_counter>0)
1534 {
1535 $arFields = array("EXIT_COUNTER" => "EXIT_COUNTER - 1");
1536 $DB->Update("b_stat_page",$arFields,"WHERE ID = '".$LAST_DIR_ID."'","File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1537 if ($ADV_ID>0)
1538 {
1539 if ($bADV_BACK)
1540 {
1541 $arFields = array(
1542 "EXIT_COUNTER_BACK" => "EXIT_COUNTER_BACK - 1"
1543 );
1544 }
1545 $DB->Update("b_stat_page_adv",$arFields,"WHERE PAGE_ID = '".$LAST_DIR_ID."' and ADV_ID=".$ADV_ID,"File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1546 }
1547 }
1548
1549 $adv_rows_dir = 0;
1550 if ($CURRENT_DIR_ID>0)
1551 {
1552 $arFields = Array(
1553 "COUNTER" => "COUNTER + 1",
1554 "EXIT_COUNTER" => "EXIT_COUNTER + ".$exit_dir_counter,
1555 "ENTER_COUNTER" => "ENTER_COUNTER + ".$enter_counter
1556 );
1557 $DB->Update("b_stat_page",$arFields,"WHERE ID = '".$CURRENT_DIR_ID."'","File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1558 if ($ADV_ID>0)
1559 {
1560 if ($bADV_BACK)
1561 {
1562 $arFields = Array(
1563 "COUNTER_BACK" => "COUNTER_BACK + 1",
1564 "EXIT_COUNTER_BACK" => "EXIT_COUNTER_BACK + ".$exit_dir_counter,
1565 "ENTER_COUNTER_BACK" => "ENTER_COUNTER_BACK + ".$enter_counter
1566 );
1567 }
1568 $adv_rows_dir = $DB->Update("b_stat_page_adv",$arFields,"WHERE PAGE_ID = '".$CURRENT_DIR_ID."' and ADV_ID = ".$ADV_ID, "File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1569 }
1570 }
1571 else
1572 {
1573 $arFields = Array(
1574 "DATE_STAT" => $DB_now_date,
1575 "COUNTER" => 1,
1576 "EXIT_COUNTER" => 1,
1577 "ENTER_COUNTER" => $enter_counter,
1578 "DIR" => "'Y'",
1579 "URL" => "'".$DB->ForSql($CURRENT_DIR,2000)."'",
1580 "URL_HASH" => crc32ex($CURRENT_DIR),
1581 "SITE_ID" => $sql_site
1582 );
1583 $CURRENT_DIR_ID = $DB->Insert("b_stat_page",$arFields,"File: ".__FILE__."<br>Line: ".__LINE__);
1584 }
1585 $_SESSION["SESS_LAST_DIR_ID"] = $CURRENT_DIR_ID;
1586
1587 if (intval($adv_rows_dir)<=0)
1588 {
1589 if ($ADV_ID>0)
1590 {
1591 $arFields = Array(
1592 "DATE_STAT" => $DB_now_date,
1593 "PAGE_ID" => $CURRENT_DIR_ID,
1594 "ADV_ID" => $ADV_ID,
1595 "COUNTER" => 1,
1596 "EXIT_COUNTER" => 1,
1597 "ENTER_COUNTER" => $enter_counter,
1598 "COUNTER_BACK" => 0,
1599 "EXIT_COUNTER_BACK" => 0,
1600 "ENTER_COUNTER_BACK" => 0
1601 );
1602 if ($bADV_BACK)
1603 {
1604 $arFields["COUNTER"] = 0;
1605 $arFields["EXIT_COUNTER"] = 0;
1606 $arFields["ENTER_COUNTER"] = 0;
1607 $arFields["COUNTER_BACK"] = 1;
1608 $arFields["EXIT_COUNTER_BACK"] = 1;
1609 $arFields["ENTER_COUNTER_BACK"] = $enter_counter;
1610 }
1611 $DB->Insert("b_stat_page_adv",$arFields,"File: ".__FILE__."<br>Line: ".__LINE__);
1612 }
1613 }
1614
1615 // обновим страницу
1616 if ($LAST_PAGE_ID>0 && $exit_page_counter>0)
1617 {
1618 $arFields = array("EXIT_COUNTER" => "EXIT_COUNTER - 1");
1619 $DB->Update("b_stat_page",$arFields,"WHERE ID = '".$LAST_PAGE_ID."'","File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1620 if ($ADV_ID>0)
1621 {
1622 if ($bADV_BACK)
1623 {
1624 $arFields = array(
1625 "EXIT_COUNTER_BACK" => "EXIT_COUNTER_BACK - 1"
1626 );
1627 }
1628 $DB->Update("b_stat_page_adv",$arFields,"WHERE PAGE_ID = '".$LAST_PAGE_ID."' and ADV_ID=".$ADV_ID,"File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1629 }
1630 }
1631
1632 $adv_rows_page = 0;
1633 if ($CURRENT_PAGE_ID>0)
1634 {
1635 $arFields = Array(
1636 "COUNTER" => "COUNTER + 1",
1637 "EXIT_COUNTER" => "EXIT_COUNTER + ".$exit_page_counter,
1638 "ENTER_COUNTER" => "ENTER_COUNTER + ".$enter_counter,
1639 "URL_404" => "'".$ERROR_404."'"
1640 );
1641 $DB->Update("b_stat_page",$arFields,"WHERE ID = '".$CURRENT_PAGE_ID."'","File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1642 if ($ERROR_404=="N")
1643 {
1644 CStatistics::Set404("b_stat_page", "ID = ".intval($CURRENT_PAGE_ID), array("URL_404" => "Y"));
1645 }
1646
1647 if ($ADV_ID>0)
1648 {
1649 if ($bADV_BACK)
1650 {
1651 $arFields = Array(
1652 "COUNTER_BACK" => "COUNTER_BACK + 1",
1653 "EXIT_COUNTER_BACK" => "EXIT_COUNTER_BACK + ".$exit_dir_counter,
1654 "ENTER_COUNTER_BACK" => "ENTER_COUNTER_BACK + ".$enter_counter
1655 );
1656 }
1657 unset($arFields["URL_404"]);
1658 $adv_rows_page = $DB->Update("b_stat_page_adv",$arFields,"WHERE PAGE_ID = '".$CURRENT_PAGE_ID."' and ADV_ID = ".$ADV_ID,"File: ".__FILE__."<br>Line: ".__LINE__,false,false,false);
1659 }
1660 }
1661 else
1662 {
1663 $arFields = Array(
1664 "DATE_STAT" => $DB_now_date,
1665 "COUNTER" => 1,
1666 "EXIT_COUNTER" => 1,
1667 "ENTER_COUNTER" => $enter_counter,
1668 "DIR" => "'N'",
1669 "URL" => "'".$DB->ForSql($CURRENT_PAGE,2000)."'",
1670 "URL_404" => "'".$ERROR_404."'",
1671 "URL_HASH" => crc32ex($CURRENT_PAGE),
1672 "SITE_ID" => $sql_site
1673 );
1674 $CURRENT_PAGE_ID = $DB->Insert("b_stat_page",$arFields,"File: ".__FILE__."<br>Line: ".__LINE__);
1675 if ($ERROR_404=="N")
1676 {
1677 CStatistics::Set404("b_stat_page", "ID = ".intval($CURRENT_PAGE_ID), array("URL_404" => "Y"));
1678 }
1679 }
1680 $_SESSION["SESS_LAST_PAGE_ID"] = $CURRENT_PAGE_ID;
1681
1682 if (intval($adv_rows_page)<=0 && $ADV_ID>0)
1683 {
1684 $arFields = Array(
1685 "DATE_STAT" => $DB_now_date,
1686 "PAGE_ID" => $CURRENT_PAGE_ID,
1687 "ADV_ID" => $ADV_ID,
1688 "COUNTER" => $bADV_BACK?0:1,
1689 "EXIT_COUNTER" => $bADV_BACK?0:1,
1690 "ENTER_COUNTER" => $bADV_BACK?0:$enter_counter,
1691 "COUNTER_BACK" => $bADV_BACK?1:0,
1692 "EXIT_COUNTER_BACK" => $bADV_BACK?1:0,
1693 "ENTER_COUNTER_BACK" => $bADV_BACK?$enter_counter:0,
1694 );
1695 $DB->Insert("b_stat_page_adv",$arFields,"File: ".__FILE__."<br>Line: ".__LINE__);
1696 }
1697 }
1698 }
1699
1700 public static function GetRefererListID($PROT, $SN, $PAGE_FROM, $CURRENT_URI, $ERROR_404, $sql_site)
1701 {
1702 $DB = CDatabase::GetModuleConnection('statistic');
1703 $DB_now = $DB->GetNowFunction();
1704
1705 // ID of the referer
1706 $rsReferer = $DB->Query("
1707 SELECT ID
1708 FROM b_stat_referer
1709 WHERE SITE_NAME = '".$DB->ForSql($SN, 255)."'
1710 ");
1711 $arReferer = $rsReferer->Fetch();
1712
1713 if($arReferer)
1714 {
1715 // update session counter
1716 $DB->Update(
1717 "b_stat_referer",
1718 array("SESSIONS" => "SESSIONS + 1"),
1719 "WHERE ID=".$arReferer["ID"],
1720 "File: ".__FILE__."<br>Line: ".__LINE__, false, false, false
1721 );
1722 $_SESSION["SESS_REFERER_ID"] = intval($arReferer["ID"]);
1723 }
1724 else
1725 {
1726 // add new one
1727 $arFields = array(
1728 "DATE_FIRST" => $DB_now,
1729 "DATE_LAST" => $DB_now,
1730 "SITE_NAME" => "'".$DB->ForSql($SN, 255)."'",
1731 "SESSIONS" => 1,
1732 );
1733 $_SESSION["SESS_REFERER_ID"] = intval($DB->Insert("b_stat_referer", $arFields, "File: ".__FILE__."<br>Line: ".__LINE__));
1734 }
1735
1736 // save referring fact to database
1737 $arFields = array(
1738 "DATE_HIT" => $DB_now,
1739 "REFERER_ID" => $_SESSION["SESS_REFERER_ID"],
1740 "PROTOCOL" => "'".$DB->ForSql($PROT, 10)."'",
1741 "SITE_NAME" => "'".$DB->ForSql($SN, 255)."'",
1742 "URL_FROM" => "'".$DB->ForSql($PAGE_FROM, 2000)."'",
1743 "URL_TO" => "'".$DB->ForSql($CURRENT_URI, 2000)."'",
1744 "URL_TO_404" => "'".$ERROR_404."'",
1745 "SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]),
1746 "ADV_ID" => intval($_SESSION["SESS_ADV_ID"]),
1747 "SITE_ID" => $sql_site,
1748 );
1749
1750 $REFERER_LIST_ID = intval($DB->Insert("b_stat_referer_list", $arFields, "File: ".__FILE__."<br>Line: ".__LINE__));
1751 if($ERROR_404=="N")
1752 {
1753 CStatistics::Set404("b_stat_referer_list", "ID = ".$REFERER_LIST_ID, array("URL_TO_404" => "Y"));
1754 }
1755
1756 return $REFERER_LIST_ID;
1757 }
1758}
global $APPLICATION
Определения include.php:80
static getInstance()
Определения application.php:98
static detectUtf8($string, $replaceHex=true)
Определения encoding.php:154
static GetByID($ID)
Определения language.php:99
static IncParam($arParam, $arParamSite=false, $SITE_ID=false, $DATE=false, $DATE_FORMAT="FULL", $SIGN="+")
Определения traffic.php:23
Определения city.php:240
GetCountryCode()
Определения city.php:445
static SetStatus($status)
Определения http.php:476
Определения keepstatistic.php:4
static $HIT_ID
Определения keepstatistic.php:5
static RestoreSession()
Определения keepstatistic.php:1110
static GetRefererListID($PROT, $SN, $PAGE_FROM, $CURRENT_URI, $ERROR_404, $sql_site)
Определения keepstatistic.php:1700
static ReallyKeep()
Определения keepstatistic.php:112
static UpdateCountry($COUNTRY_ID, $arFields, $DATE=false, $DATE_FORMAT="SHORT", $SIGN="+")
Определения keepstatistic.php:1142
static CheckSkip()
Определения keepstatistic.php:54
static checkRanges()
Определения keepstatistic.php:29
static SavePathData($SITE_ID, $CURRENT_PAGE, $ERROR_404)
Определения keepstatistic.php:1214
static UpdateCity($CITY_ID, $arFields, $DATE=false, $DATE_FORMAT="SHORT", $SIGN="+")
Определения keepstatistic.php:1178
static GetCuurentHitID()
Определения keepstatistic.php:7
static Keep($HANDLE_CALL=false)
Определения keepstatistic.php:77
static checkGroups()
Определения keepstatistic.php:12
static SaveVisits($sql_site, $SESSION_NEW, $CURRENT_DIR, $CURRENT_PAGE, $ERROR_404)
Определения keepstatistic.php:1474
static SetNewDayForSite($SITE_ID=false, $HOSTS=0, $TOTAL_HOSTS=0, $SESSIONS=0, $HITS=0)
Определения statistic.php:542
static GetSessionDataByMD5($GUEST_MD5)
Определения statistic.php:20
static SetNewDay($HOSTS=0, $TOTAL_HOSTS=0, $SESSIONS=0, $HITS=0, $NEW_GUESTS=0, $GUESTS=0, $FAVORITES=0)
Определения statistic.php:585
static DBTopSql($strSql, $nTopCount=false)
Определения statistic.php:628
$str
Определения commerceml2.php:63
$arFields
Определения dblapprove.php:5
$arr
Определения file_new.php:624
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$zr
Определения options.php:5
ip2number($dotted)
Определения ip_tools.php:240
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$z
Определения options.php:31
init_get_params($url)
Определения tools.php:4438
LocalRedirect($url, $skip_security_check=false, $status="302 Found")
Определения tools.php:4005
$name
Определения menu_edit.php:35
$var
Определения payment.php:63
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
die
Определения quickway.php:367
const ADMIN_SECTION
Определения rss.php:2
$i
Определения factura.php:643
$page
Определения order_form.php:33
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$currency
Определения template.php:266
$site_id
Определения sonet_set_content_view.php:9
const SITE_ID
Определения sonet_set_content_view.php:12
crc32ex($s)
Определения stat_tools.php:948
stat_session_register($var_name)
Определения stat_tools.php:509
__GetCurrentPage()
Определения stat_tools.php:231
__GoogleAd($set_new_adv=false, $r1=false, $r2=false, $s="http://pagead2.googlesyndication.com/")
Определения stat_tools.php:5
get_guest_md5()
Определения stat_tools.php:534
__SetNoKeepStatistics()
Определения stat_tools.php:127
__GetFullReferer($referer=false)
Определения stat_tools.php:332
__SetReferer($referer, $syn)
Определения stat_tools.php:106
GetStatPathID($URL, $PREV_PATH_ID="")
Определения stat_tools.php:504
__GetFullRequestUri($url=false, $host=false, $port=false, $protocol=false)
Определения stat_tools.php:339
__GetReferringSite(&$protocol, &$server_name, &$server_name_wo_port, &$PAGE_FROM, $URL_FROM=false)
Определения stat_tools.php:46
GetCookieString($arrCookie=false)
Определения stat_tools.php:215
$rows
Определения options.php:264
$rs
Определения action.php:82
$GLOBALS['_____370096793']
Определения update_client.php:1
$SITE_ID
Определения yandex_run.php:607