Beispiel #1
0
 function SavePathData($SITE_ID, $CURRENT_PAGE, $ERROR_404)
 {
     $DB = CDatabase::GetModuleConnection('statistic');
     $DB_now = $DB->GetNowFunction();
     $DB_now_date = $DB->GetNowDate();
     $STEPS = intval(COption::GetOptionString("statistic", "MAX_PATH_STEPS"));
     if ($_SESSION["SESS_LAST_PAGE"] == $CURRENT_PAGE) {
         return;
     }
     $COUNTER_ABNORMAL = 0;
     // счетчик показывающий сколько раз прошли по данному пути без поддержки HTTP_REFERER
     // получим ссылающуюся страницу
     if (strlen($_SERVER["HTTP_REFERER"]) <= 0) {
         if (strlen($_SESSION["SESS_LAST_PAGE"]) > 0) {
             $COUNTER_ABNORMAL = 1;
         }
         $PATH_REFERER = __GetFullReferer($_SESSION["SESS_LAST_PAGE"]);
     } else {
         $PATH_REFERER = __GetFullReferer();
     }
     if ($PATH_REFERER == $CURRENT_PAGE) {
         return;
     }
     // получим из кэша данные по предыдущему пути: ID пути, набор страниц и т.д.
     if (strlen($PATH_REFERER) > 0) {
         $where1 = " and C.PATH_LAST_PAGE = '" . $DB->ForSql($PATH_REFERER, 255) . "'";
     } else {
         $where1 = " and (C.PATH_LAST_PAGE is null or " . $DB->Length("C.PATH_LAST_PAGE") . "<=0)";
     }
     $strSql = CStatistics::DBTopSql("\n\t\t\tSELECT /*TOP*/\n\t\t\t\tC.ID as CACHE_ID,\n\t\t\t\tC.PATH_ID,\n\t\t\t\tC.PATH_PAGES,\n\t\t\t\tC.PATH_FIRST_PAGE,\n\t\t\t\tC.PATH_FIRST_PAGE_SITE_ID,\n\t\t\t\tC.PATH_FIRST_PAGE_404,\n\t\t\t\tC.PATH_STEPS,\n\t\t\t\tC.PATH_LAST_PAGE,\n\t\t\t\tC.IS_LAST_PAGE\n\t\t\tFROM\n\t\t\t\tb_stat_path_cache C\n\t\t\tWHERE\n\t\t\t\tC.SESSION_ID = " . intval($_SESSION['SESS_SESSION_ID']) . "\n\t\t\t{$where1}\n\t\t\tORDER BY\n\t\t\t\tC.ID desc\n\t\t\t", 1);
     $rsPREV_PATH = $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $arPREV_PATH = $rsPREV_PATH->Fetch();
     $arrUpdate404_1 = array();
     $arrUpdate404_2 = array();
     // сформируем переменные описывающие текущий путь
     $CURRENT_PATH_ID = GetStatPathID($CURRENT_PAGE, $arPREV_PATH["PATH_ID"]);
     $tmp_SITE_ID = strlen($SITE_ID) > 0 ? "[" . $SITE_ID . "] " : "";
     $CURRENT_PATH_PAGES_404 = $arPREV_PATH["PATH_PAGES"] . $tmp_SITE_ID . "ERROR_404: " . $CURRENT_PAGE . "\n";
     if ($ERROR_404 == "Y") {
         $CURRENT_PATH_PAGES = $CURRENT_PATH_PAGES_404;
     } else {
         $CURRENT_PATH_PAGES = $arPREV_PATH["PATH_PAGES"] . $tmp_SITE_ID . $CURRENT_PAGE . "\n";
         if (strtolower($DB->type) == "oracle") {
             $arrUpdate404_1["PATH_PAGES"] = substr($CURRENT_PATH_PAGES_404, 0, 2000);
         } elseif (strtolower($DB->type) == "mssql") {
             $arrUpdate404_1["PATH_PAGES"] = substr($CURRENT_PATH_PAGES_404, 0, 7000);
         } else {
             $arrUpdate404_1["PATH_PAGES"] = $CURRENT_PATH_PAGES_404;
         }
         $arrUpdate404_2["PAGES"] = $arrUpdate404_1["PATH_PAGES"];
     }
     $CURRENT_PATH_STEPS = intval($arPREV_PATH["PATH_STEPS"]) + 1;
     if (strlen($arPREV_PATH["PATH_FIRST_PAGE"]) > 0) {
         $FIRST_PAGE = $arPREV_PATH["PATH_FIRST_PAGE"];
         $FIRST_PAGE_SITE_ID = $arPREV_PATH["PATH_FIRST_PAGE_SITE_ID"];
         $FIRST_PAGE_404 = $arPREV_PATH["PATH_FIRST_PAGE_404"] == "Y" ? "Y" : "N";
     } else {
         $FIRST_PAGE = $CURRENT_PAGE;
         $FIRST_PAGE_SITE_ID = $SITE_ID;
         $FIRST_PAGE_404 = $ERROR_404;
         if ($ERROR_404 == "N") {
             $arrUpdate404_1["PATH_FIRST_PAGE_404"] = "Y";
             $arrUpdate404_2["FIRST_PAGE_404"] = "Y";
         }
     }
     if (strtolower($DB->type) == "oracle") {
         $sql_CURRENT_PATH_PAGES = $DB->ForSql($CURRENT_PATH_PAGES, 2000);
     } elseif (strtolower($DB->type) == "mssql") {
         $sql_CURRENT_PATH_PAGES = $DB->ForSql($CURRENT_PATH_PAGES, 7000);
     } else {
         $sql_CURRENT_PATH_PAGES = $DB->ForSql($CURRENT_PATH_PAGES);
     }
     $sql_FIRST_PAGE_SITE_ID = strlen($FIRST_PAGE_SITE_ID) > 0 ? "'" . $DB->ForSql($FIRST_PAGE_SITE_ID, 2) . "'" : "null";
     $sql_LAST_PAGE_SITE_ID = strlen($SITE_ID) > 0 ? "'" . $DB->ForSql($SITE_ID, 2) . "'" : "null";
     // вставим данный путь в кэш
     $arFields = array("SESSION_ID" => intval($_SESSION['SESS_SESSION_ID']), "PATH_ID" => intval($CURRENT_PATH_ID), "PATH_PAGES" => "'" . $sql_CURRENT_PATH_PAGES . "'", "PATH_FIRST_PAGE" => "'" . $DB->ForSql($FIRST_PAGE, 255) . "'", "PATH_FIRST_PAGE_404" => "'" . $DB->ForSql($FIRST_PAGE_404) . "'", "PATH_FIRST_PAGE_SITE_ID" => $sql_FIRST_PAGE_SITE_ID, "PATH_LAST_PAGE" => "'" . $DB->ForSql($CURRENT_PAGE, 255) . "'", "PATH_LAST_PAGE_404" => "'" . $DB->ForSql($ERROR_404) . "'", "PATH_LAST_PAGE_SITE_ID" => $sql_LAST_PAGE_SITE_ID, "PATH_STEPS" => $CURRENT_PATH_STEPS, "DATE_HIT" => $DB_now, "IS_LAST_PAGE" => "'Y'");
     $id = $DB->Insert("b_stat_path_cache", $arFields, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if ($ERROR_404 == "N") {
         $arrUpdate404_1["PATH_LAST_PAGE_404"] = "Y";
         $arrUpdate404_2["LAST_PAGE_404"] = "Y";
     }
     CStatistics::Set404("b_stat_path_cache", "ID = " . intval($id), $arrUpdate404_1);
     // увеличим счетчик динамики по текущему пути
     $arFields = array("COUNTER" => "COUNTER + 1", "COUNTER_FULL_PATH" => "COUNTER_FULL_PATH + 1", "COUNTER_ABNORMAL" => "COUNTER_ABNORMAL + " . intval($COUNTER_ABNORMAL));
     $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);
     if (intval($rows) <= 0) {
         $sql_PARENT_PATH_ID = strlen($arPREV_PATH["PATH_ID"]) > 0 ? $arPREV_PATH["PATH_ID"] : "null";
         $arFields = array("PATH_ID" => intval($CURRENT_PATH_ID), "PARENT_PATH_ID" => $sql_PARENT_PATH_ID, "DATE_STAT" => $DB_now_date, "COUNTER" => 1, "COUNTER_FULL_PATH" => 1, "COUNTER_ABNORMAL" => intval($COUNTER_ABNORMAL), "PAGES" => "'" . $sql_CURRENT_PATH_PAGES . "'", "FIRST_PAGE" => "'" . $DB->ForSql($FIRST_PAGE, 255) . "'", "FIRST_PAGE_SITE_ID" => $sql_FIRST_PAGE_SITE_ID, "FIRST_PAGE_404" => "'" . $DB->ForSql($FIRST_PAGE_404) . "'", "PREV_PAGE" => "'" . $DB->ForSql($arPREV_PATH["PATH_LAST_PAGE"]) . "'", "PREV_PAGE_HASH" => crc32ex($arPREV_PATH["PATH_LAST_PAGE"]), "LAST_PAGE" => "'" . $DB->ForSql($CURRENT_PAGE, 255) . "'", "LAST_PAGE_404" => "'" . $DB->ForSql($ERROR_404) . "'", "LAST_PAGE_SITE_ID" => $sql_LAST_PAGE_SITE_ID, "LAST_PAGE_HASH" => crc32ex($CURRENT_PAGE), "STEPS" => $CURRENT_PATH_STEPS);
         if ($CURRENT_PATH_STEPS <= $STEPS) {
             $id = $DB->Insert("b_stat_path", $arFields, "File: " . __FILE__ . "<br>Line: " . __LINE__);
             CStatistics::Set404("b_stat_path", "ID = " . intval($id), $arrUpdate404_2);
         }
     }
     // если предыдущая страница считалась последней страницей в пути то
     if ($arPREV_PATH["IS_LAST_PAGE"] == "Y") {
         // сбросим счетчик конечных путей для предыдущей страницы
         $arFields = array("COUNTER_FULL_PATH" => "COUNTER_FULL_PATH - 1");
         $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);
         // сбросим флаг того что предудущая страница - последняя страница в пути
         $arFields = array("IS_LAST_PAGE" => "'N'");
         $DB->Update("b_stat_path_cache", $arFields, "WHERE ID='" . $arPREV_PATH["CACHE_ID"] . "'", "File: " . __FILE__ . "<br>Line: " . __LINE__, false, false, false);
     }
     // зафиксируем счетчик пути в связке с рекламной кампанией
     if (intval($_SESSION["SESS_ADV_ID"]) > 0) {
         $ADV_ID = intval($_SESSION["SESS_ADV_ID"]);
         $arFields = array("COUNTER" => "COUNTER + 1", "COUNTER_FULL_PATH" => "COUNTER_FULL_PATH + 1");
         $sql_COUNTER = 1;
         $sql_COUNTER_FULL_PATH = 1;
         $sql_COUNTER_BACK = 0;
         $sql_COUNTER_FULL_PATH_BACK = 0;
         $ADV_BACK = "N";
     } elseif (intval($_SESSION["SESS_LAST_ADV_ID"]) > 0) {
         $ADV_ID = intval($_SESSION["SESS_LAST_ADV_ID"]);
         $arFields = array("COUNTER_BACK" => "COUNTER_BACK + 1", "COUNTER_FULL_PATH_BACK" => "COUNTER_FULL_PATH_BACK + 1");
         $sql_COUNTER = 0;
         $sql_COUNTER_FULL_PATH = 0;
         $sql_COUNTER_BACK = 1;
         $sql_COUNTER_FULL_PATH_BACK = 1;
         $ADV_BACK = "Y";
     } else {
         return;
     }
     //ADV_ID == 0
     $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);
     if (intval($rows) <= 0) {
         $arFields = array("ADV_ID" => intval($ADV_ID), "PATH_ID" => intval($CURRENT_PATH_ID), "DATE_STAT" => $DB_now_date, "COUNTER" => $sql_COUNTER, "COUNTER_BACK" => $sql_COUNTER_BACK, "COUNTER_FULL_PATH" => $sql_COUNTER_FULL_PATH, "COUNTER_FULL_PATH_BACK" => $sql_COUNTER_FULL_PATH_BACK, "STEPS" => $CURRENT_PATH_STEPS);
         if ($CURRENT_PATH_STEPS <= $STEPS) {
             $DB->Insert("b_stat_path_adv", $arFields, "File: " . __FILE__ . "<br>Line: " . __LINE__);
         }
     }
     if ($arPREV_PATH["IS_LAST_PAGE"] == "Y") {
         if ($ADV_BACK == "N") {
             $arFields = array("COUNTER_FULL_PATH" => "COUNTER_FULL_PATH - 1");
             $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);
         } elseif ($ADV_BACK == "Y") {
             $arFields = array("COUNTER_FULL_PATH_BACK" => "COUNTER_FULL_PATH_BACK - 1");
             $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);
         }
     }
 }
