public function __construct($arDBRecord = false) { parent::__construct($arDBRecord); $DB = CDatabase::GetModuleConnection('statistic'); if (!$arDBRecord) { $country_recs = COption::GetOptionString("statistic", "COUNTRY_INDEX_LOADED", "N"); if ($country_recs !== "Y") { $rs = $DB->Query(CStatistics::DBTopSql("SELECT /*TOP*/ * FROM b_stat_country", 1)); if ($rs->Fetch()) { $country_recs = "Y"; COption::SetOptionString("statistic", "COUNTRY_INDEX_LOADED", "Y"); } } $this->country_avail = $country_recs === "Y"; if ($this->country_avail) { $city_recs = COption::GetOptionString("statistic", "CITY_INDEX_LOADED", "N"); if ($city_recs !== "Y") { $rs = $DB->Query(CStatistics::DBTopSql("SELECT /*TOP*/ * FROM b_stat_city_ip", 1)); if ($rs->Fetch()) { COption::SetOptionString("statistic", "CITY_INDEX_LOADED", "Y"); } } $this->city_avail = COption::GetOptionString("statistic", "CITY_INDEX_LOADED", "N") === "Y"; } $this->is_installed = $this->country_avail; } }
private function updateStatisticModule($mid) { if (\CModule::IncludeModule("statistic")) { $F_EVENT1 = $this->forum["EVENT1"]; $F_EVENT2 = $this->forum["EVENT2"]; $F_EVENT3 = $this->forum["EVENT3"]; if (empty($F_EVENT3)) { $site = (array) \CForumNew::GetSites($this->forum["ID"]); $F_EVENT3 = \CForumNew::PreparePath2Message(array_key_exists(SITE_ID, $site) ? $site[SITE_ID] : reset($site), array("FORUM_ID" => $this->forum["ID"], "TOPIC_ID" => $this->topic["ID"], "MESSAGE_ID" => $mid)); } \CStatistics::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3); } }
public static function getData($params, $section_id) { $list = array(); if ($params->get('records_num', 1)) { $list['records_num'] = CStatistics::records_num($section_id); } if ($params->get('comments_num', 1)) { $list['comments_num'] = CStatistics::comments_num($section_id); } if ($params->get('authors_num', 1)) { $list['authors_num'] = CStatistics::authors_num($section_id); } if ($params->get('members_num', 1)) { $list['members_num'] = CStatistics::members_num($section_id, $params); } if ($params->get('views_num', 1)) { $list['views_num'] = CStatistics::views_num($section_id); } return $list; }
/** * <p>Возвращает данные по указанному <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителю</a>.</p> * * * * * @param int $guest_id ID посетителя. * * * * @return CDBResult * * * <h4>Example</h4> * <pre> * <? * $guest_id = 1; * if ($rs = <b>CGuest::GetByID</b>($guest_id)) * { * $ar = $rs->Fetch(); * // выведем параметры посетителя * echo "<pre>"; print_r($ar); echo "</pre>"; * } * ?> * </pre> * * * * <h4>See Also</h4> * <ul><li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">Термин "Посетитель"</a> * </li></ul><a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/cguest/getbyid.php * @author Bitrix */ public static function GetByID($ID) { $DB = CDatabase::GetModuleConnection('statistic'); $ID = intval($ID); $res = $DB->Query(" SELECT G.*, ".$DB->DateToCharFunction("G.FIRST_DATE")." FIRST_DATE, ".$DB->DateToCharFunction("G.LAST_DATE")." LAST_DATE, ".CStatistics::DBDateDiff("FS.DATE_LAST","FS.DATE_FIRST")." FSESSION_TIME, ".CStatistics::DBDateDiff("LS.DATE_LAST","LS.DATE_FIRST")." LSESSION_TIME, FS.HITS FSESSION_HITS, LS.HITS LSESSION_HITS, C.NAME COUNTRY_NAME, CITY.REGION REGION_NAME, CITY.NAME CITY_NAME, G.LAST_CITY_INFO FROM b_stat_guest G INNER JOIN b_stat_country C ON (C.ID = G.LAST_COUNTRY_ID) LEFT JOIN b_stat_session FS ON (FS.ID = G.FIRST_SESSION_ID) LEFT JOIN b_stat_session LS ON (LS.ID = G.LAST_SESSION_ID) LEFT JOIN b_stat_city CITY ON (CITY.ID = G.LAST_CITY_ID) WHERE G.ID = '$ID' ", false, "File: ".__FILE__."<br>Line: ".__LINE__); $res = new CStatResult($res); return $res; }
function GetList(&$by, &$order, $arFilter = array(), &$is_filtered) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": case "SEARCHER_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match); break; case "URL": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.URL", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "URL_404": $arSqlSearch[] = $val == "Y" ? "H.URL_404='Y'" : "H.URL_404='N'"; break; case "SEARCHER": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.NAME", $val, $match); break; case "DATE1": if (CheckDateTime($val)) { $arSqlSearch[] = "H.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE2": if (CheckDateTime($val)) { $arSqlSearch[] = "H.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); } break; case "IP": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.IP", $val, $match, array(".")); break; case "USER_AGENT": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.USER_AGENT", $val, $match); break; case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("H.SITE_ID", $val, $match); break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); if ($by == "s_id") { $strSqlOrder = "ORDER BY H.ID"; } elseif ($by == "s_site_id") { $strSqlOrder = "ORDER BY H.SITE_ID"; } elseif ($by == "s_date_hit") { $strSqlOrder = "ORDER BY H.DATE_HIT"; } elseif ($by == "s_searcher_id") { $strSqlOrder = "ORDER BY H.SEARCHER_ID"; } elseif ($by == "s_user_agent") { $strSqlOrder = "ORDER BY H.USER_AGENT"; } elseif ($by == "s_ip") { $strSqlOrder = "ORDER BY H.IP"; } elseif ($by == "s_url") { $strSqlOrder = "ORDER BY H.URL "; } else { $by = "s_date_hit"; $strSqlOrder = "ORDER BY H.DATE_HIT"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "\n\t\t\tSELECT /*TOP*/\n\t\t\t\tH.ID, H.SEARCHER_ID, H.URL, H.URL_404, H.IP, H.USER_AGENT, H.HIT_KEEP_DAYS, H.SITE_ID,\n\t\t\t\tS.NAME SEARCHER_NAME,\n\t\t\t\t" . $DB->DateToCharFunction("H.DATE_HIT") . " DATE_HIT\n\t\t\tFROM\n\t\t\t\tb_stat_searcher_hit H\n\t\t\tINNER JOIN b_stat_searcher S ON (S.ID = H.SEARCHER_ID)\n\t\t\tWHERE\n\t\t\t" . $strSqlSearch . "\n\t\t\t" . $strSqlOrder . "\n\t\t"; $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch); return $res; }
function GetList(&$by, &$order, $arFilter = array(), &$is_filtered) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("S.ID", $val, $match); break; case "DATE_START_1": if (CheckDateTime($val)) { $arSqlSearch[] = "S.DATE_START >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE_START_2": if (CheckDateTime($val)) { $arSqlSearch[] = "S.DATE_START < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); } break; case "DATE_END_1": if (CheckDateTime($val)) { $arSqlSearch[] = "S.DATE_END >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE_END_2": if (CheckDateTime($val)) { $arSqlSearch[] = "S.DATE_END < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); } break; case "ACTIVE": case "SAVE_STATISTIC": $arSqlSearch[] = $val == "Y" ? "S." . $key . "='Y'" : "S." . $key . "='N'"; break; case "IP_1": case "IP_2": case "IP_3": case "IP_4": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match); break; case "URL_FROM": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.URL_FROM", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "USER_AGENT": case "MESSAGE": case "COMMENTS": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S." . $key, $val, $match); break; case "URL_TO": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.URL_TO", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "URL_REDIRECT": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.URL_REDIRECT", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("S.SITE_ID", $val, $match); break; } } } $strSqlOrder = ""; if ($order != "asc") { $order = "desc"; } if ($by == "s_id") { $strSqlOrder = "ORDER BY S.ID {$order}"; } elseif ($by == "s_date_start") { $strSqlOrder = "ORDER BY S.DATE_START {$order}"; } elseif ($by == "s_site_id") { $strSqlOrder = "ORDER BY S.SITE_ID {$order}"; } elseif ($by == "s_date_end") { $strSqlOrder = "ORDER BY S.DATE_END {$order}"; } elseif ($by == "s_active") { $strSqlOrder = "ORDER BY S.ACTIVE {$order}"; } elseif ($by == "s_save_statistic") { $strSqlOrder = "ORDER BY S.SAVE_STATISTIC {$order}"; } elseif ($by == "s_ip") { $strSqlOrder = "ORDER BY S.IP_1 {$order}, S.IP_2 {$order}, S.IP_3 {$order}, S.IP_4 {$order}"; } elseif ($by == "s_mask") { $strSqlOrder = "ORDER BY S.MASK_1 {$order}, S.MASK_2 {$order}, S.MASK_3 {$order}, S.MASK_4 {$order}"; } elseif ($by == "s_url_to") { $strSqlOrder = "ORDER BY S.URL_TO {$order}"; } elseif ($by == "s_url_from") { $strSqlOrder = "ORDER BY S.URL_FROM {$order}"; } else { $strSqlOrder = "ORDER BY S.ID {$order}"; $by = "s_id"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT\n\t\t\t\tS.ID, S.ACTIVE, S.SAVE_STATISTIC,\n\t\t\t\tS.IP_1, S.IP_2, S.IP_3, S.IP_4,\n\t\t\t\tS.MASK_1, S.MASK_2, S.MASK_3, S.MASK_4,\n\t\t\t\tS.USER_AGENT, S.USER_AGENT_IS_NULL,\n\t\t\t\tS.URL_TO, S.URL_FROM, S.MESSAGE, S.MESSAGE_LID,\n\t\t\t\tS.URL_REDIRECT, S.COMMENTS, S.TEST, S.SITE_ID,\n\t\t\t\t" . $DB->DateToCharFunction("S.TIMESTAMP_X") . "\tTIMESTAMP_X,\n\t\t\t\t" . $DB->DateToCharFunction("S.DATE_END") . "\t\tDATE_END,\n\t\t\t\t" . $DB->DateToCharFunction("S.DATE_START") . "\t\tDATE_START,\n\t\t\t\tif ((\n\t\t\t\t\t(S.DATE_START<=now() or S.DATE_START is null) and\n\t\t\t\t\t(S.DATE_END>=now() or S.DATE_END is null) and\n\t\t\t\t\tS.ACTIVE='Y'),\n\t\t\t\t\t'green',\n\t\t\t\t\t'red') as LAMP\n\t\t\tFROM\n\t\t\t\tb_stop_list S\n\t\t\tWHERE\n\t\t\t{$strSqlSearch}\n\t\t\t{$strSqlOrder}\n\t\t\tLIMIT " . COption::GetOptionString('statistic', 'RECORDS_LIMIT') . "\n\t\t\t"; $res = $DB->Query($strSql, false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch); return $res; }
function GetRefererListID($PROT, $SN, $PAGE_FROM, $CURRENT_URI, $ERROR_404, $sql_site) { $DB = CDatabase::GetModuleConnection('statistic'); $DB_now = $DB->GetNowFunction(); // ID of the referer $rsReferer = $DB->Query("\n\t\t\tSELECT ID\n\t\t\tFROM b_stat_referer\n\t\t\tWHERE SITE_NAME = '" . $DB->ForSql($SN, 255) . "'\n\t\t", false, "File: " . __FILE__ . "<br>Line: " . __LINE__); $arReferer = $rsReferer->Fetch(); if ($arReferer) { // update session counter $DB->Update("b_stat_referer", array("SESSIONS" => "SESSIONS + 1"), "WHERE ID=" . $arReferer["ID"], "File: " . __FILE__ . "<br>Line: " . __LINE__, false, false, false); $_SESSION["SESS_REFERER_ID"] = intval($arReferer["ID"]); } else { // add new one $arFields = array("DATE_FIRST" => $DB_now, "DATE_LAST" => $DB_now, "SITE_NAME" => "'" . $DB->ForSql($SN, 255) . "'", "SESSIONS" => 1); $_SESSION["SESS_REFERER_ID"] = intval($DB->Insert("b_stat_referer", $arFields, "File: " . __FILE__ . "<br>Line: " . __LINE__)); } // save referring fact to database $arFields = array("DATE_HIT" => $DB_now, "REFERER_ID" => $_SESSION["SESS_REFERER_ID"], "PROTOCOL" => "'" . $DB->ForSql($PROT, 10) . "'", "SITE_NAME" => "'" . $DB->ForSql($SN, 255) . "'", "URL_FROM" => "'" . $DB->ForSql($PAGE_FROM, 2000) . "'", "URL_TO" => "'" . $DB->ForSql($CURRENT_URI, 2000) . "'", "URL_TO_404" => "'" . $ERROR_404 . "'", "SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]), "ADV_ID" => intval($_SESSION["SESS_ADV_ID"]), "SITE_ID" => $sql_site); $REFERER_LIST_ID = intval($DB->Insert("b_stat_referer_list", $arFields, "File: " . __FILE__ . "<br>Line: " . __LINE__)); if ($ERROR_404 == "N") { CStatistics::Set404("b_stat_referer_list", "ID = " . $REFERER_LIST_ID, array("URL_TO_404" => "Y")); } return $REFERER_LIST_ID; }
echo $APPLICATION->GetCurPage(); ?> ?mid=<?php echo htmlspecialcharsbx($mid); ?> &lang=<?php echo LANGUAGE_ID; ?> "> <?php $tabControl2->BeginNextTab(); ?> <tr> <td align="left" colspan="2"> <?php $arDDL = CStatistics::GetDDL(); foreach ($arDDL as $DDL) { echo htmlspecialcharsbx($DDL["SQL_TEXT"]) . "<br>"; } ?> <br> <input type="submit" name="runsql" value="<?php echo GetMessage("STAT_OPT_INDEX_CREATE_BUTTON"); ?> "> <input type="hidden" name="runsql" value="Y"> <input type="hidden" name="tabControl2_active_tab" value="fedit4"> <br> <?php echo BeginNote('width="100%"'); ?>
function GetByID($ID) { $DB = CDatabase::GetModuleConnection('statistic'); $strSql = "SELECT /*TOP*/ * FROM b_stat_path WHERE PATH_ID = '" . $DB->ForSql($ID) . "'"; return $DB->Query(CStatistics::DBTopSql($strSql, 1), false, "File: " . __FILE__ . "<br>Line: " . __LINE__); }
<?php define("ADMIN_MODULE_NAME", "statistic"); define("ADMIN_MODULE_ICON", "<a href=\"stat_list.php?lang=" . LANG . "\"><img src=\"/bitrix/images/statistic/statistic.gif\" width=\"48\" height=\"48\" border=\"0\" alt=\"" . GetMessage("STAT_MODULE_TITLE") . "\" title=\"" . GetMessage("STAT_MODULE_TITLE") . "\"></a>"); $message = null; if (CModule::IncludeModule('statistic')) { if (!$message && CStatistics::CheckForDDL()) { $message = new CAdminMessage(array("MESSAGE" => GetMessage("STAT_NEW_INDEXES_NOT_INSTALLED") . ' <a href="settings.php?lang=' . LANG . '&mid=statistic&tabControl2_active_tab=fedit4#services">' . GetMessage("STAT_NEW_INDEXES_INSTALL") . '</a>', "TYPE" => "ERROR", "HTML" => true)); } if (!$message && CModule::IncludeModule("currency")) { $base_currency = GetStatisticBaseCurrency(); if (strlen($base_currency) <= 0) { $message = new CAdminMessage(array("MESSAGE" => GetMessage("STAT_BASE_CURRENCY_NOT_INSTALLED") . ' <a href="settings.php?lang=' . LANG . '&mid=statistic">(' . GetMessage("STAT_CHOOSE_CURRENCY") . ')</a>', "TYPE" => "ERROR", "HTML" => true)); } } }
function ForumAddMessage($MESSAGE_TYPE, $FID, $TID, $MID, $arFieldsG, &$strErrorMessage, &$strOKMessage, $iFileSize = false, $captcha_word = "", $captcha_sid = 0, $captcha_code = "") { global $USER, $DB, $APPLICATION; $APPLICATION->ResetException(); $aMsg = array(); $bUpdateTopic = False; $bAddEditNote = $MESSAGE_TYPE == "EDIT"; $arParams = array("PERMISSION" => false); $arUserGroups = $USER->GetUserGroupArray(); // ************ External Permission ********************************* if (!empty($arFieldsG["PERMISSION_EXTERNAL"])) { $arParams["PERMISSION"] = CForumNew::GetUserPermission($FID, $arUserGroups); $arParams["PERMISSION"] = $arParams["PERMISSION"] < "Q" ? $arFieldsG["PERMISSION_EXTERNAL"] : $arParams["PERMISSION"]; unset($arFieldsG["PERMISSION_EXTERNAL"]); } elseif (!empty($arFieldsG["SONET_PERMS"])) { $arParams["PERMISSION"] = CForumNew::GetUserPermission($FID, $arUserGroups); if ($arParams["PERMISSION"] < "Q") { if ($arFieldsG["SONET_PERMS"]["bCanFull"] === true) { $arParams["PERMISSION"] = "Y"; } elseif ($arFieldsG["SONET_PERMS"]["bCanNew"] === true) { $arParams["PERMISSION"] = "M"; } elseif ($arFieldsG["SONET_PERMS"]["bCanWrite"] === true) { $arParams["PERMISSION"] = "I"; } else { $arParams["PERMISSION"] = "A"; } } unset($arFieldsG["SONET_PERMS"]); } $DB->StartTransaction(); if (!in_array($MESSAGE_TYPE, array("NEW", "EDIT", "REPLY"))) { $aMsg[] = array("id" => "MESSAGE_TYPE", "text" => GetMessage("ADDMES_NO_TYPE") . "."); } $MID = intval($MID); $TID = intval($TID); $FID = intval($FID); $arFieldsG["EDIT_ADD_REASON"] = $arFieldsG["EDIT_ADD_REASON"] == "Y" ? "Y" : "N"; if ($MID > 0) { $arMessage = CForumMessage::GetByID($MID, array("FILTER" => "N")); if ($arMessage) { $TID = IntVal($arMessage["TOPIC_ID"]); $FID = IntVal($arMessage["FORUM_ID"]); } } $arTopic = array(); if ($TID > 0) { $arTopic = CForumTopic::GetByID($TID); if ($arTopic) { $FID = IntVal($arTopic["FORUM_ID"]); } } $arForum = CForumNew::GetByID($FID); //************************* Input params ************************************************************************** if ($MESSAGE_TYPE == "NEW" && !CForumTopic::CanUserAddTopic($FID, $arUserGroups, $USER->GetID(), $arForum, $arParams["PERMISSION"])) { $aMsg[] = array("id" => "PERMISSION", "text" => GetMessage("ADDMESS_NO_PERMS2NEW") . "."); } elseif ($MESSAGE_TYPE == "EDIT" && !CForumMessage::CanUserUpdateMessage($MID, $arUserGroups, $USER->GetID(), $arParams["PERMISSION"])) { $aMsg[] = array("id" => "PERMISSION", "text" => GetMessage("ADDMESS_NO_PERMS2EDIT") . "."); } elseif ($MESSAGE_TYPE == "REPLY" && !CForumMessage::CanUserAddMessage($TID, $arUserGroups, $USER->GetID(), $arParams["PERMISSION"])) { $aMsg[] = array("id" => "PERMISSION", "text" => GetMessage("ADDMESS_NO_PERMS2REPLY") . "."); } if ($MESSAGE_TYPE == "NEW" || $MESSAGE_TYPE == "EDIT" && array_intersect_key($arFieldsG, array("TITLE" => "", "DESCRIPTION" => "", "ICON" => "", "TAGS" => "", "OWNER_ID" => "", "SOCNET_GROUP_ID" => "")) && CForumTopic::CanUserUpdateTopic($TID, $arUserGroups, $USER->GetID(), $arParams["PERMISSION"])) { $bUpdateTopic = True; } if ($MESSAGE_TYPE == "EDIT" && (ForumCurrUserPermissions($FID, $arParams) > "Q" && $arFieldsG["EDIT_ADD_REASON"] == "N")) { $bAddEditNote = false; } //*************************!CAPTCHA******************************************************************************** if (!$USER->IsAuthorized() && $arForum["USE_CAPTCHA"] == "Y") { include_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/captcha.php"; $cpt = new CCaptcha(); if (strlen($captcha_code) > 0) { $captchaPass = COption::GetOptionString("main", "captcha_password", ""); if (!$cpt->CheckCodeCrypt($captcha_word, $captcha_code, $captchaPass)) { $aMsg[] = array("id" => "CAPTCHA", "text" => GetMessage("FORUM_POSTM_CAPTCHA") . "."); } } else { if (!$cpt->CheckCode($captcha_word, $captcha_sid)) { $aMsg[] = array("id" => "CAPTCHA", "text" => GetMessage("FORUM_POSTM_CAPTCHA") . "."); } } } //*************************!CAPTCHA******************************************************************************** $arFieldsG["POST_MESSAGE"] = trim($arFieldsG["POST_MESSAGE"]); if (empty($arFieldsG["POST_MESSAGE"])) { $aMsg[] = array("id" => "POST_MESSAGE", "text" => GetMessage("ADDMESS_INPUT_MESSAGE") . "."); } if ($bUpdateTopic && is_set($arFieldsG, "TITLE")) { $arFieldsG["TITLE"] = trim($arFieldsG["TITLE"]); if (empty($arFieldsG["TITLE"])) { $aMsg[] = array("id" => "TITLE", "text" => GetMessage("ADDMESS_INPUT_TITLE") . "."); } } //*************************!QUOTA********************************************************************************** /* if (empty($aMsg)) { $quota = new CDiskQuota(); if ($MESSAGE_TYPE=="EDIT") { if (!$quota->checkDiskQuota(strLen($arFieldsG["POST_MESSAGE"]) - strLen($arMessage["POST_MESSAGE"]))) { if (!$quota->LAST_ERROR) $aMsg[] = array("id" => "QUOTA", "text" => GetMessage("MAIN_QUOTA_BAD")."( ".COption::GetOptionInt("main", "disk_space")." )."); else $aMsg[] = array("id" => "QUOTA", "text" => $quota->LAST_ERROR); } } elseif (!$quota->checkDiskQuota($arFieldsG["POST_MESSAGE"])) { if (!$quota->LAST_ERROR) $aMsg[] = array("id" => "QUOTA", "text" => GetMessage("MAIN_QUOTA_BAD")."( ".COption::GetOptionInt("main", "disk_space")." )."); else $aMsg[] = array("id" => "QUOTA", "text" => $quota->LAST_ERROR); } }*/ //*************************!QUOTA********************************************************************************** if (empty($aMsg)) { // *************************!ATTACH_IMG***************************************************************************** if (is_set($arFieldsG, "ATTACH_IMG") && empty($arFieldsG["ATTACH_IMG"]["name"]) && empty($arFieldsG["ATTACH_IMG"]["del"])) { unset($arFieldsG["ATTACH_IMG"]); } if (is_set($arFieldsG, "ATTACH_IMG")) { $arFieldsG["ATTACH_IMG"]["FILE_ID"] = $arMessage["ATTACH_IMG"]; $arFieldsG["FILES"] = array($arFieldsG["ATTACH_IMG"]); } unset($arFieldsG["ATTACH_IMG"]); if (!empty($arFieldsG["FILES"]) && is_array($arFieldsG["FILES"])) { foreach ($arFieldsG["FILES"] as $key => $val) { if (intVal($val["FILE_ID"]) > 0) { $arFieldsG["FILES"][$key]["del"] = $val["del"] == "Y" ? "Y" : ""; } } $res = array("FORUM_ID" => $arForum["ID"], "TOPIC_ID" => 0, "MESSAGE_ID" => 0, "USER_ID" => $USER->GetID()); if (!in_array($arForum["ALLOW_UPLOAD"], array("Y", "F", "A"))) { unset($arFieldsG["FILES"]); } elseif (!CForumFiles::CheckFields($arFieldsG["FILES"], $res, "NOT_CHECK_DB")) { if ($ex = $APPLICATION->GetException()) { $aMsg[] = array("id" => "FILE", "text" => $ex->GetString()); } else { $aMsg[] = array("id" => "FILE", "text" => "File upload error."); } } } } //*************************/ATTACH_IMG***************************************************************************** if (empty($aMsg) && ($MESSAGE_TYPE == "NEW" || $MESSAGE_TYPE == "REPLY")) { $AUTHOR_ID = IntVal($USER->GetParam("USER_ID")); if ($USER->IsAuthorized()) { $res = CForumUser::GetByUSER_ID($USER->GetID()); $bSHOW_NAME = !empty($res) ? $res["SHOW_NAME"] == "Y" : true; $arFieldsG["AUTHOR_NAME"] = $bSHOW_NAME ? trim($USER->GetFullName()) : ""; $arFieldsG["AUTHOR_NAME"] = !empty($arFieldsG["AUTHOR_NAME"]) ? $arFieldsG["AUTHOR_NAME"] : $USER->GetLogin(); } if (empty($arFieldsG["AUTHOR_NAME"])) { $aMsg[] = array("id" => "AUTHOR_NAME", "text" => GetMessage("ADDMESS_INPUT_AUTHOR") . "."); } } elseif (empty($aMsg) && $MESSAGE_TYPE == "EDIT") { $AUTHOR_ID = IntVal($arMessage["AUTHOR_ID"]); if (is_set($arFieldsG, "AUTHOR_NAME") && empty($arFieldsG["AUTHOR_NAME"])) { if ($AUTHOR_ID <= 0) { $aMsg[] = array("id" => "AUTHOR_NAME", "text" => GetMessage("ADDMESS_INPUT_AUTHOR") . "."); } else { $res = CForumUser::GetByUSER_ID($AUTHOR_ID); $bSHOW_NAME = !empty($res) ? $res["SHOW_NAME"] == "Y" : true; if ($USER->GetID() == $AUTHOR_ID) { $arFieldsG["AUTHOR_NAME"] = $bSHOW_NAME ? trim($USER->GetFullName()) : ""; $arFieldsG["AUTHOR_NAME"] = !empty($arFieldsG["AUTHOR_NAME"]) ? $arFieldsG["AUTHOR_NAME"] : $USER->GetLogin(); } else { $res = CForumUser::GetByUSER_IDEx($AUTHOR_ID); if ($res) { $arFieldsG["AUTHOR_NAME"] = trim($bSHOW_NAME ? $res["NAME"] . " " . $res["LAST_NAME"] : ""); $arFieldsG["AUTHOR_NAME"] = !empty($arFieldsG["AUTHOR_NAME"]) ? $arFieldsG["AUTHOR_NAME"] : $res["LOGIN"]; } else { unset($arFieldsG["AUTHOR_NAME"]); } } } } if ($USER->IsAuthorized()) { $res = CForumUser::GetByUSER_ID($USER->GetID()); $bSHOW_NAME = !empty($res) ? $res["SHOW_NAME"] == "Y" : true; $arFieldsG["EDITOR_NAME"] = $bSHOW_NAME ? trim($USER->GetFullName()) : ""; $arFieldsG["EDITOR_NAME"] = !empty($arFieldsG["EDITOR_NAME"]) ? $arFieldsG["EDITOR_NAME"] : $USER->GetLogin(); } if ($bAddEditNote && empty($arFieldsG["EDITOR_NAME"])) { $aMsg[] = array("id" => "EDITOR_NAME", "text" => GetMessage("ADDMESS_INPUT_EDITOR") . "."); } } //*************************/Input params *************************************************************************** //************************* Actions ******************************************************************************** //************************* Add/edit topic ************************************************************************* if (empty($aMsg)) { // The longest step by time. Actualization of topic, user and forum statistic info (~0.7-0.8 sec) if ($MESSAGE_TYPE == "EDIT" && ($arMessage["APPROVED"] == "Y" || $arMessage["APPROVED"] == "N")) { $arFieldsG["APPROVED"] = $arMessage["APPROVED"]; } elseif (!empty($arTopic) && $arTopic["APPROVED"] != "Y") { $arFieldsG["APPROVED"] = "N"; } else { $arFieldsG["APPROVED"] = $arForum["MODERATION"] == "Y" ? "N" : "Y"; if (ForumCurrUserPermissions($FID, $arParams) >= "Q") { $arFieldsG["APPROVED"] = "Y"; } } if ($bUpdateTopic) { $arFields = array(); foreach (array("TITLE", "TITLE_SEO", "DESCRIPTION", "ICON", "TAGS") as $key) { if (is_set($arFieldsG, $key)) { $arFields[$key] = $arFieldsG[$key]; } } if ($MESSAGE_TYPE == "NEW") { $arFields["FORUM_ID"] = $FID; $arFields["USER_START_ID"] = $AUTHOR_ID; $arFields["USER_START_NAME"] = $arFieldsG["AUTHOR_NAME"]; $arFields["LAST_POSTER_NAME"] = $arFieldsG["AUTHOR_NAME"]; $arFields["APPROVED"] = $arFieldsG["APPROVED"]; $arFields["OWNER_ID"] = $arFieldsG["OWNER_ID"]; $arFields["SOCNET_GROUP_ID"] = $arFieldsG["SOCNET_GROUP_ID"]; if (is_set($arFieldsG, "TOPIC_XML_ID")) { $arFields["XML_ID"] = $arFieldsG["TOPIC_XML_ID"]; } $TID = CForumTopic::Add($arFields); if (IntVal($TID) <= 0) { $aMsg[] = array("id" => "TOPIC_ID", "text" => GetMessage("ADDMESS_ERROR_ADD_TOPIC") . "."); } } else { if (is_set($arFieldsG, "AUTHOR_NAME")) { if ($arTopic["LAST_MESSAGE_ID"] == $MID && $arMessage["LAST_POSTER_NAME"] != $arFieldsG["AUTHOR_NAME"]) { $arFields["LAST_POSTER_NAME"] = $arFieldsG["AUTHOR_NAME"]; } if ($arTopic["ABS_LAST_MESSAGE_ID"] == $MID && $arMessage["ABS_LAST_POSTER_NAME"] != $arFieldsG["AUTHOR_NAME"]) { $arFields["ABS_LAST_POSTER_NAME"] = $arFieldsG["AUTHOR_NAME"]; } if ($arTopic["USER_START_NAME"] == $arMessage["USER_START_NAME"] && $arTopic["USER_START_NAME"] != $arFieldsG["AUTHOR_NAME"]) { $arFields["USER_START_NAME"] = $arFieldsG["AUTHOR_NAME"]; } } if (!empty($arFields)) { $TID1 = CForumTopic::Update($TID, $arFields); if (intval($TID1) <= 0) { $aMsg[] = array("id" => "TOPIC_ID", "text" => GetMessage("ADDMESS_ERROR_EDIT_TOPIC") . "."); } else { foreach ($arFields as $key => $val) { if ($arFields[$key] != $arTopic[$key]) { $res_log[$key] = $arFields[$key]; $res_log["before" . $key] = $arTopic[$key]; } } if (!empty($res_log)) { $arTopic = CForumTopic::GetByID($TID); $res_log['FORUM_ID'] = $arTopic['FORUM_ID']; CForumEventLog::Log("topic", "edit", $TID, serialize($res_log)); } } if (is_set($arFieldsG, "AUTHOR_NAME") && $arForum["LAST_MESSAGE_ID"] == $MID && $arForum["LAST_POSTER_NAME"] != $arFieldsG["AUTHOR_NAME"]) { $arFieldsForum = array("LAST_POSTER_NAME" => $arFieldsG["AUTHOR_NAME"]); if ($arForum["ABS_LAST_MESSAGE_ID"] == $MID) { $arFieldsForum["LAST_POSTER_NAME"] = $arFieldsG["AUTHOR_NAME"]; } CForumNew::Update($arForum["ID"], $arFieldsForum); } } } } } //*************************/Add/edit topic ************************************************************************* //************************* Add/edit message *********************************************************************** if (empty($aMsg)) { $arFields = array("POST_MESSAGE" => $arFieldsG["POST_MESSAGE"], "USE_SMILES" => $arFieldsG["USE_SMILES"] == "Y" ? "Y" : "N", "APPROVED" => $arFieldsG["APPROVED"]); if (is_set($arFieldsG, "ATTACH_IMG")) { $arFields["ATTACH_IMG"] = $arFieldsG["ATTACH_IMG"]; } elseif (is_set($arFieldsG, "FILES")) { $arFields["FILES"] = $arFieldsG["FILES"]; } if (is_set($arFieldsG, "PARAM1")) { $arFields["PARAM1"] = $arFieldsG["PARAM1"]; } if (is_set($arFieldsG, "PARAM2")) { $arFields["PARAM2"] = $arFieldsG["PARAM2"]; } /* elseif ($MESSAGE_TYPE != "NEW") { $db_res = CForumMessage::GetList(array(), array("TOPIC_ID" => $TID, "NEW_TOPIC" => "Y")); if ($db_res && $res = $db_res->Fetch()) $res["PARAM2"] = $res["PARAM2"]; }*/ $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("FORUM_MESSAGE", $arFields); if ($MESSAGE_TYPE == "NEW" || $MESSAGE_TYPE == "REPLY") { $arFields["AUTHOR_NAME"] = $arFieldsG["AUTHOR_NAME"]; $arFields["AUTHOR_EMAIL"] = $arFieldsG["AUTHOR_EMAIL"]; $arFields["AUTHOR_ID"] = $AUTHOR_ID; $arFields["FORUM_ID"] = $FID; $arFields["TOPIC_ID"] = $TID; $AUTHOR_IP = ForumGetRealIP(); $AUTHOR_IP_tmp = $AUTHOR_IP; $AUTHOR_REAL_IP = $_SERVER['REMOTE_ADDR']; if (COption::GetOptionString("forum", "FORUM_GETHOSTBYADDR", "N") == "Y") { $AUTHOR_IP = @gethostbyaddr($AUTHOR_IP); $AUTHOR_REAL_IP = $AUTHOR_IP_tmp == $AUTHOR_REAL_IP ? $AUTHOR_IP : @gethostbyaddr($AUTHOR_REAL_IP); } $arFields["AUTHOR_IP"] = $AUTHOR_IP !== False ? $AUTHOR_IP : "<no address>"; $arFields["AUTHOR_REAL_IP"] = $AUTHOR_REAL_IP !== False ? $AUTHOR_REAL_IP : "<no address>"; $arFields["NEW_TOPIC"] = $MESSAGE_TYPE == "NEW" ? "Y" : "N"; $arFields["GUEST_ID"] = $_SESSION["SESS_GUEST_ID"]; $MID = CForumMessage::Add($arFields, false); if (intVal($MID) <= 0) { $str = $APPLICATION->GetException(); if ($str && $str->GetString()) { $aMsg[] = array("id" => "MESSAGE_ID", "text" => $str->GetString()); } else { $aMsg[] = array("id" => "MESSAGE_ID", "text" => GetMessage("ADDMESS_ERROR_ADD_MESSAGE") . "."); } if ($MESSAGE_TYPE == "NEW") { CForumTopic::Delete($TID); $TID = 0; } } } else { if (empty($AUTHOR_ID)) { if (is_set($arFieldsG, "AUTHOR_NAME")) { $arFields["AUTHOR_NAME"] = $arFieldsG["AUTHOR_NAME"]; } if (is_set($arFieldsG, "AUTHOR_EMAIL")) { $arFields["AUTHOR_EMAIL"] = $arFieldsG["AUTHOR_EMAIL"]; } } if ($bAddEditNote) { $arFields["EDITOR_NAME"] = $arFieldsG["EDITOR_NAME"]; $arFields["EDITOR_EMAIL"] = $arFieldsG["EDITOR_EMAIL"]; $arFields["EDIT_REASON"] = $arFieldsG["EDIT_REASON"]; $arFields["EDIT_DATE"] = ""; if ($GLOBALS["USER"]->IsAuthorized()) { $arFields["EDITOR_ID"] = $GLOBALS["USER"]->GetID(); } } $MID1 = CForumMessage::Update($MID, $arFields); if (IntVal($MID1) <= 0) { $ex = $GLOBALS['APPLICATION']->GetException(); if ($ex) { $aMsg[] = array("id" => "MESSAGE_ID", "text" => $ex->GetString()); } else { $aMsg[] = array("id" => "MESSAGE_ID", "text" => GetMessage("ADDMESS_ERROR_EDIT_MESSAGE") . "."); } } elseif ($AUTHOR_ID == $GLOBALS["USER"]->GetId() && COption::GetOptionString("forum", "LOGS", "Q") < "U") { } else { $res_log = array(); foreach ($arFields as $key => $val) { if ($arFields[$key] != $arMessage[$key]) { if ($key == "FILES" || $key == "ATTACH_IMG") { $res_log[$key] = GetMessage("F_ATTACH_IS_MODIFIED"); continue; } $res_log["BeforeMessage"] = $arMessage[$key]; $res_log["AfterMessage"] = $arFields[$key]; } } if (!empty($res_log)) { $arMessage = CForumMessage::GetByID($MID); $TID = $arMessage['TOPIC_ID']; $res_log['FORUM_ID'] = $arMessage['FORUM_ID']; $arTopic = CForumTopic::GetByID($TID); $res_log['TITLE'] = $arTopic['TITLE']; $res_log['TOPIC_ID'] = $TID; $res_log = serialize($res_log); CForumEventLog::Log("message", "edit", $MID, $res_log); } } } } //*************************/Add/edit message *********************************************************************** if (empty($aMsg)) { $DB->Commit(); } else { $DB->Rollback(); } if (empty($aMsg) && CModule::IncludeModule("statistic")) { $F_EVENT1 = $arForum["EVENT1"]; $F_EVENT2 = $arForum["EVENT2"]; $F_EVENT3 = $arForum["EVENT3"]; if (empty($F_EVENT3)) { $arForumSite_tmp = CForumNew::GetSites($FID); if (defined("ADMIN_SECTION") && ADMIN_SECTION === true) { $arForumSiteCode_tmp = array_keys($arForumSite_tmp); $F_EVENT3 = CForumNew::PreparePath2Message(empty($arForumSite_tmp[$arForumSiteCode_tmp[0]]) ? '' : $arForumSite_tmp[$arForumSiteCode_tmp[0]], array("FORUM_ID" => $FID, "TOPIC_ID" => $TID, "MESSAGE_ID" => $MID)); } else { $F_EVENT3 = CForumNew::PreparePath2Message(empty($arForumSite_tmp[SITE_ID]) ? '' : $arForumSite_tmp[SITE_ID], array("FORUM_ID" => $FID, "TOPIC_ID" => $TID, "MESSAGE_ID" => $MID)); } } CStatistics::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3); } if (empty($aMsg)) { $arNote = array(); if ($MESSAGE_TYPE == "NEW" || $MESSAGE_TYPE == "REPLY") { CForumMessage::SendMailMessage($MID, array(), false, "NEW_FORUM_MESSAGE"); $arNote = array("id" => $MESSAGE_TYPE, "text" => GetMessage("ADDMESS_SUCCESS_ADD") . ". \n"); } else { CForumMessage::SendMailMessage($MID, array(), false, "EDIT_FORUM_MESSAGE"); $arNote = array("id" => "EDIT", "text" => GetMessage("ADDMESS_SUCCESS_EDIT") . ". \n"); } if ($arFieldsG["APPROVED"] != "Y") { $arNote["id"] .= "_NOT_APPROVED"; $arNote["text"] .= GetMessage("ADDMESS_AFTER_MODERATE") . ". \n"; } if (is_array($strOKMessage)) { $strOKMessage[] = $arNote; } else { $strOKMessage .= $arNote["text"]; } return $MID; } $e = new CAdminException($aMsg); $strErrorMessage = $e->GetString(); return false; }
/** * <p>Удаляет указанное <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#event">событие</a>.</p> * * * @param int $event_id ID удаляемого события. </htm * * @return bool <p>Метод возвращает "true" в случае успешного удаления и "false" в случае * неудачи.</p> * * <h4>Example</h4> * <pre> * <? * $event_id = 1; * if (<b>CStatEvent::Delete</b>($event_id)) * echo "Событие #".$event_id." успешно удалено."; * ?> * </pre> * * * <h4>See Also</h4> * <ul><li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#event">Термин "Событие"</a> * </li></ul> <a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/cstatevent/delete.php * @author Bitrix */ public static function Delete($ID) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $ID = intval($ID); $strSql = "\n\t\t\tSELECT\n\t\t\t\tL.EVENT_ID,\n\t\t\t\tL.MONEY,\n\t\t\t\tL.SESSION_ID,\n\t\t\t\tL.GUEST_ID,\n\t\t\t\tL.ADV_ID,\n\t\t\t\tL.ADV_BACK,\n\t\t\t\tL.COUNTRY_ID,\n\t\t\t\tL.CHARGEBACK,\n\t\t\t\tL.SITE_ID,\n\t\t\t\t" . $DB->DateToCharFunction("L.DATE_ENTER", "SHORT") . "\tDATE_ENTER,\n\t\t\t\t" . $DB->DateToCharFunction("L.DATE_ENTER", "FULL") . "\tDATE_ENTER_FULL\n\t\t\tFROM\n\t\t\t\tb_stat_event_list L,\n\t\t\t\tb_stat_event E\n\t\t\tWHERE\n\t\t\t\tL.ID = '{$ID}'\n\t\t\tand E.ID = L.EVENT_ID\n\t\t\t"; $a = $DB->Query($strSql, false, $err_mess . __LINE__); if ($ar = $a->Fetch()) { // уменьшаем счетчик у страны CStatistics::UpdateCountry($ar["COUNTRY_ID"], array("C_EVENTS" => 1), $ar["DATE_ENTER"], "SHORT", "-"); // уменьшаем счетчик по дням $arFields = array("COUNTER" => "COUNTER-1", "MONEY" => "MONEY - " . doubleval($ar["MONEY"])); $rows = $DB->Update("b_stat_event_day", $arFields, "WHERE EVENT_ID='" . intval($ar["EVENT_ID"]) . "' and DATE_STAT = FROM_UNIXTIME('" . MkDateTime(ConvertDateTime($ar["DATE_ENTER"], "D.M.Y"), "d.m.Y") . "')", $err_mess . __LINE__); // если уже была свертка то if (intval($rows) <= 0) { // уменьшим счетчик на типе события $arFields = array("COUNTER" => "COUNTER-1", "MONEY" => "MONEY - " . doubleval($ar["MONEY"])); $DB->Update("b_stat_event", $arFields, "WHERE ID='" . intval($ar["EVENT_ID"]) . "'", $err_mess . __LINE__); } // если в связке есть нулевые значения то ее можно удалить $strSql = "DELETE FROM b_stat_event_day WHERE COUNTER=0"; $DB->Query($strSql, false, $err_mess . __LINE__); // чистим сессию $arFields = array("C_EVENTS" => "C_EVENTS-1"); $DB->Update("b_stat_session", $arFields, "WHERE ID='" . intval($ar["SESSION_ID"]) . "'", $err_mess . __LINE__, false, false, false); // чистим гостя $DB->Update("b_stat_guest", $arFields, "WHERE ID='" . intval($ar["GUEST_ID"]) . "'", $err_mess . __LINE__, false, false, false); if (intval($ar["ADV_ID"]) > 0) { // изменяем доход рекламной кампании if (doubleval($ar["MONEY"]) != 0) { $sign = $ar["CHARGEBACK"] == "Y" ? "+" : "-"; $arFields = array("REVENUE" => "REVENUE " . $sign . " " . doubleval($ar["MONEY"])); $DB->Update("b_stat_adv", $arFields, "WHERE ID='" . intval($ar["ADV_ID"]) . "'", $err_mess . __LINE__, false, false, false); } // чистим связку с рекламной кампанией if ($ar["ADV_BACK"] == "Y") { $arFields = array("COUNTER_BACK" => "COUNTER_BACK - 1", "MONEY_BACK" => "MONEY_BACK - " . doubleval($ar["MONEY"])); } else { $arFields = array("COUNTER" => "COUNTER - 1", "MONEY" => "MONEY - " . doubleval($ar["MONEY"])); } $DB->Update("b_stat_adv_event", $arFields, "WHERE ADV_ID='" . intval($ar["ADV_ID"]) . "' and EVENT_ID='" . $ar["EVENT_ID"] . "'", $err_mess . __LINE__); // чистим связку с рекламной кампанией по дням if ($ar["ADV_BACK"] == "Y") { $arFields = array("COUNTER_BACK" => "COUNTER_BACK - 1", "MONEY_BACK" => "MONEY_BACK - " . doubleval($ar["MONEY"])); } else { $arFields = array("COUNTER" => "COUNTER - 1", "MONEY" => "MONEY - " . doubleval($ar["MONEY"])); } $DB->Update("b_stat_adv_event_day", $arFields, "WHERE ADV_ID='" . intval($ar["ADV_ID"]) . "' and EVENT_ID='" . $ar["EVENT_ID"] . "' and DATE_STAT = FROM_UNIXTIME('" . MkDateTime(ConvertDateTime($ar["DATE_ENTER"], "D.M.Y"), "d.m.Y") . "')", $err_mess . __LINE__, false, false, false); } // если в связках остались нулевые значения то их можно удалить $strSql = "DELETE FROM b_stat_adv_event WHERE COUNTER<=0 and COUNTER_BACK<=0"; $DB->Query($strSql, false, $err_mess . __LINE__); $strSql = "DELETE FROM b_stat_adv_event_day WHERE COUNTER<=0 and COUNTER_BACK<=0"; $DB->Query($strSql, false, $err_mess . __LINE__); // уменьшаем счетчик по дням $arFields = array("C_EVENTS" => "C_EVENTS-1"); $DB->Update("b_stat_day", $arFields, "WHERE DATE_STAT = FROM_UNIXTIME('" . MkDateTime(ConvertDateTime($ar["DATE_ENTER"], "D.M.Y"), "d.m.Y") . "')", $err_mess . __LINE__); // уменьшаем счетчик траффика CTraffic::DecParam(array("EVENT" => 1), array(), false, $ar["DATE_ENTER_FULL"]); if (strlen($ar["SITE_ID"]) > 0) { $arFields = array("C_EVENTS" => "C_EVENTS-1"); $DB->Update("b_stat_day_site", $arFields, "WHERE SITE_ID = '" . $DB->ForSql($ar["SITE_ID"], 2) . "' and DATE_STAT = FROM_UNIXTIME('" . MkDateTime(ConvertDateTime($ar["DATE_ENTER"], "D.M.Y"), "d.m.Y") . "')", $err_mess . __LINE__); // уменьшаем счетчик траффика CTraffic::DecParam(array(), array("EVENT" => 1), $ar["SITE_ID"], $ar["DATE_ENTER_FULL"]); } $strSql = "DELETE FROM b_stat_event_list WHERE ID='{$ID}'"; $DB->Query($strSql, false, $err_mess . __LINE__); return true; } return false; }
public static function GetListUniqueCheck($arFilter = array(), $LIMIT = 1) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "EVENT3": $arSqlSearch[] = "E.EVENT3 = '" . $DB->ForSql($val, 255) . "'"; break; case "DATE": if (CheckDateTime($val)) { $arSqlSearch[] = "E.DATE_ENTER=" . $DB->CharToDateFunction($val); } break; case "EVENT_ID": case "SESSION_ID": case "GUEST_ID": case "ADV_ID": case "COUNTRY_ID": $arSqlSearch[] = "E." . $key . "='" . $DB->ForSql($val) . "'"; break; case "ADV_BACK": $arSqlSearch[] = $val == "Y" ? "E.ADV_BACK='Y'" : "E.ADV_BACK='N'"; break; case "SITE_ID": $arSqlSearch[] = "E.SITE_ID = '" . $DB->ForSql($val, 2) . "'"; break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT /*TOP*/\n\t\t\t\tE.ID\n\t\t\tFROM\n\t\t\t\tb_stat_event_list E\n\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t"; $res = $DB->Query(CStatistics::DBTopSql($strSql, $LIMIT), false, $err_mess . __LINE__); return $res; }
/** * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителей</a>. Число выводимых строк определяется в поле <b>Максимальное кол-во показываемых записей в таблицах</b> в <a href="http://dev.1c-bitrix.ru/user_help/statistic/settings.php" >настройках модуля</a> Веб-аналитика.</p> * * * @param string &$by = "s_id" Поле для сортировки. Возможные значения: <ul> <li> <b>s_id</b> - ID хита; </li> * <li> <b>s_site_id</b> - ID сайта; </li> <li> <b>s_session_id</b> - ID <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#session">сессии</a>; </li> <li> <b>s_date_hit</b> - * время хита; </li> <li> <b>s_user_id</b> - ID <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user">пользователя</a> под которым * был авторизован посетитель (в момент хита или до того); </li> <li> * <b>s_guest_id</b> - ID <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#guest">посетителя</a>; * </li> <li> <b>s_ip</b> - <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#ip">IP адрес</a> * посетителя; </li> <li> <b>s_url</b> - страница хита; </li> <li> <b>s_country_id</b> - ID * страны посетителя. </li> </ul> * * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul> * * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве * допустимы следующие ключи: <ul> <li> <b>ID</b>* - ID хита; </li> <li> <b>ID_EXACT_MATCH</b> - * если значение равно "N", то при фильтрации по <b>ID</b> будет искаться * вхождение; </li> <li> <b>GUEST_ID</b>* - ID посетителя; </li> <li> <b>GUEST_ID_EXACT_MATCH</b> - * если значение равно "N", то при фильтрации по <b>GUEST_ID</b> будет * искаться вхождение; </li> <li> <b>NEW_GUEST</b> - флаг "новый посетитель", * возможные значения: <ul> <li> <b>Y</b> - посетитель впервые на портале; </li> * <li> <b>N</b> - посетитель уже посещал ранее портал. </li> </ul> </li> <li> * <b>SESSION_ID</b>* - ID сессии; </li> <li> <b>SESSION_ID_EXACT_MATCH</b> - если значение равно * "N", то при фильтрации по <b>SESSION_ID</b> будет искаться вхождение; </li> <li> * <b>STOP_LIST_ID</b>* - ID записи <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#stop_list">стоп-листа</a> под которую * попал посетитель (если это имело место быть); </li> <li> * <b>STOP_LIST_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>STOP_LIST_ID</b> будет искаться вхождение; </li> <li> <b>URL</b>* - страница хита; * </li> <li> <b>URL_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>URL</b> будет искаться точное совпадение; </li> <li> <b>URL_404</b> - была ли <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a> на странице хита <ul> * <li> <b>Y</b> - была; </li> <li> <b>N</b> - не было. </li> </ul> </li> <li> <b>USER</b>* - ID, логин, * имя, фамилия пользователя под которым был авторизован посетитель * в момент хита или до него; </li> <li> <b>USER_EXACT_MATCH</b> - если значение равно * "Y", то при фильтрации по <b>USER</b> будет искаться точное совпадение; * </li> <li> <b>REGISTERED</b> - флаг "был ли авторизован посетитель в момент * хита или до этого", возможные значения: <ul> <li> <b>Y</b> - был; </li> <li> <b>N</b> * - не был. </li> </ul> </li> <li> <b>DATE_1</b> - начальное значение интервала даты * хита; </li> <li> <b>DATE_2</b> - конечное значение интервала даты хита; </li> <li> * <b>IP</b>* - IP адрес посетителя в момент хита; </li> <li> <b>IP_EXACT_MATCH</b> - если * значение равно "Y", то при фильтрации по <b>IP</b> будет искаться * точное совпадение; </li> <li> <b>USER_AGENT</b>* - <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#user_agent">UserAgent</a> посетителя в * момент хита; </li> <li> <b>USER_AGENT_EXACT_MATCH</b> - если значение равно "Y", то при * фильтрации по <b>USER_AGENT</b> будет искаться точное совпадение; </li> <li> * <b>COUNTRY_ID</b>* - ID страны посетителя в момент хита; </li> <li> * <b>COUNTRY_ID_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>COUNTRY_ID</b> будет искаться точное совпадение; </li> <li> <b>COUNTRY</b>* - * название страны; </li> <li> <b>COUNTRY_EXACT_MATCH</b> - если значение равно "Y", то * при фильтрации по <b>COUNTRY</b> будет искаться точное совпадение; </li> * <li> <b>COOKIE</b>* - содержимое <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#cookie">Cookie</a> в момент хита; </li> <li> * <b>COOKIE_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>COOKIE</b> будет искаться точное совпадение; </li> <li> <b>STOP</b> - <ul> <li> <b>Y</b> * - был; </li> <li> <b>N</b> - не был. </li> </ul> </li> <li> <b>SITE_ID</b>* - ID сайта; </li> <li> * <b>SITE_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>SITE_ID</b> будет искаться вхождение. </li> </ul> <br> * - допускается <a * href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a> * * @param bool &$is_filtered Флаг отфильтрованности списка хитов. Если значение равно "true", то * список был отфильтрован. * * @return CDBResult * * <h4>Example</h4> * <pre> * <? * // выберем хиты сессии #1056 * $arFilter = array( * "SESSION_ID" => 1056 * ); * * // получим список записей * $rs = <b>CHit::GetList</b>( * ($by = "s_id"), * ($order = "desc"), * $arFilter, * $is_filtered * ); * * // выведем все записи * while ($ar = $rs->Fetch()) * { * echo "<pre>"; print_r($ar); echo "</pre>"; * } * ?> * </pre> * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">Термин "Хит"</a> </li> </ul> <a * name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/chit/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered) { $err_mess = "File: " . __FILE__ . "<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": case "GUEST_ID": case "SESSION_ID": case "STOP_LIST_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match); break; case "URL": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.URL", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "URL_404": case "NEW_GUEST": $arSqlSearch[] = $val == "Y" ? "H." . $key . "='Y'" : "H." . $key . "='N'"; break; case "REGISTERED": $arSqlSearch[] = $val == "Y" ? "H.USER_ID>0" : "(H.USER_ID<=0 or H.USER_ID is null)"; break; case "DATE_1": if (CheckDateTime($val)) { $arSqlSearch[] = "H.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE_2": if (CheckDateTime($val)) { $arSqlSearch[] = "H.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); } break; case "IP": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.IP", $val, $match, array(".")); break; case "USER_AGENT": case "COUNTRY_ID": case "CITY_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H." . $key, $val, $match); break; case "COOKIE": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("H.COOKIES", $val, $match); break; case "USER": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = $DB->IsNull("H.USER_ID", "0") . ">0"; $arSqlSearch[] = GetFilterQuery("H.USER_ID,A.LOGIN,A.LAST_NAME,A.NAME", $val, $match); $select = ", A.LOGIN, " . $DB->Concat($DB->IsNull("A.NAME", "''"), "' '", $DB->IsNull("A.LAST_NAME", "''")) . " USER_NAME"; $from1 = "LEFT JOIN b_user A ON (A.ID = H.USER_ID)"; break; case "COUNTRY": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("C.NAME", $val, $match); $from2 = "INNER JOIN b_stat_country C ON (C.ID = H.COUNTRY_ID)"; break; case "REGION": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("CITY.REGION", $val, $match); break; case "CITY": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("CITY.NAME", $val, $match); break; case "STOP": $arSqlSearch[] = $val == "Y" ? "H.STOP_LIST_ID>0" : "(H.STOP_LIST_ID<=0 or H.STOP_LIST_ID is null)"; break; case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("H.SITE_ID", $val, $match); break; } } } if ($by == "s_id") { $strSqlOrder = "ORDER BY H.ID"; } elseif ($by == "s_site_id") { $strSqlOrder = "ORDER BY H.SITE_ID"; } elseif ($by == "s_session_id") { $strSqlOrder = "ORDER BY H.SESSION_ID"; } elseif ($by == "s_date_hit") { $strSqlOrder = "ORDER BY H.DATE_HIT"; } elseif ($by == "s_user_id") { $strSqlOrder = "ORDER BY H.USER_ID"; } elseif ($by == "s_guest_id") { $strSqlOrder = "ORDER BY H.GUEST_ID"; } elseif ($by == "s_ip") { $strSqlOrder = "ORDER BY H.IP"; } elseif ($by == "s_url") { $strSqlOrder = "ORDER BY H.URL "; } elseif ($by == "s_country_id") { $strSqlOrder = "ORDER BY H.COUNTRY_ID "; } elseif ($by == "s_region_name") { $strSqlOrder = "ORDER BY CITY.REGION "; } elseif ($by == "s_city_id") { $strSqlOrder = "ORDER BY H.CITY_ID "; } else { $by = "s_id"; $strSqlOrder = "ORDER BY H.ID"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $strSql = "\n\t\t\tSELECT /*TOP*/\n\t\t\t\tH.ID,\n\t\t\t\tH.SESSION_ID,\n\t\t\t\tH.GUEST_ID,\n\t\t\t\tH.NEW_GUEST,\n\t\t\t\tH.USER_ID,\n\t\t\t\tH.USER_AUTH,\n\t\t\t\tH.URL,\n\t\t\t\tH.URL_404,\n\t\t\t\tH.URL_FROM,\n\t\t\t\tH.IP,\n\t\t\t\tH.METHOD,\n\t\t\t\tH.COOKIES,\n\t\t\t\tH.USER_AGENT,\n\t\t\t\tH.STOP_LIST_ID,\n\t\t\t\tH.COUNTRY_ID,\n\t\t\t\tH.CITY_ID,\n\t\t\t\tCITY.REGION REGION_NAME,\n\t\t\t\tCITY.NAME CITY_NAME,\n\t\t\t\tH.SITE_ID,\n\t\t\t\t" . $DB->DateToCharFunction("H.DATE_HIT") . " DATE_HIT\n\t\t\t\t" . $select . "\n\t\t\tFROM\n\t\t\t\tb_stat_hit H\n\t\t\t\tLEFT JOIN b_stat_city CITY ON (CITY.ID = H.CITY_ID)\n\t\t\t" . $from1 . "\n\t\t\t" . $from2 . "\n\t\t\tWHERE\n\t\t\t" . $strSqlSearch . "\n\t\t\t" . $strSqlOrder . "\n\t\t"; $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch); return $res; }
/** * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#phrase">поисковых фраз</a> с возможностью группировки по поисковое фразе или <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search">поисковой системе</a>.</p> * * * * * @param string &$by = "s_id" Поле для сортировки. В зависимости от группировки списка, набор * доступных значений данной переменной может быть различным. <ul> * <li>при группировке по поисковой фразе (<i>filter</i>["<b>GROUP</b>"]="P"): <ul> <li> * <b>s_phrase</b> - поисковая фраза; </li> <li> <b>s_quantity</b> - количество заходов с * той или иной поисковой фразой. </li> </ul> </li> <li>при группировке по * поисковой системе (<i>filter</i>["<b>GROUP</b>"]="S"): <ul> <li> <b>s_name</b> - поисковая * система; </li> <li> <b>s_quantity</b> - количество заходов с данной поисковой * системы; </li> <li> <b>s_average_hits</b> - среднее количество <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a> производимое * посетителями заходящим с той или иной поисковой системы. </li> </ul> * </li> <li>когда группировка не установлена: <ul> <li> <b>s_id</b> - ID записи; </li> * <li> <b>s_counter</b> - счетчик; </li> <li> <b>s_site_id</b> - ID сайта на который пришли; * </li> <li> <b>s_phrase</b> - поисковая фраза; </li> <li> <b>s_searcher_id</b> - ID поисковой * системы; </li> <li> <b>s_referer_id</b> - ID записи из таблицы <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#referer">ссылающихся сайтов * (страниц)</a>; </li> <li> <b>s_date_hit</b> - дата захода; </li> <li> <b>s_url_to</b> - * страница на которую пришли; </li> <li> <b>s_session_id</b> - ID <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#session">сессии</a>. </li> </ul> </li> </ul> * * * * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul> * * * * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве * допустимы следующие ключи: <ul> <li> <b>ID</b> - ID записи; </li> <li> * <b>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b> * будет искаться вхождение; </li> <li> <b>SESSION_ID</b> - ID сессии; </li> <li> * <b>SESSION_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>SESSION_ID</b> будет искаться вхождение; </li> <li> <b>SEARCHER_ID</b> - ID поисковой * системы; </li> <li> <b>SEARCHER_ID_EXACT_MATCH</b> - если значение равно "N", то при * фильтрации по <b>SEARCHER_ID</b> будет искаться вхождение; </li> <li> * <b>REFERER_ID</b> - ID записи из таблицы ссылающихся сайтов (страниц); </li> <li> * <b>REFERER_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>REFERER_ID</b> будет искаться вхождение; </li> <li> <b>SEARCHER</b>* - название * поисковой системы; </li> <li> <b>SEARCHER_EXACT_MATCH</b> - если значение равно "Y", * то при фильтрации по <b>SEARCHER</b> будет искаться точное совпадение; * </li> <li> <b>DATE1</b> - начальное значение интервала для поля "дата"; </li> <li> * <b>DATE2</b> - конечно значение интервала для поля "дата"; </li> <li> <b>PHRASE</b>* * - поисковая фраза; </li> <li> <b>PHRASE_EXACT_MATCH</b> - если значение равно "Y", то * при фильтрации по <b>PHRASE</b> будет искаться точное совпадение; </li> <li> * <b>TO</b>* - страница на которую пришли; </li> <li> <b>TO_EXACT_MATCH</b> - если * значение равно "Y", то при фильтрации по <b>TO</b> будет искаться * точное совпадение; </li> <li> <b>TO_404</b> - была ли <a * href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a> на странице на * которую пришли, возможные значения: <ul> <li> <b>Y</b> - была; </li> <li> <b>N</b> - * не была. </li> </ul> </li> <li> <b>SITE_ID</b> - ID сайта, на который пришли; </li> <li> * <b>GROUP</b> - группировка результирующего списка, возможные значения: * <ul> <li> <b>P</b> - группировка по поисковой фразе; </li> <li> <b>S</b> - * группировка по поисковой системе. </li> </ul> </li> </ul> * - допускается <a * href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a> * * * * @param bool &$is_filtered Флаг отфильтрованности результирующего списка. Если значение * равно "true", то список был отфильтрован. * * * * @param int &$total Суммарное количество поисковых фраз. Принимает значение только * при установленной группировке. * * * * @param string &$group_by Группировка списка поисковых фраз. Возможные значения: <ul> <li> <b>P</b> * - группировка по поисковой фразе; </li> <li> <b>S</b> - группировка по * поисковой системе. </li> </ul> * * * * @param int &$max Количество заходов по самой популярной поисковой фразе. * Принимает значение только при установленной группировке. * * * * @return CDBResult * * * <h4>Example</h4> * <pre> * <?<br>// отфильтруем только те поисковые фразы<br>// которые искали на сайте с помощью внутреннего поиска<br>$arFilter = array(<br> "SEARCHER_ID" => 1<br> );<br><br>// получим список записей<br>$rs = <b>CPhrase::GetList</b>(<br> ($by = "s_id"), <br> ($order = "desc"), <br> $arFilter, <br> $is_filtered,<br> $total,<br> $group_by,<br> $max<br> );<br><br>// выведем все записи<br>while ($ar = $rs->Fetch())<br>{<br> echo "<pre>"; print_r($ar); echo "</pre>"; <br>}<br>?><br> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#phrase">Термин "Поисковая * фраза"</a> </li> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#search">Термин * "Поисковая система"</a> </li> </ul><a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/cphrase/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter=Array(), &$is_filtered, &$total, &$grby, &$max) { $err_mess = "File: ".__FILE__."<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); $group = false; $s = "S.NAME as SEARCHER_NAME, S.ID as SEARCHER_ID"; $strSqlGroup = "GROUP BY S.ID, S.NAME, S.PHRASES_HITS, S.PHRASES"; $arSqlSearch = Array("PH.SEARCHER_ID <> 1"); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if(is_array($val)) { if(count($val) <= 0) continue; } else { if( (strlen($val) <= 0) || ($val === "NOT_REF") ) continue; } $match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch($key) { case "ID": case "SESSION_ID": case "SEARCHER_ID": case "REFERER_ID": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("PH.".$key,$val,$match); break; case "SEARCHER_ID_STR": $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("S.ID",$val,$match); break; case "SEARCHER": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("S.NAME", $val, $match); break; case "DATE1": if (CheckDateTime($val)) $arSqlSearch[] = "PH.DATE_HIT >= ".$DB->CharToDateFunction($val, "SHORT"); break; case "DATE2": if (CheckDateTime($val)) $arSqlSearch[] = "PH.DATE_HIT < ".CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); break; case "PHRASE": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; if($match == "N") $val = '"'.trim($val, '"').'"'; $arSqlSearch[] = GetFilterQuery("PH.PHRASE", $val, $match); break; case "TO": $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("PH.URL_TO",$val,$match,array("/","\\",".","?","#",":")); break; case "TO_404": $arSqlSearch[] = ($val=="Y") ? "PH.URL_TO_404='Y'" : "PH.URL_TO_404='N'"; break; case "GROUP": $group = true; if ($val=="P") { $find_group="P"; $strSqlGroup = " GROUP BY PH.PHRASE "; $s = " PH.PHRASE "; } else $find_group="S"; break; case "SITE_ID": if (is_array($val)) $val = implode(" | ", $val); $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("PH.SITE_ID", $val, $match); break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $grby = ($find_group=="P" || $find_group=="S") ? $find_group : ""; $strSqlOrder = ""; if (strlen($grby)<=0) { if ($by == "s_id") $strSqlOrder = "ORDER BY PH.ID"; elseif ($by == "s_site_id") $strSqlOrder = "ORDER BY PH.SITE_ID"; elseif ($by == "s_phrase") $strSqlOrder = "ORDER BY PH.PHRASE"; elseif ($by == "s_searcher_id") $strSqlOrder = "ORDER BY PH.SEARCHER_ID"; elseif ($by == "s_referer_id") $strSqlOrder = "ORDER BY PH.REFERER_ID"; elseif ($by == "s_date_hit") $strSqlOrder = "ORDER BY PH.DATE_HIT"; elseif ($by == "s_url_to") $strSqlOrder = "ORDER BY PH.URL_TO"; elseif ($by == "s_session_id") $strSqlOrder = "ORDER BY PH.SESSION_ID"; else { $by = "s_id"; $strSqlOrder = "ORDER BY PH.ID"; } if ($order!="asc") { $strSqlOrder .= " desc "; $order="desc"; } $strSql = " SELECT /*TOP*/ PH.ID, PH.PHRASE, PH.SESSION_ID, PH.SEARCHER_ID, PH.URL_TO, PH.URL_TO_404, PH.REFERER_ID, PH.SITE_ID, ".$DB->DateToCharFunction("PH.DATE_HIT")." DATE_HIT, S.NAME SEARCHER_NAME FROM b_stat_phrase_list PH INNER JOIN b_stat_searcher S ON (S.ID = PH.SEARCHER_ID) WHERE ".$strSqlSearch." ".$strSqlOrder." "; } elseif (IsFiltered($strSqlSearch) || $grby=="P") { if ($by == "s_phrase" && $grby=="P") $strSqlOrder = "ORDER BY PH.PHRASE"; elseif ($by == "s_searcher_id" && $grby=="S") $strSqlOrder = "ORDER BY PH.SEARCHER_ID"; elseif ($by == "s_quantity") $strSqlOrder = "ORDER BY QUANTITY"; else { $by = "s_quantity"; $strSqlOrder = "ORDER BY QUANTITY"; } if ($order!="asc") { $strSqlOrder .= " desc "; $order="desc"; } $strSql = " SELECT count(PH.ID) as COUNTER FROM b_stat_phrase_list PH, b_stat_searcher S WHERE ".$strSqlSearch." and S.ID = PH.SEARCHER_ID ".$strSqlGroup." "; $c = $DB->Query($strSql, false, $err_mess.__LINE__); $total = 0; $arrCount = array(); while ($cr = $c->Fetch()) { $total += intval($cr["COUNTER"]); $arrCount[] = intval($cr["COUNTER"]); } $max = (is_array($arrCount) && count($arrCount)>0) ? max($arrCount) : 0; if ($grby=="P") { $strSql = " SELECT /*TOP*/ $s, count(PH.ID) QUANTITY, (count(PH.ID)*100)/$total C_PERCENT FROM b_stat_phrase_list PH, b_stat_searcher S WHERE ".$strSqlSearch." and S.ID = PH.SEARCHER_ID ".$strSqlGroup." ".$strSqlOrder." "; } else { $strSql = " SELECT /*TOP*/ $s, count(PH.ID) QUANTITY, (count(PH.ID)*100)/$total C_PERCENT, S.PHRASES_HITS/S.PHRASES AVERAGE_HITS FROM b_stat_phrase_list PH, b_stat_searcher S WHERE ".$strSqlSearch." and S.ID = PH.SEARCHER_ID ".$strSqlGroup." ".$strSqlOrder." "; } } elseif ($grby=="S") { if ($by == "s_name") $strSqlOrder = "ORDER BY S.ID"; elseif ($by == "s_quantity") $strSqlOrder = "ORDER BY QUANTITY"; elseif ($by == "s_average_hits") $strSqlOrder = "ORDER BY AVERAGE_HITS"; else { $by = "s_quantity"; $strSqlOrder = "ORDER BY QUANTITY"; } if ($order!="asc") { $strSqlOrder .= " desc "; $order="desc"; } $strSql = "SELECT sum(S.PHRASES) TOTAL, max(S.PHRASES) MAX FROM b_stat_searcher S"; $c = $DB->Query($strSql, false, $err_mess.__LINE__); $cr = $c->Fetch(); $total = intval($cr["TOTAL"]); $max = intval($cr["MAX"]); $strSql = " SELECT /*TOP*/ S.ID SEARCHER_ID, S.NAME SEARCHER_NAME, S.PHRASES QUANTITY, S.PHRASES*100/$total C_PERCENT, S.PHRASES_HITS/S.PHRASES AVERAGE_HITS FROM b_stat_searcher S WHERE ".$DB->IsNull("S.PHRASES","0")." > 0 ".$strSqlOrder." "; } $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess.__LINE__); $is_filtered = (IsFiltered($strSqlSearch) || $group); return $res; }
function IncParam($arParam, $arParamSite = false, $SITE_ID = false, $DATE = false, $DATE_FORMAT = "FULL", $SIGN = "+") { $DB = CDatabase::GetModuleConnection('statistic'); if ($DATE == false) { $strWhere = "WHERE " . CStatistics::DBDateCompare("DATE_STAT"); $stmp = time(); } else { $stmp = MakeTimeStamp($DATE, $DATE_FORMAT == "SHORT" ? FORMAT_DATE : FORMAT_DATETIME); $strWhere = "WHERE " . CStatistics::DBDateCompare("DATE_STAT", ConvertTimeStamp($stmp)); } $HOUR = date("G", $stmp); // 0..23 $WEEKDAY = date("w", $stmp); // 0..6 $MONTH = date("n", $stmp); // 1..12 static $arKeys = array("HOUR", "WEEKDAY", "MONTH"); static $arPreKeys = array("HITS" => 0, "FAVORITES" => 0, "SESSIONS" => 0, "C_HOSTS" => 0, "GUESTS" => 0, "NEW_GUESTS" => 0); $rows = false; if (is_array($arParam) && count($arParam) > 0) { if (array_key_exists("TOTAL_HOSTS", $arParam)) { unset($arParam["TOTAL_HOSTS"]); } $arFields = array(); foreach ($arParam as $name => $value) { if (array_key_exists($name, $arPreKeys)) { $arFields[$name] = $name . " + " . intval($value); } else { foreach ($arKeys as $key) { $k = $key . "_" . $name . "_" . ${$key}; $arFields[$k] = "{$k} " . ($SIGN === "-" ? "-" : "+") . " " . intval($value); } } } if (count($arFields) > 0) { $rows = $DB->Update("b_stat_day", $arFields, $strWhere); } } if ($SITE_ID === false) { $SITE_ID = ""; if (defined("ADMIN_SECTION") && ADMIN_SECTION === true) { $SITE_ID = ""; } elseif (defined("SITE_ID")) { $SITE_ID = SITE_ID; } } if (strlen($SITE_ID) > 0 && is_array($arParamSite) && count($arParamSite) > 0) { $arFields = array(); foreach ($arParamSite as $name => $value) { if (array_key_exists($name, $arPreKeys)) { $arFields[$name] = $name . " + " . intval($value); } else { foreach ($arKeys as $key) { $k = $key . "_" . $name . "_" . ${$key}; $arFields[$k] = "{$k} " . ($SIGN === "-" ? "-" : "+") . " " . intval($value); } } } if (count($arFields) > 0) { $rows = $DB->Update("b_stat_day_site", $arFields, $strWhere . " AND SITE_ID='" . $DB->ForSql($SITE_ID, 2) . "'"); } } return $rows; }
/** * <p>Очищает собранные статистические данные.</p> * * * * * @param string $date = "" Дата в <a href="http://dev.1c-bitrix.ru/api_help/main/general/constants.php#format_date">формате * текущего сайта</a> (или языка) до которой (включительно) необходимо * очистить статистику. Если в данном параметре не указать дату, то * будут очищены все накопленные данные статистики. * * * * @param array &$errors Если параметр <i>date</i> не содержит даты, то в данном параметре будут * возвращены возможные ошибки которые могут возникнуть в процессе * полной очистки данных статистики. * * * * @return bool <p>Функция возвращает "true", в случае успешного выполнения и "false" - в * противном случае.</p> * * * <h4>Example</h4> * <pre> * <? * // дата в формате текущего сайта или языка * // до которой включительно будет очищена вся собранная статистика * $date = "31.12.2007"; * * // очищаем * <b>CStatistics::CleanUp</b>($date); * ?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://www.1c-bitrix.ru/user_help/statistic/settings.php">Настройки модуля * "Статистика"</a> </li> </ul><a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/cstatistics/cleanup.php * @author Bitrix */ public static function CleanUp($cleanup_date="", &$arErrors) { $err_mess = "File: ".__FILE__."<br>Line: "; $DB = CDatabase::GetModuleConnection('statistic'); if (strlen($cleanup_date)<=0) { $fname = $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/db/".strtolower($DB->type)."/clean_up.sql"; if (file_exists($fname)) { $arErrors = $DB->RunSQLBatch($fname); if (!$arErrors) { $fname = $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/install/db/".strtolower($DB->type)."/adv.sql"; $arErrors2 = $DB->RunSQLBatch($fname); if (!$arErrors2) return true; else { $arErrors = array_merge($arErrors, $arErrors2); return false; } } else return false; } } else { $stmp = MkDateTime(ConvertDateTime($cleanup_date,"D.M.Y"),"d.m.Y"); if ($stmp) { $arrTables = array( "b_stat_adv_guest" => "DATE_GUEST_HIT", "b_stat_adv_guest" => "DATE_HOST_HIT", "b_stat_adv_day" => "DATE_STAT", "b_stat_adv_event_day" => "DATE_STAT", "b_stat_day" => "DATE_STAT", "b_stat_day_site" => "DATE_STAT", "b_stat_event_day" => "DATE_STAT", "b_stat_event_list" => "DATE_ENTER", "b_stat_guest" => "LAST_DATE", "b_stat_hit" => "DATE_HIT", "b_stat_searcher_hit" => "DATE_HIT", "b_stat_phrase_list" => "DATE_HIT", "b_stat_referer" => "DATE_LAST", "b_stat_referer_list" => "DATE_HIT", "b_stat_searcher_day" => "DATE_STAT", "b_stat_session" => "DATE_LAST", "b_stat_page" => "DATE_STAT", "b_stat_country_day" => "DATE_STAT", "b_stat_path" => "DATE_STAT" ); reset($arrTables); while (list($table_name, $date_name) = each($arrTables)) { CStatistics::CleanUpTableByDate($cleanup_date, $table_name, $date_name); } } } return true; }
/** * <p>Возвращает список <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#referer">ссылающихся сайтов (страниц)</a>.</p> * * * * * @param string &$by = "s_id" Поле для сортировки. В зависимости от группировки списка, набор * доступных значений данной переменной может быть различным. <ul> * <li>при группировке по ссылающейся странице (<i>filter</i>["<b>GROUP</b>"]="U"): <ul> * <li> <b>s_url_from</b> - ссылающаяся страница; </li> <li> <b>s_quantity</b> - количество * заходов с ссылающейся страницы; </li> <li> <b>s_average_hits</b> - среднее * количество <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#hit">хитов</a>, * производимое посетителями заходящими с той или ссылающейся * страницы. </li> </ul> </li> <li>при группировке по ссылающемуся домену * (<i>filter</i>["<b>GROUP</b>"]="S"): <ul> <li> <b>s_url_from</b> - ссылающийся домен; </li> <li> * <b>s_quantity</b> - количество заходов с ссылающегося домена; </li> <li> * <b>s_average_hits</b> - среднее количество хитов, производимое * посетителями. </li> </ul> </li> <li>когда группировка не установлена: <ul> <li> * <b>s_id</b> - ID записи; </li> <li> <b>s_site_id</b> - ID сайта, на который пришли; </li> <li> * <b>s_url_from</b> - ссылающаяся страница (с которой пришли); </li> <li> <b>s_url_to</b> * - страница на которую пришли; </li> <li> <b>s_date_hit</b> - дата; </li> <li> * <b>s_session_id</b> - ID сессии. </li> </ul> </li> </ul> * * * * @param string &$order = "desc" Порядок сортировки. Возможные значения: <ul> <li> <b>asc</b> - по * возрастанию; </li> <li> <b>desc</b> - по убыванию. </li> </ul> * * * * @param array $filter = array() Массив для фильтрации результирующего списка. В массиве * допустимы следующие ключи: <ul> <li> <b>ID</b> - ID записи; </li> <li> * <b>ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по <b>ID</b> * будет искаться вхождение; </li> <li> <b>SESSION_ID</b> - ID сессии; </li> <li> * <b>SESSION_ID_EXACT_MATCH</b> - если значение равно "N", то при фильтрации по * <b>SESSION_ID</b> будет искаться вхождение; </li> <li> <b>DATE1</b> - начальное * значение интервала для поля "дата"; </li> <li> <b>DATE2</b> - конечное * значение интервала для поля "дата"; </li> <li> <b>FROM_PROTOCOL</b> - протокол * ссылающейся страницы; </li> <li> <b>FROM_PROTOCOL_EXACT_MATCH</b> - если значение * равно "Y", то при фильтрации по <b>FROM_PROTOCOL</b> будет искаться точное * совпадение; </li> <li> <b>FROM_DOMAIN</b> - домен ссылающейся страницы; </li> <li> * <b>FROM_DOMAIN_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>FROM_DOMAIN</b> будет искаться точное совпадение; </li> <li> <b>FROM_PAGE</b> - * ссылающаяся страница; </li> <li> <b>FROM_PAGE_EXACT_MATCH</b> - если значение равно * "Y", то при фильтрации по <b>FROM_PAGE</b> будет искаться точное * совпадение; </li> <li> <b>FROM</b> - протокол + домен + ссылающаяся страница; * </li> <li> <b>FROM_EXACT_MATCH</b> - если значение равно "Y", то при фильтрации по * <b>FROM</b> будет искаться точное совпадение; </li> <li> <b>TO</b>* - страница на * которую пришли; </li> <li> <b>TO_EXACT_MATCH</b> - если значение равно "Y", то при * фильтрации по <b>TO</b> будет искаться точное совпадение; </li> <li> * <b>TO_404</b> - была ли <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#404">404 ошибка</a> * на странице, на которую пришли, возможные значения: <ul> <li> <b>Y</b> - * была; </li> <li> <b>N</b> - не была. </li> </ul> </li> <li> <b>SITE_ID</b> - ID сайта на который * пришли; </li> <li> <b>GROUP</b> - группировка результирующего списка; * возможные значения: <ul> <li> <b>S</b> - группировка по ссылающемуся * домену (сайту); </li> <li> <b>U</b> - группировка по ссылающейся странице. * </li> </ul> </li> </ul> * - допускается <a * href="http://dev.1c-bitrix.ru/api_help/main/general/filter.php">сложная логика</a> * * * * @param bool &$is_filtered Флаг отфильтрованности результирующего списка. Если значение * равно "true", то список был отфильтрован. * * * * @param int &$total Суммарные количество заходов с ссылающихся страниц. * * * * @param string &$group_by Группировка результирующего списка. Возможные значения: <ul> <li> * <b>U</b> - группировка по ссылающейся странице; </li> <li> <b>S</b> - * группировка по ссылающемуся домену. </li> </ul> * * * * @param int &$max Количество заходов с самой популярной ссылающейся страницы. * * * * @return CDBResult * * * <h4>Example</h4> * <pre> * <? * // отфильтруем только заходы с доменов "google" * // сгруппировав по ссылающемуся домену * $arFilter = array( * "FROM_DOMAIN" => "google", * "GROUP" => "S" * ); * * // получим список записей * $rs = <b>CReferer::GetList</b>( * ($by = "s_url_from"), * ($order = "desc"), * $arFilter, * $is_filtered, * $total, * $group_by, * $max * ); * * // выведем все записи * while ($ar = $rs->Fetch()) * { * echo "<pre>"; print_r($ar); echo "</pre>"; * } * ?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/statistic/terms.php#referer">Термин "Ссылающийся * сайт (страница)"</a> </li> </ul> <a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/statistic/classes/creferer/getlist.php * @author Bitrix */ public static function GetList(&$by, &$order, $arFilter = array(), &$is_filtered, &$total, &$grby, &$max) { $err_mess = "File: " . __FILE__ . "<br>Line: "; global $grby, $total; $DB = CDatabase::GetModuleConnection('statistic'); $group = false; $strSqlGroup = "GROUP BY L.PROTOCOL, L.SITE_NAME, L.URL_FROM, R.HITS, R.SESSIONS"; $url_from = $DB->Concat("L.PROTOCOL", "L.SITE_NAME", "L.URL_FROM"); $arSqlSearch = array(); $strSqlSearch = ""; if (is_array($arFilter)) { foreach ($arFilter as $key => $val) { if (is_array($val)) { if (count($val) <= 0) { continue; } } else { if (strlen($val) <= 0 || $val === "NOT_REF") { continue; } } $match_value_set = array_key_exists($key . "_EXACT_MATCH", $arFilter); $key = strtoupper($key); switch ($key) { case "ID": case "SESSION_ID": $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L." . $key, $val, $match); break; case "DATE1": if (CheckDateTime($val)) { $arSqlSearch[] = "L.DATE_HIT >= " . $DB->CharToDateFunction($val, "SHORT"); } break; case "DATE2": if (CheckDateTime($val)) { $arSqlSearch[] = "L.DATE_HIT < " . CStatistics::DBDateAdd($DB->CharToDateFunction($val, "SHORT"), 1); } break; case "FROM_PROTOCOL": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.PROTOCOL", $val, $match, array("/", "\\", ":")); break; case "FROM_DOMAIN": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.SITE_NAME", $val, $match, array(".")); break; case "FROM_PAGE": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.URL_FROM", $val, $match, array("/", "\\", ".", "?", "#", ":", ":")); break; case "FROM": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery($url_from, $val, $match, array("/", "\\", ".", "?", "#", ":"), "N", "N"); break; case "TO": $match = $arFilter[$key . "_EXACT_MATCH"] == "Y" && $match_value_set ? "N" : "Y"; $arSqlSearch[] = GetFilterQuery("L.URL_TO", $val, $match, array("/", "\\", ".", "?", "#", ":")); break; case "TO_404": $arSqlSearch[] = $val == "Y" ? "L.URL_TO_404='Y'" : "L.URL_TO_404='N'"; break; case "GROUP": $group = true; if ($val == "S") { $find_group = "S"; $strSqlGroup = "GROUP BY L.SITE_NAME, R.HITS, R.SESSIONS"; $url_from = "L.SITE_NAME"; } else { $find_group = "U"; } break; case "SITE_ID": if (is_array($val)) { $val = implode(" | ", $val); } $match = $arFilter[$key . "_EXACT_MATCH"] == "N" && $match_value_set ? "Y" : "N"; $arSqlSearch[] = GetFilterQuery("L.SITE_ID", $val, $match); break; } } } $strSqlSearch = GetFilterSqlSearch($arSqlSearch); $grby = $find_group == "U" || $find_group == "S" ? $find_group : ""; $strSqlOrder = ""; if (strlen($grby) <= 0) { if ($by == "s_id") { $strSqlOrder = " ORDER BY L.ID "; } elseif ($by == "s_site_id") { $strSqlOrder = " ORDER BY L.SITE_ID "; } elseif ($by == "s_url_from") { $strSqlOrder = " ORDER BY URL_FROM "; } elseif ($by == "s_url_to") { $strSqlOrder = " ORDER BY L.URL_TO "; } elseif ($by == "s_date_hit") { $strSqlOrder = " ORDER BY L.DATE_HIT "; } elseif ($by == "s_session_id") { $strSqlOrder = " ORDER BY L.SESSION_ID "; } else { $by = "s_id"; $strSqlOrder = "ORDER BY L.ID"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\t" . $url_from . " as URL_FROM,\n\t\t\t\t\tL.ID,\n\t\t\t\t\tL.SESSION_ID,\n\t\t\t\t\tL.SITE_ID,\n\t\t\t\t\t" . $DB->DateToCharFunction("L.DATE_HIT") . " DATE_HIT,\n\t\t\t\t\tL.URL_TO,\n\t\t\t\t\tL.URL_TO_404\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t"; } elseif (IsFiltered($strSqlSearch) || $grby == "U") { if ($by == "s_url_from") { $strSqlOrder = "ORDER BY URL_FROM"; } elseif ($by == "s_quantity") { $strSqlOrder = "ORDER BY QUANTITY"; } elseif ($by == "s_average_hits") { $strSqlOrder = "ORDER BY AVERAGE_HITS"; } else { $by = "s_quantity"; $strSqlOrder = "ORDER BY QUANTITY"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "\n\t\t\t\tSELECT\n\t\t\t\t\tcount(L.ID) as COUNTER\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\t\tLEFT JOIN b_stat_referer R ON (R.ID = L.REFERER_ID)\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlGroup . "\n\t\t\t"; $c = $DB->Query($strSql, false, $err_mess . __LINE__); $total = 0; $arrCount = array(); while ($cr = $c->Fetch()) { $total += intval($cr["COUNTER"]); $arrCount[] = intval($cr["COUNTER"]); } if (count($arrCount) > 0) { $max = max($arrCount); } $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\t" . $url_from . " URL_FROM,\n\t\t\t\t\tcount(L.ID) QUANTITY,\n\t\t\t\t\t(count(L.ID)*100)/{$total} C_PERCENT,\n\t\t\t\t\tR.HITS/R.SESSIONS AVERAGE_HITS\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer_list L\n\t\t\t\t\tLEFT JOIN b_stat_referer R ON (R.ID = L.REFERER_ID)\n\t\t\t\tWHERE\n\t\t\t\t" . $strSqlSearch . "\n\t\t\t\t" . $strSqlGroup . "\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t"; } elseif ($grby == "S") { if ($by == "s_url_from") { $strSqlOrder = "ORDER BY URL_FROM"; } elseif ($by == "s_quantity") { $strSqlOrder = "ORDER BY QUANTITY"; } elseif ($by == "s_average_hits") { $strSqlOrder = "ORDER BY AVERAGE_HITS"; } else { $by = "s_quantity"; $strSqlOrder = "ORDER BY QUANTITY"; } if ($order != "asc") { $strSqlOrder .= " desc "; $order = "desc"; } $strSql = "SELECT sum(R.SESSIONS) TOTAL, max(R.SESSIONS) MAX FROM b_stat_referer R"; $c = $DB->Query($strSql, false, $err_mess . __LINE__); $cr = $c->Fetch(); $total = intval($cr["TOTAL"]); $max = intval($cr["MAX"]); $strSql = "\n\t\t\t\tSELECT /*TOP*/\n\t\t\t\t\tR.SITE_NAME URL_FROM,\n\t\t\t\t\tsum(R.SESSIONS) QUANTITY,\n\t\t\t\t\t(sum(R.SESSIONS)*100)/{$total} C_PERCENT,\n\t\t\t\t\tsum(R.HITS)/sum(R.SESSIONS) AVERAGE_HITS\n\t\t\t\tFROM\n\t\t\t\t\tb_stat_referer R\n\t\t\t\tGROUP BY R.SITE_NAME\n\t\t\t\t" . $strSqlOrder . "\n\t\t\t"; } $res = $DB->Query(CStatistics::DBTopSql($strSql), false, $err_mess . __LINE__); $is_filtered = IsFiltered($strSqlSearch) || $group; return $res; }
function KeepStatistic($HANDLE_CALL = false) { return CStatistics::Keep($HANDLE_CALL); }