%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/statistic/ |
Current File : /home/bitrix/www/bitrix/modules/statistic/stat_tools.php |
<?php IncludeModuleLangFile(__FILE__); // fix HTTP_REFERER, r1, r2 for google ads function __GoogleAd($set_new_adv=false, $r1=false, $r2=false, $s="http://pagead2.googlesyndication.com/") { if (intval($_SESSION["SESS_SESSION_ID"])<=0 && strlen($_SERVER["HTTP_REFERER"])>0 && strncmp($s, $_SERVER["HTTP_REFERER"], strlen($s))==0) { $arr = parse_url($_SERVER["HTTP_REFERER"]); if (strlen($arr["query"])>0) { parse_str($arr["query"], $ar); if (strlen($ar["url"])>0) { $_SERVER["HTTP_REFERER"] = $ar["url"]; if ($set_new_adv) { __SetReferer("referer1", "REFERER1_SYN"); __SetReferer("referer2", "REFERER2_SYN"); if (strlen($_SESSION["referer1"])<=0 && strlen($_SESSION["referer2"])<=0) { __GetReferringSite($protocol, $site_port, $site, $page, $_SERVER["HTTP_REFERER"]); $_SESSION["referer1"] = ($r1!==false) ? $r1 : "google_adwords"; if ($r2!==false) $_SESSION["referer2"] = $r2; else { $_ar = explode(".", $site); if (is_array($_ar)) { $_ar = array_reverse($_ar); $_SESSION["referer2"] = $_ar[1].".".$_ar[0]; } } } } return true; } } } return false; } // returns referer site parameters function __GetReferringSite( &$protocol, // http or https &$server_name, // www.site.ru:7900 &$server_name_wo_port, // www.site.ru &$PAGE_FROM, // page with out site (uri) $URL_FROM = false ) { if($URL_FROM === false) $URL_FROM = $_SERVER["HTTP_REFERER"]; if(!empty($URL_FROM)) { $protocol = substr($URL_FROM, 0, 7); if($protocol == "http://") { $server_name = substr($URL_FROM, 7); } else { $protocol = substr($URL_FROM, 0, 8); if($protocol == "https://") { $server_name = substr($URL_FROM, 8); } else { $server_name = ""; $protocol = ""; } } if(!empty($server_name)) { $p = strpos($server_name, "/"); if($p > 0) $server_name = substr($server_name, 0, $p); $server_name = strtolower($server_name); $p = strpos($server_name,":"); if($p > 0) $server_name_wo_port = substr($server_name, 0, $p); else $server_name_wo_port = $server_name; $PAGE_FROM = substr($URL_FROM, strlen($protocol.$server_name)); if(strlen($PAGE_FROM) <= 0) $PAGE_FROM = "/"; } return true; } else { return false; } } // referer1 and referer2 initialization function __SetReferer($referer, $syn) { stat_session_register($referer); global $$referer; if (strlen($_SESSION[$referer])<=0) { $_SESSION[$referer] = $$referer; $arr=explode(",",COption::GetOptionString("statistic", $syn)); foreach ($arr as $s) { $s = trim($s); global $$s; if (strlen($$s)>0) { $_SESSION[$referer] = $$s; break; } } } } function __SetNoKeepStatistics() { if (!isset($_SESSION["SESS_NO_KEEP_STATISTIC"]) || $_SESSION["SESS_NO_KEEP_STATISTIC"] == '') { $key_to_check = "no_keep_statistic_".LICENSE_KEY; if (isset($_REQUEST[$key_to_check]) && $_REQUEST[$key_to_check] <> '') { $_SESSION["SESS_NO_KEEP_STATISTIC"] = $_REQUEST[$key_to_check]; if (!isset($_SESSION["SESS_NO_AGENT_STATISTIC"]) || $_SESSION["SESS_NO_AGENT_STATISTIC"] == '') $_SESSION["SESS_NO_AGENT_STATISTIC"] = $_REQUEST[$key_to_check]; } } $key_to_check = "no_agent_statistic_".LICENSE_KEY; if (isset($_REQUEST[$key_to_check]) && $_REQUEST[$key_to_check] <> '') { if (!isset($_SESSION["SESS_NO_AGENT_STATISTIC"]) || $_SESSION["SESS_NO_AGENT_STATISTIC"] == '') $_SESSION["SESS_NO_AGENT_STATISTIC"] = $_REQUEST[$key_to_check]; } } function __SortLinkStat($ar1, $ar2) { if ($ar1["CNT"]<$ar2["CNT"]) return 1; if ($ar1["CNT"]>$ar2["CNT"]) return -1; return 0; } function __IsHiddenLink($link) { return preg_match("#(/bitrix/admin/|show_link_stat|bitrix_include_areas|logout|javascript)#", $link); } function __ModifyATags($matches) { global $arHashLink; $link = $matches[3]; if (strlen($link) && !__IsHiddenLink($link) && !preg_match("/<img/i", $matches[0])) { $link = __GetFullRequestUri(__GetFullCurPage($link)); $crc32 = crc32ex($link); if(array_key_exists($crc32, $arHashLink)) { $id = $arHashLink[$crc32]["ID"]; $percent = $arHashLink[$crc32]["PERCENT"]."%"; $cnt = $arHashLink[$crc32]["CNT"]; $link = $arHashLink[$crc32]["LINK"]; $title = str_replace("#CNT#", "$cnt", GetMessage("STAT_LABEL_TITLE")); $title = str_replace("#LINK#", "$link", $title); $title = str_replace("#PERCENT#", "$percent", $title); $max_width = 44; $wpx = round($max_width*($arHashLink[$crc32]["PERCENT"]/100.0)); $tag = ' <div style="position:relative; width:100%;"> <div style="position:relative; border:black solid 1px; color:#FC9C05; width:100%; padding: 0px;" onmouseover="this.style.color=\'#000000\';" onmouseout="this.style.color=\'#FC9C05\';"> '.$matches[0].' </div> <div title="'.$title.'" OnClick="this.style.display=\'none\'" style="position:relative; z-index: 1; top: 0px; right: 0px; padding: 1px; width:100%; height: auto;" align="left"> <table style="cursor:default; border:none; height:19px;" cellpadding="0" cellspacing="0" width="0%"> <tr> <td style="padding:0px; border:none;"> <table style="border-collapse:collapse;" cellpadding="0" cellspacing="0" width="0%"> <tr> <td rowspan="2" width="0%" valign="middle" align="center" style="border:#000000 solid 1px; background-color:#A8A8A8; padding-top:0px; padding-bottom:0px; padding-left:2px; padding-right:2px;"><font style="font-family:Verdana; font-weight:normal; font-size:9px; color:#FFFFFF"><b>'.$id.'</b></font></td> <td align="center" width="0%" style="background-color:#FFFEE0; padding:0px; border:#000000 solid 1px;"><nobr><font style="font-family:Verdana; font-weight:normal; font-size:9px;"><font color="#000000">'.$percent.'</font></nobr><br><img src="/bitrix/images/1.gif" width="'.$max_width.'" height="1" border="0" alt=""></td> </tr> <tr> <td style="padding:0px; border:#000000 solid 1px;background-color:#FFFFFF;"><span style="display:block; width:'.$wpx.'px; overflow:hidden"><img src="/bitrix/images/statistic/scale.gif" height="5" border="0" alt=""></span></td> </tr> </table> </td> </tr> </table> </div> </div> '; return $tag; } } return $matches[0]; } function GetCookieString($arrCookie=false) { $res = ""; if ($arrCookie===false) $arrCookie = $_COOKIE; if (is_array($arrCookie)) { foreach($arrCookie as $key => $value) $res .= "[".$key."] = ".$value."\n"; } return $res; } function __GetCurrentPage() { if (CModule::IncludeModule("wacko")) return CgeneralWacko::GetCurPage(); else return __GetPage(); } function __GetCurrentDir() { /** @var CMain $APPLICATION */ global $APPLICATION; if (CModule::IncludeModule("wacko")) return CgeneralWacko::GetCurDir(); else return $APPLICATION->GetCurDir(); } function __GetPage($page=false, $with_imp_params=true, $curdir=false) { if($page===false) { $page = $_SERVER["REQUEST_URI"]; $check_path = false; } else { $page = str_replace("\\","/",$page); if(substr($page, 0, 1)!=="/" && strpos($page, "://")===false) { $curdir = ($curdir!==false) ? $curdir : __GetCurrentDir(); $page = Rel2Abs($curdir, $page); } $check_path = true; } $found = strpos($page, "?"); $sPath = ($found? substr($page, 0, $found) : $page); if ($check_path) { $sPath = str_replace("\\","/",$sPath); $last_char = substr($sPath, -1); if($last_char != "/" && @is_dir($_SERVER["DOCUMENT_ROOT"].$sPath)) $sPath .= "/"; } if ($with_imp_params) { $arImpParams = array_map("trim", explode(",", COption::GetOptionString("statistic", "IMPORTANT_PAGE_PARAMS"))); $ar = @parse_url("".$page.""); $arVars = array(); parse_str($ar["query"], $arVars); foreach($arVars as $key => $value) { $key = str_replace("amp;", "", $key); $arVars[$key] = $value; } $i = 0; foreach($arImpParams as $key) { if (array_key_exists($key, $arVars) && !is_array($arVars[$key])) { if($i > 0) $sPath .= "&"; else $sPath .= "?"; $sPath .= urlencode($key)."=".urlencode($arVars[$key]); $i++; } } } $ar = explode("?", $sPath); if(strlen($ar[0]) > 0) { $arTail = explode(",", COption::GetOptionString("statistic", "DIRECTORY_INDEX")); foreach($arTail as $tail) { $tail = "/".trim($tail); if(substr($ar[0], -strlen($tail))==$tail) { $ar[0] = substr($ar[0], 0, strlen($ar[0])-strlen($tail)+1); break; } } } return implode("?", $ar); } function __GetFullCurPage($page=false, $with_imp_params=true) { return __GetPage($page, $with_imp_params); } function __GetFullReferer($referer=false) { if ($referer===false) $referer = $_SERVER["HTTP_REFERER"]; $referer = __GetPage($referer); return $referer; } function __GetFullRequestUri($url=false, $host=false, $port=false, $protocol=false) { global $HTTP_HOST, $SERVER_PORT, $APPLICATION; if ($url===false) $url = $_SERVER["REQUEST_URI"]; if ($host===false) $host = $_SERVER["HTTP_HOST"]; if ($port===false) $port = $_SERVER["SERVER_PORT"]; if ($protocol===false) $protocol = CMain::IsHTTPS() ? "https" : "http"; $res = ""; $host_exists = (strpos($url, "http://")===false && strpos($url, "https://")===false) ? false : true; if (!$host_exists) { if (strlen($protocol)>0) $res = $protocol."://"; if (strlen($host)>0) $res .= $host; if (intval($port)>0 && intval($port)!=80 && intval($port)!=443 && strpos($host, ":")===false) $res .= ":".$port; } if (strlen($url)>0) $res .= $url; if(strpos($res, "/bitrix/admin/")!==false) { $res = str_replace("&mode=list", "", $res); $res = str_replace("&mode=frame", "", $res); } return $res; } // returns base currency function GetStatisticBaseCurrency() { $base_currency = trim(COption::GetOptionString("statistic", "BASE_CURRENCY")); if ($base_currency!="xxx" && strlen($base_currency)>0) { if (CModule::IncludeModule("currency")) { if (CCurrency::GetByID($base_currency)) return $base_currency; } } return ""; } function CleanUpResultCsv(&$item) { $item = TrimEx($item, "\""); } function PrepareResultQuotes(&$item) { $item = "\"".str_replace("\"","\"\"", $item)."\""; } function LoadEventsBySteps( $csvfile, // CSV file name $time_step, // one step duration $next_line, // line number to start &$step_processed, // number of lines handled &$step_loaded, // loaded in one step &$step_duplicate, // duplicates skipped in this step $check_unique="Y", // check uniquness $base_currency="", // module base currency &$next_pos ) { $all_loaded = ""; if ($fp = fopen($csvfile,"rb")) { if($next_pos>0) fseek($fp, $next_pos); $start = getmicrotime(); $next_line = intval($next_line); $read_lines = 0; $step_loaded = 0; $step_processed = 0; $step_duplicate = 0; while (!feof($fp)) { $arrCSV = fgetcsv($fp, 4096, ","); if (is_array($arrCSV) && count($arrCSV)>0) { array_walk($arrCSV, "CleanUpResultCsv"); $read_lines++; $step_processed++; $EVENT_ID = $arrCSV[0]; $EVENT3 = $arrCSV[1]; $DATE_ENTER = $arrCSV[2]; $PARAMETER = $arrCSV[3]; $MONEY = $arrCSV[4]; $CURRENCY = $arrCSV[5]; $CHARGEBACK = $arrCSV[6]; $RES_MONEY = $MONEY; $EVENT_ID = intval($EVENT_ID); $CHARGEBACK = ($CHARGEBACK=="Y") ? "Y" : "N"; if ($EVENT_ID>0) { if (strlen($base_currency)<=0) { $base_currency = GetStatisticBaseCurrency(); } if (strlen($base_currency)>0) { if ($CURRENCY!=$base_currency && strlen(trim($CURRENCY))>0) { if (CModule::IncludeModule("currency")) { $stmp = MkDateTime(ConvertDateTime($DATE_ENTER,"D.M.Y H:I:S"),"d.m.Y H:i:s"); $valDate = date("Y-m-d", $stmp); $rate = CCurrencyRates::GetConvertFactor($CURRENCY, $base_currency, $valDate); if ($rate>0) $RES_MONEY = $MONEY * $rate; } } } $RES_MONEY = round($RES_MONEY,2); $add_event="Y"; if ($check_unique=="Y") { $arr = CStatEvent::DecodeGID($PARAMETER); $arFilter = array( "EVENT_ID" => $EVENT_ID, "EVENT3" => $EVENT3, "DATE" => $DATE_ENTER, "SESSION_ID" => $arr["SESSION_ID"], "GUEST_ID" => $arr["GUEST_ID"], "COUNTRY_ID" => $arr["COUNTRY_ID"], "ADV_ID" => $arr["ADV_ID"], "ADV_BACK" => $arr["ADV_BACK"], "SITE_ID" => $arr["SITE_ID"], ); $rsEvents = CStatEvent::GetListUniqueCheck($arFilter); if ($arEvent = $rsEvents->Fetch()) { $add_event="N"; $step_duplicate++; } } if ($add_event=="Y") { CStatEvent::AddByID($EVENT_ID, $EVENT3, $DATE_ENTER, $PARAMETER, $RES_MONEY, "", $CHARGEBACK); $step_loaded++; } $end = getmicrotime(); if (intval($time_step)>0 && ($end-$start)>intval($time_step)) { $all_loaded = "N"; break; } } } } if($all_loaded=="N") $next_pos=ftell($fp); else $next_pos=0; @fclose($fp); if ($all_loaded!="N") { $all_loaded = "Y"; @unlink($csvfile); } } return $all_loaded; } function GetStatPathID($URL, $PREV_PATH_ID="") { return crc32ex($URL.strval($PREV_PATH_ID)); } function stat_session_register($var_name) { static $arrSTAT_SESSION = array(); if($var_name === false) { foreach($arrSTAT_SESSION as $key => $value) { unset($GLOBALS[$key]); unset($_SESSION[$key]); } $arrSTAT_SESSION = array(); } elseif($var_name === true) { foreach($arrSTAT_SESSION as $key => $value) $arrSTAT_SESSION[$key] = $_SESSION[$key]; return $arrSTAT_SESSION; } else { $arrSTAT_SESSION[$var_name] = 0; } return null; } function get_guest_md5() { $md5 = md5( $_SERVER["HTTP_USER_AGENT"]. $_SERVER["REMOTE_ADDR"]. $_SERVER["HTTP_X_FORWARDED_FOR"] ); return $md5; } function GetEventSiteID() { return GetStatGroupSiteID(); } function GetStatGroupSiteID() { $site_id = COption::GetOptionString("statistic", "EVENT_GID_SITE_ID"); return $site_id; } function SendDailyStatistics() { __SetNoKeepStatistics(); if ($_SESSION["SESS_NO_AGENT_STATISTIC"]!="Y" && !defined("NO_AGENT_STATISTIC")) { global $MESS; $rsSite = CSite::GetDefList(); $arSite = $rsSite->Fetch(); $charset = $arSite["CHARSET"]; $now_full_date = GetTime(time(), "FULL", $arSite["ID"], true); $now_date = GetTime(time(), "SHORT", $arSite["ID"], true); $yesterday_date = GetTime(time()-86400, "SHORT", $arSite["ID"], true); $bef_yesterday_date = GetTime(time()-172800, "SHORT", $arSite["ID"], true); $arComm = CTraffic::GetCommonValues(); $adv = CAdv::GetList($a_by, $a_order, array(), $is_filtered, "", $arrGROUP_DAYS, $v); $events = CStatEventType::GetList(($e_by="s_stat"),($e_order="desc"),array(), $is_filtered); $referers = CTraffic::GetRefererList($by, $order, array(), $is_filtered); $phrases = CTraffic::GetPhraseList($s_by, $s_order, array(), $is_filtered); $searchers = CSearcher::GetList(($f_by="s_stat"), ($f_order="desc"), array(), $is_filtered); $OLD_MESS = $MESS; $MESS = array(); IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/include.php", $arSite["LANGUAGE_ID"]); IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/statistic/admin/stat_list.php", $arSite["LANGUAGE_ID"]); $HTML_HEADER = ' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset='.$charset.'"> <style> .tablehead1 {background-color:#C2DBED; padding:2px; border-top: 1px solid #A8C2D7; border-bottom: 1px solid #A8C2D7; border-left: 1px solid #A8C2D7;} .tablehead2 {background-color:#C2DBED; padding:2px; border-top: 1px solid #A8C2D7; border-bottom: 1px solid #A8C2D7;} .tablehead3 {background-color:#C2DBED; padding:2px; border-top: 1px solid #A8C2D7; border-bottom: 1px solid #A8C2D7; border-right: 1px solid #A8C2D7;} .tablebody1 {background-color:#F0F1F2; padding:2px; border-left:#B9D3E6 solid 1px; border-bottom:#B9D3E6 solid 1px;} .tablebody2 {background-color:#F0F1F2; padding:2px; border-bottom:#B9D3E6 solid 1px;} .tablebody3 {background-color:#F0F1F2; padding:2px; border-right:#B9D3E6 solid 1px; border-bottom:#B9D3E6 solid 1px;} .tablebodytext {font-family: Arial, Helvetica, sans-serif; font-size:12px; color:#000000;} .tableheadtext {font-family: Arial, Helvetica, sans-serif; font-size:12px; color:#000000;} .tablelinebottom {border-bottom:1pt solid #D1D1D1} .notesmall {font-family: Arial, Helvetica, sans-serif; font-size:11px; color:#008400; font-weight:normal;} .tablebody1_sel {background-color:#E0EBF1; padding:2px; border-left:#B9D3E6 solid 1px; border-bottom:#B9D3E6 solid 1px;} .tablebody2_sel {background-color:#E0EBF1; padding:2px; border-bottom:#B9D3E6 solid 1px;} .tablebody3_sel {background-color:#E0EBF1; padding:2px; border-right:#B9D3E6 solid 1px; border-bottom:#B9D3E6 solid 1px;} </style> </head> <body bgcolor="FFFFFF" leftmargin="2" topmargin="2" marginwidth="2" marginheight="2"> '; $HTML_COMMON = ' <table border="0" cellspacing="1" cellpadding="3" width="100%"> <tr> <td valign="top" align="center" class="tablehead1" width="48%" nowrap><font class="tableheadtext">'.GetMessage("STAT_VISIT").'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tableheadtext">'.GetMessage("STAT_TODAY").'</font><br><font class="notesmall">'.$now_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tableheadtext">'.GetMessage("STAT_YESTERDAY").'</font><br><font class="notesmall">'.$yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tableheadtext">'.GetMessage("STAT_BEFORE_YESTERDAY").'</font><br><font class="notesmall">'.$bef_yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead3" width="13%" nowrap><font class="tableheadtext">'.GetMessage("STAT_TOTAL_1").'</font></td> </tr> <tr valign="top"> <td valign="top" class="tablebody1" width="48%" nowrap><font class="tablebodytext">'.GetMessage("STAT_HITS").'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["TODAY_HITS"].'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["YESTERDAY_HITS"].'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["B_YESTERDAY_HITS"].'</font></td> <td valign="top" align="right" class="tablebody3" width="13%" nowrap><font class="tablebodytext">'.$arComm["TOTAL_HITS"].' </font></td> </tr> <tr valign="top"> <td valign="top" class="tablebody1" width="48%" nowrap><font class="tablebodytext">'.GetMessage("STAT_HOSTS").'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["TODAY_HOSTS"].'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["YESTERDAY_HOSTS"].'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["B_YESTERDAY_HOSTS"].'</font></td> <td valign="top" align="right" class="tablebody3" width="13%" nowrap><font class="tablebodytext">'.$arComm["TOTAL_HOSTS"].' </font></td> </tr> <tr valign="top"> <td valign="top" class="tablebody1" width="48%" nowrap><font class="tablebodytext">'.GetMessage("STAT_SESSIONS").'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["TODAY_SESSIONS"].'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["YESTERDAY_SESSIONS"].'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["B_YESTERDAY_SESSIONS"].'</font></td> <td valign="top" align="right" class="tablebody3" width="13%" nowrap><font class="tablebodytext">'.$arComm["TOTAL_SESSIONS"].' </font></td> </tr> <tr valign="top"> <td valign="top" class="tablebody1" width="48%" nowrap><font class="tablebodytext">'.GetMessage("STAT_C_EVENTS").'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["TODAY_EVENTS"].'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["YESTERDAY_EVENTS"].'</font></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap><font class="tablebodytext">'.$arComm["B_YESTERDAY_EVENTS"].'</font></td> <td valign="top" align="right" class="tablebody3" width="13%" nowrap><font class="tablebodytext">'.$arComm["TOTAL_EVENTS"].' </font></td> </tr> <tr valign="top"> <td valign="top" class="tablebody1" width="48%" nowrap> <table border="0" cellspacing="0" cellpadding="0" width="100%"> <tr> <td width="100%"><font class="tablebodytext">'.GetMessage("STAT_GUESTS").'</font></td> <td width="0%" align="right" class="tablelinebottom" nowrap><font class="tablebodytext">'.GetMessage("STAT_TOTAL").'</font></td> </tr> <tr> <td></td> <td class="tablelinebottom" align="right" nowrap><font class="tablebodytext">'.GetMessage("STAT_NEW").'</font></td> </tr> <tr> <td></td> <td align="right" nowrap><font class="tablebodytext">'.GetMessage("STAT_ONLINE").'</font></td> </tr> </table></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap> <table cellspacing=0 cellpadding=0 width="100%"> <tr><td class="tablelinebottom" align="right" width="100%"><font class="tablebodytext">'.$arComm["TODAY_GUESTS"].'</font></td></tr> <tr><td class="tablelinebottom" align="right"><font class="tablebodytext">'.$arComm["TODAY_NEW_GUESTS"].'</font></td></tr> <tr><td align="right"><font class="tablebodytext">'.$arComm["ONLINE_GUESTS"].'</font></td></tr> </table></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap> <table cellspacing=0 cellpadding=0 width="100%"> <tr><td class="tablelinebottom" align="right" width="100%"><font class="tablebodytext">'.$arComm["YESTERDAY_GUESTS"].'</font></td></tr> <tr><td class="tablelinebottom" align="right"><font class="tablebodytext">'.$arComm["YESTERDAY_NEW_GUESTS"].'</font></td></tr> </table></td> <td valign="top" align="right" class="tablebody2" width="13%" nowrap> <table cellspacing=0 cellpadding=0 width="100%"> <tr><td align="right" class="tablelinebottom" width="100%"><font class="tablebodytext">'.$arComm["B_YESTERDAY_GUESTS"].'</font></td></tr> <tr><td class="tablelinebottom" align="right"><font class="tablebodytext">'.$arComm["B_YESTERDAY_NEW_GUESTS"].'</font></td></tr> </table></td> <td valign="top" align="right" class="tablebody3" width="13%" nowrap> <table cellspacing=0 cellpadding=0 width="100%"> <tr><td class="tablelinebottom" align="right" width="100%"><font class="tablebodytext">'.$arComm["TOTAL_GUESTS"].' </font></td></tr> <tr><td class="tablelinebottom" align="right"><font class="tablebodytext"> </font></td></tr> </table></td> </tr> </table> </td> </tr> </table> '; $HTML_ADV = ' <font class="tablebodytext">'.GetMessage("STAT_ADV").' ('.GetMessage("STAT_DIRECT_SESSIONS").') (Top 10):</font><br> <table border="0" cellspacing="1" cellpadding="3" width="100%"> <tr> <td valign="top" align="center" class="tablehead1" width="48%" nowrap><font class="tableheadtext">'.GetMessage("STAT_ADV_NAME").'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tableheadtext">'.GetMessage("STAT_TODAY").'</font><br><font class="notesmall">'.$now_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tableheadtext">'.GetMessage("STAT_YESTERDAY").'</font><br><font class="notesmall">'.$yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tableheadtext">'.GetMessage("STAT_BEFORE_YESTERDAY").'</font><br><font class="notesmall">'.$bef_yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead3" width="13%" nowrap><font class="tableheadtext">'.GetMessage("STAT_TOTAL_1").'</font></td> </tr> '; $i = 0; $total_SESSIONS_TODAY = 0; $total_SESSIONS_YESTERDAY = 0; $total_SESSIONS_BEF_YESTERDAY = 0; $total_SESSIONS = 0; while ($ar = $adv->Fetch()) : $i++; $total_SESSIONS_TODAY += $ar["SESSIONS_TODAY"]; $total_SESSIONS_YESTERDAY += $ar["SESSIONS_YESTERDAY"]; $total_SESSIONS_BEF_YESTERDAY += $ar["SESSIONS_BEF_YESTERDAY"]; $total_SESSIONS += $ar["SESSIONS"]; if ($i<=10) : $HTML_ADV .= ' <tr> <td valign="top" class="tablebody1"><font class="tablebodytext">['.$ar["ID"].'] '.$ar["REFERER1"].' / '.$ar["REFERER2"].'</font></td> <td valign="top" align="right" class="tablebody2"><font class="tablebodytext"> '.($ar["SESSIONS_TODAY"]>0 ? $ar["SESSIONS_TODAY"] : " ").'</font></td> <td valign="top" align="right" class="tablebody2"><font class="tablebodytext"> '.($ar["SESSIONS_YESTERDAY"]>0 ? $ar["SESSIONS_YESTERDAY"] : " ").'</font></td> <td valign="top" align="right" class="tablebody2"><font class="tablebodytext"> '.($ar["SESSIONS_BEF_YESTERDAY"]>0 ? $ar["SESSIONS_BEF_YESTERDAY"] : " ").'</font></td> <td valign="top" align="right" class="tablebody3"><font class="tablebodytext"> '.($ar["SESSIONS"]>0 ? $ar["SESSIONS"] : " ").'</font></td> </tr> '; endif; endwhile; $HTML_ADV .= ' <tr> <td valign="top" align="right" class="tablebody1_sel" style="padding:3px"><font class="tablebodytext">'.GetMessage("STAT_TOTAL").'</font></td> <td valign="top" align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext"> '.($total_SESSIONS_TODAY>0 ? $total_SESSIONS_TODAY : " ").'</font></td> <td valign="top" align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext"> '.($total_SESSIONS_YESTERDAY>0 ? $total_SESSIONS_YESTERDAY : " ").'</font></td> <td valign="top" align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext"> '.($total_SESSIONS_BEF_YESTERDAY>0 ? $total_SESSIONS_BEF_YESTERDAY : " ").'</font></td> <td valign="top" align="right" class="tablebody3_sel" style="padding:3px"><font class="tablebodytext"> '.($total_SESSIONS>0 ? $total_SESSIONS : " ").'</font></td> </table> '; $HTML_EVENTS = ' <font class="tablebodytext">'.GetMessage("STAT_EVENTS_2").' (Top 10):</font><br> <table border="0" cellspacing="1" cellpadding="3" width="100%"> <tr> <td valign="top" align="center" class="tablehead1" width="48%" nowrap><font class="tableheadtext">'.GetMessage("STAT_EVENT").'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap> <font class="tablebodytext">'.GetMessage("STAT_TODAY").'</font><br><font class="notesmall">'.$now_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap> <font class="tablebodytext">'.GetMessage("STAT_YESTERDAY").'</font><br><font class="notesmall">'.$yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap> <font class="tablebodytext">'.GetMessage("STAT_BEFORE_YESTERDAY").'</font><br><font class="notesmall">'.$bef_yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead3" width="13%" nowrap> <font class="tablebodytext">'.GetMessage("STAT_TOTAL_1").'</font></td> </tr> '; $i = 0; $total_TODAY_COUNTER = 0; $total_YESTERDAY_COUNTER = 0; $total_B_YESTERDAY_COUNTER = 0; $total_TOTAL_COUNTER = 0; while ($er = $events->Fetch()) : $i++; $total_TODAY_COUNTER += intval($er["TODAY_COUNTER"]); $total_YESTERDAY_COUNTER += intval($er["YESTERDAY_COUNTER"]); $total_B_YESTERDAY_COUNTER += intval($er["B_YESTERDAY_COUNTER"]); $total_TOTAL_COUNTER += intval($er["TOTAL_COUNTER"]); if ($i<=10) : $HTML_EVENTS .= ' <tr valign="top"> <td valign="top" class="tablebody1" width="0%" nowrap><font class="tablebodytext">'.$er["EVENT"].'</font></td> <td valign="top" align="right" class="tablebody2" width="0%" nowrap><font class="tablebodytext">'.($er["TODAY_COUNTER"]>0 ? $er["TODAY_COUNTER"] : " ").'</font></td> <td valign="top" align="right" class="tablebody2" width="0%" nowrap><font class="tablebodytext">'.($er["YESTERDAY_COUNTER"]>0 ? $er["YESTERDAY_COUNTER"] : " ").'</font></td> <td valign="top" align="right" class="tablebody2" width="0%" nowrap><font class="tablebodytext">'.($er["B_YESTERDAY_COUNTER"]>0 ? $er["B_YESTERDAY_COUNTER"] : " ").'</font></td> <td valign="top" align="right" class="tablebody3" width="0%" nowrap><font class="tablebodytext">'.($er["TOTAL_COUNTER"]>0 ? $er["TOTAL_COUNTER"] : " ").'</font></td> </tr> '; endif; endwhile; $HTML_EVENTS .= ' <tr valign="top"> <td align="right" class="tablebody1_sel" style="padding:3px"><font class="tablebodytext">'.GetMessage("STAT_TOTAL").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_TODAY_COUNTER>0 ? $total_TODAY_COUNTER : " ").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_YESTERDAY_COUNTER>0 ? $total_YESTERDAY_COUNTER : " ").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_B_YESTERDAY_COUNTER>0 ? $total_B_YESTERDAY_COUNTER : " ").'</font></td> <td align="right" class="tablebody3_sel" style="padding:3px"><font class="tablebodytext">'.($total_TOTAL_COUNTER>0 ? $total_TOTAL_COUNTER : " ").'</font></td> </table> '; $HTML_REFERERS = ' <font class="tablebodytext">'.GetMessage("STAT_REFERERS").' (Top 10):</font><br> <table border="0" cellspacing="1" cellpadding="3" width="100%"> <tr> <td valign="top" align="center" class="tablehead1" width="48%" nowrap><font class="tableheadtext">'.GetMessage("STAT_SERVER").'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_TODAY").'</font><br><font class="notesmall">'.$now_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_YESTERDAY").'</font><br><font class="notesmall">'.$yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_BEFORE_YESTERDAY").'</font><br><font class="notesmall">'.$bef_yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead3" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_TOTAL_1").'</font></td> </tr> '; $i = 0; $total_TODAY_REFERERS = 0; $total_YESTERDAY_REFERERS = 0; $total_B_YESTERDAY_REFERERS = 0; $total_TOTAL_REFERERS = 0; while ($rr = $referers->Fetch()) : $i++; $total_TODAY_REFERERS += $rr["TODAY_REFERERS"]; $total_YESTERDAY_REFERERS += $rr["YESTERDAY_REFERERS"]; $total_B_YESTERDAY_REFERERS += $rr["B_YESTERDAY_REFERERS"]; $total_TOTAL_REFERERS += $rr["TOTAL_REFERERS"]; if ($i<=10) : $HTML_REFERERS .= ' <tr> <td valign="top" class="tablebody1" nowrap><font class="tablebodytext">'.$rr["SITE_NAME"].'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($rr["TODAY_REFERERS"]>0 ? $rr["TODAY_REFERERS"] : " ").'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($rr["YESTERDAY_REFERERS"]>0 ? $rr["YESTERDAY_REFERERS"] : " ").'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($rr["B_YESTERDAY_REFERERS"]>0 ? $rr["B_YESTERDAY_REFERERS"] : " ").'</font></td> <td align="right" class="tablebody3"><font class="tablebodytext">'.($rr["TOTAL_REFERERS"]>0 ? $rr["TOTAL_REFERERS"] : " ").'</font></td> </tr> '; endif; endwhile; $HTML_REFERERS .= ' <tr valign="top"> <td align="right" class="tablebody1_sel" style="padding:3px"><font class="tablebodytext">'.GetMessage("STAT_TOTAL").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_TODAY_REFERERS>0 ? $total_TODAY_REFERERS : " ").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_YESTERDAY_REFERERS>0 ? $total_YESTERDAY_REFERERS : " ").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_B_YESTERDAY_REFERERS>0 ? $total_B_YESTERDAY_REFERERS : " ").'</font></td> <td align="right" class="tablebody3_sel" style="padding:3px"><font class="tablebodytext">'.($total_TOTAL_REFERERS>0 ? $total_TOTAL_REFERERS : " ").'</font></td> </table> '; $HTML_PHRASES = ' <font class="tablebodytext">'.GetMessage("STAT_PHRASES").' (Top 10):</font><br> <table border="0" cellspacing="1" cellpadding="3" width="100%"> <tr> <td valign="top" align="center" class="tablehead1" width="48%" nowrap><font class="tableheadtext">'.GetMessage("STAT_PHRASE").'</td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_TODAY").'</font><br><font class="notesmall">'.$now_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_YESTERDAY").'</font><br><font class="notesmall">'.$yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_BEFORE_YESTERDAY").'</font><br><font class="notesmall">'.$bef_yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead3" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_TOTAL_1").'</font></td> </tr> '; $i = 0; $total_TODAY_PHRASES = 0; $total_YESTERDAY_PHRASES = 0; $total_B_YESTERDAY_PHRASES = 0; $total_TOTAL_PHRASES = 0; while ($pr = $phrases->GetNext()) : $i++; $total_TODAY_PHRASES += $pr["TODAY_PHRASES"]; $total_YESTERDAY_PHRASES += $pr["YESTERDAY_PHRASES"]; $total_B_YESTERDAY_PHRASES += $pr["B_YESTERDAY_PHRASES"]; $total_TOTAL_PHRASES += $pr["TOTAL_PHRASES"]; if ($i<=10) : $HTML_PHRASES .= ' <tr valign="top"> <td valign="top" class="tablebody1" width="0%" nowrap><font class="tablebodytext">'.TruncateText($pr["PHRASE"],50).'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($pr["TODAY_PHRASES"]>0 ? $pr["TODAY_PHRASES"] : " ").'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($pr["YESTERDAY_PHRASES"]>0 ? $pr["YESTERDAY_PHRASES"] : " ").'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($pr["B_YESTERDAY_PHRASES"]>0 ? $pr["B_YESTERDAY_PHRASES"] : " ").'</font></td> <td align="right" class="tablebody3"><font class="tablebodytext">'.($pr["TOTAL_PHRASES"]>0 ? $pr["TOTAL_PHRASES"] : " ").'</font></td> </tr> '; endif; endwhile; $HTML_PHRASES .= ' <tr valign="top"> <td align="right" class="tablebody1_sel" style="padding:3px"><font class="tablebodytext">'.GetMessage("STAT_TOTAL").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_TODAY_PHRASES>0 ? $total_TODAY_PHRASES : " ").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_YESTERDAY_PHRASES>0 ? $total_YESTERDAY_PHRASES : " ").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_B_YESTERDAY_PHRASES>0 ? $total_B_YESTERDAY_PHRASES : " ").'</font></td> <td align="right" class="tablebody3_sel" style="padding:3px"><font class="tablebodytext">'.($total_TOTAL_PHRASES>0 ? $total_TOTAL_PHRASES : " ").'</font></td> </table> '; $HTML_SEARCHERS = ' <font class="tablebodytext">'.GetMessage("STAT_SITE_INDEXING").' (Top 10):</font><br> <table border="0" cellspacing="1" cellpadding="3" width="100%"> <tr> <td valign="top" align="center" class="tablehead1" width="48%" nowrap><font class="tableheadtext">'.GetMessage("STAT_SEARCHER").'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_TODAY").'</font><br><font class="notesmall">'.$now_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_YESTERDAY").'</font><br><font class="notesmall">'.$yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead2" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_BEFORE_YESTERDAY").'</font><br><font class="notesmall">'.$bef_yesterday_date.'</font></td> <td valign="top" align="center" class="tablehead3" width="13%" nowrap><font class="tablebodytext">'.GetMessage("STAT_TOTAL_1").'</font></td> </tr> '; $i = 0; $total_TODAY_HITS = 0; $total_YESTERDAY_HITS = 0; $total_B_YESTERDAY_HITS = 0; $total_TOTAL_HITS = 0; while ($fr = $searchers->Fetch()) : $i++; $total_TODAY_HITS += $fr["TODAY_HITS"]; $total_YESTERDAY_HITS += $fr["YESTERDAY_HITS"]; $total_B_YESTERDAY_HITS += $fr["B_YESTERDAY_HITS"]; $total_TOTAL_HITS += $fr["TOTAL_HITS"]; if ($i<=10) : $HTML_SEARCHERS .= ' <tr valign="top"> <td valign="top" class="tablebody1" width="0%" nowrap><font class="tablebodytext">'.$fr["NAME"].'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($fr["TODAY_HITS"]>0 ? $fr["TODAY_HITS"] : " ").'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($fr["YESTERDAY_HITS"]>0 ? $fr["YESTERDAY_HITS"] : " ").'</font></td> <td align="right" class="tablebody2"><font class="tablebodytext">'.($fr["B_YESTERDAY_HITS"]>0 ? $fr["B_YESTERDAY_HITS"] : " ").'</font></td> <td align="right" class="tablebody3"><font class="tablebodytext">'.($fr["TOTAL_HITS"]>0 ? $fr["TOTAL_HITS"] : " ").'</font></td> </tr> '; endif; endwhile; $HTML_SEARCHERS .= ' <tr valign="top"> <td align="right" class="tablebody1_sel" style="padding:3px"><font class="tablebodytext">'.GetMessage("STAT_TOTAL").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_TODAY_HITS>0 ? $total_TODAY_HITS : " ").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_YESTERDAY_HITS>0 ? $total_YESTERDAY_HITS : " ").'</font></td> <td align="right" class="tablebody2_sel" style="padding:3px"><font class="tablebodytext">'.($total_B_YESTERDAY_HITS>0 ? $total_B_YESTERDAY_HITS : " ").'</font></td> <td align="right" class="tablebody3_sel" style="padding:3px"><font class="tablebodytext">'.($total_TOTAL_HITS>0 ? $total_TOTAL_HITS : " ").'</font></td> </table> '; $HTML_FOOTER = ' </body> </html> '; $arEventFields = array( "SERVER_TIME" => $now_full_date, "HTML_HEADER" => $HTML_HEADER, "HTML_FOOTER" => $HTML_FOOTER, "HTML_COMMON" => $HTML_COMMON, "HTML_ADV" => $HTML_ADV, "HTML_EVENTS" => $HTML_EVENTS, "HTML_REFERERS" => $HTML_REFERERS, "HTML_PHRASES" => $HTML_PHRASES, "HTML_SEARCHERS" => $HTML_SEARCHERS, "EMAIL_TO" => COption::GetOptionString("main", "email_from", "") ); /* echo $HTML_HEADER."<br>"; echo $HTML_FOOTER."<br>"; echo $HTML_COMMON."<br>"; echo $HTML_ADV."<br>"; echo $HTML_EVENTS."<br>"; echo $HTML_REFERERS."<br>"; echo $HTML_PHRASES."<br>"; echo $HTML_SEARCHERS."<br>"; die(); */ CEvent::Send("STATISTIC_DAILY_REPORT", $arSite["ID"], $arEventFields); $MESS = $OLD_MESS; } return "SendDailyStatistics();"; } function crc32ex($s) { $c = crc32($s); if($c > 0x7FFFFFFF) $c = -(0xFFFFFFFF - $c + 1); return $c; } function AdminListCheckDate(&$lAdmin, $arDates) { $DB = CDatabase::GetModuleConnection('statistic'); $ok1 = false; list($id1, $date1) = each($arDates); if(strlen($date1)>0) { if(!CheckDateTime($date1)) { if(is_object($lAdmin)) $lAdmin->AddFilterError(GetMessage("STAT_WRONG_DATE_FROM")); else $lAdmin.=GetMessage("STAT_WRONG_DATE_FROM")."<br>"; } else { $ok1 = true; } } $ok2 = false; list($id2, $date2) = each($arDates); if(strlen($date2)>0) { if(!CheckDateTime($date2)) { if(is_object($lAdmin)) $lAdmin->AddFilterError(GetMessage("STAT_WRONG_DATE_TILL")); else $lAdmin.=GetMessage("STAT_WRONG_DATE_TILL")."<br>"; } else { $ok2 = true; } } if($ok1 && $ok2 && $DB->CompareDates($date1, $date2)==1) { if(is_object($lAdmin)) $lAdmin->AddFilterError(GetMessage("STAT_FROM_TILL_DATE")); else $lAdmin.=GetMessage("STAT_FROM_TILL_DATE")."<br>"; } return true; } function StatAdminListFormatURL($url, $arOptions = array()) { $new_window = false; if(isset($arOptions["new_window"]) && $arOptions["new_window"] == true) $new_window = true; $href_class = ''; if(isset($arOptions["attention"]) && $arOptions["attention"] == true) $href_class = 'stat_attention'; $href_title = ''; if(isset($arOptions["title"])) $href_title = htmlspecialcharsEx($arOptions["title"]); $max_display_chars = 0; if(isset($arOptions["max_display_chars"])) { if($arOptions["max_display_chars"] === 'default') $max_display_chars = 80; elseif($arOptions["max_display_chars"] > 0) $max_display_chars = $arOptions["max_display_chars"]; } $chars_per_line = 0; if(isset($arOptions["chars_per_line"])) { if($arOptions["chars_per_line"] === 'default') $chars_per_line = 33; elseif($arOptions["chars_per_line"] > 0) $chars_per_line = $arOptions["chars_per_line"]; } $line_delimiter = '<br />'; if(isset($arOptions["line_delimiter"])) $line_delimiter = $arOptions["line_delimiter"]; $kill_sessid = true; if(isset($arOptions["kill_sessid"])) $kill_sessid = $arOptions["kill_sessid"]; if($kill_sessid) { $url = preg_replace('/(sessid=[a-zA-Z0-9]+)/', '', $url); $url = str_replace('&&', '&', $url); $url = str_replace('?&', '?', $url); $url = trim($url, "?&"); } $htmlA = '<a href="'.htmlspecialcharsEx($url).'"'; if($new_window) $htmlA .= ' target="_blank"'; if($href_class) $htmlA .= ' class="'.$href_class.'"'; if($href_title) $htmlA .= ' title="'.$href_title.'"'; $htmlA .= '>'; $url_display = $url; if($max_display_chars > 0 && strlen($url) >= $max_display_chars) $url_display = substr($url, 0, intval($max_display_chars*0.7)).'...'.substr($url, -intval($max_display_chars*0.2)); if($chars_per_line > 0) { $url_display = InsertSpaces($url_display, $chars_per_line, "\x01"); $url_display = htmlspecialcharsbx($url_display); $url_display = str_replace("\x01", $line_delimiter, $url_display); } else { $url_display = htmlspecialcharsbx($url_display); } return $htmlA.$url_display.'</a>'; } function is_utf8_url($url) { //http://mail.nl.linux.org/linux-utf8/1999-09/msg00110.html if(preg_match_all("/(%[0-9A-F]{2})/i", $url, $match)) { $arBytes = array(); foreach($match[1] as $hex) $arBytes[] = hexdec(substr($hex, 1)); $is_utf = 0; foreach($arBytes as $i => $byte) { if( ($byte & 0xC0) == 0x80 ) { if( ($i > 0) && (($arBytes[$i-1] & 0xC0) == 0xC0) ) $is_utf++; elseif( ($i > 0) && (($arBytes[$i-1] & 0x80) == 0x00) ) $is_utf--; } elseif( ($i > 0) && (($arBytes[$i-1] & 0xC0) == 0xC0) ) { $is_utf--; } } return $is_utf > 0; } else { return false; } } /* $arTest = array( "http://bsm6.business.ru.mysql.max/bitrix/admin/php_command_line.php?lang=ru", //ASCII "http://www.yandex.ru/yandsearch?text=%D0%B1%D1%8B%D0%BB%D0%BE+", //Yndex utf "http://www.yandex.ru/yandsearch?text=%E1%E8%F2&rpt=rad", //Yandex koi "http://www.google.cn/search?hl=zh-CN&ie=GB2312&q=%CB%F9%D3%D0%CD%F8%D2%B3&btnG=Google+%CB%D1%CB%F7&meta=", //China multibyte "http://www.google.ru/search?hl=ru&q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=f", //russian utf ); foreach($arTest as $test) { echo $test,":",(is_utf8_url($test)? "Y": "N"),"<hr>\n"; } */ class CStatisticSort { var $field = false; function __construct($field = "") { $this->field = $field; } public static function Sort(&$ar, $field) { $sort = new CStatisticSort($field); uasort($ar, array($sort, "Compare")); } function Compare($ar1, $ar2) { if($ar1[$this->field] < $ar2[$this->field]) return 1; if($ar1[$this->field] > $ar2[$this->field]) return -1; if($ar1["CITY_ID"] < $ar2["CITY_ID"]) return -1; if($ar1["CITY_ID"] > $ar2["CITY_ID"]) return 1; return 0; } }