%PDF- %PDF-
| Direktori : /proc/self/root/home/bitrix/www/bitrix/modules/statistic/classes/general/ |
| Current File : //proc/self/root/home/bitrix/www/bitrix/modules/statistic/classes/general/adv.php |
<?php
class CAllAdv
{
public static function SetByReferer($referer1, $referer2, &$arrADV, &$ref1, &$ref2)
{
$err_mess = "File: ".__FILE__."<br>Line: ";
$DB = CDatabase::GetModuleConnection('statistic');
// lookup campaign with referer1 and referer2
$referer1 = trim($referer1);
$referer1_sql = strlen($referer1)>0? "REFERER1='".$DB->ForSql($referer1, 255)."'": "(REFERER1 is null or ".$DB->Length("REFERER1")."=0)";
$referer2 = trim($referer2);
$referer2_sql = strlen($referer2)>0? "REFERER2='".$DB->ForSql($referer2, 255)."'": "(REFERER2 is null or ".$DB->Length("REFERER2")."=0)";
$strSql = "
SELECT
ID,
REFERER1,
REFERER2
FROM
b_stat_adv
WHERE
".$referer1_sql."
and ".$referer2_sql."
";
$w = $DB->Query($strSql, false, $err_mess.__LINE__);
$found = false;
while ($wr = $w->Fetch())
{
$found = true;
// return with parameters
$arrADV[] = intval($wr["ID"]);
$ref1 = $wr["REFERER1"];
$ref2 = $wr["REFERER2"];
}
if(!$found)
{
$NA = "";
if(COption::GetOptionString("statistic", "ADV_NA") == "Y")
{
$NA_1 = COption::GetOptionString("statistic", "AVD_NA_REFERER1");
$NA_2 = COption::GetOptionString("statistic", "AVD_NA_REFERER2");
if ((strlen($NA_1)>0 || strlen($NA_2)>0) && $referer1==$NA_1 && $referer2==$NA_2)
$NA = "Y";
}
if((COption::GetOptionString("statistic", "ADV_AUTO_CREATE") == "Y") || ($NA == "Y"))
{
if(COption::GetOptionString("statistic", "REFERER_CHECK") == "Y")
{
$bGoodR = preg_match("/^([0-9A-Za-z_:;.,-])*$/", $referer1);
if($bGoodR)
$bGoodR = preg_match("/^([0-9A-Za-z_:;.,-])*$/", $referer2);
}
else
{
$bGoodR = true;
}
if($bGoodR)
{
// add new advertising campaign
$arFields = Array(
"REFERER1" => strlen($referer1)>0 ? "'".$DB->ForSql($referer1, 255)."'" : "null",
"REFERER2" => strlen($referer2)>0 ? "'".$DB->ForSql($referer2, 255)."'" : "null",
"DATE_FIRST" => $DB->GetNowFunction(),
"DATE_LAST" => $DB->GetNowFunction(),
);
$arrADV[] = $DB->Insert("b_stat_adv", $arFields, $err_mess.__LINE__);
$ref1 = $referer1;
$ref2 = $referer2;
}
}
}
}
public static function SetByPage($page, &$arrADV, &$ref1, &$ref2, $type="TO")
{
$err_mess = "File: ".__FILE__."<br>Line: ";
$DB = CDatabase::GetModuleConnection('statistic');
$strSql = "
SELECT
A.ID,
A.REFERER1,
A.REFERER2
FROM
b_stat_adv A
INNER JOIN b_stat_adv_page AP ON (AP.ADV_ID = A.ID and AP.C_TYPE='".$DB->ForSQL($type)."')
WHERE
AP.PAGE is not null
and ".$DB->Length("AP.PAGE")." > 0
and '".$DB->ForSQL($page)."' like ".$DB->Concat("'%'", "AP.PAGE", "'%'")."
";
$w = $DB->Query($strSql, false, $err_mess.__LINE__);
while ($wr=$w->Fetch())
{
$arrADV[] = intval($wr["ID"]);
$ref1 = $wr["REFERER1"];
$ref2 = $wr["REFERER2"];
}
}
// returns arrays for graphics plot
public static function GetAnalysisGraphArray($arFilter, &$is_filtered, $DATA_TYPE="SESSION_SUMMA", &$arrLegend, &$summa, &$max)
{
$err_mess = "File: ".__FILE__."<br>Line: ";
$DB = CDatabase::GetModuleConnection('statistic');
$arSqlSearch = Array();
switch ($DATA_TYPE)
{
case "SESSION_SUMMA":
case "SESSION":
case "SESSION_BACK":
case "VISITOR_SUMMA":
case "VISITOR":
case "VISITOR_BACK":
case "NEW_VISITOR":
case "FAV_SUMMA":
case "FAV":
case "FAV_BACK":
case "HOST_SUMMA":
case "HOST":
case "HOST_BACK":
case "HIT_SUMMA":
case "HIT":
case "HIT_BACK":
unset($arFilter["EVENT_TYPE_ID"]);
unset($arFilter["EVENT_TYPE"]);
unset($arFilter["EVENT1"]);
unset($arFilter["EVENT2"]);
break;
}
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 "DATE1":
if (CheckDateTime($val))
$arSqlSearch[] = "D.DATE_STAT>=".$DB->CharToDateFunction($val, "SHORT");
break;
case "DATE2":
if (CheckDateTime($val))
$arSqlSearch[] = "D.DATE_STAT<=".$DB->CharToDateFunction($val." 23:59:59", "FULL");
break;
case "EVENT_TYPE_ID":
case "EVENT_TYPE":
if (is_array($val)) $val = implode(" | ", $val);
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("D.EVENT_ID",$val,$match);
break;
case "ADV_ID":
case "ADV":
if (is_array($val)) $val = implode(" | ", $val);
$match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
$arSqlSearch[] = GetFilterQuery("D.ADV_ID",$val,$match);
break;
case "REFERER1":
case "REFERER2":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
break;
case "EVENT1":
case "EVENT2":
$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
$arSqlSearch[] = GetFilterQuery("E.".$key, $val, $match);
break;
}
}
}
$arrDays = array();
$arrLegend = array();
$arrSum = array();
$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
$strSql = CAdv::GetAnalysisGraphArray_SQL($strSqlSearch, $DATA_TYPE);
$rsD = $DB->Query($strSql, false, $err_mess.__LINE__);
while ($arD = $rsD->Fetch())
{
switch($DATA_TYPE)
{
default: $cnt = intval($arD["SESSIONS"])+intval($arD["SESSIONS_BACK"]); break;
case "SESSION": $cnt = intval($arD["SESSIONS"]); break;
case "SESSION_BACK": $cnt = intval($arD["SESSIONS_BACK"]); break;
case "VISITOR_SUMMA": $cnt = intval($arD["GUESTS"])+intval($arD["GUESTS_BACK"]); break;
case "VISITOR": $cnt = intval($arD["GUESTS"]); break;
case "VISITOR_BACK": $cnt = intval($arD["GUESTS_BACK"]); break;
case "NEW_VISITOR": $cnt = intval($arD["NEW_GUESTS"]); break;
case "FAV_SUMMA": $cnt = intval($arD["FAVORITES"])+intval($arD["FAVORITES_BACK"]); break;
case "FAV": $cnt = intval($arD["FAVORITES"]); break;
case "FAV_BACK": $cnt = intval($arD["FAVORITES_BACK"]); break;
case "HOST_SUMMA": $cnt = intval($arD["C_HOSTS"])+intval($arD["HOSTS_BACK"]); break;
case "HOST": $cnt = intval($arD["C_HOSTS"]); break;
case "HOST_BACK": $cnt = intval($arD["HOSTS_BACK"]); break;
case "HIT_SUMMA": $cnt = intval($arD["HITS"])+intval($arD["HITS_BACK"]); break;
case "HIT": $cnt = intval($arD["HITS"]); break;
case "HIT_BACK": $cnt = intval($arD["HITS_BACK"]); break;
case "EVENT_SUMMA": $cnt = intval($arD["EVENTS"])+intval($arD["EVENTS_BACK"]); break;
case "EVENT": $cnt = intval($arD["EVENTS"]); break;
case "EVENT_BACK": $cnt = intval($arD["EVENTS_BACK"]); break;
case "MONEY_SUMMA": $cnt = doubleval($arD["MONEY"])+doubleval($arD["MONEY_BACK"]); break;
case "MONEY": $cnt = doubleval($arD["MONEY"]); break;
case "MONEY_BACK": $cnt = doubleval($arD["MONEY_BACK"]); break;
}
if ($cnt>0)
{
$arrDays[$arD["DATE_STAT"]]["D"] = $arD["DAY"];
$arrDays[$arD["DATE_STAT"]]["M"] = $arD["MONTH"];
$arrDays[$arD["DATE_STAT"]]["Y"] = $arD["YEAR"];
$arrDays[$arD["DATE_STAT"]][$arD["ADV_ID"]] = $cnt;
$arrLegend[$arD["ADV_ID"]]["ID"] = $arD["ADV_ID"];
$arrLegend[$arD["ADV_ID"]]["R1"] = $arD["REFERER1"];
$arrLegend[$arD["ADV_ID"]]["R2"] = $arD["REFERER2"];
$arrSum[$arD["ADV_ID"]] += $cnt;
}
}
$color = "";
reset($arrLegend);
$summa = 0;
$max = 0;
$total = sizeof($arrLegend);
while (list($key, $arr) = each($arrLegend))
{
$color = GetNextRGB($color, $total);
$arr["CLR"] = $color;
$arrLegend[$key] = $arr;
$arrLegend[$key]["SM"] = $arrSum[$key];
$summa += $arrSum[$key];
if ($arrSum[$key]>$max) $max = $arrSum[$key];
}
reset($arrDays);
reset($arrLegend);
$is_filtered = (IsFiltered($strSqlSearch));
return $arrDays;
}
public static function Delete($ID)
{
$err_mess = "File: ".__FILE__."<br>Line: ";
$DB = CDatabase::GetModuleConnection('statistic');
$ID = intval($ID);
if ($ID>0)
{
CAdv::Reset($ID);
$strSql = "DELETE FROM b_stat_adv_page WHERE ADV_ID=$ID";
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_stat_adv WHERE ID=$ID";
$DB->Query($strSql, false, $err_mess.__LINE__);
return true;
}
return false;
}
public static function Reset($ID)
{
$err_mess = "File: ".__FILE__."<br>Line: ";
$DB = CDatabase::GetModuleConnection('statistic');
$ID = intval($ID);
if ($ID>0)
{
$DB->StartTransaction();
$strSql = "DELETE FROM b_stat_adv_guest WHERE ADV_ID=$ID";
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_stat_adv_event WHERE ADV_ID=$ID";
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_stat_adv_searcher WHERE ADV_ID=$ID";
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_stat_adv_day WHERE ADV_ID=$ID";
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_stat_adv_event_day WHERE ADV_ID=$ID";
$DB->Query($strSql, false, $err_mess.__LINE__);
$strSql = "DELETE FROM b_stat_path_adv WHERE ADV_ID=$ID";
$DB->Query($strSql, false, $err_mess.__LINE__);
$arFields = array(
"GUESTS" => 0,
"NEW_GUESTS" => 0,
"FAVORITES" => 0,
"C_HOSTS" => 0,
"SESSIONS" => 0,
"HITS" => 0,
"DATE_FIRST" => "null",
"DATE_LAST" => "null",
"GUESTS_BACK" => 0,
"FAVORITES_BACK" => 0,
"HOSTS_BACK" => 0,
"SESSIONS_BACK" => 0,
"HITS_BACK" => 0
);
$DB->Update("b_stat_adv",$arFields,"WHERE ID=$ID",$err_mess.__LINE__,false,false,false);
$DB->Commit();
return true;
}
return false;
}
public static function DynamicDays($ADV_ID, $date1="", $date2="")
{
$arFilter = array("DATE1"=>$date1, "DATE2"=>$date2);
$d=0;
$by="";
$order="";
$arMaxMin=array();
$z = CAdv::GetDynamicList($ADV_ID, $by, $order, $arMaxMin, $arFilter);
while ($zr=$z->Fetch()) $d++;
return $d;
}
}