1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
adv.php
См. документацию.
1<?php
2
3class CAllAdv
4{
5 public static function SetByReferer($referer1, $referer2, &$arrADV, &$ref1, &$ref2)
6 {
7 $DB = CDatabase::GetModuleConnection('statistic');
8
9 // lookup campaign with referer1 and referer2
10 $referer1 = trim($referer1);
11 $referer1_sql = $referer1 <> ''? "REFERER1='".$DB->ForSql($referer1, 255)."'": "(REFERER1 is null or ".$DB->Length("REFERER1")."=0)";
12 $referer2 = trim($referer2);
13 $referer2_sql = $referer2 <> ''? "REFERER2='".$DB->ForSql($referer2, 255)."'": "(REFERER2 is null or ".$DB->Length("REFERER2")."=0)";
14
15 $strSql = "
16 SELECT
17 ID,
18 REFERER1,
19 REFERER2
20 FROM
21 b_stat_adv
22 WHERE
23 ".$referer1_sql."
24 and ".$referer2_sql."
25 ";
26 $w = $DB->Query($strSql);
27
28 $found = false;
29 while ($wr = $w->Fetch())
30 {
31 $found = true;
32 // return with parameters
33 $arrADV[] = intval($wr["ID"]);
34 $ref1 = $wr["REFERER1"];
35 $ref2 = $wr["REFERER2"];
36 }
37
38 if(!$found)
39 {
40 $NA = "";
41 if(COption::GetOptionString("statistic", "ADV_NA") == "Y")
42 {
43 $NA_1 = COption::GetOptionString("statistic", "AVD_NA_REFERER1");
44 $NA_2 = COption::GetOptionString("statistic", "AVD_NA_REFERER2");
45 if (($NA_1 <> '' || $NA_2 <> '') && $referer1==$NA_1 && $referer2==$NA_2)
46 $NA = "Y";
47 }
48
49 if((COption::GetOptionString("statistic", "ADV_AUTO_CREATE") == "Y") || ($NA == "Y"))
50 {
51 if(COption::GetOptionString("statistic", "REFERER_CHECK") == "Y")
52 {
53 $bGoodR = preg_match("/^([0-9A-Za-z_:;.,-])*$/", $referer1);
54 if($bGoodR)
55 $bGoodR = preg_match("/^([0-9A-Za-z_:;.,-])*$/", $referer2);
56 }
57 else
58 {
59 $bGoodR = true;
60 }
61
62 if($bGoodR)
63 {
64 // add new advertising campaign
65 $arFields = Array(
66 "REFERER1" => $referer1 <> '' ? "'".$DB->ForSql($referer1, 255)."'" : "null",
67 "REFERER2" => $referer2 <> '' ? "'".$DB->ForSql($referer2, 255)."'" : "null",
68 "DATE_FIRST" => $DB->GetNowFunction(),
69 "DATE_LAST" => $DB->GetNowFunction(),
70 );
71 $arrADV[] = $DB->Insert("b_stat_adv", $arFields);
72 $ref1 = $referer1;
73 $ref2 = $referer2;
74 }
75 }
76 }
77 }
78
79 public static function SetByPage($page, &$arrADV, &$ref1, &$ref2, $type="TO")
80 {
81 $DB = CDatabase::GetModuleConnection('statistic');
82
83 $strSql = "
84 SELECT
85 A.ID,
86 A.REFERER1,
87 A.REFERER2
88 FROM
89 b_stat_adv A
90 INNER JOIN b_stat_adv_page AP ON (AP.ADV_ID = A.ID and AP.C_TYPE='".$DB->ForSQL($type)."')
91 WHERE
92 AP.PAGE is not null
93 and ".$DB->Length("AP.PAGE")." > 0
94 and '".$DB->ForSQL($page)."' like ".$DB->Concat("'%'", "AP.PAGE", "'%'")."
95 ";
96
97 $w = $DB->Query($strSql);
98 while ($wr=$w->Fetch())
99 {
100 $arrADV[] = intval($wr["ID"]);
101 $ref1 = $wr["REFERER1"];
102 $ref2 = $wr["REFERER2"];
103 }
104 }
105
106 // returns arrays for graphics plot
107 public static function GetAnalysisGraphArray($arFilter, &$is_filtered, $DATA_TYPE="SESSION_SUMMA", &$arrLegend, &$summa, &$max)
108 {
109 $DB = CDatabase::GetModuleConnection('statistic');
110
111 $arSqlSearch = Array();
112 switch ($DATA_TYPE)
113 {
114 case "SESSION_SUMMA":
115 case "SESSION":
116 case "SESSION_BACK":
117 case "VISITOR_SUMMA":
118 case "VISITOR":
119 case "VISITOR_BACK":
120 case "NEW_VISITOR":
121 case "FAV_SUMMA":
122 case "FAV":
123 case "FAV_BACK":
124 case "HOST_SUMMA":
125 case "HOST":
126 case "HOST_BACK":
127 case "HIT_SUMMA":
128 case "HIT":
129 case "HIT_BACK":
130 unset($arFilter["EVENT_TYPE_ID"]);
131 unset($arFilter["EVENT_TYPE"]);
132 unset($arFilter["EVENT1"]);
133 unset($arFilter["EVENT2"]);
134 break;
135 }
136 if (is_array($arFilter))
137 {
138 foreach ($arFilter as $key => $val)
139 {
140 if(is_array($val))
141 {
142 if(count($val) <= 0)
143 continue;
144 }
145 else
146 {
147 if( ((string)$val == '') || ($val === "NOT_REF") )
148 continue;
149 }
150 $match_value_set = array_key_exists($key."_EXACT_MATCH", $arFilter);
151 $key = strtoupper($key);
152 switch($key)
153 {
154 case "DATE1":
155 if (CheckDateTime($val))
156 $arSqlSearch[] = "D.DATE_STAT>=".$DB->CharToDateFunction($val, "SHORT");
157 break;
158 case "DATE2":
159 if (CheckDateTime($val))
160 $arSqlSearch[] = "D.DATE_STAT<=".$DB->CharToDateFunction($val." 23:59:59", "FULL");
161 break;
162 case "EVENT_TYPE_ID":
163 case "EVENT_TYPE":
164 if (is_array($val)) $val = implode(" | ", $val);
165 $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
166 $arSqlSearch[] = GetFilterQuery("D.EVENT_ID",$val,$match);
167 break;
168 case "ADV_ID":
169 case "ADV":
170 if (is_array($val)) $val = implode(" | ", $val);
171 $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
172 $arSqlSearch[] = GetFilterQuery("D.ADV_ID",$val,$match);
173 break;
174 case "REFERER1":
175 case "REFERER2":
176 $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
177 $arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
178 break;
179 case "EVENT1":
180 case "EVENT2":
181 $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
182 $arSqlSearch[] = GetFilterQuery("E.".$key, $val, $match);
183 break;
184 }
185 }
186 }
187 $arrDays = array();
188 $arrLegend = array();
189 $arrSum = array();
190 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
191 $strSql = CAdv::GetAnalysisGraphArray_SQL($strSqlSearch, $DATA_TYPE);
192
193 $rsD = $DB->Query($strSql);
194 while ($arD = $rsD->Fetch())
195 {
196 switch($DATA_TYPE)
197 {
198 default: $cnt = intval($arD["SESSIONS"])+intval($arD["SESSIONS_BACK"]); break;
199 case "SESSION": $cnt = intval($arD["SESSIONS"]); break;
200 case "SESSION_BACK": $cnt = intval($arD["SESSIONS_BACK"]); break;
201 case "VISITOR_SUMMA": $cnt = intval($arD["GUESTS"])+intval($arD["GUESTS_BACK"]); break;
202 case "VISITOR": $cnt = intval($arD["GUESTS"]); break;
203 case "VISITOR_BACK": $cnt = intval($arD["GUESTS_BACK"]); break;
204 case "NEW_VISITOR": $cnt = intval($arD["NEW_GUESTS"]); break;
205 case "FAV_SUMMA": $cnt = intval($arD["FAVORITES"])+intval($arD["FAVORITES_BACK"]); break;
206 case "FAV": $cnt = intval($arD["FAVORITES"]); break;
207 case "FAV_BACK": $cnt = intval($arD["FAVORITES_BACK"]); break;
208 case "HOST_SUMMA": $cnt = intval($arD["C_HOSTS"])+intval($arD["HOSTS_BACK"]); break;
209 case "HOST": $cnt = intval($arD["C_HOSTS"]); break;
210 case "HOST_BACK": $cnt = intval($arD["HOSTS_BACK"]); break;
211 case "HIT_SUMMA": $cnt = intval($arD["HITS"])+intval($arD["HITS_BACK"]); break;
212 case "HIT": $cnt = intval($arD["HITS"]); break;
213 case "HIT_BACK": $cnt = intval($arD["HITS_BACK"]); break;
214 case "EVENT_SUMMA": $cnt = intval($arD["EVENTS"])+intval($arD["EVENTS_BACK"]); break;
215 case "EVENT": $cnt = intval($arD["EVENTS"]); break;
216 case "EVENT_BACK": $cnt = intval($arD["EVENTS_BACK"]); break;
217 case "MONEY_SUMMA": $cnt = doubleval($arD["MONEY"])+doubleval($arD["MONEY_BACK"]); break;
218 case "MONEY": $cnt = doubleval($arD["MONEY"]); break;
219 case "MONEY_BACK": $cnt = doubleval($arD["MONEY_BACK"]); break;
220 }
221 if ($cnt>0)
222 {
223 $arrDays[$arD["DATE_STAT"]]["D"] = $arD["DAY"];
224 $arrDays[$arD["DATE_STAT"]]["M"] = $arD["MONTH"];
225 $arrDays[$arD["DATE_STAT"]]["Y"] = $arD["YEAR"];
226 $arrDays[$arD["DATE_STAT"]][$arD["ADV_ID"]] = $cnt;
227 $arrLegend[$arD["ADV_ID"]]["ID"] = $arD["ADV_ID"];
228 $arrLegend[$arD["ADV_ID"]]["R1"] = $arD["REFERER1"];
229 $arrLegend[$arD["ADV_ID"]]["R2"] = $arD["REFERER2"];
230 $arrSum[$arD["ADV_ID"]] += $cnt;
231 }
232 }
233
234 $color = "";
235 $summa = 0;
236 $max = 0;
237 $total = sizeof($arrLegend);
238 foreach ($arrLegend as $key => $arr)
239 {
240 $color = GetNextRGB($color, $total);
241 $arr["CLR"] = $color;
242 $arrLegend[$key] = $arr;
243 $arrLegend[$key]["SM"] = $arrSum[$key];
244 $summa += $arrSum[$key];
245 if ($arrSum[$key]>$max) $max = $arrSum[$key];
246 }
247
248 $is_filtered = (IsFiltered($strSqlSearch));
249 return $arrDays;
250 }
251
252 public static function Delete($ID)
253 {
254 $DB = CDatabase::GetModuleConnection('statistic');
255 $ID = intval($ID);
256 if ($ID>0)
257 {
259 $strSql = "DELETE FROM b_stat_adv_page WHERE ADV_ID=$ID";
260 $DB->Query($strSql);
261 $strSql = "DELETE FROM b_stat_adv WHERE ID=$ID";
262 $DB->Query($strSql);
263 return true;
264 }
265 return false;
266 }
267
268 public static function Reset($ID)
269 {
270 $DB = CDatabase::GetModuleConnection('statistic');
271 $ID = intval($ID);
272 if ($ID>0)
273 {
274 $DB->StartTransaction();
275 $strSql = "DELETE FROM b_stat_adv_guest WHERE ADV_ID=$ID";
276 $DB->Query($strSql);
277 $strSql = "DELETE FROM b_stat_adv_event WHERE ADV_ID=$ID";
278 $DB->Query($strSql);
279 $strSql = "DELETE FROM b_stat_adv_searcher WHERE ADV_ID=$ID";
280 $DB->Query($strSql);
281 $strSql = "DELETE FROM b_stat_adv_day WHERE ADV_ID=$ID";
282 $DB->Query($strSql);
283 $strSql = "DELETE FROM b_stat_adv_event_day WHERE ADV_ID=$ID";
284 $DB->Query($strSql);
285 $strSql = "DELETE FROM b_stat_path_adv WHERE ADV_ID=$ID";
286 $DB->Query($strSql);
288 "GUESTS" => 0,
289 "NEW_GUESTS" => 0,
290 "FAVORITES" => 0,
291 "C_HOSTS" => 0,
292 "SESSIONS" => 0,
293 "HITS" => 0,
294 "DATE_FIRST" => "null",
295 "DATE_LAST" => "null",
296 "GUESTS_BACK" => 0,
297 "FAVORITES_BACK" => 0,
298 "HOSTS_BACK" => 0,
299 "SESSIONS_BACK" => 0,
300 "HITS_BACK" => 0
301 );
302 $DB->Update("b_stat_adv",$arFields,"WHERE ID=$ID",'',false,false,false);
303 $DB->Commit();
304 return true;
305 }
306 return false;
307 }
308
309 public static function DynamicDays($ADV_ID, $date1="", $date2="")
310 {
311 $arFilter = array("DATE1"=>$date1, "DATE2"=>$date2);
312 $d=0;
313 $arMaxMin=array();
314 $z = CAdv::GetDynamicList($ADV_ID, '', '', $arMaxMin, $arFilter);
315 while ($zr=$z->Fetch()) $d++;
316 return $d;
317 }
318}
$type
Определения options.php:106
static GetAnalysisGraphArray_SQL($strSqlSearch, $DATA_TYPE)
Определения adv.php:6
static GetDynamicList($ADV_ID, $by='s_date', $order='desc', &$arMaxMin=[], $arFilter=[])
Определения adv.php:931
Определения adv.php:4
static SetByPage($page, &$arrADV, &$ref1, &$ref2, $type="TO")
Определения adv.php:79
static Delete($ID)
Определения adv.php:252
static Reset($ID)
Определения adv.php:268
static DynamicDays($ADV_ID, $date1="", $date2="")
Определения adv.php:309
static GetAnalysisGraphArray($arFilter, &$is_filtered, $DATA_TYPE="SESSION_SUMMA", &$arrLegend, &$summa, &$max)
Определения adv.php:107
static SetByReferer($referer1, $referer2, &$arrADV, &$ref1, &$ref2)
Определения adv.php:5
$arFields
Определения dblapprove.php:5
$arr
Определения file_new.php:624
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
GetFilterSqlSearch($arSqlSearch=array(), $FilterLogic="FILTER_logic")
Определения filter_tools.php:397
GetFilterQuery($field, $val, $procent="Y", $ex_sep=array(), $clob="N", $div_fields="Y", $clob_upper="N")
Определения filter_tools.php:383
IsFiltered($strSqlSearch)
Определения filter_tools.php:337
$zr
Определения options.php:5
if($ajaxMode) $ID
Определения get_user.php:27
global $DB
Определения cron_frame.php:29
GetNextRGB($base_color, $total)
Определения img.php:93
$z
Определения options.php:31
CheckDateTime($datetime, $format=false)
Определения tools.php:398
if(empty($signedUserToken)) $key
Определения quickway.php:257
$page
Определения order_form.php:33
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$val
Определения options.php:1793
$max
Определения template_copy.php:262
$arFilter
Определения user_search.php:106