Beispiel #2
0
     $path_id = "";
     foreach ($arrPAGES as $page) {
         if (strlen($page) > 0) {
             $arr = array();
             $site_url = "";
             preg_match("#\\[(.+?)\\]#", $page, $arr);
             if (strlen($arr[1]) > 0) {
                 $page = str_replace("[" . $arr[1] . "] ", "", $page);
                 $site_url = $arSites[$arr[1]];
             }
             $err_404 = "N";
             if (substr($page, 0, strlen($str_err_404)) == $str_err_404) {
                 $err_404 = "Y";
                 $page = substr($page, strlen($str_err_404), strlen($page));
             }
             $path_id = GetStatPathID($page, $path_id);
             $action_url = "path_list.php?lang=" . LANGUAGE_ID . "&find_diagram_type=COUNTER&parent_id=" . urlencode($path_id) . "&context=" . urlencode($context);
             $action_js = ($table_id == "" ? $sTableID : $table_id) . ".GetAdminList('" . CUtil::JSEscape($action_url) . "');";
             $str .= '<a title="' . GetMessage("STAT_GO") . '" href="' . $page . '">&raquo;</a>&nbsp;<a title="' . GetMessage("STAT_NEXT_PAGES") . '" href="#" onclick="' . htmlspecialcharsbx($action_js) . '">';
             if ($err_404 == "Y") {
                 $str .= '<span class="stat_attention">' . TruncateText($page, 65) . '</span>';
             } else {
                 $str .= TruncateText($page, 80);
             }
             $str .= '<br>';
         }
     }
 }
 $row->AddViewField("URL", $str);
 $row->AddViewField("NUMBER", $number);
 $row->AddViewField("PERCENT", $q . "%");