1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
advertising.php
См. документацию.
1<?php
8
9use \Bitrix\Main\Application;
10
11global
12 $arrViewedBanners, // баннеры показанные на данной странице
13 $arrADV_KEYWORDS, // массив ключевых слов для страницы
22
24$strAdvCurUri = false;
27 "BANNERS_ALL" => array(),
28 "BANNERS_CNT" => array(),
29 "CONTRACTS_ALL" => array(),
30 "CONTRACTS_CNT" => array(),
31);
34
35$nRandom1 = 4689*mt_rand(999, 31999);
36$nRandom2 = 4689*mt_rand(999, 31999);
37$nRandom3 = 4689*mt_rand(999, 31999);
38$nRandom4 = 4689*mt_rand(999, 31999);
39$nRandom5 = 4689*mt_rand(999, 31999);
40
41// Параметр указывающий допустимое процентное отклонение (превышение) от равномерности
42// прогресса ротации банера
43define("BANNER_UNIFORMITY_DIVERGENCE_COEF", 0.05);
44
45/*****************************************************************
46 Класс "Рекламный контракт"
47*****************************************************************/
48
50{
51 public static function err_mess()
52 {
53 $module_id = "advertising";
54 return "<br>Module: ".$module_id."<br>Class: CAdvContract_all<br>File: ".__FILE__;
55 }
56
57 public static function GetNextSort()
58 {
59 $rsContracts = CAdvContract::GetList("s_sort", "desc", array("ID" => "~1", "ID_EXACT_MATCH" => "Y"));
60 $arContract = $rsContracts->Fetch();
61 return intval($arContract["SORT"])+10;
62 }
63
64 /*****************************************************************
65 Группа функций по работе с ролями на модуль
66
67 Идентификаторы ролей:
68
69 D - доступ закрыт
70 R - рекламодатель
71 T - менеджер баннеров
72 V - демо-доступ
73 W - администратор рекламы
74
75 *****************************************************************/
76
77 public static function GetDeniedRoleID()
78 {
79 return "D";
80 }
81
82 public static function GetAdvertiserRoleID()
83 {
84 return "R";
85 }
86
87 public static function GetManagerRoleID()
88 {
89 return "T";
90 }
91
92 public static function GetDemoRoleID()
93 {
94 return "V";
95 }
96
97 public static function GetAdminRoleID()
98 {
99 return "W";
100 }
101
102 // возвращает true если заданный пользователь имеет заданную роль на модуль
103 public static function HaveRole($role, $USER_ID=false)
104 {
105 global $USER, $APPLICATION;
106
107 if($USER_ID === false && is_object($USER))
108 $USER_ID = $USER->GetID();
109 $USER_ID = intval($USER_ID);
110
111 if ($USER_ID>0)
112 {
113 if(is_object($USER) && $USER_ID == $USER->GetID())
114 $arrGroups = $USER->GetUserGroupArray();
115 else
116 $arrGroups = CUser::GetUserGroup($USER_ID);
117
118 $arRoles = $APPLICATION->GetUserRoles("advertising", $arrGroups);
119 if(in_array($role, $arRoles))
120 return true;
121 }
122 return false;
123 }
124
125 // true - если пользователь имеет роль "рекламодатель"
126 // false - в противном случае
127 public static function IsAdvertiser($USER_ID=false)
128 {
130 }
131
132 // true - если пользователь имеет роль "администратор рекламы"
133 // false - в противном случае
134 public static function IsAdmin($USER_ID=false)
135 {
136 global $USER;
137 if ($USER_ID===false && is_object($USER))
138 {
139 if ($USER->IsAdmin()) return true;
140 }
142 }
143
144 // true - если пользователь имеет роль "демо-доступ"
145 // false - в противном случае
146 public static function IsDemo($USER_ID=false)
147 {
149 }
150
151 // true - если пользователь имеет право на модуль "менеджер баннеров" и выше
152 // false - в противном случае
153 public static function IsManager($USER_ID=false)
154 {
156 }
157
158 // возвращает массив ID групп для которых задана роль
159 // $role - идентификатор роли
160 public static function GetGroupsByRole($role)
161 {
162 global $APPLICATION, $USER;
163 if (!is_object($USER)) $USER = new CUser;
164 $arGroups = array();
165 $z = CGroup::GetList("dropdown", "asc", array("ACTIVE" => "Y"));
166 while($zr = $z->Fetch())
167 {
168 $arRoles = $APPLICATION->GetUserRoles("advertising", array(intval($zr["ID"])), "Y", "N");
169 if (in_array($role, $arRoles)) $arGroups[] = intval($zr["ID"]);
170 }
171 return array_unique($arGroups);
172 }
173
174 // возвращает массив пользователей имеющих право на модуль "рекламодатель"
175 public static function GetAdvertisersArray()
176 {
177 $arrRes = array();
179 if (is_array($arGroups) && count($arGroups)>0)
180 {
181 $rsUser = CUser::GetList("id", "desc", array("ACTIVE" => "Y", "GROUPS_ID" => $arGroups));
182 while ($arUser = $rsUser->Fetch()) $arrRes[] = $arUser;
183 }
184 return $arrRes;
185 }
186
187 // возвращает массив EMail адресов всех пользователей имеющих заданную роль
188 public static function GetEmailArrayByRole($role)
189 {
190 global $USER;
191 if (!is_object($USER)) $USER = new CUser;
192 $arrEMail = array();
194 if (is_array($arGroups) && count($arGroups)>0)
195 {
196 $rsUser = CUser::GetList("id", "desc", array("ACTIVE" => "Y", "GROUPS_ID" => $arGroups));
197 while ($arUser = $rsUser->Fetch())
198 {
199 $arrEMail[] = $arUser["EMAIL"];
200 }
201 }
202 return array_unique($arrEMail);
203 }
204
205 // возвращает массив EMail'ов всех пользователей имеющих роль "администратор"
206 public static function GetAdminEmails()
207 {
209 }
210
211 // возвращает массив EMail'ов всех пользователей имеющих роль "менеджер баннеров"
212 public static function GetManagerEmails()
213 {
215 }
216
217
218 /*****************************************************************
219 Группа функций по работе с правами на контракт
220
221 Идентификаторы прав:
222
223 VIEW - просмотр настроек контракта, просмотр всех баннеров контракта и их графиков
224 ADD - просмотр настроек контракта, управление баннерами контракта, просмотр графиков баннеров
225 EDIT - управление частью полей контракта, просмотр всех баннеров контракта и их графиков
226
227 *****************************************************************/
228
229 // получение массива максимальных прав доступа на контракт
230 public static function GetMaxPermissionsArray()
231 {
232 return array("VIEW", "ADD", "EDIT");
233 }
234
235 // возвращает массивы EMail'ов всех пользователей имеющих доступ к заданному контракту (владельцы контракта)
236 public static function GetOwnerEmails($CONTRACT_ID, &$OWNER_EMAIL, &$ADD_EMAIL, &$VIEW_EMAIL, &$EDIT_EMAIL)
237 {
238 $OWNER_EMAIL = array();
239 $VIEW_EMAIL = array();
240 $ADD_EMAIL = array();
241 $EDIT_EMAIL = array();
242 $arrPERM = CAdvContract::GetContractPermissions($CONTRACT_ID);
243 foreach ($arrPERM as $perm => $arr)
244 {
245 if (is_array($arr) && count($arr)>0)
246 {
247 foreach($arr as $ar)
248 {
249 $OWNER_EMAIL[] = $ar["USER_EMAIL"];
250 if ($perm=="VIEW") $VIEW_EMAIL[] = $ar["USER_EMAIL"];
251 if ($perm=="ADD") $ADD_EMAIL[] = $ar["USER_EMAIL"];
252 if ($perm=="EDIT") $EDIT_EMAIL[] = $ar["USER_EMAIL"];
253 }
254 }
255 }
256 $OWNER_EMAIL = array_unique($OWNER_EMAIL);
257 $VIEW_EMAIL = array_unique($VIEW_EMAIL);
258 $ADD_EMAIL = array_unique($ADD_EMAIL);
259 $EDIT_EMAIL = array_unique($EDIT_EMAIL);
260 }
261
262 // получение массива прав текущего пользователя по всем контрактам
263 public static function GetUserPermissions($CONTRACT_ID=0, $USER_ID=false)
264 {
265 $err_mess = (CAdvContract_all::err_mess())."<br>Function: GetUserPermissions<br>Line: ";
266 global $DB, $USER;
267 static $CONTRACT_RIGHTS = array();
268 $USER_ID = ($USER_ID===false) ? intval($USER->GetID()) : intval($USER_ID);
269 if (intval($USER_ID)<=0) return false;
270 $CONTRACT_ID = intval($CONTRACT_ID);
271 $arrRes = array();
272
273 if ($CONTRACT_ID>0 && is_set($CONTRACT_RIGHTS[$USER_ID], $CONTRACT_ID))
274 {
275 $arrRes = $CONTRACT_RIGHTS[$USER_ID];
276 }
277 else
278 {
279 $isManager = CAdvContract::IsManager($USER_ID);
280 $isAdmin = CAdvContract::IsAdmin($USER_ID);
281
282 if ($isAdmin) $arrRes[0] = CAdvContract::GetMaxPermissionsArray();
283 elseif ($isManager) $arrRes[0] = array("VIEW", "ADD");
284 else $arrRes[0] = array();
285
286 $strSqlSearch = "";
287 if ($CONTRACT_ID>0)
288 $strSqlSearch = " and C.ID= $CONTRACT_ID ";
289 $strSql = "
290 SELECT
291 C.ID,
292 CU.PERMISSION
293 FROM
294 b_adv_contract C
295 LEFT JOIN b_adv_contract_2_user CU ON (CU.CONTRACT_ID=C.ID and CU.USER_ID=$USER_ID)
296 WHERE
297 1=1
298 $strSqlSearch
299 ";
300 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
301 while ($ar = $rs->Fetch()) $arrRes[$ar["ID"]][] = $ar["PERMISSION"];
302 if ($isAdmin || $isManager)
303 {
304 foreach ($arrRes as $cid => $arrPerm)
305 {
306 if ($isAdmin) $arrPerm = CAdvContract::GetMaxPermissionsArray();
307 elseif ($isManager)
308 {
309 $arrPerm[] = "VIEW";
310 $arrPerm[] = "ADD";
311 $arrPerm = array_unique($arrPerm);
312 }
313 $arrRes[$cid] = $arrPerm;
314 }
315 }
316
317 foreach ($arrRes as $cid => $arrPerm)
318 {
319 TrimArr($arrPerm);
320 $CONTRACT_RIGHTS[$USER_ID][$cid] = $arrPerm;
321 $arrRes[$cid] = $arrPerm;
322 }
323 }
324
325 return $arrRes;
326 }
327
328 // true - если пользователь имеет доступ к контракту
329 // false - в противном случае
330 public static function IsOwner($CONTRACT_ID, $USER_ID=false)
331 {
332 $CONTRACT_ID = intval($CONTRACT_ID);
333 if ($CONTRACT_ID<=0) return false;
334 $arrPERM = CAdvContract::GetUserPermissions($CONTRACT_ID, $USER_ID);
335 $arrPERM = $arrPERM[$CONTRACT_ID];
336 if (is_array($arrPERM) && count($arrPERM)>0) return true;
337 else return false;
338 }
339
340 // получение массива всех прав доступа по заданному контракту
341 public static function GetContractPermissions($CONTRACT_ID)
342 {
343 $err_mess = (CAdvContract_all::err_mess())."<br>Function: GetContractPermissions<br>Line: ";
344 global $DB;
345 $arrPerm = array();
346 $CONTRACT_ID = intval($CONTRACT_ID);
347 if ($CONTRACT_ID<=0) return false;
348 $strSql = "
349 SELECT
350 CU.USER_ID,
351 CU.PERMISSION,
352 U.LOGIN,
353 U.NAME,
354 U.LAST_NAME,
355 U.EMAIL
356 FROM
357 b_adv_contract_2_user CU,
358 b_user U
359 WHERE
360 CU.CONTRACT_ID = $CONTRACT_ID
361 and U.ID = CU.USER_ID
362 ORDER BY CU.ID
363 ";
364 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
365 while ($ar = $rs->Fetch())
366 {
367 $arrPerm[$ar["PERMISSION"]][] = array(
368 "USER_ID" => $ar["USER_ID"],
369 "USER_LOGIN" => $ar["LOGIN"],
370 "USER_NAME" => $ar["NAME"],
371 "USER_LAST_NAME" => $ar["LAST_NAME"],
372 "USER_EMAIL" => $ar["EMAIL"]
373 );
374 }
375
376 return $arrPerm;
377 }
378
379 /*****************************************************************
380 Группа функций по отправке почты
381 *****************************************************************/
382
383 public static function SendEMail($arContract, $mess="")
384 {
385 $CONTRACT_ID = $arContract["ID"];
386
387 $BCC = array();
388 $OWNER_EMAIL = array();
389 $ADD_EMAIL = array();
390 $EDIT_EMAIL = array();
391
392 $MANAGER_EMAIL = CAdvContract::GetManagerEmails();
393 $ADMIN_EMAIL = CAdvContract::GetAdminEmails();
394 $ADMIN_EMAIL = array_merge($MANAGER_EMAIL, $ADMIN_EMAIL);
395 $ADMIN_EMAIL = array_unique($ADMIN_EMAIL);
396 CAdvContract::GetOwnerEmails($CONTRACT_ID, $OWNER_EMAIL, $ADD_EMAIL, $VIEW_EMAIL, $EDIT_EMAIL);
397
398 $EMAIL_TO = $OWNER_EMAIL;
399 if (count($EMAIL_TO)<=0)
400 {
401 $EMAIL_TO = $ADMIN_EMAIL;
402 }
403 else $BCC = $ADMIN_EMAIL;
404
405 $CREATED_BY = $MODIFIED_BY = "";
406 if (intval($arContract["CREATED_BY"])>0)
407 {
408 $rsUser = CUser::GetByID($arContract["CREATED_BY"]);
409 if ($arUser = $rsUser->Fetch())
410 {
411 $CREATED_BY = "[".$arUser["ID"]."] (".$arUser["LOGIN"].") ".$arUser["NAME"]." ".$arUser["LAST_NAME"];
412 }
413 }
414 if (intval($arContract["MODIFIED_BY"])==intval($arContract["CREATED_BY"]) && intval($arContract["CREATED_BY"])>0)
415 {
416 $MODIFIED_BY = $CREATED_BY;
417 }
418 elseif (intval($arContract["MODIFIED_BY"])>0)
419 {
420 $rsUser = CUser::GetByID($arContract["MODIFIED_BY"]);
421 if ($arUser = $rsUser->Fetch())
422 {
423 $MODIFIED_BY = "[".$arUser["ID"]."] (".$arUser["LOGIN"].") ".$arUser["NAME"]." ".$arUser["LAST_NAME"];
424 }
425 }
426 if ($mess <> '')
427 $mess = "\n".$mess."\n";
428 $description = "";
429 if ($arContract["DESCRIPTION"] <> '')
430 $description = "\n".$arContract["DESCRIPTION"]."\n";
431 $arEventFields = array(
432 "ID" => $CONTRACT_ID,
433 "MESSAGE" => $mess,
434 "EMAIL_TO" => implode(",", $EMAIL_TO),
435 "ADMIN_EMAIL" => implode(",", $ADMIN_EMAIL),
436 "ADD_EMAIL" => implode(",", $ADD_EMAIL),
437 "STAT_EMAIL" => implode(",", $VIEW_EMAIL),
438 "EDIT_EMAIL" => implode(",", $EDIT_EMAIL),
439 "OWNER_EMAIL" => implode(",", $OWNER_EMAIL),
440 "BCC" => implode(",", $BCC),
441 "INDICATOR" => GetMessage("AD_".mb_strtoupper($arContract["LAMP"]."_CONTRACT_STATUS")),
442 "ACTIVE" => $arContract["ACTIVE"],
443 "NAME" => $arContract["NAME"],
444 "DESCRIPTION" => $description,
445 "MAX_SHOW_COUNT" => $arContract["MAX_SHOW_COUNT"],
446 "SHOW_COUNT" => $arContract["SHOW_COUNT"],
447 "MAX_CLICK_COUNT" => $arContract["MAX_CLICK_COUNT"],
448 "CLICK_COUNT" => $arContract["CLICK_COUNT"],
449 "BANNERS" => $arContract["BANNER_COUNT"],
450 "DATE_SHOW_FROM" => $arContract["DATE_SHOW_FROM"],
451 "DATE_SHOW_TO" => $arContract["DATE_SHOW_TO"],
452 "DATE_CREATE" => $arContract["DATE_CREATE"],
453 "CREATED_BY" => $CREATED_BY,
454 "DATE_MODIFY" => $arContract["DATE_MODIFY"],
455 "MODIFIED_BY" => $MODIFIED_BY
456 );
457 $arrSITE = CAdvContract::GetSiteArray($CONTRACT_ID);
458 CEvent::Send("ADV_CONTRACT_INFO", $arrSITE, $arEventFields);
459 }
460
461 public static function SendInfo()
462 {
463 $err_mess = (CAdvContract_all::err_mess())."<br>Function: SendInfo<br>Line: ";
464 global $DB;
465 $rsContracts = CAdvContract::GetList("", "", array("LAMP" => "red", "EMAIL_COUNT_2" => "0"), null, "N");
466 while ($arContract = $rsContracts->Fetch())
467 {
468 CAdvContract::SendEMail($arContract, "< ".GetMessage("AD_CONTRACT_NOT_ACTIVE")." >");
469 $arFields = array("EMAIL_COUNT" => "EMAIL_COUNT + 1");
470 $DB->Update("b_adv_contract",$arFields,"WHERE ID='".$arContract["ID"]."'",$err_mess.__LINE__);
471 }
472 return "CAdvContract::SendInfo();";
473 }
474
475 /*****************************************************************
476 Группа функций по управлению контрактом
477 *****************************************************************/
478
479 public static function CheckFilter($arFilter)
480 {
481 global $strError;
482 $str = "";
483 $find_date_modify_1 = $arFilter["DATE_MODIFY_1"] ?? '';
484 $find_date_modify_2 = $arFilter["DATE_MODIFY_2"] ?? '';
485 if (trim($find_date_modify_1) <> '' || trim($find_date_modify_2) <> '')
486 {
487 $date_1_ok = false;
488 $date1_stm = MkDateTime(ConvertDateTime($find_date_modify_1,"D.M.Y"),"d.m.Y");
489 $date2_stm = MkDateTime(ConvertDateTime($find_date_modify_2,"D.M.Y")." 23:59","d.m.Y H:i");
490 if (!$date1_stm && trim($find_date_modify_1) <> '')
491 $str.= GetMessage("AD_ERROR_WRONG_DATE_MODIFY_FROM")."<br>";
492 else $date_1_ok = true;
493 if (!$date2_stm && trim($find_date_modify_2) <> '')
494 $str.= GetMessage("AD_ERROR_WRONG_DATE_MODIFY_TILL")."<br>";
495 elseif ($date_1_ok && $date2_stm <= $date1_stm && $date2_stm <> '')
496 $str.= GetMessage("AD_ERROR_FROM_TILL_DATE_MODIFY")."<br>";
497 }
498 $strError .= $str;
499 if ($str <> '')
500 return false;
501 else
502 return true;
503 }
504
505 // получаем массив времени и дней недели связанных с контрактом
506 public static function GetWeekdayArray($CONTRACT_ID)
507 {
508 $err_mess = (CAdvContract_all::err_mess())."<br>Function: GetWeekdayArray<br>Line: ";
509 global $DB;
510 $CONTRACT_ID = intval($CONTRACT_ID);
511 if ($CONTRACT_ID<=0) return false;
512 $arrRes = array();
513 $strSql = "
514 SELECT DISTINCT
515 C_WEEKDAY,
516 C_HOUR
517 FROM
518 b_adv_contract_2_weekday
519 WHERE
520 CONTRACT_ID = $CONTRACT_ID
521 ";
522 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
523 while ($ar = $rs->Fetch())
524 {
525 $arrRes[$ar["C_WEEKDAY"]][] = $ar["C_HOUR"];
526 }
527 return $arrRes;
528 }
529
530 // получаем массив типов связанных с контрактом
531 public static function GetTypeArray($CONTRACT_ID)
532 {
533 $err_mess = (CAdvContract_all::err_mess())."<br>Function: GetTypeArray<br>Line: ";
534 global $DB;
535
536 $CONTRACT_ID = intval($CONTRACT_ID);
537 if($CONTRACT_ID<=0)
538 return array();
539
540 $strSql = "
541 SELECT T.SID,
542 T.NAME,
543 T.SORT,
544 CT.TYPE_SID,
545 CT.CONTRACT_ID
546 FROM
547 b_adv_contract_2_type CT
548 INNER JOIN b_adv_type T ON (T.SID = CT.TYPE_SID or CT.TYPE_SID='ALL')
549 WHERE CT.CONTRACT_ID=".$CONTRACT_ID."
550 ORDER BY T.SORT
551 ";
552
553 $arrRes = array();
554 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
555 while($ar = $rs->Fetch())
556 {
557 $arrRes[$ar["SID"]] = $ar["NAME"];
558 if($ar["TYPE_SID"] == 'ALL')
559 $arrRes["ALL"] = true;
560 }
561 return $arrRes;
562 }
563
564 // получаем массив языков связанных с контрактом
565 public static function GetSiteArray($CONTRACT_ID)
566 {
567 $err_mess = (CAdvContract_all::err_mess())."<br>Function: GetSiteArray<br>Line: ";
568 global $DB;
569 $CONTRACT_ID = intval($CONTRACT_ID);
570 if ($CONTRACT_ID<=0) return false;
571 $arrRes = array();
572 $strSql = "
573 SELECT
574 CS.SITE_ID
575 FROM
576 b_adv_contract_2_site CS
577 WHERE
578 CS.CONTRACT_ID = $CONTRACT_ID
579 ";
580
581 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
582 while ($ar = $rs->Fetch()) $arrRes[] = $ar["SITE_ID"];
583 return $arrRes;
584 }
585
586 // получаем массив страниц связанных с контрактом
587 public static function GetPageArray($CONTRACT_ID, $SHOW="SHOW")
588 {
589 $err_mess = (CAdvContract_all::err_mess())."<br>Function: GetPageArray<br>Line: ";
590 global $DB;
591 $CONTRACT_ID = intval($CONTRACT_ID);
592 if ($CONTRACT_ID<=0) return false;
593 $arrRes = array();
594 $SHOW_ON_PAGE = ($SHOW=="NOT_SHOW") ? "'N'" : "'Y'";
595 $strSql = "
596 SELECT DISTINCT
597 PAGE
598 FROM
599 b_adv_contract_2_page
600 WHERE
601 CONTRACT_ID = $CONTRACT_ID
602 and SHOW_ON_PAGE = $SHOW_ON_PAGE
603 ";
604 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
605 while ($ar = $rs->Fetch()) $arrRes[] = $ar["PAGE"];
606 return $arrRes;
607 }
608
609 // получаем контракт по ID
610 public static function GetByID($CONTRACT_ID, $CHECK_RIGHTS="Y")
611 {
612 $CONTRACT_ID = intval($CONTRACT_ID);
613 if ($CONTRACT_ID<=0) return false;
615 "ID" => $CONTRACT_ID,
616 "ID_EXACT_MATCH" => "Y"
617 );
618 $rs = CAdvContract::GetList('', '', $arFilter, null, $CHECK_RIGHTS);
619 return $rs;
620 }
621
622 // проверка полей при модификации контракта
623 public static function CheckFields($arFields, $CONTRACT_ID, $CHECK_RIGHTS="Y")
624 {
625 global $strError;
626 $str = "";
627 $arrPERM = false;
628 if ($CHECK_RIGHTS=="Y")
629 {
630 $arrPERM = CAdvContract::GetUserPermissions($CONTRACT_ID);
631 $arrPERM = $arrPERM[$CONTRACT_ID];
632 }
633 if ($CHECK_RIGHTS!="Y" || (is_array($arrPERM) && in_array("EDIT", $arrPERM)))
634 {
635 if ($arFields["DATE_SHOW_FROM"] <> '')
636 {
637 if (!CheckDateTime($arFields["DATE_SHOW_FROM"]))
638 $str.= GetMessage("AD_ERROR_WRONG_DATE_SHOW_FROM_CONTRACT")."<br>";
639 }
640 if ($arFields["DATE_SHOW_TO"] <> '')
641 {
642 if (!CheckDateTime($arFields["DATE_SHOW_TO"]))
643 $str .= GetMessage("AD_ERROR_WRONG_DATE_SHOW_TO_CONTRACT")."<br>";
644 }
645 }
646 else
647 {
648 if ($CONTRACT_ID>0)
649 $str .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_CONTRACT")."<br>";
650 else
651 $str .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_FOR_NEW_CONTRACT")."<br>";
652 }
653
654 $strError .= $str;
655 if ($str <> '')
656 return false;
657 else
658 return true;
659 }
660
661 // добавляем новый контракт или модифицируем существующий
662 public static function Set($arFields, $CONTRACT_ID, $CHECK_RIGHTS="Y")
663 {
664 $err_mess = (CAdvContract_all::err_mess())."<br>Function: Set<br>Line: ";
665 global $DB, $USER;
666 if (CAdvContract::CheckFields($arFields, $CONTRACT_ID, $CHECK_RIGHTS))
667 {
668 if ($CHECK_RIGHTS=="Y")
669 {
670 $USER_ID = intval($USER->GetID());
671 $isAdmin = CAdvContract::IsAdmin();
672 }
673 else
674 {
675 if (is_object($USER)) $USER_ID = intval($USER->GetID()); else $USER_ID = 0;
676 $isAdmin = true;
677 }
678
679 $check_activity = "N";
680 $arFields_i = array();
681 $arrKeys = array_keys($arFields);
682 if ($isAdmin)
683 {
684 if (in_array("SHOW_COUNT", $arrKeys))
685 {
686 $check_activity = "Y";
687 $arFields_i["SHOW_COUNT"] = intval($arFields["SHOW_COUNT"]);
688 }
689
690 if (in_array("VISITOR_COUNT", $arrKeys))
691 {
692 $check_activity = "Y";
693 $arFields_i["VISITOR_COUNT"] = intval($arFields["VISITOR_COUNT"]);
694 }
695
696 if (in_array("CLICK_COUNT", $arrKeys))
697 {
698 $check_activity = "Y";
699 $arFields_i["CLICK_COUNT"] = intval($arFields["CLICK_COUNT"]);
700 }
701
702 if (in_array("ACTIVE", $arrKeys) && ($arFields["ACTIVE"]=="Y" || $arFields["ACTIVE"]=="N"))
703 {
704 $check_activity = "Y";
705 $arFields_i["ACTIVE"] = "'".$arFields["ACTIVE"]."'";
706 }
707
708 if (in_array("WEIGHT", $arrKeys))
709 $arFields_i["WEIGHT"] = intval($arFields["WEIGHT"]);
710
711 if (in_array("ADMIN_COMMENTS", $arrKeys))
712 $arFields_i["ADMIN_COMMENTS"] = "'".$DB->ForSql($arFields["ADMIN_COMMENTS"],2000)."'";
713
714 if (in_array("KEYWORDS", $arrKeys))
715 $arFields_i["KEYWORDS"] = "'".$DB->ForSql($arFields["KEYWORDS"], 2000)."'";;
716
717 if (in_array("MAX_SHOW_COUNT", $arrKeys))
718 {
719 $check_activity = "Y";
720 if ($arFields["MAX_SHOW_COUNT"] <> '')
721 $arFields_i["MAX_SHOW_COUNT"] = intval($arFields["MAX_SHOW_COUNT"]);
722 else
723 $arFields_i["MAX_SHOW_COUNT"] = "null";
724 }
725
726 if (in_array("MAX_VISITOR_COUNT", $arrKeys))
727 {
728 $check_activity = "Y";
729 if ($arFields["MAX_VISITOR_COUNT"] <> '')
730 $arFields_i["MAX_VISITOR_COUNT"] = intval($arFields["MAX_VISITOR_COUNT"]);
731 else
732 $arFields_i["MAX_VISITOR_COUNT"] = "null";
733 }
734
735 if (in_array("MAX_CLICK_COUNT", $arrKeys))
736 {
737 $check_activity = "Y";
738 if ($arFields["MAX_CLICK_COUNT"] <> '')
739 $arFields_i["MAX_CLICK_COUNT"] = intval($arFields["MAX_CLICK_COUNT"]);
740 else
741 $arFields_i["MAX_CLICK_COUNT"] = "null";
742 }
743
744 if (in_array("DATE_SHOW_FROM", $arrKeys))
745 {
746 $check_activity = "Y";
747 if ($arFields["DATE_SHOW_FROM"] <> '')
748 {
749 $arFields_i["DATE_SHOW_FROM"] = $DB->CharToDateFunction($arFields["DATE_SHOW_FROM"]);
750 }
751 else $arFields_i["DATE_SHOW_FROM"] = "null";
752 }
753
754 if (in_array("DATE_SHOW_TO", $arrKeys))
755 {
756 $check_activity = "Y";
757 if ($arFields["DATE_SHOW_TO"] <> '')
758 {
759 $time = "";
760 if(defined("FORMAT_DATE") && mb_strlen($arFields["DATE_SHOW_TO"]) <= mb_strlen(FORMAT_DATE))
761 {
762 $time = " 23:59:59";
763 }
764 $arFields_i["DATE_SHOW_TO"] = $DB->CharToDateFunction($arFields["DATE_SHOW_TO"].$time);
765 }
766 else
767 {
768 $arFields_i["DATE_SHOW_TO"] = "null";
769 }
770 }
771
772 if (in_array("DEFAULT_STATUS_SID", $arrKeys))
773 {
774 $arrStatus = CAdvBanner::GetStatusList("N");
775 $arrV = array_values($arrStatus["reference_id"]);
776 if (in_array($arFields["DEFAULT_STATUS_SID"], $arrV))
777 {
778 $arFields_i["DEFAULT_STATUS_SID"] = "'".$DB->ForSql($arFields["DEFAULT_STATUS_SID"],255)."'";
779 }
780 }
781
782 if (in_array("SORT", $arrKeys))
783 $arFields_i["SORT"] = intval($arFields["SORT"]);
784
785 if (in_array("NAME", $arrKeys))
786 $arFields_i["NAME"] = "'".$DB->ForSql($arFields["NAME"],255)."'";
787 if (in_array("DESCRIPTION", $arrKeys))
788 $arFields_i["DESCRIPTION"] = "'".$DB->ForSql($arFields["DESCRIPTION"],2000)."'";
789
790 }
791
792 $arFields_i["EMAIL_COUNT"] = 0;
793 $str_PREV_LAMP = "";
794
795 if (intval($CONTRACT_ID)>0)
796 {
797 $rsContract = CAdvContract::GetByID($CONTRACT_ID);
798 $arContract = $rsContract->Fetch();
799 $str_PREV_LAMP = $arContract["LAMP"];
800
801 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"]))
802 $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
803 else
804 $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
805
806 if (in_array("MODIFIED_BY", $arrKeys))
807 $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
808 else
809 $arFields_i["MODIFIED_BY"] = $USER_ID;
810
811 $DB->Update("b_adv_contract",$arFields_i,"WHERE ID='".intval($CONTRACT_ID)."'",$err_mess.__LINE__);
812 }
813 elseif ($isAdmin)
814 {
815 $check_activity = "Y";
816
817 if (in_array("DATE_CREATE", $arrKeys) && CheckDateTime($arFields["DATE_CREATE"]))
818 $arFields_i["DATE_CREATE"] = $DB->CharToDateFunction($arFields["DATE_CREATE"]);
819 else
820 $arFields_i["DATE_CREATE"] = $DB->GetNowFunction();
821
822 if (in_array("CREATED_BY", $arrKeys))
823 $arFields_i["CREATED_BY"] = intval($arFields["CREATED_BY"]);
824 else
825 $arFields_i["CREATED_BY"] = $USER_ID;
826
827 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"]))
828 $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
829 else
830 $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
831
832 if (in_array("MODIFIED_BY", $arrKeys))
833 $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
834 else
835 $arFields_i["MODIFIED_BY"] = $USER_ID;
836
837 $CONTRACT_ID = $DB->Insert("b_adv_contract",$arFields_i, $err_mess.__LINE__);
838 }
839
840 $CONTRACT_ID = intval($CONTRACT_ID);
841
842 if ($CONTRACT_ID>0)
843 {
844 if ($isAdmin)
845 {
846 if (in_array("arrSITE", $arrKeys))
847 {
848 CAdvContract::DeleteSiteLink($CONTRACT_ID);
849 if (is_array($arFields["arrSITE"]))
850 {
851 $arrSite = array_unique($arFields["arrSITE"]);
852 foreach($arrSite as $sid)
853 {
854 if (trim($sid) <> '')
855 {
856 $strSql = "INSERT INTO b_adv_contract_2_site(CONTRACT_ID, SITE_ID) VALUES ($CONTRACT_ID, '".$DB->ForSql($sid, 2)."')";
857 $DB->Query($strSql, false, $err_mess.__LINE__);
858 }
859 }
860 }
861 }
862
863 if (in_array("arrSHOW_PAGE", $arrKeys))
864 {
865 CAdvContract::DeletePageLink($CONTRACT_ID, " and SHOW_ON_PAGE='Y'");
866 if (is_array($arFields["arrSHOW_PAGE"]))
867 {
868 $arrPage = array_unique($arFields["arrSHOW_PAGE"]);
869 foreach($arrPage as $page)
870 {
871 $page = trim($page);
872 if ($page <> '')
873 {
874 $arFields_i = array(
875 "CONTRACT_ID" => $CONTRACT_ID,
876 "PAGE" => "'".$DB->ForSql($page, 255)."'",
877 "SHOW_ON_PAGE" => "'Y'"
878 );
879 $DB->Insert("b_adv_contract_2_page",$arFields_i, $err_mess.__LINE__);
880 }
881 }
882 }
883 }
884
885 if (in_array("arrNOT_SHOW_PAGE", $arrKeys))
886 {
887 CAdvContract::DeletePageLink($CONTRACT_ID, " and SHOW_ON_PAGE='N'");
888 if (is_array($arFields["arrNOT_SHOW_PAGE"]))
889 {
890 $arrPage = array_unique($arFields["arrNOT_SHOW_PAGE"]);
891 foreach($arrPage as $page)
892 {
893 $page = trim($page);
894 if ($page <> '')
895 {
896 $arFields_i = array(
897 "CONTRACT_ID" => $CONTRACT_ID,
898 "PAGE" => "'".$DB->ForSql($page, 255)."'",
899 "SHOW_ON_PAGE" => "'N'"
900 );
901 $DB->Insert("b_adv_contract_2_page",$arFields_i, $err_mess.__LINE__);
902 }
903 }
904 }
905 }
906
907 if (in_array("arrTYPE", $arrKeys))
908 {
909 CAdvContract::DeleteTypeLink($CONTRACT_ID);
910 if (is_array($arFields["arrTYPE"]))
911 {
912 $arrType = array_unique($arFields["arrTYPE"]);
913 foreach($arrType as $type)
914 {
915 if (trim($type) <> '')
916 {
917 $strSql = "INSERT INTO b_adv_contract_2_type(CONTRACT_ID, TYPE_SID) VALUES ($CONTRACT_ID, '".$DB->ForSql($type, 255)."')";
918 $DB->Query($strSql, false, $err_mess.__LINE__);
919 }
920 }
921 }
922 }
923
924 if (in_array("arrWEEKDAY", $arrKeys))
925 {
927 if (is_array($arFields["arrWEEKDAY"]))
928 {
929 $arrWeekday = array_keys($arFields["arrWEEKDAY"]);
930 $arrWeekday = array_unique($arrWeekday);
931 if (is_array($arrWeekday) && count($arrWeekday)>0)
932 {
933 foreach ($arrWeekday as $weekday)
934 {
935 if (is_array($arFields["arrWEEKDAY"][$weekday]) && count($arFields["arrWEEKDAY"][$weekday])>0)
936 {
937 $arrHour = $arFields["arrWEEKDAY"][$weekday];
938 array_walk(
939 $arrHour,
940 function (&$item) {
941 $item = (int)$item;
942 }
943 );
944 $arrHour = array_unique($arrHour);
945 foreach($arrHour as $hour)
946 {
947 if ($hour>=0 && $hour<=23)
948 {
949 $strSql = "INSERT INTO b_adv_contract_2_weekday (CONTRACT_ID, C_WEEKDAY, C_HOUR) VALUES (".$CONTRACT_ID.", '".$DB->ForSql($weekday, 10)."', ".$hour.")";
950 $DB->Query($strSql, false, $err_mess.__LINE__);
951 }
952 }
953 }
954 }
955 }
956 }
957 }
958 }
959
960 if (in_array("arrUSER_VIEW", $arrKeys))
961 {
962 CAdvContract::DeleteUserLink($CONTRACT_ID, " and PERMISSION = 'VIEW'");
963 if (is_array($arFields["arrUSER_VIEW"]))
964 {
965 $arrUser = array_unique($arFields["arrUSER_VIEW"]);
966 foreach($arrUser as $user_id)
967 {
968 if (intval($user_id)>0)
969 {
970 $arFields_i = array(
971 "CONTRACT_ID" => $CONTRACT_ID,
972 "USER_ID" => intval($user_id),
973 "PERMISSION" => "'VIEW'"
974 );
975 $DB->Insert("b_adv_contract_2_user",$arFields_i, $err_mess.__LINE__);
976 }
977 }
978 }
979 }
980
981 if (in_array("arrUSER_ADD", $arrKeys))
982 {
983 CAdvContract::DeleteUserLink($CONTRACT_ID, " and PERMISSION = 'ADD'");
984 if (is_array($arFields["arrUSER_ADD"]))
985 {
986 $arrUser = array_unique($arFields["arrUSER_ADD"]);
987 foreach($arrUser as $user_id)
988 {
989 if (intval($user_id)>0)
990 {
991 $arFields_i = array(
992 "CONTRACT_ID" => $CONTRACT_ID,
993 "USER_ID" => intval($user_id),
994 "PERMISSION" => "'ADD'"
995 );
996 $DB->Insert("b_adv_contract_2_user",$arFields_i, $err_mess.__LINE__);
997 }
998 }
999 }
1000 }
1001
1002 if ($isAdmin)
1003 {
1004 if (in_array("arrUSER_EDIT", $arrKeys))
1005 {
1006 CAdvContract::DeleteUserLink($CONTRACT_ID, " and PERMISSION = 'EDIT'");
1007 if (is_array($arFields["arrUSER_EDIT"]))
1008 {
1009 $arrUser = array_unique($arFields["arrUSER_EDIT"]);
1010 foreach($arrUser as $user_id)
1011 {
1012 if (intval($user_id)>0)
1013 {
1014 $arFields_i = array(
1015 "CONTRACT_ID" => $CONTRACT_ID,
1016 "USER_ID" => intval($user_id),
1017 "PERMISSION" => "'EDIT'"
1018 );
1019 $DB->Insert("b_adv_contract_2_user",$arFields_i, $err_mess.__LINE__);
1020 }
1021 }
1022 }
1023 }
1024 }
1025
1026 if ($check_activity=="Y")
1027 {
1028 CTimeZone::Disable();
1029 $rsContract = CAdvContract::GetByID($CONTRACT_ID);
1030 CTimeZone::Enable();
1031
1032 $arContract = $rsContract->Fetch();
1033 $str_CURRENT_LAMP = $arContract["LAMP"];
1034 if ($str_PREV_LAMP!=$str_CURRENT_LAMP)
1035 {
1036 $mess = ($str_CURRENT_LAMP=="red") ? "< ".GetMessage("AD_CONTRACT_NOT_ACTIVE")." >" : "< ".GetMessage("AD_CONTRACT_ACTIVE")." >";
1037 CAdvContract::SendEMail($arContract, $mess);
1038 }
1039 if ($str_CURRENT_LAMP=="red")
1040 {
1041 $arFields = array("EMAIL_COUNT" => "EMAIL_COUNT + 1");
1042 $DB->Update("b_adv_contract",$arFields,"WHERE ID='".$CONTRACT_ID."'",$err_mess.__LINE__);
1043 }
1044 }
1045
1046 }
1047 }
1048 return $CONTRACT_ID;
1049 }
1050
1051 // удаление контракта
1052 public static function Delete($CONTRACT_ID, $CHECK_RIGHTS="Y")
1053 {
1054 $err_mess = (CAdvContract_all::err_mess())."<br>Function: Delete<br>Line: ";
1055 global $DB, $strError;
1056 $CONTRACT_ID = intval($CONTRACT_ID);
1057 if ($CONTRACT_ID<=1)
1058 return false;
1059 $isAdmin = ($CHECK_RIGHTS=="N"? true : CAdvContract::IsAdmin());
1060 if ($isAdmin)
1061 {
1062 $strSql = "SELECT ID FROM b_adv_banner WHERE CONTRACT_ID = $CONTRACT_ID";
1063 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
1064 while ($ar = $rs->Fetch()) CAdvBanner::Delete($ar["ID"], "N");
1065
1066 CAdvContract::DeletePageLink($CONTRACT_ID);
1067 CAdvContract::DeleteSiteLink($CONTRACT_ID);
1068 CAdvContract::DeleteTypeLink($CONTRACT_ID);
1069 CAdvContract::DeleteUserLink($CONTRACT_ID);
1070 CAdvContract::DeleteWeekdayLink($CONTRACT_ID);
1071
1072 $strSql = "DELETE FROM b_adv_contract WHERE ID = $CONTRACT_ID";
1073 $DB->Query($strSql, false, $err_mess.__LINE__);
1074 return true;
1075 }
1076 else
1077 {
1078 $strError .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_CONTRACT")."<br>";
1079 return false;
1080 }
1081 }
1082
1083 // удаление связи контракта со страницами
1084 public static function DeletePageLink($CONTRACT_ID, $where="")
1085 {
1086 $err_mess = (CAdvContract_all::err_mess())."<br>Function: DeletePageLink<br>Line: ";
1087 global $DB;
1088 $CONTRACT_ID = intval($CONTRACT_ID);
1089 if ($CONTRACT_ID<=0)
1090 return false;
1091 $strSql = "DELETE FROM b_adv_contract_2_page WHERE CONTRACT_ID = $CONTRACT_ID ".$where;
1092 $DB->Query($strSql, false, $err_mess.__LINE__);
1093 return true;
1094 }
1095
1096 // удаление связи контракта с сайтами
1097 public static function DeleteSiteLink($CONTRACT_ID)
1098 {
1099 $err_mess = (CAdvContract_all::err_mess())."<br>Function: DeleteSiteLink<br>Line: ";
1100 global $DB;
1101 $CONTRACT_ID = intval($CONTRACT_ID);
1102 if ($CONTRACT_ID<=0)
1103 return false;
1104 $strSql = "DELETE FROM b_adv_contract_2_site WHERE CONTRACT_ID = $CONTRACT_ID";
1105 $DB->Query($strSql, false, $err_mess.__LINE__);
1106 return true;
1107 }
1108
1109 // удаление связи контракта с типами баннеров
1110 public static function DeleteTypeLink($CONTRACT_ID)
1111 {
1112 $err_mess = (CAdvContract_all::err_mess())."<br>Function: DeleteTypeLink<br>Line: ";
1113 global $DB;
1114 $CONTRACT_ID = intval($CONTRACT_ID);
1115 if ($CONTRACT_ID<=0)
1116 return false;
1117 $strSql = "DELETE FROM b_adv_contract_2_type WHERE CONTRACT_ID = $CONTRACT_ID";
1118 $DB->Query($strSql, false, $err_mess.__LINE__);
1119 return true;
1120 }
1121
1122 // удаление связи контракта с пользователями
1123 public static function DeleteUserLink($CONTRACT_ID, $where="")
1124 {
1125 $err_mess = (CAdvContract_all::err_mess())."<br>Function: DeleteUserLink<br>Line: ";
1126 global $DB;
1127 $CONTRACT_ID = intval($CONTRACT_ID);
1128 if ($CONTRACT_ID<=0)
1129 return false;
1130 $strSql = "DELETE FROM b_adv_contract_2_user WHERE CONTRACT_ID = $CONTRACT_ID ".$where;
1131 $DB->Query($strSql, false, $err_mess.__LINE__);
1132 return true;
1133 }
1134
1135 // удаление связи контракта со временем и днями недели
1136 public static function DeleteWeekdayLink($CONTRACT_ID)
1137 {
1138 $err_mess = (CAdvContract_all::err_mess())."<br>Function: DeleteWeekdayLink<br>Line: ";
1139 global $DB;
1140 $CONTRACT_ID = intval($CONTRACT_ID);
1141 if ($CONTRACT_ID<=0)
1142 return false;
1143 $strSql = "DELETE FROM b_adv_contract_2_weekday WHERE CONTRACT_ID = $CONTRACT_ID";
1144 $DB->Query($strSql, false, $err_mess.__LINE__);
1145 return true;
1146 }
1147
1148 //Получение статистики по контрактам
1149 public static function GetStatList($by, $order, $arFilter)
1150 {
1151 $err_mess = (CAdvBanner::err_mess())."<br>Function: GetDynamicList<br>Line: ";
1152 global $DB;
1153 $arSqlSearch = Array();
1155 {
1156 if (is_array($arFilter))
1157 {
1158 $filter_keys = array_keys($arFilter);
1159 for ($i=0, $n = count($filter_keys); $i < $n; $i++)
1160 {
1161 $key = $filter_keys[$i];
1162 $val = $arFilter[$filter_keys[$i]];
1163 if(is_array($val))
1164 {
1165 if(count($val)<=0) continue;
1166 }
1167 else
1168 {
1169 if( ((string)$val == '') || ("$val"=="NOT_REF") ) continue;
1170 }
1171 $key = strtoupper($key);
1172 switch($key)
1173 {
1174 case "DATE_1":
1175 $arSqlSearch[] = "D.DATE_STAT>=".$DB->CharToDateFunction($val, "SHORT");
1176 break;
1177 case "DATE_2":
1178 $arSqlSearch[] = "D.DATE_STAT<=".$DB->CharToDateFunction($val." 23:59:59", "FULL");
1179 break;
1180 }
1181 }
1182
1184
1185 if (is_array($arFilter['CONTRACT_ID']) && !empty($arFilter['CONTRACT_ID']))
1186 {
1187 $where = new CSQLWhere();
1188 $arSqlSearch[] = $where->_NumberIN("C.ID", $arFilter['CONTRACT_ID']);
1189 }
1190 }
1191 }
1192
1193 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
1194
1195 if ($by == "s_date")
1196 {
1197 $strSqlOrder = " ORDER BY D.DATE_STAT ";
1198 }
1199 elseif ($by == "s_visitors")
1200 {
1201 $strSqlOrder = " ORDER BY VISITOR_COUNT ";
1202 }
1203 elseif ($by == "s_clicks")
1204 {
1205 $strSqlOrder = " ORDER BY CLICK_COUNT ";
1206 }
1207 elseif ($by == "s_ctr")
1208 {
1209 $strSqlOrder = " ORDER BY CTR";
1210 }
1211 elseif ($by == "s_show")
1212 {
1213 $strSqlOrder = " ORDER BY SHOW_COUNT ";
1214 }
1215 elseif ($by == "s_id")
1216 {
1217 $strSqlOrder = " ORDER BY C.ID";
1218 }
1219 else
1220 {
1221 $strSqlOrder = " ORDER BY DATE_STAT";
1222 $by = "s_date";
1223 }
1224
1225 if ($order!="asc")
1226 {
1227 $strSqlOrder .= " desc ";
1228 }
1229
1230
1231 if ($by != "s_date")
1232 {
1233 $strSqlOrder .= ', DATE_STAT ASC';
1234 }
1235
1236 if ($arFilter['CONTRACT_SUMMA'] == 'Y')
1237 {
1238 $strSql = "
1239 SELECT
1240 ".$DB->DateToCharFunction("D.DATE_STAT","SHORT")." DATE_STAT,
1241 SUM(D.SHOW_COUNT) SHOW_COUNT,
1242 SUM(D.CLICK_COUNT) CLICK_COUNT,
1243 SUM(D.VISITOR_COUNT) VISITOR_COUNT,
1244 " . CAdvBanner::getCTRSQL() . "
1245 FROM
1246 b_adv_banner_2_day D
1247 INNER JOIN b_adv_banner B ON (D.BANNER_ID = B.ID)
1248 INNER JOIN b_adv_contract C ON (B.CONTRACT_ID = C.ID)
1249 WHERE
1250 $strSqlSearch
1251 GROUP by DATE_STAT
1252 $strSqlOrder
1253 ";
1254 }
1255 else
1256 {
1257 $strSql = "
1258 SELECT
1259 ".$DB->DateToCharFunction("D.DATE_STAT","SHORT")." DATE_STAT,
1260 SUM(D.SHOW_COUNT) SHOW_COUNT,
1261 SUM(D.CLICK_COUNT) CLICK_COUNT,
1262 SUM(D.VISITOR_COUNT) VISITOR_COUNT,
1263 C.ID,
1264 C.NAME CONTRACT_NAME,
1265 " . CAdvBanner::getCTRSQL() . "
1266 FROM
1267 b_adv_banner_2_day D
1268 INNER JOIN b_adv_banner B ON (D.BANNER_ID = B.ID)
1269 INNER JOIN b_adv_contract C ON (B.CONTRACT_ID = C.ID)
1270 WHERE
1271 $strSqlSearch
1272 GROUP by DATE_STAT, C.ID, C.NAME
1273 $strSqlOrder
1274 ";
1275 }
1276
1277 return $DB->Query($strSql, false, $err_mess.__LINE__);
1278 }
1279}
1280
1281/*****************************************************************
1282 Класс "Рекламный баннер"
1283*****************************************************************/
1284
1286{
1287 public static function err_mess()
1288 {
1289 $module_id = "advertising";
1290 return "<br>Module: ".$module_id."<br>Class: CAdvBanner_all<br>File: ".__FILE__;
1291 }
1292
1293 public static function GetCurUri()
1294 {
1296 if ($strAdvCurUri!==false)
1297 return $strAdvCurUri;
1298 else
1299 return $APPLICATION->GetCurUri("", true);
1300 }
1301
1302 public static function SetCurUri($uri=false)
1303 {
1304 global $strAdvCurUri;
1305 if ($uri!==false)
1307 }
1308
1309 // получим баннер по ID
1310 public static function GetByID($BANNER_ID, $CHECK_RIGHTS="Y")
1311 {
1312 $BANNER_ID = intval($BANNER_ID);
1313 if ($BANNER_ID<=0)
1314 return false;
1315 $arFilter = array(
1316 "ID" => $BANNER_ID,
1317 "ID_EXACT_MATCH" => "Y"
1318 );
1319 $rs = CAdvBanner::GetList("", "", $arFilter, false, $CHECK_RIGHTS);
1320 return $rs;
1321 }
1322
1323 // копирование баннера
1324 public static function Copy($BANNER_ID, $CHECK_RIGHTS="Y")
1325 {
1326 $ID = 0;
1327 $rsBanner = CAdvBanner::GetByID($BANNER_ID, $CHECK_RIGHTS);
1328 if ($arBanner = $rsBanner->Fetch())
1329 {
1330 $arFields = array(
1331 "CONTRACT_ID" => $arBanner["CONTRACT_ID"],
1332 "TYPE_SID" => $arBanner["TYPE_SID"],
1333 "STATUS_SID" => $arBanner["STATUS_SID"],
1334 "STATUS_COMMENTS" => $arBanner["STATUS_COMMENTS"],
1335 "NAME" => $arBanner["NAME"],
1336 "GROUP_SID" => $arBanner["GROUP_SID"],
1337 "ACTIVE" => $arBanner["ACTIVE"],
1338 "WEIGHT" => $arBanner["WEIGHT"],
1339 "MAX_VISITOR_COUNT" => $arBanner["MAX_VISITOR_COUNT"],
1340 "RESET_VISITOR_COUNT" => "Y",
1341 "SHOWS_FOR_VISITOR" => $arBanner["SHOWS_FOR_VISITOR"],
1342 "MAX_SHOW_COUNT" => $arBanner["MAX_SHOW_COUNT"],
1343 "RESET_SHOW_COUNT" => "Y",
1344 "MAX_CLICK_COUNT" => $arBanner["MAX_CLICK_COUNT"],
1345 "RESET_CLICK_COUNT" => $arBanner["RESET_CLICK_COUNT"],
1346 "DATE_SHOW_FROM" => $arBanner["DATE_SHOW_FROM"],
1347 "DATE_SHOW_TO" => $arBanner["DATE_SHOW_TO"],
1348 "IMAGE_ALT" => $arBanner["IMAGE_ALT"],
1349 "URL" => $arBanner["URL"],
1350 "URL_TARGET" => $arBanner["URL_TARGET"],
1351 "NO_URL_IN_FLASH" => $arBanner["NO_URL_IN_FLASH"],
1352 "CODE" => $arBanner["CODE"],
1353 "CODE_TYPE" => $arBanner["CODE_TYPE"],
1354 "FOR_NEW_GUEST" => $arBanner["FOR_NEW_GUEST"],
1355 "COMMENTS" => $arBanner["COMMENTS"],
1356 "SHOW_USER_GROUP" => $arBanner["SHOW_USER_GROUP"],
1357 "arrSHOW_PAGE" => CAdvBanner::GetPageArray($BANNER_ID, "SHOW"),
1358 "arrNOT_SHOW_PAGE" => CAdvBanner::GetPageArray($BANNER_ID, "NOT_SHOW"),
1359 "STAT_TYPE" => $arBanner["STAT_TYPE"],
1360 "arrCOUNTRY" => CAdvBanner::GetCountryArray($BANNER_ID, array("COUNTRY_ID", "REGION", "CITY_ID")),
1361 "arrSTAT_ADV" => CAdvBanner::GetStatAdvArray($BANNER_ID),
1362 "arrWEEKDAY" => CAdvBanner::GetWeekdayArray($BANNER_ID),
1363 "arrSITE" => CAdvBanner::GetSiteArray($BANNER_ID),
1364 "arrUSERGROUP" => CAdvBanner::GetGroupArray($BANNER_ID),
1365 "KEYWORDS" => $arBanner["KEYWORDS"],
1366 "SEND_EMAIL" => "Y",
1367 "AD_TYPE" => $arBanner["AD_TYPE"],
1368 "FLASH_TRANSPARENT" => $arBanner["FLASH_TRANSPARENT"],
1369 "arrFlashIMAGE_ID" => $arBanner["arrFlashIMAGE_ID"],
1370 "FLASH_JS" => $arBanner["FLASH_JS"],
1371 "FLASH_VER" => $arBanner["FLASH_VER"],
1372 "TEMPLATE" => $arBanner["TEMPLATE"]
1373 );
1374 if (intval($arBanner["IMAGE_ID"])>0)
1375 {
1376 $arrIMAGE = CFile::MakeFileArray($arBanner["IMAGE_ID"]);
1377 $arrIMAGE["MODULE_ID"] = "advertising";
1378 $arFields["arrIMAGE_ID"] = $arrIMAGE;
1379 }
1380 if ($arBanner["TEMPLATE_FILES"] && CheckSerializedData($arBanner["TEMPLATE_FILES"]))
1381 $arBanner["TEMPLATE_FILES"] = unserialize(
1382 htmlspecialchars_decode($arBanner["TEMPLATE_FILES"]),
1383 ['allowed_classes' => false]
1384 );
1385 else
1386 $arBanner["TEMPLATE_FILES"] = array();
1387 $arrTEMPLATE_FILES = array();
1388 foreach ($arBanner["TEMPLATE_FILES"] as $k1 => $v1)
1389 {
1390 foreach ($v1 as $k2 => $v2)
1391 {
1392 $arrTEMPLATE_FILES[$k1][$k2] = CFile::MakeFileArray($v2);
1393 }
1394 }
1395
1396 $arFields["TEMPLATE_FILES"] = $arrTEMPLATE_FILES;
1397
1399 }
1400 return $ID;
1401 }
1402
1403 // удаление баннера
1404 public static function Delete($BANNER_ID, $CHECK_RIGHTS="Y")
1405 {
1406 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: Delete<br>Line: ";
1407 global $DB, $strError;
1408 $BANNER_ID = intval($BANNER_ID);
1409 if ($BANNER_ID<=0)
1410 return false;
1411
1412 $strSql = "SELECT CONTRACT_ID, IMAGE_ID, TYPE_SID FROM b_adv_banner WHERE ID = '$BANNER_ID'";
1413 $rsBanner = $DB->Query($strSql, false, $err_mess.__LINE__);
1414 if ($arBanner = $rsBanner->Fetch())
1415 {
1416 $ok = false;
1417 if ($CHECK_RIGHTS=="Y")
1418 {
1419 $arrPERM = CAdvContract::GetUserPermissions($arBanner["CONTRACT_ID"]);
1420 $arrPERM = $arrPERM[$arBanner["CONTRACT_ID"]];
1421 if (in_array("ADD", $arrPERM))
1422 $ok = true;
1423 }
1424 else
1425 {
1426 $ok = true;
1427 }
1428
1429 if ($ok)
1430 {
1431 if (defined('BX_COMP_MANAGED_CACHE'))
1432 {
1433 $taggedCache = Application::getInstance()->getTaggedCache();
1434 $taggedCache->clearByTag('advertising_banner_type_'.$arBanner['TYPE_SID']);
1435 }
1436
1437 CFile::Delete($arBanner["IMAGE_ID"]);
1439 CAdvBanner::DeleteSiteLink($BANNER_ID);
1441 CAdvBanner::DeletePageLink($BANNER_ID);
1443 CAdvBanner::DeleteGroupLink($BANNER_ID);
1444
1445 $strSql = "DELETE FROM b_adv_banner_2_day WHERE BANNER_ID = $BANNER_ID";
1446 $DB->Query($strSql, false, $err_mess.__LINE__);
1447
1448 $strSql = "DELETE FROM b_adv_banner WHERE ID = $BANNER_ID";
1449 $DB->Query($strSql, false, $err_mess.__LINE__);
1450 return true;
1451 }
1452 else
1453 {
1454 $strError .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_BANNER")."<br>";
1455 }
1456 }
1457 return false;
1458 }
1459
1460 // удаление связи баннера со временем и днями недели
1461 public static function DeleteWeekdayLink($BANNER_ID)
1462 {
1463 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: DeleteWeekdayLink<br>Line: ";
1464 global $DB;
1465 $BANNER_ID = intval($BANNER_ID);
1466 if ($BANNER_ID<=0)
1467 return false;
1468 $strSql = "DELETE FROM b_adv_banner_2_weekday WHERE BANNER_ID = $BANNER_ID";
1469 $DB->Query($strSql, false, $err_mess.__LINE__);
1470 return true;
1471 }
1472
1473 // удаление связи баннера с языками
1474 public static function DeleteSiteLink($BANNER_ID)
1475 {
1476 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: DeleteSiteLink<br>Line: ";
1477 global $DB;
1478 $BANNER_ID = intval($BANNER_ID);
1479 if ($BANNER_ID<=0)
1480 return false;
1481 $strSql = "DELETE FROM b_adv_banner_2_site WHERE BANNER_ID = $BANNER_ID";
1482 $DB->Query($strSql, false, $err_mess.__LINE__);
1483 return true;
1484 }
1485
1486 // удаление связи баннера со страной
1487 public static function DeleteCountryLink($BANNER_ID)
1488 {
1489 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: DeleteCountryLink<br>Line: ";
1490 global $DB;
1491 $BANNER_ID = intval($BANNER_ID);
1492 if ($BANNER_ID<=0)
1493 return false;
1494 $strSql = "DELETE FROM b_adv_banner_2_country WHERE BANNER_ID = $BANNER_ID";
1495 $DB->Query($strSql, false, $err_mess.__LINE__);
1496 return true;
1497 }
1498
1499 // удаление связи баннера со рекламными кампаниями статистики
1500 public static function DeleteStatAdvLink($BANNER_ID)
1501 {
1502 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: DeleteStatAdvLink<br>Line: ";
1503 global $DB;
1504 $BANNER_ID = intval($BANNER_ID);
1505 if ($BANNER_ID<=0)
1506 return false;
1507 $strSql = "DELETE FROM b_adv_banner_2_stat_adv WHERE BANNER_ID = $BANNER_ID";
1508 $DB->Query($strSql, false, $err_mess.__LINE__);
1509 return true;
1510 }
1511
1512 // удаление связи баннера со страницами
1513 public static function DeletePageLink($BANNER_ID, $where="")
1514 {
1515 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: DeletePageLink<br>Line: ";
1516 global $DB;
1517 $BANNER_ID = intval($BANNER_ID);
1518 if ($BANNER_ID<=0)
1519 return false;
1520 $strSql = "DELETE FROM b_adv_banner_2_page WHERE BANNER_ID = $BANNER_ID ".$where;
1521 $DB->Query($strSql, false, $err_mess.__LINE__);
1522 return true;
1523 }
1524
1525 public static function DeleteGroupLink($BANNER_ID)
1526 {
1527 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: DeleteGroupLink<br>Line: ";
1528 global $DB;
1529 $BANNER_ID = intval($BANNER_ID);
1530 if ($BANNER_ID<=0)
1531 return false;
1532 $strSql = "DELETE FROM b_adv_banner_2_group WHERE BANNER_ID = $BANNER_ID";
1533 $DB->Query($strSql, false, $err_mess.__LINE__);
1534 return true;
1535 }
1536
1537 public static function GetStatusList()
1538 {
1539 $ref_id = array(
1540 "PUBLISHED",
1541 "READY",
1542 "REJECTED"
1543 );
1544 $ref = array(
1545 GetMessage("AD_STATUS_PUBLISHED"),
1546 GetMessage("AD_STATUS_READY"),
1547 GetMessage("AD_STATUS_REJECTED")
1548 );
1549 $arr = array("reference_id" => $ref_id, "reference" => $ref);
1550 return $arr;
1551 }
1552
1553 // получаем массив страниц связанных с баннером
1554 public static function GetPageArray($BANNER_ID, $SHOW="SHOW")
1555 {
1556 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: GetPageArray<br>Line: ";
1557 global $DB;
1558 $BANNER_ID = intval($BANNER_ID);
1559 if ($BANNER_ID<=0)
1560 return false;
1561 $arrRes = array();
1562 $SHOW_ON_PAGE = ($SHOW=="NOT_SHOW") ? "'N'" : "'Y'";
1563 $strSql = "
1564 SELECT DISTINCT
1565 PAGE
1566 FROM
1567 b_adv_banner_2_page
1568 WHERE
1569 BANNER_ID = $BANNER_ID
1570 and SHOW_ON_PAGE = $SHOW_ON_PAGE
1571 ";
1572 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
1573 while ($ar = $rs->Fetch())
1574 $arrRes[] = $ar["PAGE"];
1575 return $arrRes;
1576 }
1577
1578 // получаем массив групп пользователей связанных с баннером
1579 public static function GetGroupArray($BANNER_ID)
1580 {
1581 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: GetGroupArray<br>Line: ";
1582 global $DB;
1583 $BANNER_ID = intval($BANNER_ID);
1584 if ($BANNER_ID<=0)
1585 return false;
1586 $arrRes = array();
1587
1588 $strSql = "
1589 SELECT
1590 GROUP_ID
1591 FROM
1592 b_adv_banner_2_group
1593 WHERE
1594 BANNER_ID = $BANNER_ID
1595 ";
1596 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
1597 while ($ar = $rs->Fetch())
1598 $arrRes[] = $ar["GROUP_ID"];
1599 return $arrRes;
1600 }
1601
1602 // получаем массив языков связанных с баннером
1603 public static function GetSiteArray($BANNER_ID)
1604 {
1605 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: GetSiteArray<br>Line: ";
1606 global $DB;
1607 $BANNER_ID = intval($BANNER_ID);
1608 if ($BANNER_ID<=0)
1609 return false;
1610 $arrRes = array();
1611 $strSql = "
1612 SELECT
1613 SITE_ID
1614 FROM
1615 b_adv_banner_2_site
1616 WHERE
1617 BANNER_ID = $BANNER_ID
1618 ";
1619 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
1620 while ($ar = $rs->Fetch())
1621 $arrRes[] = $ar["SITE_ID"];
1622 return $arrRes;
1623 }
1624
1625 // получаем массив стран связанных с баннером
1626 public static function GetCountryArray($BANNER_ID, $WHAT = "COUNTRY")
1627 {
1628 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: GetCountryArray<br>Line: ";
1629 global $DB;
1630 $BANNER_ID = intval($BANNER_ID);
1631 if ($BANNER_ID<=0)
1632 return false;
1633 $arrRes = array();
1634 if(!is_array($WHAT))
1635 {
1636 if($WHAT === "CITY")
1637 $arSelect = array("COUNTRY_ID", "REGION", "CITY_ID");
1638 elseif($WHAT === "REGION")
1639 $arSelect = array("COUNTRY_ID", "REGION");
1640 else
1641 $arSelect = array("COUNTRY_ID");
1642 }
1643 else
1644 {
1645 $arSelect = array();
1646 foreach($WHAT as $FIELD)
1647 {
1648 if($FIELD === "CITY_ID")
1649 $arSelect[$FIELD] = $FIELD;
1650 elseif($FIELD === "REGION")
1651 $arSelect[$FIELD] = $FIELD;
1652 elseif($FIELD === "COUNTRY_ID")
1653 $arSelect[$FIELD] = $FIELD;
1654 }
1655 if(count($arSelect) <= 0)
1656 $arSelect = array("COUNTRY_ID");
1657 }
1658
1659 $strSql = "
1660 SELECT DISTINCT
1661 ".implode(", ", $arSelect)."
1662 FROM
1663 b_adv_banner_2_country
1664 WHERE
1665 BANNER_ID = $BANNER_ID
1666 ORDER BY
1667 ".implode(", ", $arSelect)."
1668 ";
1669 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
1670 while($ar = $rs->Fetch())
1671 {
1672 if($WHAT === "COUNTRY")
1673 $arrRes[] = $ar["COUNTRY_ID"];
1674 else
1675 $arrRes[] = $ar;
1676 }
1677 return $arrRes;
1678 }
1679
1680 // получаем массив времени и дней недели связанных с баннером
1681 public static function GetWeekdayArray($BANNER_ID)
1682 {
1683 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: GetWeekdayArray<br>Line: ";
1684 global $DB;
1685 $BANNER_ID = intval($BANNER_ID);
1686 if ($BANNER_ID<=0)
1687 return false;
1688 $arrRes = array();
1689 $strSql = "
1690 SELECT DISTINCT
1691 C_WEEKDAY,
1692 C_HOUR
1693 FROM
1694 b_adv_banner_2_weekday
1695 WHERE
1696 BANNER_ID = $BANNER_ID
1697 ";
1698 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
1699 while ($ar = $rs->Fetch())
1700 $arrRes[$ar["C_WEEKDAY"]][] = $ar["C_HOUR"];
1701 return $arrRes;
1702 }
1703
1704 // получаем массив рекламных кампаний связанных с баннером
1705 public static function GetStatAdvArray($BANNER_ID)
1706 {
1707 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: GetStatAdvArray<br>Line: ";
1708 global $DB;
1709 $BANNER_ID = intval($BANNER_ID);
1710 if ($BANNER_ID<=0)
1711 return false;
1712 $arrRes = array();
1713 $strSql = "
1714 SELECT DISTINCT
1715 STAT_ADV_ID
1716 FROM
1717 b_adv_banner_2_stat_adv
1718 WHERE
1719 BANNER_ID = $BANNER_ID
1720 ";
1721 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
1722 while ($ar = $rs->Fetch())
1723 $arrRes[] = $ar["STAT_ADV_ID"];
1724 return $arrRes;
1725 }
1726
1727 // проверяем поля при модификации баннера
1728 public static function CheckFields($arFields, $BANNER_ID, $CHECK_RIGHTS="Y")
1729 {
1730 global $strError;
1731 $maxLongString = 65534;
1732 $str = "";
1733 if ($CHECK_RIGHTS=="Y")
1734 {
1735 $isAdmin = CAdvContract::IsAdmin();
1736 $isManager = CAdvContract::IsManager();
1737 }
1738 else
1739 {
1740 $isAdmin = true;
1741 $isManager = true;
1742 }
1743
1744 $arrKeys = array_keys($arFields);
1745 if (!in_array("CONTRACT_ID", $arrKeys) && $BANNER_ID>0)
1746 {
1747 $rsBanner = CAdvBanner::GetByID($BANNER_ID, "N");
1748 $arBanner = $rsBanner->Fetch();
1749 $CONTRACT_ID = intval($arBanner["CONTRACT_ID"]);
1750 }
1751 else
1752 {
1753 $CONTRACT_ID = intval($arFields["CONTRACT_ID"]);
1754 }
1755
1756 if (in_array("TEMPLATE", $arrKeys))
1757 {
1758 if (mb_strlen($arFields['TEMPLATE']) > $maxLongString)
1759 {
1760 $str.= GetMessage("AD_ERROR_LONG_STRING")."<br>";
1761 }
1762 }
1763
1764 if ($CONTRACT_ID>0)
1765 {
1766 $access = false;
1767 if ($isAdmin || $isManager)
1768 {
1769 $access = true;
1770 }
1771 else
1772 {
1773 $arrPERM = CAdvContract::GetUserPermissions($CONTRACT_ID);
1774 $arrPERM = $arrPERM[$CONTRACT_ID];
1775 if (in_array("ADD", $arrPERM))
1776 $access = true;
1777 }
1778
1779 if ($access)
1780 {
1781 if ($arFields["DATE_SHOW_FROM"] <> '')
1782 {
1783 if (!CheckDateTime($arFields["DATE_SHOW_FROM"]))
1784 $str.= GetMessage("AD_ERROR_WRONG_DATE_SHOW_FROM_BANNER")."<br>";
1785 }
1786 if ($arFields["DATE_SHOW_TO"] <> '')
1787 {
1788 if (!CheckDateTime($arFields["DATE_SHOW_TO"]))
1789 $str .= GetMessage("AD_ERROR_WRONG_DATE_SHOW_TO_BANNER")."<br>";
1790 }
1791
1792 if (in_array("arrIMAGE_ID", $arrKeys))
1793 {
1794 $arIMAGE = $arFields["arrIMAGE_ID"];
1795 $arIMAGE["MODULE_ID"] = "advertising";
1796 $strRes = CFile::CheckImageFile($arIMAGE, 0, 0, 0, array("FLASH", "IMAGE"));
1797 if ($strRes <> '')
1798 $str .= $strRes."<br>";
1799 }
1800
1801 if (in_array("arrFlashIMAGE_ID", $arrKeys))
1802 {
1803 $arIMAGE = $arFields["arrFlashIMAGE_ID"];
1804 $arIMAGE["MODULE_ID"] = "advertising";
1805 $strRes = CFile::CheckImageFile($arIMAGE, 0, 0, 0, array("IMAGE"));
1806 if ($strRes <> '')
1807 $str .= $strRes."<br>";
1808 }
1809
1810 if (in_array("TEMPLATE_FILES", $arrKeys) && is_array($arFields["TEMPLATE_FILES"]))
1811 {
1812 foreach ($arFields["TEMPLATE_FILES"] as $unit)
1813 {
1814 if (is_array($unit))
1815 {
1816 foreach ($unit as $file)
1817 {
1818 $file["MODULE_ID"] = "advertising";
1819 $strRes = CAdvBanner_all::CheckFile($file, 0, 0, 0, array("IMAGE", "VIDEO"));
1820 if ($strRes <> '')
1821 $str .= $strRes."<br>";
1822 }
1823 }
1824 }
1825 }
1826
1827 if ($arFields["FLYUNIFORM"] == "Y")
1828 {
1829 if ($arFields["DATE_SHOW_FROM"] == '' or
1830 $arFields["DATE_SHOW_TO"] == '')
1831 $str .= GetMessage("AD_ERROR_FROMTO_DATE_HAVETOBE_SET")."<br>";
1832
1833 if ($arFields["FIX_SHOW"] != "Y")
1834 $str .= GetMessage("AD_ERROR_FIXSHOW_HAVETOBE_SET")."<br>";
1835
1836 if (intval($arFields["MAX_SHOW_COUNT"])<=0)
1837 $str .= GetMessage("AD_ERROR_MAX_SHOW_COUNT_HAVETOBE_SET")."<br>";
1838 }
1839 }
1840 else
1841 {
1842 if ($BANNER_ID>0)
1843 $str .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_BANNER")."<br>";
1844 else
1845 $str .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_CONTRACT")."<br>";
1846 }
1847 }
1848 else
1849 {
1850 $str .= GetMessage("AD_ERROR_INCORRECT_CONTRACT_ID")."<br>";
1851 }
1852
1853 $strError .= $str;
1854 if ($str <> '')
1855 return false;
1856 else
1857 return true;
1858 }
1859
1860 public static function CheckFile($arFile, $iMaxSize=0, $iMaxWidth=0, $iMaxHeight=0, $access_typies=array(), $bForceMD5=false, $bSkipExt=false)
1861 {
1862 if ($arFile["name"] == "")
1863 {
1864 return "";
1865 }
1866
1867 if (preg_match("#^php://filter#i", $arFile["tmp_name"]))
1868 {
1869 return GetMessage("FILE_BAD_FILE_TYPE").".<br>";
1870 }
1871
1872 $extension = GetFileExtension(mb_strtolower($arFile["name"]));
1873 switch ($extension)
1874 {
1875 case "jpg": case "jpeg": case "gif": case "bmp": case "png": $file_type = "IMAGE"; break;
1876 case "swf": $file_type = "FLASH"; break;
1877 case "mp4": case "webm": case "ogg": $file_type = "VIDEO"; break;
1878 default: $file_type = "UNKNOWN";
1879 }
1880
1881 // IMAGE by default
1882 $flashEnabled = false;
1883 if(!in_array($file_type, $access_typies))
1884 {
1885 $file_type = "IMAGE";
1886 }
1887
1888 if ($file_type == "FLASH")
1889 {
1890 $flashEnabled = true;
1891 static $flashMime = array("application/x-shockwave-flash", "application/vnd.adobe.flash.movie");
1892 $res = CFile::CheckFile($arFile, $iMaxSize, $flashMime, CFile::GetFlashExtensions(), $bForceMD5, $bSkipExt);
1893 }
1894 else if ($file_type == "VIDEO")
1895 {
1896 $res = CFile::CheckFile($arFile, $iMaxSize, "video/", "mp4,webm,ogg", $bForceMD5, $bSkipExt);
1897 }
1898 else
1899 {
1900 $res = CFile::CheckFile($arFile, $iMaxSize, "image/", CFile::GetImageExtensions(), $bForceMD5, $bSkipExt);
1901 }
1902
1903 if($res <> '')
1904 {
1905 return $res;
1906 }
1907
1908 if ($file_type == 'IMAGE' || $file_type == "FLASH")
1909 {
1910 $imgArray = CFile::GetImageSize($arFile["tmp_name"], true, $flashEnabled);
1911 if(is_array($imgArray))
1912 {
1913 $intWIDTH = $imgArray[0];
1914 $intHEIGHT = $imgArray[1];
1915 }
1916 else
1917 {
1918 return GetMessage("FILE_BAD_FILE_TYPE").".<br>";
1919 }
1920 //check for dimensions
1921 if($iMaxWidth > 0 && ($intWIDTH > $iMaxWidth || $intWIDTH == 0) || $iMaxHeight > 0 && ($intHEIGHT > $iMaxHeight || $intHEIGHT == 0))
1922 {
1923 return GetMessage("FILE_BAD_MAX_RESOLUTION")." (".$iMaxWidth." * ".$iMaxHeight." ".GetMessage("main_include_dots").").<br>";
1924 }
1925 }
1926
1927 return null;
1928 }
1929
1930 public static function makeFileArray($data, $del = false, $description = null, $options = array())
1931 {
1932 $emptyFile = array(
1933 "name" => null,
1934 "type" => null,
1935 "tmp_name" => null,
1936 "error" => 4,
1937 "size" => 0,
1938 );
1939
1940 if ($del)
1941 {
1942 $result = $emptyFile;
1943 $result["del"] = "Y";
1944 }
1945 elseif (is_null($data))
1946 {
1947 $result = $emptyFile;
1948 }
1949 elseif (is_numeric($data))
1950 {
1951 $result = self::makeFileArrayFromId($data, $description, $options);
1952 if ($result === false)
1953 $result = $emptyFile;
1954 }
1955 elseif (is_string($data))
1956 {
1957 $result = self::makeFileArrayFromPath($data, $description, $options);
1958 if ($result === false)
1959 $result = $emptyFile;
1960 }
1961 elseif (is_array($data))
1962 {
1963 $result = self::makeFileArrayFromArray($data, $description, $options);
1964 if ($result === false)
1965 $result = $emptyFile;
1966 }
1967 else
1968 {
1969 $result = $emptyFile;
1970 }
1971
1972 return $result;
1973 }
1974
1975 private static function makeFileArrayFromId($file_id, $description = null, $options = array())
1976 {
1977 $result = false;
1978
1979 $result = CFile::MakeFileArray($file_id);
1980 if (is_array($result))
1981 {
1982 if (!is_null($description))
1983 $result["description"] = $description;
1984 }
1985
1986 return $result;
1987 }
1988
1989 private static function makeFileArrayFromPath($file_path, $description = null, $options = array())
1990 {
1992 global $APPLICATION;
1993 $result = false;
1994
1995 if (preg_match("/^https?:\\/\\//", $file_path))
1996 {
1997 $result = CFile::MakeFileArray($file_path);
1998 }
1999 else
2000 {
2002 $normPath = $io->CombinePath("/", $file_path);
2003 $absPath = $io->CombinePath($_SERVER["DOCUMENT_ROOT"], $normPath);
2004 if ($io->ValidatePathString($absPath) && $io->FileExists($absPath))
2005 {
2006 $perm = $APPLICATION->GetFileAccessPermission($normPath);
2007 if ($perm >= "W")
2008 $result = CFile::MakeFileArray($io->GetPhysicalName($absPath));
2009 }
2010 }
2011
2012 if (is_array($result))
2013 {
2014 if (!is_null($description))
2015 $result["description"] = $description;
2016 }
2017
2018 return $result;
2019 }
2020
2021 private static function makeFileArrayFromArray($file_array, $description = null, $options = array())
2022 {
2023 $result = false;
2024
2025 if (is_uploaded_file($file_array["tmp_name"]))
2026 {
2027 $result = $file_array;
2028 if (!is_null($description))
2029 $result["description"] = $description;
2030 }
2031 elseif (
2032 $file_array["tmp_name"] <> ''
2033 && mb_strpos($file_array["tmp_name"], CTempFile::GetAbsoluteRoot()) === 0
2034 )
2035 {
2037 $absPath = $io->CombinePath("/", $file_array["tmp_name"]);
2038 $tmpPath = CTempFile::GetAbsoluteRoot()."/";
2039 if (mb_strpos($absPath, $tmpPath) === 0 || (($absPath = ltrim($absPath, "/")) && mb_strpos($absPath, $tmpPath) === 0))
2040 {
2041 $result = $file_array;
2042 $result["tmp_name"] = $absPath;
2043 $result["error"] = intval($result["error"]);
2044 if (!is_null($description))
2045 $result["description"] = $description;
2046 }
2047 }
2048 elseif ($file_array["tmp_name"] <> '')
2049 {
2051 $normPath = $io->CombinePath("/", $file_array["tmp_name"]);
2052 $absPath = $io->CombinePath(CTempFile::GetAbsoluteRoot(), $normPath);
2053 $tmpPath = CTempFile::GetAbsoluteRoot()."/";
2054 if (mb_strpos($absPath, $tmpPath) === 0 && $io->FileExists($absPath) ||
2055 ($absPath = $io->CombinePath($_SERVER["DOCUMENT_ROOT"], $normPath)) && mb_strpos($absPath, $tmpPath) === 0)
2056 {
2057 $result = $file_array;
2058 $result["tmp_name"] = $absPath;
2059 $result["error"] = intval($result["error"]);
2060 if (!is_null($description))
2061 $result["description"] = $description;
2062 }
2063 }
2064 else
2065 {
2066 $emptyFile = array(
2067 "name" => null,
2068 "type" => null,
2069 "tmp_name" => null,
2070 "error" => 4,
2071 "size" => 0,
2072 );
2073 if ($file_array == $emptyFile)
2074 {
2075 $result = $emptyFile;
2076 if (!is_null($description))
2077 $result["description"] = $description;
2078 }
2079 }
2080
2081 return $result;
2082 }
2083
2084 // добавляем новый баннер или модифицируем существующий
2085 public static function Set($arFields, $BANNER_ID, $CHECK_RIGHTS="Y")
2086 {
2087 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: Set<br>Line: ";
2088 global $DB, $USER, $APPLICATION, $strError;
2089 $BANNER_ID = intval($BANNER_ID);
2090 if (CAdvBanner::CheckFields($arFields, $BANNER_ID, $CHECK_RIGHTS))
2091 {
2092 if ($CHECK_RIGHTS=="Y")
2093 {
2094 $USER_ID = intval($USER->GetID());
2095 $isAdmin = CAdvContract::IsAdmin();
2096 $isManager = CAdvContract::IsManager();
2097 $CHECK_CONTRACT_RIGHTS = "Y";
2098 if ($isManager)
2099 $CHECK_CONTRACT_RIGHTS = "N";
2100 }
2101 else
2102 {
2103 $USER_ID = 0;
2104 $isAdmin = $isManager = true;
2105 $CHECK_CONTRACT_RIGHTS = "N";
2106 }
2107
2108 if ($BANNER_ID <= 0)
2109 $events = GetModuleEvents("advertising", "OnBeforeBannerAdd", true);
2110 else
2111 $events = GetModuleEvents("advertising", "OnBeforeBannerUpdate", true);
2112
2113 foreach ($events as $arEvent)
2114 {
2115 if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
2116 {
2117 if ($err = $APPLICATION->GetException())
2118 $strError .= $err->GetString()."<br />";
2119 else
2120 $strError .= GetMessage("AD_ERROR_ON_HANDLER", array ("#HANDLER#" => $arEvent['MESSAGE_ID']))."<br />";
2121
2122 return false;
2123 }
2124 }
2125
2126 $arFields_i = array();
2127 $arrKeys = array_keys($arFields);
2128
2129 $arBanner = array();
2130 if ($BANNER_ID>0)
2131 {
2132 $rsBanner = CAdvBanner::GetByID($BANNER_ID, $CHECK_RIGHTS);
2133 $arBanner = $rsBanner->Fetch();
2134 if (!in_array("CONTRACT_ID", $arrKeys))
2135 $CONTRACT_ID = intval($arBanner["CONTRACT_ID"]);
2136 else
2137 $CONTRACT_ID = intval($arFields["CONTRACT_ID"]);
2138 }
2139 else
2140 {
2141 $CONTRACT_ID = intval($arFields["CONTRACT_ID"]);
2142 }
2143
2144 $modify_status = "N";
2145
2146 if ($CONTRACT_ID>0)
2147 {
2148 if ($BANNER_ID<=0 && (!$isAdmin || !$isManager || in_array("STATUS_SID", $arrKeys)))
2149 $modify_status = "Y";
2150
2151 $rsContract = CAdvContract::GetByID($CONTRACT_ID, $CHECK_CONTRACT_RIGHTS);
2152 $arContract = $rsContract->Fetch();
2153
2154 if (($isAdmin || $isManager) && in_array("RESET_VISITOR_COUNT", $arrKeys) && $arFields["RESET_VISITOR_COUNT"])
2155 {
2156 $arFields_i["VISITOR_COUNT"] = 0;
2157 // если баннер уже показывался то
2158 if (intval($arBanner["VISITOR_COUNT"])>0)
2159 {
2160 // уменьшим счетчик у контракта
2161 $value = intval($arContract["VISITOR_COUNT"]) - intval($arBanner["VISITOR_COUNT"]);
2162 $value = ($value<0) ? 0 : $value;
2163 CAdvContract::Set(array("VISITOR_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
2164 }
2165 }
2166
2167 if (($isAdmin || $isManager) && in_array("RESET_SHOW_COUNT", $arrKeys) && $arFields["RESET_SHOW_COUNT"])
2168 {
2169 $arFields_i["SHOW_COUNT"] = 0;
2170 // если баннер уже показывался то
2171 if (intval($arBanner["SHOW_COUNT"])>0)
2172 {
2173 // уменьшим счетчик у контракта
2174 $value = intval($arContract["SHOW_COUNT"]) - intval($arBanner["SHOW_COUNT"]);
2175 $value = ($value<0) ? 0 : $value;
2176 CAdvContract::Set(array("SHOW_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
2177 }
2178 }
2179
2180 if (($isAdmin || $isManager) && in_array("FIX_SHOW", $arrKeys) && ($arFields["FIX_SHOW"]=="Y" || $arFields["FIX_SHOW"]=="N"))
2181 $arFields_i["FIX_SHOW"] = "'".$arFields["FIX_SHOW"]."'";
2182
2183 if (($isAdmin || $isManager) && in_array("FLYUNIFORM", $arrKeys) && ($arFields["FLYUNIFORM"]=="Y" || $arFields["FLYUNIFORM"]=="N"))
2184 $arFields_i["FLYUNIFORM"] = "'".$arFields["FLYUNIFORM"]."'";
2185
2186 if (($isAdmin || $isManager) && in_array("RESET_CLICK_COUNT", $arrKeys) && $arFields["RESET_CLICK_COUNT"])
2187 {
2188 $arFields_i["CLICK_COUNT"] = 0;
2189 // если на баннер уже кликали то
2190 if (intval($arBanner["CLICK_COUNT"])>0)
2191 {
2192 // уменьшим счетчик у контракта
2193 $value = intval($arContract["CLICK_COUNT"]) - intval($arBanner["CLICK_COUNT"]);
2194 $value = ($value<0) ? 0 : $value;
2195 CAdvContract::Set(array("CLICK_COUNT" => $value), $arContract["ID"], $CHECK_CONTRACT_RIGHTS);
2196 }
2197 }
2198
2199 if (($isAdmin || $isManager) && in_array("KEYWORDS", $arrKeys))
2200 $arFields_i["KEYWORDS"] = "'".$DB->ForSql($arFields["KEYWORDS"], 2000)."'";;
2201
2202 if (in_array("CONTRACT_ID", $arrKeys) && intval($arFields["CONTRACT_ID"])>0)
2203 $arFields_i["CONTRACT_ID"] = intval($arFields["CONTRACT_ID"]);
2204
2205 if (in_array("TYPE_SID", $arrKeys) && $arFields["TYPE_SID"] <> '')
2206 {
2207 $arFields_i["TYPE_SID"] = "'".$DB->ForSql($arFields["TYPE_SID"],255)."'";
2208 if ("'".$DB->ForSql($arBanner["TYPE_SID"],255)."'"!=$arFields_i["TYPE_SID"])
2209 $modify_status = "Y";
2210 }
2211
2212 if (in_array("NAME", $arrKeys))
2213 $arFields_i["NAME"] = "'".$DB->ForSql($arFields["NAME"],255)."'";
2214
2215 if (in_array("GROUP_SID", $arrKeys))
2216 $arFields_i["GROUP_SID"] = "'".$DB->ForSql($arFields["GROUP_SID"],255)."'";
2217
2218 if (in_array("ACTIVE", $arrKeys) && ($arFields["ACTIVE"]=="Y" || $arFields["ACTIVE"]=="N"))
2219 $arFields_i["ACTIVE"] = "'".$arFields["ACTIVE"]."'";
2220
2221 if (in_array("WEIGHT", $arrKeys))
2222 $arFields_i["WEIGHT"] = intval($arFields["WEIGHT"]);
2223
2224 if (in_array("MAX_VISITOR_COUNT", $arrKeys))
2225 {
2226 if ($arFields["MAX_VISITOR_COUNT"] <> '')
2227 $arFields_i["MAX_VISITOR_COUNT"] = intval($arFields["MAX_VISITOR_COUNT"]);
2228 else
2229 $arFields_i["MAX_VISITOR_COUNT"] = "null";
2230 }
2231
2232 if (in_array("SHOWS_FOR_VISITOR", $arrKeys))
2233 {
2234 if ($arFields["SHOWS_FOR_VISITOR"] <> '')
2235 $arFields_i["SHOWS_FOR_VISITOR"] = intval($arFields["SHOWS_FOR_VISITOR"]);
2236 else
2237 $arFields_i["SHOWS_FOR_VISITOR"] = "null";
2238 }
2239
2240 if (in_array("MAX_SHOW_COUNT", $arrKeys))
2241 {
2242 if ($arFields["MAX_SHOW_COUNT"] <> '')
2243 $arFields_i["MAX_SHOW_COUNT"] = intval($arFields["MAX_SHOW_COUNT"]);
2244 else
2245 $arFields_i["MAX_SHOW_COUNT"] = "null";
2246 }
2247
2248 if (in_array("MAX_CLICK_COUNT", $arrKeys))
2249 {
2250 if ($arFields["MAX_CLICK_COUNT"] <> '')
2251 $arFields_i["MAX_CLICK_COUNT"] = intval($arFields["MAX_CLICK_COUNT"]);
2252 else
2253 $arFields_i["MAX_CLICK_COUNT"] = "null";
2254 }
2255
2256 if (in_array("DATE_SHOW_FROM", $arrKeys))
2257 {
2258 if ($arFields["DATE_SHOW_FROM"] <> '')
2259 $arFields_i["DATE_SHOW_FROM"] = $DB->CharToDateFunction($arFields["DATE_SHOW_FROM"]);
2260 else
2261 $arFields_i["DATE_SHOW_FROM"] = "null";
2262 }
2263
2264 if (in_array("DATE_SHOW_TO", $arrKeys))
2265 {
2266 if ($arFields["DATE_SHOW_TO"] <> '')
2267 {
2268 $time = "";
2269 if(defined("FORMAT_DATE") && mb_strlen($arFields["DATE_SHOW_TO"]) <= mb_strlen(FORMAT_DATE))
2270 {
2271 $time = " 23:59:59";
2272 }
2273 $arFields_i["DATE_SHOW_TO"] = $DB->CharToDateFunction($arFields["DATE_SHOW_TO"].$time);
2274 }
2275 else
2276 {
2277 $arFields_i["DATE_SHOW_TO"] = "null";
2278 }
2279 }
2280
2281 if (in_array("DATE_SHOW_FIRST", $arrKeys))
2282 $arFields_i["DATE_SHOW_FIRST"] = "null";
2283
2284 if (in_array("arrIMAGE_ID", $arrKeys) && is_array($arFields["arrIMAGE_ID"]))
2285 {
2286 $arIMAGE = $arFields["arrIMAGE_ID"];
2287 $arIMAGE["MODULE_ID"] = "advertising";
2288 if ($BANNER_ID>0)
2289 {
2290 $z = $DB->Query("SELECT IMAGE_ID FROM b_adv_banner WHERE ID='$BANNER_ID'", false, $err_mess.__LINE__);
2291 $zr = $z->Fetch();
2292 $arIMAGE["old_file"] = $zr["IMAGE_ID"];
2293 }
2294 if ($arIMAGE["name"] <> '' || $arIMAGE["del"] <> '')
2295 {
2296 $subdir = COption::GetOptionString("advertising", "UPLOAD_SUBDIR");
2297 $fid = CFile::SaveFile($arIMAGE, $subdir);
2298 if (intval($fid)>0)
2299 {
2300 $arFields_i["IMAGE_ID"] = intval($fid);
2301 }
2302 else
2303 {
2304 $arFields_i["IMAGE_ID"] = "null";
2305 }
2306 if (intval($arBanner["IMAGE_ID"])!=intval($arFields_i["IMAGE_ID"]))
2307 {
2308 $modify_status = "Y";
2309 }
2310 }
2311 }
2312
2313 if (in_array("TEMPLATE_FILES", $arrKeys) && is_array($arFields["TEMPLATE_FILES"]))
2314 {
2315 if ($BANNER_ID>0)
2316 {
2317 $z = $DB->Query("SELECT TEMPLATE_FILES FROM b_adv_banner WHERE ID='$BANNER_ID'", false, $err_mess.__LINE__);
2318 $zr = $z->Fetch();
2319 if (CheckSerializedData($zr['TEMPLATE_FILES']))
2320 $zr = unserialize($zr['TEMPLATE_FILES'], ['allowed_classes' => false]);
2321 else
2322 $zr = array();
2323 }
2324 $subdir = COption::GetOptionString("advertising", "UPLOAD_SUBDIR");
2325 $arTemplateFiles = array();
2326 $cnt = 0;
2327 foreach ($arFields["TEMPLATE_FILES"] as $tfk => $tfv)
2328 {
2329 if (is_array($tfv))
2330 {
2331 foreach($tfv as $k => $arFile)
2332 {
2333 $arFile["MODULE_ID"] = "advertising";
2334 if(isset($zr[$arFile['lastKey']][$k]))
2335 $arFile["old_file"] = $zr[$arFile['lastKey']][$k];
2336
2337 if ($arFile["name"] <> '' || $arFile["description"] <> '' || isset($arFile["del"]) && $arFile["del"] <> '')
2338 {
2339 $fid = CFile::SaveFile($arFile, $subdir);
2340
2341 if ($fid === false && $arFile["description"] <> '' && $arFile["old_file"] <> '')
2342 {
2343 $arTemplateFiles[$cnt][$k] = intval($arFile["old_file"]);
2344 continue;
2345 }
2346
2347 if (intval($fid)>0)
2348 {
2349 $arTemplateFiles[$cnt][$k] = intval($fid);
2350 }
2351 else
2352 {
2353 $arTemplateFiles[$cnt][$k] = "null";
2354 }
2355 if (intval($zr[$arFile['lastKey']][$k]) != intval($arTemplateFiles[$cnt][$k]))
2356 {
2357 $modify_status = "Y";
2358 }
2359 }
2360 else
2361 {
2362 $arTemplateFiles[$cnt][$k] = $zr[$arFile['lastKey']][$k];
2363 }
2364 }
2365 }
2366 $cnt++;
2367 }
2368 $arFields_i["TEMPLATE_FILES"] = "'".$DB->ForSql(serialize($arTemplateFiles),2000)."'";
2369 }
2370
2371 if (in_array("IMAGE_ALT", $arrKeys))
2372 {
2373 $arFields_i["IMAGE_ALT"] = "'".$DB->ForSql($arFields["IMAGE_ALT"],255)."'";
2374 if ("'".$DB->ForSql($arBanner["IMAGE_ALT"],255)."'"!=$arFields_i["IMAGE_ALT"])
2375 {
2376 $modify_status = "Y";
2377 }
2378 }
2379
2380 if (in_array("URL", $arrKeys))
2381 {
2382 $arFields_i["URL"] = "'".$DB->ForSql($arFields["URL"])."'";
2383 if ("'".$DB->ForSql($arBanner["URL"],2000)."'" != $arFields_i["URL"])
2384 {
2385 $modify_status = "Y";
2386 }
2387 }
2388
2389 if (in_array("URL_TARGET", $arrKeys))
2390 {
2391 $arFields_i["URL_TARGET"] = "'".$DB->ForSql($arFields["URL_TARGET"], 255)."'";
2392 if ("'".$DB->ForSql($arBanner["URL_TARGET"], 255)."'" != $arFields_i["URL_TARGET"])
2393 {
2394 $modify_status = "Y";
2395 }
2396 }
2397
2398 if (in_array("NO_URL_IN_FLASH", $arrKeys) && ($arFields["NO_URL_IN_FLASH"]=="Y" || $arFields["NO_URL_IN_FLASH"]=="N"))
2399 {
2400 $arFields_i["NO_URL_IN_FLASH"] = "'".$arFields["NO_URL_IN_FLASH"]."'";
2401 if ($arBanner["NO_URL_IN_FLASH"]!=$arFields_i["NO_URL_IN_FLASH"])
2402 {
2403 $modify_status = "Y";
2404 }
2405 }
2406
2407 if (in_array("CODE", $arrKeys))
2408 {
2409 $arFields_i["CODE"] = $arFields["CODE"];
2410 if ($arBanner["CODE"] != $arFields_i["CODE"])
2411 {
2412 $modify_status = "Y";
2413 }
2414 }
2415
2416 if (in_array("FLASH_JS", $arrKeys) && ($arFields["FLASH_JS"]=="Y" || $arFields["FLASH_JS"]=="N"))
2417 {
2418 $arFields_i["FLASH_JS"] = "'".$arFields["FLASH_JS"]."'";
2419 if ("'" . $arBanner["FLASH_JS"] . "'" != $arFields_i["FLASH_JS"])
2420 {
2421 $modify_status = "Y";
2422 }
2423 }
2424
2425 if (in_array("FLASH_VER", $arrKeys))
2426 {
2427 $arFields_i["FLASH_VER"] = "'".$DB->ForSQL($arFields["FLASH_VER"], 20)."'";
2428 if ("'".$DB->ForSQL($arBanner["FLASH_VER"], 20)."'" != $arFields_i["FLASH_VER"])
2429 {
2430 $modify_status = "Y";
2431 }
2432 }
2433
2434 if (in_array("arrFlashIMAGE_ID", $arrKeys) && is_array($arFields["arrFlashIMAGE_ID"]))
2435 {
2436 $arrFlashIMAGE = $arFields["arrFlashIMAGE_ID"];
2437 $arrFlashIMAGE["MODULE_ID"] = "advertising";
2438 if ($BANNER_ID>0)
2439 {
2440 $z = $DB->Query("SELECT FLASH_IMAGE FROM b_adv_banner WHERE ID='$BANNER_ID'", false, $err_mess.__LINE__);
2441 if($zr = $z->Fetch())
2442 {
2443 $arrFlashIMAGE["old_file"] = $zr["FLASH_IMAGE"];
2444 }
2445 }
2446 if ($arrFlashIMAGE["name"] <> '' || $arrFlashIMAGE["del"] <> '')
2447 {
2448 $subdir = COption::GetOptionString("advertising", "UPLOAD_SUBDIR");
2449 $fid = CFile::SaveFile($arrFlashIMAGE, $subdir);
2450 if (intval($fid)>0) $arFields_i["FLASH_IMAGE"] = intval($fid);
2451 else $arFields_i["FLASH_IMAGE"] = "null";
2452 if (intval($arBanner["FLASH_IMAGE"])!=intval($arFields_i["FLASH_IMAGE"]))
2453 {
2454 $modify_status = "Y";
2455 }
2456 }
2457 }
2458
2459 if (in_array("AD_TYPE", $arrKeys))
2460 {
2461 $arFields_i["AD_TYPE"] = "'".$DB->ForSql($arFields["AD_TYPE"],20)."'";
2462 if ("'".$DB->ForSql($arBanner["AD_TYPE"], 20)."'"!=$arFields_i["AD_TYPE"])
2463 {
2464 $modify_status = "Y";
2465 }
2466 }
2467
2468 if (in_array("TEMPLATE", $arrKeys))
2469 {
2470 $arFields_i["TEMPLATE"] = CAdvBanner::addBindField($arFields["TEMPLATE"], $arBanner["TEMPLATE"], $modify_status);
2471 }
2472
2473 if (in_array("FLASH_TRANSPARENT", $arrKeys))
2474 {
2475 $arFields_i["FLASH_TRANSPARENT"] = "'".$DB->ForSql($arFields["FLASH_TRANSPARENT"],11)."'";
2476 if ("'".$DB->ForSql($arBanner["FLASH_TRANSPARENT"],11)."'"!=$arFields_i["FLASH_TRANSPARENT"])
2477 {
2478 $modify_status = "Y";
2479 }
2480 }
2481
2482 if (in_array("CODE_TYPE", $arrKeys))
2483 {
2484 $arFields_i["CODE_TYPE"] = ($arFields["CODE_TYPE"]=="text") ? "'text'" : "'html'";
2485 $value = ($arBanner["CODE_TYPE"]=="text") ? "'text'" : "'html'";
2486 if ($value!=$arFields_i["CODE_TYPE"])
2487 {
2488 $modify_status = "Y";
2489 }
2490 }
2491
2492 if (in_array("FOR_NEW_GUEST", $arrKeys))
2493 {
2494 if ($arFields["FOR_NEW_GUEST"]=="Y" || $arFields["FOR_NEW_GUEST"]=="N")
2495 {
2496 $arFields_i["FOR_NEW_GUEST"] = "'".$arFields["FOR_NEW_GUEST"]."'";
2497 }
2498 elseif ($arFields["FOR_NEW_GUEST"]=="NOT_REF" || $arFields["FOR_NEW_GUEST"]=="ALL" || $arFields["FOR_NEW_GUEST"] == '')
2499 {
2500 $arFields_i["FOR_NEW_GUEST"] = "null";
2501 }
2502 }
2503
2504 if (in_array("COMMENTS", $arrKeys))
2505 $arFields_i["COMMENTS"] = "'".$DB->ForSql($arFields["COMMENTS"],2000)."'";
2506
2507 if (($isAdmin || $isManager) && in_array("STATUS_COMMENTS", $arrKeys))
2508 {
2509 $arFields_i["STATUS_COMMENTS"] = "'".$DB->ForSql($arFields["STATUS_COMMENTS"],2000)."'";
2510 }
2511
2512 $email_notify = "N";
2513
2514 if ($modify_status=="Y" || (in_array("STATUS_SID", $arrKeys) && ($isAdmin || $isManager)))
2515 {
2516 $new_status = ($isAdmin || $isManager) ? $arFields["STATUS_SID"] : $arContract["DEFAULT_STATUS_SID"];
2517 $arFields_i["STATUS_SID"] = "'".$DB->ForSql($new_status,255)."'";
2518
2519 // если статус изменился то
2520 if ("'".$DB->ForSql($arBanner["STATUS_SID"],255)."'"!=$arFields_i["STATUS_SID"])
2521 {
2522 $email_notify = "Y";
2523 }
2524 }
2525
2526 if (in_array("arrSITE", $arrKeys))
2527 {
2528 $arFields_i["FIRST_SITE_ID"] = "''";
2529 if (is_array($arFields["arrSITE"]))
2530 {
2531 $arrSITE = array_unique($arFields["arrSITE"]);
2532 reset($arrSITE);
2533 $site_id = current($arrSITE);
2534 $arFields_i["FIRST_SITE_ID"] = "'".$DB->ForSql($site_id,2)."'";
2535 }
2536 }
2537
2538 if (in_array("SHOW_USER_GROUP", $arrKeys))
2539 {
2540 if($arFields["SHOW_USER_GROUP"] == "Y" && (in_array("arrUSERGROUP", $arrKeys) && count($arFields["arrUSERGROUP"])>0))
2541 $SHOW_USER_GROUP = "Y";
2542 else
2543 $SHOW_USER_GROUP = "N";
2544 $arFields_i["SHOW_USER_GROUP"] = "'".$DB->ForSql($SHOW_USER_GROUP,1)."'";
2545 }
2546
2547 if (in_array("STAT_TYPE", $arrKeys))
2548 {
2549 if($arFields["STAT_TYPE"] === "CITY")
2550 $arFields_i["STAT_TYPE"] = "'CITY'";
2551 elseif($arFields["STAT_TYPE"] === "REGION")
2552 $arFields_i["STAT_TYPE"] = "'REGION'";
2553 else
2554 $arFields_i["STAT_TYPE"] = "'COUNTRY'";
2555 }
2556
2557 if (intval($BANNER_ID)>0)
2558 {
2559 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"]))
2560 $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
2561 else
2562 $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
2563
2564 if (in_array("MODIFIED_BY", $arrKeys))
2565 $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
2566 else
2567 $arFields_i["MODIFIED_BY"] = $USER_ID;
2568
2569 CAdvBanner::Update($arFields_i, $BANNER_ID);
2570 }
2571 else
2572 {
2573 if (in_array("DATE_CREATE", $arrKeys) && CheckDateTime($arFields["DATE_CREATE"]))
2574 $arFields_i["DATE_CREATE"] = $DB->CharToDateFunction($arFields["DATE_CREATE"]);
2575 else
2576 $arFields_i["DATE_CREATE"] = $DB->GetNowFunction();
2577
2578 if (in_array("CREATED_BY", $arrKeys)) $arFields_i["CREATED_BY"] = intval($arFields["CREATED_BY"]);
2579 else $arFields_i["CREATED_BY"] = $USER_ID;
2580
2581 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"]))
2582 $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
2583 else
2584 $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
2585
2586 if (in_array("MODIFIED_BY", $arrKeys))
2587 $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
2588 else
2589 $arFields_i["MODIFIED_BY"] = $USER_ID;
2590
2591 $BANNER_ID = CAdvBanner::Add($arFields_i);
2592 }
2593
2594 if (defined('BX_COMP_MANAGED_CACHE'))
2595 {
2596 $taggedCache = Application::getInstance()->getTaggedCache();
2597 $taggedCache->clearByTag('advertising_banner_type_'.$arFields['TYPE_SID']);
2598 }
2599
2600 $BANNER_ID = intval($BANNER_ID);
2601
2602 if ($BANNER_ID>0)
2603 {
2604 if (in_array("arrSITE", $arrKeys))
2605 {
2606 CAdvBanner::DeleteSiteLink($BANNER_ID);
2607 if (is_array($arFields["arrSITE"]))
2608 {
2609 $arrSITE = array_unique($arFields["arrSITE"]);
2610 reset($arrSITE);
2611 foreach($arrSITE as $sid)
2612 {
2613 if (trim($sid) <> '')
2614 {
2615 $strSql = "INSERT INTO b_adv_banner_2_site (BANNER_ID, SITE_ID) VALUES ($BANNER_ID, '".$DB->ForSql($sid, 2)."')";
2616 $DB->Query($strSql, false, $err_mess.__LINE__);
2617 }
2618 }
2619 }
2620 }
2621
2622 if (in_array("arrSHOW_PAGE", $arrKeys))
2623 {
2624 CAdvBanner::DeletePageLink($BANNER_ID, " and SHOW_ON_PAGE='Y'");
2625 if (is_array($arFields["arrSHOW_PAGE"]))
2626 {
2627 $arrPage = array_unique($arFields["arrSHOW_PAGE"]);
2628 foreach($arrPage as $page)
2629 {
2630 $page = trim($page);
2631 if ($page <> '')
2632 {
2633 $arFields_i = array(
2634 "BANNER_ID" => $BANNER_ID,
2635 "PAGE" => "'".$DB->ForSql($page, 255)."'",
2636 "SHOW_ON_PAGE" => "'Y'"
2637 );
2638 $DB->Insert("b_adv_banner_2_page",$arFields_i, $err_mess.__LINE__);
2639 }
2640 }
2641 }
2642 }
2643
2644 if (in_array("arrNOT_SHOW_PAGE", $arrKeys))
2645 {
2646 CAdvBanner::DeletePageLink($BANNER_ID, " and SHOW_ON_PAGE='N'");
2647 if (is_array($arFields["arrNOT_SHOW_PAGE"]))
2648 {
2649 $arrPage = array_unique($arFields["arrNOT_SHOW_PAGE"]);
2650 foreach($arrPage as $page)
2651 {
2652 $page = trim($page);
2653 if ($page <> '')
2654 {
2655 $arFields_i = array(
2656 "BANNER_ID" => $BANNER_ID,
2657 "PAGE" => "'".$DB->ForSql($page, 255)."'",
2658 "SHOW_ON_PAGE" => "'N'"
2659 );
2660 $DB->Insert("b_adv_banner_2_page",$arFields_i, $err_mess.__LINE__);
2661 }
2662 }
2663 }
2664 }
2665
2666 if (in_array("arrCOUNTRY", $arrKeys))
2667 {
2668 $iCounter = 0;
2670 if (is_array($arFields["arrCOUNTRY"]))
2671 {
2672 $arrCOUNTRY = array();
2673 foreach($arFields["arrCOUNTRY"] as $COUNTRY)
2674 {
2675 if(is_array($COUNTRY))
2676 {
2677 $COUNTRY["COUNTRY_ID"] = trim($COUNTRY["COUNTRY_ID"]);
2678 if($COUNTRY["COUNTRY_ID"] == '')
2679 continue;
2680 $key = $COUNTRY["COUNTRY_ID"]."|".$COUNTRY["REGION"]."|".$COUNTRY["CITY_ID"];
2681 $strInsert = "'".$DB->ForSQL($COUNTRY["COUNTRY_ID"], 2)."', ".($COUNTRY["REGION"] == ''? "null": "'".$DB->ForSQL($COUNTRY["REGION"], 200)."'").", ".(intval($COUNTRY["CITY_ID"]) <= 0? "null": intval($COUNTRY["CITY_ID"]))."";
2682 }
2683 else
2684 {
2685 $COUNTRY = trim($COUNTRY);
2686 if($COUNTRY == '')
2687 continue;
2688 $key = $COUNTRY."||";
2689 $strInsert = "'".$DB->ForSQL($COUNTRY, 2)."', null, null";
2690 }
2691 $arrCOUNTRY[$key] = $strInsert;
2692 }
2693 foreach($arrCOUNTRY as $strInsert)
2694 {
2695 $strSql = "INSERT INTO b_adv_banner_2_country (BANNER_ID, COUNTRY_ID, REGION, CITY_ID) VALUES ($BANNER_ID, ".$strInsert.")";
2696 $DB->Query($strSql, false, $err_mess.__LINE__);
2697 $iCounter++;
2698 }
2699 }
2700 $DB->Query("UPDATE b_adv_banner SET STAT_COUNT = ".$iCounter." WHERE ID = ".$BANNER_ID);
2701 }
2702
2703 if (in_array("arrSTAT_ADV", $arrKeys))
2704 {
2706 if (is_array($arFields["arrSTAT_ADV"]))
2707 {
2708 $arrSTAT_ADV = array_unique($arFields["arrSTAT_ADV"]);
2709 foreach($arrSTAT_ADV as $aid)
2710 {
2711 if (intval($aid)>0)
2712 {
2713 $strSql = "INSERT INTO b_adv_banner_2_stat_adv (BANNER_ID, STAT_ADV_ID) VALUES ($BANNER_ID, '".intval($aid)."')";
2714 $DB->Query($strSql, false, $err_mess.__LINE__);
2715 }
2716 }
2717 }
2718 }
2719
2720 if (in_array("arrWEEKDAY", $arrKeys))
2721 {
2723 if (is_array($arFields["arrWEEKDAY"]))
2724 {
2725 $arrWeekday = array_keys($arFields["arrWEEKDAY"]);
2726 $arrWeekday = array_unique($arrWeekday);
2727 if (is_array($arrWeekday) && count($arrWeekday)>0)
2728 {
2729 foreach ($arrWeekday as $weekday)
2730 {
2731 if (is_array($arFields["arrWEEKDAY"][$weekday]) && count($arFields["arrWEEKDAY"][$weekday])>0)
2732 {
2733 $arrHour = $arFields["arrWEEKDAY"][$weekday];
2734 array_walk(
2735 $arrHour,
2736 function (&$item) {
2737 $item = (int)$item;
2738 }
2739 );
2740 $arrHour = array_unique($arrHour);
2741 foreach($arrHour as $hour)
2742 {
2743 if ($hour>=0 && $hour<=23)
2744 {
2745 $strSql = "INSERT INTO b_adv_banner_2_weekday (BANNER_ID, C_WEEKDAY, C_HOUR) VALUES ($BANNER_ID, '".$DB->ForSql($weekday, 10)."', $hour)";
2746 $DB->Query($strSql, false, $err_mess.__LINE__);
2747 }
2748 }
2749 }
2750 }
2751 }
2752 }
2753 }
2754
2755 if (in_array("arrUSERGROUP", $arrKeys))
2756 {
2757 CAdvBanner::DeleteGroupLink($BANNER_ID);
2758 if (is_array($arFields["arrUSERGROUP"]))
2759 {
2760 $arrGROUPS = array_unique($arFields["arrUSERGROUP"]);
2761 foreach($arrGROUPS as $uid)
2762 {
2763 if (intval($uid)>0)
2764 {
2765 $strSql = "INSERT INTO b_adv_banner_2_group (BANNER_ID, GROUP_ID) VALUES ($BANNER_ID, ".intval($uid).")";
2766 $DB->Query($strSql, false, $err_mess.__LINE__);
2767 }
2768 }
2769 }
2770 }
2771
2772 // если необходимо оповестить
2773 $SEND_EMAIL = $arFields["SEND_EMAIL"] == "N" ? "N" : "Y";
2774 if ($email_notify == "Y" && (!$isAdmin || !$isManager || $SEND_EMAIL == "Y"))
2775 {
2776 // получаем данные по баннеру
2777 CTimeZone::Disable();
2778 $rsBanner = CAdvBanner::GetByID($BANNER_ID, $CHECK_RIGHTS);
2779 CTimeZone::Enable();
2780
2781 if ($arBanner=$rsBanner->Fetch())
2782 {
2783 $BCC = array();
2784 $OWNER_EMAIL = array();
2785 $ADD_EMAIL = array();
2786 $STAT_EMAIL = array();
2787 $EDIT_EMAIL = array();
2788
2789 $MANAGER_EMAIL = CAdvContract::GetManagerEmails();
2790 $ADMIN_EMAIL = CAdvContract::GetAdminEmails();
2791 $ADMIN_EMAIL = array_merge($MANAGER_EMAIL, $ADMIN_EMAIL);
2792 $ADMIN_EMAIL = array_unique($ADMIN_EMAIL);
2793 CAdvContract::GetOwnerEmails($CONTRACT_ID, $OWNER_EMAIL, $ADD_EMAIL, $STAT_EMAIL, $EDIT_EMAIL);
2794
2795 $CREATED_BY = $MODIFIED_BY = 0;
2796 if (intval($arBanner["CREATED_BY"])>0)
2797 {
2798 $rsUser = CUser::GetByID($arBanner["CREATED_BY"]);
2799 if ($arUser = $rsUser->Fetch())
2800 {
2801 $CREATED_BY = "[".$arUser["ID"]."] (".$arUser["LOGIN"].") ".$arUser["NAME"]." ".$arUser["LAST_NAME"];
2802 }
2803 }
2804 if (intval($arBanner["MODIFIED_BY"])==intval($arBanner["CREATED_BY"]) && intval($arBanner["CREATED_BY"])>0)
2805 {
2806 $MODIFIED_BY = $CREATED_BY;
2807 }
2808 elseif (intval($arBanner["MODIFIED_BY"])>0)
2809 {
2810 $rsUser = CUser::GetByID($arBanner["MODIFIED_BY"]);
2811 if ($arUser = $rsUser->Fetch())
2812 {
2813 $MODIFIED_BY = "[".$arUser["ID"]."] (".$arUser["LOGIN"].") ".$arUser["NAME"]." ".$arUser["LAST_NAME"];
2814 }
2815 }
2816
2817 $arImage = CFile::GetFileArray($arBanner["IMAGE_ID"]);
2818 if ($arImage)
2819 $IMAGE_LINK = CHTTP::URN2URI($arImage["SRC"]);
2820 else
2821 $IMAGE_LINK = "";
2822
2823 $arImage = CFile::GetFileArray($arBanner["FLASH_IMAGE"]);
2824 if ($arImage)
2825 $FLASHIMAGE_LINK = CHTTP::URN2URI($arImage["SRC"]);
2826 else
2827 $FLASHIMAGE_LINK = "";
2828
2829 $EMAIL_TO = $OWNER_EMAIL;
2830 if (count($EMAIL_TO)<=0)
2831 {
2832 $EMAIL_TO = $ADMIN_EMAIL;
2833 }
2834 else $BCC = $ADMIN_EMAIL;
2835
2836 $arEventFields = array(
2837 "ID" => $arBanner["ID"],
2838 "EMAIL_TO" => implode(",", $EMAIL_TO),
2839 "ADMIN_EMAIL" => implode(",", $ADMIN_EMAIL),
2840 "ADD_EMAIL" => implode(",", $ADD_EMAIL),
2841 "STAT_EMAIL" => implode(",", $STAT_EMAIL),
2842 "EDIT_EMAIL" => implode(",", $EDIT_EMAIL),
2843 "OWNER_EMAIL" => implode(",", $OWNER_EMAIL),
2844 "BCC" => implode(",", $BCC),
2845 "CONTRACT_ID" => $CONTRACT_ID,
2846 "CONTRACT_NAME" => $arContract["NAME"],
2847 "TYPE_SID" => $arBanner["TYPE_SID"],
2848 "TYPE_NAME" => $arBanner["TYPE_NAME"],
2849 "STATUS" => ( ( $arBanner["STATUS_SID"] <> '' ) ? GetMessage( "AD_STATUS_" . $arBanner["STATUS_SID"] ) : "" ),
2850 "STATUS_COMMENTS" => $arBanner["STATUS_COMMENTS"],
2851 "NAME" => $arBanner["NAME"],
2852 "GROUP_SID" => $arBanner["GROUP_SID"],
2853 "INDICATOR" => GetMessage("AD_".mb_strtoupper($arBanner["LAMP"])."_BANNER_STATUS"),
2854 "ACTIVE" => $arBanner["ACTIVE"],
2855 "MAX_SHOW_COUNT" => $arBanner["MAX_SHOW_COUNT"],
2856 "SHOW_COUNT" => $arBanner["SHOW_COUNT"],
2857 "MAX_CLICK_COUNT" => $arBanner["MAX_CLICK_COUNT"],
2858 "CLICK_COUNT" => $arBanner["CLICK_COUNT"],
2859 "DATE_LAST_SHOW" => $arBanner["DATE_LAST_SHOW"],
2860 "DATE_LAST_CLICK" => $arBanner["DATE_LAST_CLICK"],
2861 "DATE_SHOW_FROM" => $arBanner["DATE_SHOW_FROM"],
2862 "DATE_SHOW_TO" => $arBanner["DATE_SHOW_TO"],
2863 "IMAGE_LINK" => $IMAGE_LINK,
2864 "IMAGE_ALT" => $arBanner["IMAGE_ALT"],
2865 "URL" => $arBanner["URL"],
2866 "URL_TARGET" => $arBanner["URL_TARGET"],
2867 "NO_URL_IN_FLASH" => $arBanner["NO_URL_IN_FLASH"],
2868 "CODE" => $arBanner["CODE"],
2869 "CODE_TYPE" => $arBanner["CODE_TYPE"],
2870 "COMMENTS" => $arBanner["COMMENTS"],
2871 "DATE_CREATE" => $arBanner["DATE_CREATE"],
2872 "CREATED_BY" => $CREATED_BY,
2873 "DATE_MODIFY" => $arBanner["DATE_MODIFY"],
2874 "MODIFIED_BY" => $MODIFIED_BY,
2875 "AD_TYPE" => $arBanner["AD_TYPE"],
2876 "TEMPLATE" => unserialize($arBanner["TEMPLATE"], ['allowed_classes' => false]),
2877 "FLASH_TRANSPARENT" => $arBanner["FLASH_TRANSPARENT"],
2878 "FLASH_IMAGE_LINK" => $FLASHIMAGE_LINK,
2879 "FLASH_JS" => $arBanner["FLASH_JS"],
2880 "FLASH_VER" => $arBanner["FLASH_VER"],
2881 );
2882 $arrSITE = CAdvBanner::GetSiteArray($arBanner["ID"]);
2883 CEvent::Send("ADV_BANNER_STATUS_CHANGE", $arrSITE, $arEventFields);
2884 }
2885 }
2886 }
2887 }
2888 }
2889 return $BANNER_ID;
2890 }
2891
2892 public static function SetKeywords($keywords, $TYPE_SID="", $LOGIC="DESIRED")
2893 {
2894 global $arrADV_KEYWORDS;
2895 if ($LOGIC == '') return;
2896 if ($TYPE_SID == '') $TYPE_SID = "";
2897 $arrKeywords = array();
2898 if (is_array($keywords) && count($keywords)>0)
2899 {
2900 foreach($keywords as $word)
2901 {
2902 if (is_array($word))
2903 {
2904 $exact_match = $word["EXACT_MATCH"]=="Y" ? "Y" : "N";
2905 $value = $word["KEYWORD"];
2906 }
2907 else
2908 {
2909 $exact_match = "N";
2910 $value = $word;
2911 }
2912 $arrKeywords[$exact_match][] = trim($value);
2913 }
2914 }
2915 else
2916 {
2917 $arrWords = explode(",",$keywords);
2918 if (is_array($arrWords) && count($arrWords)>0)
2919 {
2920 foreach($arrWords as $word)
2921 {
2922 if (trim($word) <> '')
2923 $arrKeywords["N"][] = trim($word);
2924 }
2925 }
2926 }
2927 if(!is_set($arrADV_KEYWORDS, $TYPE_SID)) $arrADV_KEYWORDS[$TYPE_SID] = array();
2928 $arr = array("Y","N");
2929 foreach ($arr as $exact_match)
2930 {
2931 $arrWords = is_array($arrKeywords[$exact_match]) ? array_unique($arrKeywords[$exact_match]) : array();
2932 if (count($arrWords)>0)
2933 {
2934 $arrTemp = $arrADV_KEYWORDS[$TYPE_SID][$LOGIC][$exact_match];
2935 if (is_array($arrTemp) && count($arrTemp)>0)
2936 {
2937 $arrTemp = array_merge($arrWords, $arrTemp);
2938 $arrTemp = array_unique($arrTemp);
2939 $arrADV_KEYWORDS[$TYPE_SID][$LOGIC][$exact_match] = $arrTemp;
2940 }
2941 else $arrADV_KEYWORDS[$TYPE_SID][$LOGIC][$exact_match] = $arrWords;
2942 }
2943 }
2944 }
2945
2946 public static function GetKeywords($TYPE_SID="", $LOGIC="", $EXACT_MATCH="")
2947 {
2949 $arrReturn = $arrADV_KEYWORDS;
2950
2951 if(
2952 !is_array($arrADV_KEYWORDS)
2953 || (
2954 !array_key_exists("", $arrADV_KEYWORDS)
2955 && !array_key_exists($TYPE_SID, $arrADV_KEYWORDS)
2956 )
2957 )
2958 {
2959 $keywords = $APPLICATION->GetProperty("adv_desired_target_keywords");
2960 if($keywords === false)
2961 $keywords = $APPLICATION->GetProperty("keywords");
2962 $arrWords = explode(",", $keywords);
2963
2964 $arrKeywords = array();
2965 foreach($arrWords as $word)
2966 {
2967 $word = trim($word);
2968 if($word <> '')
2969 $arrKeywords[] = $word;
2970 }
2971
2972 if(count($arrKeywords) > 0)
2973 $arrReturn[$TYPE_SID]["DESIRED"]["N"] = $arrKeywords;
2974 }
2975
2976 if($TYPE_SID <> '')
2977 {
2978 if($LOGIC <> '')
2979 {
2980 if($EXACT_MATCH <> '')
2981 return $arrReturn[$TYPE_SID][$LOGIC][$EXACT_MATCH];
2982 else
2983 return $arrReturn[$TYPE_SID][$LOGIC];
2984 }
2985 else
2986 {
2987 return $arrReturn[$TYPE_SID];
2988 }
2989 }
2990 else
2991 {
2992 return $arrReturn;
2993 }
2994 }
2995
2996 public static function ResetKeywords($TYPE_SID="", $LOGIC="", $EXACT_MATCH="")
2997 {
2998 global $arrADV_KEYWORDS;
2999 if ($TYPE_SID <> '')
3000 {
3001 if ($LOGIC <> '')
3002 {
3003 if ($EXACT_MATCH <> '') $arrADV_KEYWORDS[$TYPE_SID][$LOGIC][$EXACT_MATCH] = array();
3004 else $arrADV_KEYWORDS[$TYPE_SID][$LOGIC] = array();
3005 }
3006 else $arrADV_KEYWORDS[$TYPE_SID] = array();
3007 }
3008 else $arrADV_KEYWORDS = array();
3009 }
3010
3011 public static function SetRequiredKeywords($keywords, $TYPE_SID="")
3012 {
3013 CAdvBanner::SetKeywords($keywords, $TYPE_SID, "REQUIRED");
3014 }
3015
3016 public static function SetDesiredKeywords($keywords, $TYPE_SID="")
3017 {
3018 CAdvBanner::SetKeywords($keywords, $TYPE_SID, "DESIRED");
3019 }
3020
3021 public static function GetRequiredKeywords($TYPE_SID="", $EXACT_MATCH="")
3022 {
3023 return CAdvBanner::GetKeywords($TYPE_SID, "REQUIRED", $EXACT_MATCH);
3024 }
3025
3026 public static function GetDesiredKeywords($TYPE_SID="", $EXACT_MATCH="")
3027 {
3028 return CAdvBanner::GetKeywords($TYPE_SID, "DESIRED", $EXACT_MATCH);
3029 }
3030
3031 public static function arr_comp_uniform($a, $b)
3032 {
3033 if ($a["val"] < $b["val"])
3034 return -1;
3035 elseif ($a["val"] > $b["val"])
3036 return 1;
3037 else
3038 return 0;
3039 }
3040
3041 // возвращает массив описывающий произвольный баннер
3042 public static function GetRandom($TYPE_SID)
3043 {
3044 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: GetRandom<br>Line: ";
3046
3047 static $arrWeightSum = false;
3048
3049 $TYPE_SID = trim($TYPE_SID);
3050 if ($TYPE_SID == '')
3051 {
3052 return false;
3053 }
3054
3055 $DONT_USE_CONTRACT = COption::GetOptionString("advertising", "DONT_USE_CONTRACT", "N");
3056
3057 if ($arrWeightSum === false)
3058 {
3059 // получим массив весов для текущей страницы
3060 $arrWeightSum = array();
3061
3062 $arrCookie_counter = array();
3063 // если мы уже получили на странице значение cookie то
3064 if (is_array($arrADV_VIEWED_BANNERS))
3065 {
3066 foreach ($arrADV_VIEWED_BANNERS as $banner_id => $arr)
3067 {
3068 $arrCookie_counter[$banner_id] = $arr["COUNTER"];
3069 }
3070 }
3071 else // если мы первый раз обращаемся к значению хранимому в cookie
3072 {
3073 $cookie_name = "BANNERS";
3074 $arr = explode(",", $APPLICATION->get_cookie($cookie_name));
3075 if (is_array($arr) && count($arr)>0)
3076 {
3077 foreach($arr as $str)
3078 {
3079 $ar = explode("_",$str);
3080 $banner_id = intval($ar[1]);
3081 $counter = intval($ar[2]);
3082 $arrCookie_counter[$banner_id] = $counter;
3083 }
3084 }
3085 }
3086
3087 $arrWeightSum_RequiredKeywords = array();
3088 $arrWeightSum_DesiredKeywords = array();
3089 $arrWeightSum_EmptyKeywords = array();
3090 $arrWeightSum_all = array();
3091 $arKeywordsSet = array(); // заданы ли ключевые слова для того или иного типа
3092
3093 $arrRequiredKeywordsBanners = array(); // массив баннеров для которых были найдены все ключевые слова
3094 $arrDesiredKeywordsBanners = array(); // массив баннеров для которых было найдено хотя бы одно желательное слово
3095 $arrEmptyKeywordsBanners = array(); // массив баннеров у которых поле "ключевые слова" не заполнено
3096 $arrPAGE_KEYWORDS = CAdvBanner::GetKeywords(); // массив ключевых слов заданных для данной страницы
3097
3098 $arrDesiredPageKeywords_all = is_array($arrPAGE_KEYWORDS[""]["DESIRED"]) ? $arrPAGE_KEYWORDS[""]["DESIRED"] : array();
3099 $arrRequiredPageKeywords_all = is_array($arrPAGE_KEYWORDS[""]["REQUIRED"]) ? $arrPAGE_KEYWORDS[""]["REQUIRED"] : array();
3100
3102 while($ar=$rs->Fetch())
3103 {
3104 // Check for blocked uniformed banners
3105 if (isset($ar["FLYUNIFORM"]) and $ar["FLYUNIFORM"] == "Y")
3106 {
3108 if ($unitest >= 1.0 + BANNER_UNIFORMITY_DIVERGENCE_COEF)
3109 continue;
3110 }
3111
3112 $arKeywordsSet[$ar["TYPE_SID"]] = "N";
3113
3114 if ((intval($ar["SHOWS_FOR_VISITOR"])>0 && intval($arrCookie_counter[$ar["BANNER_ID"]])<intval($ar["SHOWS_FOR_VISITOR"])) || intval($ar["SHOWS_FOR_VISITOR"])<=0)
3115 {
3116 $arr = $arrPAGE_KEYWORDS[$ar["TYPE_SID"]]["DESIRED"];
3117 $arrDesiredPageKeywords = is_array($arr) ? $arr : array();
3118
3119 $arr = $arrPAGE_KEYWORDS[$ar["TYPE_SID"]]["REQUIRED"];
3120 $arrRequiredPageKeywords = is_array($arr) ? $arr : array();
3121
3122 if (count($arrRequiredPageKeywords)>0 ||
3123 count($arrRequiredPageKeywords_all)>0 ||
3124 count($arrDesiredPageKeywords)>0 ||
3125 count($arrDesiredPageKeywords_all)>0
3126 )
3127 {
3128 $arKeywordsSet[$ar["TYPE_SID"]] = "Y";
3129 }
3130
3131 $arrBannerKeywords = preg_split('/[\n\r]+/', $ar["BANNER_KEYWORDS"]);
3132 if (is_array($arrBannerKeywords))
3133 {
3134 TrimArr($arrBannerKeywords);
3135 }
3136
3137 if ($DONT_USE_CONTRACT <> "Y" && $ar["CONTRACT_KEYWORDS"] <> '')
3138 {
3139 $arrContractKeywords = preg_split('/[\n\r]+/', $ar["CONTRACT_KEYWORDS"]);
3140 if (is_array($arrContractKeywords))
3141 {
3142 TrimArr($arrContractKeywords);
3143 }
3144 $arrBannerKeywords = array_unique(array_merge($arrBannerKeywords, $arrContractKeywords));
3145 }
3146
3147 if ($DONT_USE_CONTRACT == "Y" || !array_key_exists("CONTRACT_ID", $ar))
3148 $ar["CONTRACT_ID"] = 0;
3149
3150 if (count($arrBannerKeywords)>0)
3151 {
3152 $found_required = true;
3153 if (count($arrRequiredPageKeywords)>0 || count($arrRequiredPageKeywords_all)>0)
3154 {
3155 $arr = array("Y","N"); // совпадение | вхождение
3156 foreach($arr as $exact_match)
3157 {
3158 $arr1 = is_array($arrRequiredPageKeywords[$exact_match]) ? $arrRequiredPageKeywords[$exact_match] : array();
3159 $arr2 = is_array($arrRequiredPageKeywords_all[$exact_match]) ? $arrRequiredPageKeywords_all[$exact_match] : array();
3160 $arrRequiredKeywords = array_unique(array_merge($arr1, $arr2));
3161 if (count($arrRequiredKeywords)>0)
3162 {
3163 reset($arrRequiredKeywords);
3164 foreach($arrRequiredKeywords as $page_word)
3165 {
3166 $page_word = mb_strtoupper($page_word);
3167 reset($arrBannerKeywords);
3168 $found = false;
3169 foreach($arrBannerKeywords as $banner_word)
3170 {
3171 $banner_word = mb_strtoupper($banner_word);
3172 // совпадение
3173 if ($exact_match=="Y")
3174 {
3175 if ($banner_word==$page_word)
3176 {
3177 $found = true;
3178 break;
3179 }
3180 }
3181 elseif ($exact_match=="N")
3182 {
3183 if (mb_strpos($page_word, $banner_word) !== false || mb_strpos($banner_word, $page_word) !== false)
3184 {
3185 $found = true;
3186 break;
3187 }
3188 }
3189 }
3190 if (!$found)
3191 {
3192 $found_required = false;
3193 break 2;
3194 }
3195 }
3196 }
3197 }
3198 // если все ключевые слова были найдены то
3199 if ($found_required)
3200 {
3201 // запоминаем баннер в массиве баннеров для которых были найдены все ключевые слова
3202 $arrRequiredKeywordsBanners[] = $ar["BANNER_ID"];
3203 }
3204 }
3205
3206 // если по обязательным словам баннер подходит то проверим по желательным словам
3207 if ($found_required && (count($arrDesiredPageKeywords)>0 || count($arrDesiredPageKeywords_all)>0))
3208 {
3209 $found_desired = false;
3210 $arr = array("Y","N"); // совпадение | вхождение
3211 foreach($arr as $exact_match)
3212 {
3213 $arr1 = is_array($arrDesiredPageKeywords) ? $arrDesiredPageKeywords[$exact_match] : array();
3214 $arr2 = is_array($arrDesiredPageKeywords_all) ? $arrDesiredPageKeywords_all[$exact_match] : array();
3215 if (!is_array($arr1)) $arr1 = array();
3216 if (!is_array($arr2)) $arr2 = array();
3217 $arrDesiredKeywords = array_unique(array_merge($arr1, $arr2));
3218 if (is_array($arrDesiredKeywords) && count($arrDesiredKeywords)>0)
3219 {
3220 reset($arrDesiredKeywords);
3221 foreach($arrDesiredKeywords as $page_word)
3222 {
3223 $page_word = mb_strtoupper($page_word);
3224 reset($arrBannerKeywords);
3225 foreach($arrBannerKeywords as $banner_word)
3226 {
3227 $banner_word = mb_strtoupper($banner_word);
3228 // совпадение
3229 if ($exact_match=="Y")
3230 {
3231 if ($banner_word==$page_word)
3232 {
3233 $found_desired = true;
3234 break 3;
3235 }
3236 }
3237 elseif ($exact_match=="N")
3238 {
3239 if (mb_strpos($page_word, $banner_word) !== false || mb_strpos($banner_word, $page_word) !== false)
3240 {
3241 $found_desired = true;
3242 break 3;
3243 }
3244 }
3245 }
3246 }
3247 }
3248 }
3249 // если все ключевые слова были найдены то
3250 if ($found_desired)
3251 {
3252 // запоминаем баннер в массиве баннеров для которых были найдены все ключевые слова
3253 $arrDesiredKeywordsBanners[] = $ar["BANNER_ID"];
3254 }
3255 }
3256 }
3257 else
3258 {
3259 // запомнить баннеры у которых вообще не задано ключевых слов
3260 $arrEmptyKeywordsBanners[] = $ar["BANNER_ID"];
3261 }
3262
3263 if (in_array($ar["BANNER_ID"], $arrRequiredKeywordsBanners))
3264 {
3265 $arrWeightSum_RequiredKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["WEIGHT"] = intval($ar["CONTRACT_WEIGHT"]);
3266 $arrWeightSum_RequiredKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["BANNERS"][$ar["BANNER_ID"]] = intval($ar["BANNER_WEIGHT"]);
3267 }
3268 if (in_array($ar["BANNER_ID"], $arrDesiredKeywordsBanners))
3269 {
3270 $arrWeightSum_DesiredKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["WEIGHT"] = intval($ar["CONTRACT_WEIGHT"]);
3271 $arrWeightSum_DesiredKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["BANNERS"][$ar["BANNER_ID"]] = intval($ar["BANNER_WEIGHT"]);
3272 }
3273 if (in_array($ar["BANNER_ID"], $arrEmptyKeywordsBanners))
3274 {
3275 $arrWeightSum_EmptyKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["WEIGHT"] = intval($ar["CONTRACT_WEIGHT"]);
3276 $arrWeightSum_EmptyKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["BANNERS"][$ar["BANNER_ID"]] = intval($ar["BANNER_WEIGHT"]);
3277 }
3278 $arrWeightSum_all[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["WEIGHT"] = intval($ar["CONTRACT_WEIGHT"]);
3279 $arrWeightSum_all[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["BANNERS"][$ar["BANNER_ID"]] = intval($ar["BANNER_WEIGHT"]);
3280 }
3281 }
3282
3283 $arrAllTypies = array_keys($arrWeightSum_all);
3284 if (count($arrAllTypies)>0)
3285 {
3286 foreach($arrAllTypies as $tsid)
3287 {
3288 // если для данного типа ключевые слова заданы то
3289 if ($arKeywordsSet[$tsid]=="Y")
3290 {
3291 // желательные слова
3292 if (is_array($arrWeightSum_DesiredKeywords[$tsid]) && count($arrWeightSum_DesiredKeywords[$tsid])>0)
3293 {
3294 $arrWeightSum[$tsid] = $arrWeightSum_DesiredKeywords[$tsid];
3295 }
3296 // обязательные слова
3297 elseif (is_array($arrWeightSum_RequiredKeywords[$tsid]) && count($arrWeightSum_RequiredKeywords[$tsid])>0)
3298 {
3299 $arrWeightSum[$tsid] = $arrWeightSum_RequiredKeywords[$tsid];
3300 }
3301 // с пустыми словами
3302 elseif ($arKeywordsSet[$tsid]=="Y" && is_array($arrWeightSum_EmptyKeywords[$tsid]))
3303 {
3304 $arrWeightSum[$tsid] = $arrWeightSum_EmptyKeywords[$tsid];
3305 }
3306 }
3307 else
3308 {
3309 $arrWeightSum[$tsid] = $arrWeightSum_all[$tsid];
3310 }
3311 }
3312 }
3313 }
3314
3315 $arrWSum = $arrWeightSum[$TYPE_SID];
3316
3317 // если массив весов подготовлен то
3318 if (is_array($arrWSum) && count($arrWSum)>0)
3319 {
3320 $CONTRACT_ID = 0;
3321
3322 if ($DONT_USE_CONTRACT == "N" || !array_key_exists("0", $arrWSum))
3323 {
3324 // получим сумму весов контрактов
3325 $intSum = 0;
3326
3327 foreach ($arrWSum as $cid => $arr)
3328 {
3329 $CONTRACT_ID = $cid;
3330 $intSum += intval($arr["WEIGHT"]);
3331 }
3332
3333 // выберем контракт по весу
3334 $intStep = 0;
3335 $rndWeight = $intSum * (mt_rand()/mt_getrandmax());
3336
3337 foreach ($arrWSum as $cid => $arr)
3338 {
3339 if($rndWeight>=$intStep && $rndWeight<=$intStep+$arr["WEIGHT"])
3340 {
3341 $CONTRACT_ID = $cid;
3342 break;
3343 }
3344 $intStep += $arr["WEIGHT"];
3345 }
3346 $CONTRACT_ID = intval($CONTRACT_ID)<=0 ? 1 : intval($CONTRACT_ID);
3347 }
3348
3349 $arrWeightBanners = $arrWSum[$CONTRACT_ID]["BANNERS"];
3350
3351 // если ID контракта определен то
3352 if (is_array($arrWeightBanners) && count($arrWeightBanners)>0)
3353 {
3354 // получим сумму весов баннеров контракта
3355 $intSum = 0;
3356 $strBanners = "0";
3357
3358 foreach ($arrWeightBanners as $bid => $weight)
3359 {
3360 if(in_array($bid, $arrViewedBanners))
3361 continue;
3362 $intSum += intval($weight);
3363 $strBanners .= ",".intval($bid);
3364 }
3365
3366 if ($CONTRACT_ID>0)
3367 {
3368 $strSql = "
3369 SELECT
3370 B.*,
3371 ".$DB->DateToCharFunction("B.DATE_SHOW_FIRST", "FULL")." DATE_SHOW_FIRST,
3372 ".$DB->DateToCharFunction("B.DATE_SHOW_FROM", "FULL")." DATE_SHOW_FROM,
3373 ".$DB->DateToCharFunction("B.DATE_SHOW_TO", "FULL")." DATE_SHOW_TO,
3374 C.MAX_VISITOR_COUNT CONTRACT_MAX_VISITOR_COUNT
3375 FROM
3376 b_adv_banner B,
3377 b_adv_contract C
3378 WHERE
3379 B.CONTRACT_ID = $CONTRACT_ID
3380 and B.TYPE_SID = '".$DB->ForSql($TYPE_SID,255)."'
3381 and B.ID in (".$strBanners.")
3382 and C.ID = B.CONTRACT_ID
3383 ORDER BY
3384 FLYUNIFORM DESC
3385 ";
3386 }
3387 else
3388 {
3389 $strSql = "
3390 SELECT
3391 B.*,
3392 ".$DB->DateToCharFunction("B.DATE_SHOW_FIRST", "FULL")." DATE_SHOW_FIRST,
3393 ".$DB->DateToCharFunction("B.DATE_SHOW_FROM", "FULL")." DATE_SHOW_FROM,
3394 ".$DB->DateToCharFunction("B.DATE_SHOW_TO", "FULL")." DATE_SHOW_TO
3395 FROM
3396 b_adv_banner B
3397 WHERE
3398 B.TYPE_SID = '".$DB->ForSql($TYPE_SID,255)."'
3399 AND B.ID in (".$strBanners.")
3400 ORDER BY
3401 FLYUNIFORM DESC
3402 ";
3403
3404 }
3405
3406 $intSum = 0;
3407 $infVal = 0;
3408 $infUniform = null;
3409 $stubs = array();
3410
3411 $rsBanners = $DB->Query($strSql, false, $err_mess.__LINE__);
3412 while($arBanner = $rsBanners->Fetch())
3413 {
3414 if (isset($arBanner["FLYUNIFORM"]) and $arBanner["FLYUNIFORM"] == "Y")
3415 {
3416 // Select most last (weak) rotated banner (x<<1)
3417 $unitest = CAdvBanner_all::GetUniformityCoef($arBanner);
3418 if ($unitest < $infVal or !$infUniform)
3419 {
3420 $infVal = $unitest;
3421 $infUniform = $arBanner;
3422 }
3423 }
3424 else
3425 {
3426 $intSum += intval($arBanner["WEIGHT"]);
3427 array_push($stubs, $arBanner); // Save stubs
3428 }
3429 }
3430
3431 // Check out selected uniformed banner
3432 if ($infUniform == null or
3433 $infVal >= 1.0 + BANNER_UNIFORMITY_DIVERGENCE_COEF)
3434 {
3435 // If this, we have to stop alittle this banner, and show stub one.
3436 $infUniform = array();
3437 if (count($stubs) > 0)
3438 {
3439 $intStep = 0;
3440 $rndWeight = $intSum * (mt_rand()/mt_getrandmax());
3441
3442 reset($stubs);
3443 $infUniform = current($stubs);
3444 if($rndWeight<$intStep or $rndWeight>$intStep+$infUniform["WEIGHT"])
3445 {
3446 $intStep += $infUniform["WEIGHT"];
3447 while ($infUniform = next($stubs))
3448 {
3449 if($rndWeight>=$intStep && $rndWeight<=$intStep+$infUniform["WEIGHT"])
3450 break;
3451 $intStep += $infUniform["WEIGHT"];
3452 }
3453 }
3454 }
3455 }
3456
3457 $arBanner = $infUniform;
3458
3459 $BANNER_ID = intval($arBanner["ID"]);
3460 if ($BANNER_ID>0)
3461 {
3462 unset($arrWeightSum[$TYPE_SID][$CONTRACT_ID]["BANNERS"][$arBanner["ID"]]);
3463 if(count($arrWeightSum[$TYPE_SID][$CONTRACT_ID]["BANNERS"])<=0)
3464 unset($arrWeightSum[$TYPE_SID][$CONTRACT_ID]);
3465 $arrViewedBanners[] = $arBanner["ID"];
3466 }
3467 return $arBanner;
3468 }
3469 }
3470 return null;
3471 }
3472
3473 // возвращает массив, описывающий $quantity произвольных баннеров
3474 public static function GetRandomArray($TYPE_SID, $quantity = 1)
3475 {
3476 $err_mess = (CAdvBanner_all::err_mess())."<br>Function: GetRandom<br>Line: ";
3478
3479 static $arrWeightSum = false;
3480
3481 $TYPE_SID = trim($TYPE_SID);
3482 if ($TYPE_SID == '')
3483 {
3484 return false;
3485 }
3486
3487 $DONT_USE_CONTRACT = COption::GetOptionString("advertising", "DONT_USE_CONTRACT", "N");
3488
3489 if ($arrWeightSum === false)
3490 {
3491 // получим массив весов для текущей страницы
3492 $arrWeightSum = array();
3493
3494 $arrCookie_counter = array();
3495 // если мы уже получили на странице значение cookie то
3496 if (is_array($arrADV_VIEWED_BANNERS))
3497 {
3498 foreach ($arrADV_VIEWED_BANNERS as $banner_id => $arr)
3499 {
3500 $arrCookie_counter[$banner_id] = $arr["COUNTER"];
3501 }
3502 }
3503 else // если мы первый раз обращаемся к значению хранимому в cookie
3504 {
3505 $cookie_name = "BANNERS";
3506 $arr = explode(",", $APPLICATION->get_cookie($cookie_name));
3507 if (is_array($arr) && count($arr)>0)
3508 {
3509 foreach($arr as $str)
3510 {
3511 $ar = explode("_",$str);
3512 if (count($ar) >= 3)
3513 {
3514 $banner_id = intval($ar[1]);
3515 $counter = intval($ar[2]);
3516 $arrCookie_counter[$banner_id] = $counter;
3517 }
3518 }
3519 }
3520 }
3521
3522 $arrWeightSum_RequiredKeywords = array();
3523 $arrWeightSum_DesiredKeywords = array();
3524 $arrWeightSum_EmptyKeywords = array();
3525 $arrWeightSum_all = array();
3526 $arKeywordsSet = array(); // заданы ли ключевые слова для того или иного типа
3527
3528 $arrRequiredKeywordsBanners = array(); // массив баннеров для которых были найдены все ключевые слова
3529 $arrDesiredKeywordsBanners = array(); // массив баннеров для которых было найдено хотя бы одно желательное слово
3530 $arrEmptyKeywordsBanners = array(); // массив баннеров у которых поле "ключевые слова" не заполнено
3531 $arrPAGE_KEYWORDS = CAdvBanner::GetKeywords(); // массив ключевых слов заданных для данной страницы
3532
3533 $arrDesiredPageKeywords_all = $arrPAGE_KEYWORDS[""]["DESIRED"] ?? [];
3534 $arrRequiredPageKeywords_all = $arrPAGE_KEYWORDS[""]["REQUIRED"] ?? [];
3535
3537 while($ar=$rs->Fetch())
3538 {
3539 // Check for blocked uniformed banners
3540 if (isset($ar["FLYUNIFORM"]) and $ar["FLYUNIFORM"] == "Y")
3541 {
3543 if ($unitest >= 1.0 + BANNER_UNIFORMITY_DIVERGENCE_COEF)
3544 continue;
3545 }
3546
3547 $arKeywordsSet[$ar["TYPE_SID"]] = "N";
3548
3549 if ((intval($ar["SHOWS_FOR_VISITOR"])>0 && intval($arrCookie_counter[$ar["BANNER_ID"]])<intval($ar["SHOWS_FOR_VISITOR"])) || intval($ar["SHOWS_FOR_VISITOR"])<=0)
3550 {
3551 $arrDesiredPageKeywords = $arrPAGE_KEYWORDS[$ar["TYPE_SID"]]["DESIRED"] ?? [];
3552 $arrRequiredPageKeywords = $arrPAGE_KEYWORDS[$ar["TYPE_SID"]]["REQUIRED"] ?? [];
3553
3554 if (count($arrRequiredPageKeywords)>0 ||
3555 count($arrRequiredPageKeywords_all)>0 ||
3556 count($arrDesiredPageKeywords)>0 ||
3557 count($arrDesiredPageKeywords_all)>0
3558 )
3559 {
3560 $arKeywordsSet[$ar["TYPE_SID"]] = "Y";
3561 }
3562
3563 $arrBannerKeywords = preg_split('/[\n\r]+/', $ar["BANNER_KEYWORDS"]);
3564 if (is_array($arrBannerKeywords))
3565 {
3566 TrimArr($arrBannerKeywords);
3567 }
3568
3569 if ($DONT_USE_CONTRACT <> "Y" && $ar["CONTRACT_KEYWORDS"] <> '')
3570 {
3571 $arrContractKeywords = preg_split('/[\n\r]+/', $ar["CONTRACT_KEYWORDS"]);
3572 if (is_array($arrContractKeywords))
3573 {
3574 TrimArr($arrContractKeywords);
3575 }
3576 $arrBannerKeywords = array_unique(array_merge($arrBannerKeywords, $arrContractKeywords));
3577 }
3578
3579 if ($DONT_USE_CONTRACT == "Y" || !array_key_exists("CONTRACT_ID", $ar))
3580 $ar["CONTRACT_ID"] = 0;
3581
3582 if (count($arrBannerKeywords)>0)
3583 {
3584 $found_required = true;
3585 if (count($arrRequiredPageKeywords)>0 || count($arrRequiredPageKeywords_all)>0)
3586 {
3587 $arr = array("Y","N"); // совпадение | вхождение
3588 foreach($arr as $exact_match)
3589 {
3590 $arr1 = is_array($arrRequiredPageKeywords[$exact_match]) ? $arrRequiredPageKeywords[$exact_match] : array();
3591 $arr2 = is_array($arrRequiredPageKeywords_all[$exact_match]) ? $arrRequiredPageKeywords_all[$exact_match] : array();
3592 $arrRequiredKeywords = array_unique(array_merge($arr1, $arr2));
3593 if (count($arrRequiredKeywords)>0)
3594 {
3595 reset($arrRequiredKeywords);
3596 foreach($arrRequiredKeywords as $page_word)
3597 {
3598 $page_word = mb_strtoupper($page_word);
3599 reset($arrBannerKeywords);
3600 $found = false;
3601 foreach($arrBannerKeywords as $banner_word)
3602 {
3603 $banner_word = mb_strtoupper($banner_word);
3604 // совпадение
3605 if ($exact_match=="Y")
3606 {
3607 if ($banner_word==$page_word)
3608 {
3609 $found = true;
3610 break;
3611 }
3612 }
3613 elseif ($exact_match=="N")
3614 {
3615 if (mb_strpos($page_word, $banner_word) !== false || mb_strpos($banner_word, $page_word) !== false)
3616 {
3617 $found = true;
3618 break;
3619 }
3620 }
3621 }
3622 if (!$found)
3623 {
3624 $found_required = false;
3625 break 2;
3626 }
3627 }
3628 }
3629 }
3630 // если все ключевые слова были найдены то
3631 if ($found_required)
3632 {
3633 // запоминаем баннер в массиве баннеров для которых были найдены все ключевые слова
3634 $arrRequiredKeywordsBanners[] = $ar["BANNER_ID"];
3635 }
3636 }
3637
3638 // если по обязательным словам баннер подходит то проверим по желательным словам
3639 if ($found_required && (count($arrDesiredPageKeywords)>0 || count($arrDesiredPageKeywords_all)>0))
3640 {
3641 $found_desired = false;
3642 $arr = array("Y","N"); // совпадение | вхождение
3643 foreach($arr as $exact_match)
3644 {
3645 $arr1 = is_array($arrDesiredPageKeywords) ? $arrDesiredPageKeywords[$exact_match] : array();
3646 $arr2 = is_array($arrDesiredPageKeywords_all) ? $arrDesiredPageKeywords_all[$exact_match] : array();
3647 if (!is_array($arr1)) $arr1 = array();
3648 if (!is_array($arr2)) $arr2 = array();
3649 $arrDesiredKeywords = array_unique(array_merge($arr1, $arr2));
3650 if (is_array($arrDesiredKeywords) && count($arrDesiredKeywords)>0)
3651 {
3652 reset($arrDesiredKeywords);
3653 foreach($arrDesiredKeywords as $page_word)
3654 {
3655 $page_word = mb_strtoupper($page_word);
3656 reset($arrBannerKeywords);
3657 foreach($arrBannerKeywords as $banner_word)
3658 {
3659 $banner_word = mb_strtoupper($banner_word);
3660 // совпадение
3661 if ($exact_match=="Y")
3662 {
3663 if ($banner_word==$page_word)
3664 {
3665 $found_desired = true;
3666 break 3;
3667 }
3668 }
3669 elseif ($exact_match=="N")
3670 {
3671 if (mb_strpos($page_word, $banner_word) !== false || mb_strpos($banner_word, $page_word) !== false)
3672 {
3673 $found_desired = true;
3674 break 3;
3675 }
3676 }
3677 }
3678 }
3679 }
3680 }
3681 // если все ключевые слова были найдены то
3682 if ($found_desired)
3683 {
3684 // запоминаем баннер в массиве баннеров для которых были найдены все ключевые слова
3685 $arrDesiredKeywordsBanners[] = $ar["BANNER_ID"];
3686 }
3687 }
3688 }
3689 else
3690 {
3691 // запомнить баннеры у которых вообще не задано ключевых слов
3692 $arrEmptyKeywordsBanners[] = $ar["BANNER_ID"];
3693 }
3694
3695 if (in_array($ar["BANNER_ID"], $arrRequiredKeywordsBanners))
3696 {
3697 $arrWeightSum_RequiredKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["WEIGHT"] = intval($ar["CONTRACT_WEIGHT"]);
3698 $arrWeightSum_RequiredKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["BANNERS"][$ar["BANNER_ID"]] = intval($ar["BANNER_WEIGHT"]);
3699 }
3700 if (in_array($ar["BANNER_ID"], $arrDesiredKeywordsBanners))
3701 {
3702 $arrWeightSum_DesiredKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["WEIGHT"] = intval($ar["CONTRACT_WEIGHT"]);
3703 $arrWeightSum_DesiredKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["BANNERS"][$ar["BANNER_ID"]] = intval($ar["BANNER_WEIGHT"]);
3704 }
3705 if (in_array($ar["BANNER_ID"], $arrEmptyKeywordsBanners))
3706 {
3707 $arrWeightSum_EmptyKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["WEIGHT"] = intval($ar["CONTRACT_WEIGHT"]);
3708 $arrWeightSum_EmptyKeywords[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["BANNERS"][$ar["BANNER_ID"]] = intval($ar["BANNER_WEIGHT"]);
3709 }
3710 $arrWeightSum_all[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["WEIGHT"] = intval($ar["CONTRACT_WEIGHT"]);
3711 $arrWeightSum_all[$ar["TYPE_SID"]][$ar["CONTRACT_ID"]]["BANNERS"][$ar["BANNER_ID"]] = intval($ar["BANNER_WEIGHT"]);
3712 }
3713 }
3714
3715 $arrAllTypies = array_keys($arrWeightSum_all);
3716 if (count($arrAllTypies)>0)
3717 {
3718 foreach($arrAllTypies as $tsid)
3719 {
3720 // если для данного типа ключевые слова заданы то
3721 if ($arKeywordsSet[$tsid]=="Y")
3722 {
3723 // желательные слова
3724 if (isset($arrWeightSum_DesiredKeywords[$tsid]) && is_array($arrWeightSum_DesiredKeywords[$tsid]) && !empty($arrWeightSum_DesiredKeywords[$tsid]))
3725 {
3726 $arrWeightSum[$tsid] = $arrWeightSum_DesiredKeywords[$tsid];
3727 }
3728 // обязательные слова
3729 elseif (isset($arrWeightSum_RequiredKeywords[$tsid]) && is_array($arrWeightSum_RequiredKeywords[$tsid]) && !empty($arrWeightSum_RequiredKeywords[$tsid]))
3730 {
3731 $arrWeightSum[$tsid] = $arrWeightSum_RequiredKeywords[$tsid];
3732 }
3733 // с пустыми словами
3734 elseif ($arKeywordsSet[$tsid]=="Y" && is_array($arrWeightSum_EmptyKeywords[$tsid]))
3735 {
3736 $arrWeightSum[$tsid] = $arrWeightSum_EmptyKeywords[$tsid];
3737 }
3738 }
3739 else
3740 {
3741 $arrWeightSum[$tsid] = $arrWeightSum_all[$tsid];
3742 }
3743 }
3744 }
3745 }
3746
3747 $arrWSum = $arrWeightSum[$TYPE_SID];
3748
3749 // если массив весов подготовлен то
3750 if (is_array($arrWSum) && count($arrWSum)>0)
3751 {
3752 $CONTRACT_ID = 0;
3753
3754 if ($DONT_USE_CONTRACT == "N" || !array_key_exists("0", $arrWSum))
3755 {
3756 // получим сумму весов контрактов
3757 $intSum = 0;
3758
3759 foreach ($arrWSum as $cid => $arr)
3760 {
3761 $CONTRACT_ID = $cid;
3762 $intSum += intval($arr["WEIGHT"]);
3763 }
3764
3765 // выберем контракт по весу
3766 $intStep = 0;
3767 $rndWeight = $intSum * (mt_rand()/mt_getrandmax());
3768
3769 foreach ($arrWSum as $cid => $arr)
3770 {
3771 if($rndWeight>=$intStep && $rndWeight<=$intStep+$arr["WEIGHT"])
3772 {
3773 $CONTRACT_ID = $cid;
3774 break;
3775 }
3776 $intStep += $arr["WEIGHT"];
3777 }
3778 $CONTRACT_ID = intval($CONTRACT_ID)<=0 ? 1 : intval($CONTRACT_ID);
3779 }
3780
3781 $arrWeightBanners = $arrWSum[$CONTRACT_ID]["BANNERS"];
3782
3783 // если ID контракта определен то
3784 if (is_array($arrWeightBanners) && count($arrWeightBanners)>0)
3785 {
3786 // получим сумму весов баннеров контракта
3787 $intSum = 0;
3788 $strBanners = "0";
3789
3790 foreach ($arrWeightBanners as $bid => $weight)
3791 {
3792 if(in_array($bid, $arrViewedBanners))
3793 continue;
3794 $intSum += intval($weight);
3795 $strBanners .= ",".intval($bid);
3796 }
3797
3798 if ($CONTRACT_ID>0)
3799 {
3800 $strSql = "
3801 SELECT
3802 B.*,
3803 ".$DB->DateToCharFunction("B.DATE_SHOW_FIRST", "FULL")." DATE_SHOW_FIRST,
3804 ".$DB->DateToCharFunction("B.DATE_SHOW_FROM", "FULL")." DATE_SHOW_FROM,
3805 ".$DB->DateToCharFunction("B.DATE_SHOW_TO", "FULL")." DATE_SHOW_TO,
3806 C.MAX_VISITOR_COUNT CONTRACT_MAX_VISITOR_COUNT
3807 FROM
3808 b_adv_banner B,
3809 b_adv_contract C
3810 WHERE
3811 B.CONTRACT_ID = $CONTRACT_ID
3812 and B.TYPE_SID = '".$DB->ForSql($TYPE_SID,255)."'
3813 and B.ID in (".$strBanners.")
3814 and C.ID = B.CONTRACT_ID
3815 ORDER BY
3816 FLYUNIFORM DESC
3817 ";
3818 }
3819 else
3820 {
3821 $strSql = "
3822 SELECT
3823 B.*,
3824 ".$DB->DateToCharFunction("B.DATE_SHOW_FIRST", "FULL")." DATE_SHOW_FIRST,
3825 ".$DB->DateToCharFunction("B.DATE_SHOW_FROM", "FULL")." DATE_SHOW_FROM,
3826 ".$DB->DateToCharFunction("B.DATE_SHOW_TO", "FULL")." DATE_SHOW_TO
3827 FROM
3828 b_adv_banner B
3829 WHERE
3830 B.TYPE_SID = '".$DB->ForSql($TYPE_SID,255)."'
3831 AND B.ID in (".$strBanners.")
3832 ORDER BY
3833 FLYUNIFORM DESC
3834 ";
3835
3836 }
3837
3838 $intSum = 0;
3839 $inf = array();
3840 $stubs = array();
3841
3842 $rsBanners = $DB->Query($strSql, false, $err_mess.__LINE__);
3843 while($arBanner = $rsBanners->Fetch())
3844 {
3845 if (isset($arBanner["FLYUNIFORM"]) and $arBanner["FLYUNIFORM"] == "Y")
3846 {
3847 $unitest = CAdvBanner_all::GetUniformityCoef($arBanner);
3848 if ($unitest < 1.0 + BANNER_UNIFORMITY_DIVERGENCE_COEF)
3849 $inf[$arBanner['ID']] = $arBanner;
3850 }
3851 else
3852 {
3853 $intSum += intval($arBanner["WEIGHT"]);
3854 $stubs[$arBanner['ID']] = $arBanner; // Save stubs
3855 }
3856 }
3857
3858 // Sort array from most last (weak) rotated banner (x<<1) to strongest
3859 uasort($inf, array('CAdvBanner_all', 'arr_comp_uniform'));
3860
3861 // Sorting stubs array
3862 $infStubs = array();
3863 while (count($stubs))
3864 {
3865 $intStep = 0;
3866 $rndWeight = $intSum * (mt_rand()/mt_getrandmax());
3867
3868 reset($stubs);
3869 $infCurr = current($stubs);
3870 if($rndWeight < $intStep or $rndWeight > $intStep + $infCurr["WEIGHT"])
3871 {
3872 $intStep += $infCurr["WEIGHT"];
3873 while (next($stubs))
3874 {
3875 $infCurr = current($stubs);
3876 if($rndWeight>=$intStep && $rndWeight<=$intStep+$infCurr["WEIGHT"])
3877 break;
3878 $intStep += $infCurr["WEIGHT"];
3879 }
3880 }
3881 $infStubs[$infCurr['ID']] = $infCurr;
3882 unset($stubs[$infCurr['ID']]);
3883 }
3884
3885 $arBanners = array_slice(array_merge($inf, $infStubs), 0, intval($quantity));
3886
3887 foreach ($arBanners as $arB)
3888 {
3889 $BANNER_ID = intval($arB["ID"]);
3890 if ($BANNER_ID > 0)
3891 {
3892 unset($arrWeightSum[$TYPE_SID][$CONTRACT_ID]["BANNERS"][$arB["ID"]]);
3893 if(count($arrWeightSum[$TYPE_SID][$CONTRACT_ID]["BANNERS"]) <= 0)
3894 unset($arrWeightSum[$TYPE_SID][$CONTRACT_ID]);
3895 $arrViewedBanners[] = $arB["ID"];
3896 }
3897 }
3898 return $arBanners;
3899 }
3900 }
3901 return null;
3902 }
3903
3904 // Uniformity coefficient
3905 public static function GetUniformityCoef($arBanner)
3906 {
3907 $arProgress = 0;
3909 $tim = CAdvBanner_all::CalculateTimeProgress($arBanner);
3910 if ($rot and $tim) $arProgress = $rot/$tim;
3911
3912 return $arProgress;
3913 }
3914
3915 public static function __innerExtractBitrixDates($arBanner)
3916 {
3917 $fs = array("to" => 0, "first" => 0, "from" => 0);
3918 if (isset($arBanner["DATE_SHOW_TO"])) $fs["to"] = $arBanner["DATE_SHOW_TO"];
3919 if (isset($arBanner["DATE_SHOW_FIRST"])) $fs["first"] = $arBanner["DATE_SHOW_FIRST"];
3920 if (isset($arBanner["DATE_SHOW_FROM"])) $fs["from"] = $arBanner["DATE_SHOW_FROM"];
3921 if ($fs["to"] and mb_strstr(trim($fs["to"]), " ") == false) $fs["to"].=" 23:59:59";
3922 if ($fs["first"] and mb_strstr(trim($fs["first"]), " ") == false) $fs["first"].=" 00:00:00";
3923 if ($fs["from"] and mb_strstr(trim($fs["from"]), " ") == false) $fs["from"].=" 00:00:00";
3924
3925 return $fs;
3926 }
3927
3928 // Returns TimeDifference in seconds beetween FROM,TO Dates of a banner
3929 public static function CalculateTimeDiff($arBanner)
3930 {
3932 if (!$dt["to"]) return 0;
3933
3934 // 05.04.2007 19:26:26
3935
3936 $dtformat = "DD.MM.YYYY HH:MI:SS";
3937 $stmpfirst = MakeTimeStamp($dt["first"], $dtformat);
3938 $stmpfrom = MakeTimeStamp($dt["from"], $dtformat);
3939 $stmpto = MakeTimeStamp($dt["to"], $dtformat);
3940
3941 // Check if FirstShowDate valid, then use it.
3942 if ($stmpfirst>0 and $stmpfirst>=$stmpfrom and $stmpto>$stmpfirst)
3943 {
3944 $stmpfrom = $stmpfirst;
3945 }
3946
3947 if ($stmpfrom >= $stmpto) return 0;
3948 $rStmp = $stmpto - $stmpfrom;
3949 return $rStmp;
3950 }
3951
3952 // Calculate progress in 0.0<x<1.0 format of banner rotation
3953 public static function CalculateTimeProgress($arBanner)
3954 {
3956
3957 $stmpnow = time();
3958 $dtformat = "DD.MM.YYYY HH:MI:SS";
3959 $stmpfirst = MakeTimeStamp($dt["first"], $dtformat);
3960 $stmpfrom = MakeTimeStamp($dt["from"], $dtformat);
3961 $stmpto = MakeTimeStamp($dt["to"], $dtformat);
3962
3963 // Check if FirstShowDate valid, then use it.
3964 if ($stmpfirst>0 and $stmpfirst>=$stmpfrom and $stmpto>$stmpfirst)
3965 {
3966 $stmpfrom = $stmpfirst;
3967 }
3968
3969 $stmpnow -= $stmpfrom;
3970 $diff = CAdvBanner_all::CalculateTimeDiff($arBanner);
3971 if ($stmpnow <= 0 or !$diff) return 0;
3972
3973 return $stmpnow/$diff;
3974 }
3975
3976 public static function CalculateRotationProgress($arBanner)
3977 {
3978 if (!isset($arBanner["MAX_SHOW_COUNT"]) or !isset($arBanner["SHOW_COUNT"]) or
3979 intval($arBanner["MAX_SHOW_COUNT"])==0) return 0;
3980 return intval($arBanner["SHOW_COUNT"])/intval($arBanner["MAX_SHOW_COUNT"]);
3981 }
3982
3983 // Calculates speed
3984 //function CalculateActualRotationSpeed()
3985 //function GetAverageRotationSpeed()
3986
3987 public static function PrepareHTML($text, $arBanner)
3988 {
3990 static $search = array("#RANDOM1#", "#RANDOM2#", "#RANDOM3#", "#RANDOM4#", "#RANDOM5#", "#BANNER_NAME#", "#BANNER_ID#", "#CONTRACT_ID#", "#TYPE_SID#");
3991 if (trim($text) <> '')
3992 {
3993 $text = str_replace($search, array($nRandom1, $nRandom2, $nRandom3, $nRandom4, $nRandom5, $arBanner["NAME"], $arBanner["ID"], $arBanner["CONTRACT_ID"], $arBanner["TYPE_SID"]), $text);
3994 if (mb_strpos($text, "#EVENT_GID#") !== false)
3995 {
3996 if (CModule::IncludeModule("statistic"))
3997 {
3998 $text = str_replace("#EVENT_GID#", CStatEvent::GetGID(), $text);
3999 }
4000 }
4001 }
4002 return $text;
4003 }
4004
4005 public static function GetRedirectURL($url, $arBanner)
4006 {
4007 return $url;
4008 }
4009
4010 public static function ReplaceURL($text, $arBanner)
4011 {
4012 return $text;
4013 }
4014
4015 // возвращает HTML баннера по массиву
4016 public static function GetHTML($arBanner, $bNoIndex=false)
4017 {
4018 $strReturn = "";
4019
4020 // обрабатываем изображение
4021 if(intval($arBanner["IMAGE_ID"]) > 0 && $arBanner["AD_TYPE"] <> "html" && $arBanner["AD_TYPE"] <> "template")
4022 {
4023 $arImage = CFile::GetFileArray($arBanner["IMAGE_ID"]);
4024 if ($arImage)
4025 {
4026 $file_type = GetFileType($arImage["FILE_NAME"]);
4027 $path = $arImage["SRC"];
4028 switch($file_type)
4029 {
4030 case "FLASH":
4031 $arParams = array();
4032 $url = $param = "";
4033 $alt = $a_title = $a_target = "";
4034 if (trim($arBanner["URL"]) <> '')
4035 {
4036 $param = CAdvBanner::PrepareHTML($arBanner["URL"], $arBanner);
4037 $param = CAdvBanner::GetRedirectURL($param, $arBanner);
4038 $url = $param;
4039 $arParams[] = "flash_link=".urlencode($param);
4040 if (trim($arBanner["URL_TARGET"]) <> '')
4041 {
4042 $arParams[] = "flash_target=".urlencode($arBanner["URL_TARGET"]);
4043 $a_target = ' target="'.htmlspecialcharsbx($arBanner["URL_TARGET"]).'" ';
4044 }
4045 }
4046 if (trim($arBanner["IMAGE_ALT"]) <> '')
4047 {
4048 $alt = CAdvBanner::PrepareHTML($arBanner["IMAGE_ALT"], $arBanner);
4049 $arParams[] = "flash_alt=".urlencode($alt);
4050 $a_title = " title=\"".htmlspecialcharsbx($alt)."\" ";
4051 }
4052
4053 if (count($arParams)>0)
4054 $param = "?".implode("&amp;",$arParams);
4055
4056 if ($arBanner["FLASH_TRANSPARENT"] == '')
4057 $arBanner["FLASH_TRANSPARENT"] = 'transparent';
4058
4059 if ($arBanner["FLASH_JS"] != 'Y')
4060 {
4061 $strReturn = '<div style="width: '.$arImage["WIDTH"].'px; height: '.$arImage["HEIGHT"].'px; padding:0; margin:0">';
4062 if(trim($arBanner["URL"]) <> '' && $arBanner["NO_URL_IN_FLASH"] == "Y")
4063 {
4064 $strReturn .= ($bNoIndex? '<noindex>':'').'<div style="position:absolute; z-index:100;"><a href="'.$url.'"'.$a_target.$a_title.($bNoIndex? ' rel="nofollow"':'').'><img src="/bitrix/images/1.gif" width="'.$arImage["WIDTH"].'" height="'.$arImage["HEIGHT"].'" style="border:0;" alt="'.htmlspecialcharsEx($alt).'" /></a></div>'.($bNoIndex? '</noindex>':'');
4065 }
4066 $strReturn .=
4067'<OBJECT
4068 classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000"
4069 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
4070 id="banner_'.$arBanner["ID"].'"
4071 WIDTH="'.$arImage["WIDTH"].'"
4072 HEIGHT="'.$arImage["HEIGHT"].'">
4073 <PARAM NAME="movie" VALUE="'.$path.$param.'" />
4074 <PARAM NAME="quality" VALUE="high" />
4075 <PARAM NAME="bgcolor" VALUE="#FFFFFF" />
4076 <PARAM NAME="wmode" VALUE="'.$arBanner["FLASH_TRANSPARENT"].'" />
4077 <EMBED
4078 src="'.$path.$param.'"
4079 quality="high"
4080 bgcolor="#FFFFFF"
4081 wmode="'.$arBanner["FLASH_TRANSPARENT"].'"
4082 WIDTH="'.$arImage["WIDTH"].'"
4083 HEIGHT="'.$arImage["HEIGHT"].'"
4084 NAME="banner"
4085 TYPE="application/x-shockwave-flash"
4086 PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
4087 </EMBED>
4088</OBJECT></div>';
4089 }
4090 else
4091 {
4092 $strReturn = "";
4093
4094 static $bScript = null;
4095 if($bScript === null)
4096 {
4097 $bScript = true;
4098 $strReturn .= '<script src="'.CUtil::GetAdditionalFileURL('/bitrix/js/advertising/flash.js').'"></script>';
4099 }
4100
4101 $altImgPath = '';
4102 $arAltImage = CFile::GetFileArray($arBanner["FLASH_IMAGE"]);
4103 if ($arAltImage)
4104 {
4105 $altImgPath = $arAltImage["SRC"];
4106 }
4107
4108 $test_id = 'id'.RandString(10);
4109 $strReturn .= '<div id="'.$test_id.'" style="width: '.$arImage["WIDTH"].'px; height: '.$arImage["HEIGHT"].'px; padding:0; margin:0;">';
4110 $altHref = '';
4111 if(trim($arBanner["URL"]) <> '')
4112 {
4113 if($arBanner["NO_URL_IN_FLASH"] == "Y")
4114 $strReturn .= ($bNoIndex? '<noindex>':'').'<div style="position:absolute; z-index:100;"><a href="'.$url.'"'.$a_target.$a_title.($bNoIndex? ' rel="nofollow"':'').'><img src="/bitrix/images/1.gif" width="'.$arImage["WIDTH"].'" height="'.$arImage["HEIGHT"].'" style="border:0;" alt="'.htmlspecialcharsEx($alt).'" /></a></div>'.($bNoIndex? '</noindex>':'');
4115 else
4116 $altHref = $url;
4117 }
4118 $strReturn .= '</div>';
4119 $strReturn .= '<script>bx_adv_includeFlash("'.$test_id.'", "'.
4120 CUtil::JSEscape($path.$param).'", "'.
4121 $arImage["WIDTH"].'", "'.$arImage["HEIGHT"].'", "'.
4122 $arBanner["FLASH_TRANSPARENT"].'", "'.
4123 CUtil::JSEscape($altImgPath).'", '.
4124 (intval($arBanner["FLASH_VER"]) <= 0? 'null':intval($arBanner["FLASH_VER"])).', "'.
4125 CUtil::JSEscape($altHref).'", "'.
4126 CUtil::JSEscape(htmlspecialcharsbx($arBanner["URL_TARGET"])).'", "'.
4127 CUtil::JSEscape(htmlspecialcharsbx($alt)).'");</script>';
4128 }
4129 break;
4130
4131 default:
4132 $alt = CAdvBanner::PrepareHTML(trim($arBanner["IMAGE_ALT"]), $arBanner);
4133 $strImage = "<img alt=\"".htmlspecialcharsEx($alt)."\" title=\"".htmlspecialcharsEx($alt)."\" src=\"".$path."\" width=\"".$arImage["WIDTH"]."\" height=\"".$arImage["HEIGHT"]."\" style=\"border:0;\" />";
4134 if (trim($arBanner["URL"]) <> '')
4135 {
4136 $url = $arBanner["URL"];
4137 $url = CAdvBanner::PrepareHTML($url, $arBanner);
4138 $url = CAdvBanner::GetRedirectURL($url, $arBanner);
4139 $target = (trim($arBanner["URL_TARGET"]) <> '') ? " target=\"".$arBanner["URL_TARGET"]."\" " : "";
4140 $strReturn = ($bNoIndex? '<noindex>':'')."<a href=\"".$url."\"".$target.($bNoIndex? ' rel="nofollow"':'').">".$strImage."</a>".($bNoIndex? '</noindex>':'');
4141 }
4142 else
4143 {
4144 $strReturn .= $strImage;
4145 }
4146 break;
4147 }
4148 }
4149 }
4150
4151 if($arBanner["CODE"] <> '')
4152 {
4153 $code = $arBanner["CODE"];
4154 if ($arBanner["CODE_TYPE"] == "text")
4155 {
4157 }
4158 $code = CAdvBanner::PrepareHTML($code, $arBanner);
4159 $strReturn .= CAdvBanner::ReplaceURL($code, $arBanner);
4160 }
4161
4162 return $strReturn;
4163 }
4164
4165 public static function FixShowAll()
4166 {
4168 $err_mess = (CAdvBanner::err_mess())."<br>Function: FixShowAll<br>Line: ";
4169
4170 if (is_array($CACHE_ADVERTISING) &&
4171 array_key_exists("BANNERS_ALL", $CACHE_ADVERTISING) &&
4172 is_array($CACHE_ADVERTISING["BANNERS_ALL"]) &&
4173 !empty($CACHE_ADVERTISING["BANNERS_ALL"]) &&
4174 array_key_exists("BANNERS_CNT", $CACHE_ADVERTISING) &&
4175 is_array($CACHE_ADVERTISING["BANNERS_CNT"]))
4176 {
4177
4178 if( array_key_exists( "ALL_DATE_SHOW_FIRST", $CACHE_ADVERTISING ) && is_array( $CACHE_ADVERTISING["ALL_DATE_SHOW_FIRST"] ) )
4179 {
4180 foreach( $CACHE_ADVERTISING["ALL_DATE_SHOW_FIRST"] as $key => $value )
4181 {
4182 $DB->Update( "b_adv_banner", Array( "DATE_SHOW_FIRST" => $value ), "WHERE ID='" . $key . "'", $err_mess . __LINE__ );
4183 }
4184 }
4185
4186 $bEqualBanID = ($CACHE_ADVERTISING["BANNERS_ALL"] == $CACHE_ADVERTISING["BANNERS_CNT"]);
4187
4188 //Update баннеров
4189 $arFields = Array(
4190 "SHOW_COUNT" => "SHOW_COUNT + 1",
4191 "DATE_LAST_SHOW" => $DB->GetNowFunction(),
4192 );
4193 if ($bEqualBanID)
4194 $arFields["VISITOR_COUNT"] = "VISITOR_COUNT + 1";
4195
4196 $group_all = '';
4197 foreach($CACHE_ADVERTISING["BANNERS_ALL"] as $b)
4198 $group_all .= ($group_all <> ''? ',':'').intval($b);
4199
4200 $DB->Update("b_adv_banner",$arFields,"WHERE ID IN(".$group_all.")",$err_mess.__LINE__);
4201
4202 if (!$bEqualBanID && !empty($CACHE_ADVERTISING["BANNERS_CNT"]))
4203 {
4204 $arFields = Array("VISITOR_COUNT" => "VISITOR_COUNT + 1");
4205 $group_inc = "";
4206 foreach($CACHE_ADVERTISING["BANNERS_CNT"] as $BANNERS_CNT)
4207 $group_inc .= ($group_inc <> ""? ",":"").intval($BANNERS_CNT);
4208 $DB->Update("b_adv_banner",$arFields,"WHERE ID IN(".$group_inc.")",$err_mess.__LINE__);
4209 }
4210
4211 //Баннеры по дням
4212 $strSql = "SELECT BANNER_ID FROM b_adv_banner_2_day WHERE BANNER_ID IN (".$group_all.") and DATE_STAT = ".$DB->GetNowDate();
4213 $res = $DB->Query($strSql, false, $err_mess.__LINE__);
4214 $arExist = $arInsert = Array();
4215 while ($ar = $res->Fetch())
4216 $arExist[] = $ar["BANNER_ID"];
4217
4218 $arInsert = array_diff($CACHE_ADVERTISING["BANNERS_ALL"], $arExist);
4219
4220 foreach ($arInsert as $BANNER_ID)
4221 {
4222 $strSql = "INSERT INTO b_adv_banner_2_day (DATE_STAT, BANNER_ID, SHOW_COUNT, VISITOR_COUNT) VALUES (".$DB->GetNowDate().", $BANNER_ID,1,1)";
4223 $DB->Query($strSql, true, $err_mess.__LINE__);
4224 }
4225
4226 if (!empty($arExist))
4227 {
4228 $arExistInc = array_intersect($arExist,$CACHE_ADVERTISING["BANNERS_CNT"]);
4229 if (!empty($arExistInc))
4230 {
4231 $sExistInc = '';
4232 foreach($arExistInc as $b)
4233 $sExistInc .= ($sExistInc <> ''? ',':'').intval($b);
4234
4235 $arFields = Array("SHOW_COUNT" => "SHOW_COUNT + 1", "VISITOR_COUNT" => "VISITOR_COUNT + 1");
4236 $DB->Update("b_adv_banner_2_day",$arFields,"WHERE BANNER_ID IN(".$sExistInc.") and DATE_STAT = ".$DB->GetNowDate(),$err_mess.__LINE__);
4237 }
4238
4239 $arExistInc = array_diff($arExist, $arExistInc);
4240
4241 if (!empty($arExistInc))
4242 {
4243 $sExistInc = '';
4244 foreach($arExistInc as $b)
4245 $sExistInc .= ($sExistInc <> ''? ',':'').intval($b);
4246
4247 $arFields = Array("SHOW_COUNT" => "SHOW_COUNT + 1");
4248 $DB->Update("b_adv_banner_2_day",$arFields,"WHERE BANNER_ID IN(".$sExistInc.") and DATE_STAT = ".$DB->GetNowDate(),$err_mess.__LINE__);
4249 }
4250 }
4251
4252 //Контракты
4253 $DONT_USE_CONTRACT = COption::GetOptionString("advertising", "DONT_USE_CONTRACT", "N");
4254 if ($DONT_USE_CONTRACT == "N" &&
4255 array_key_exists("CONTRACTS_ALL", $CACHE_ADVERTISING) &&
4256 is_array($CACHE_ADVERTISING["CONTRACTS_ALL"]) &&
4257 !empty($CACHE_ADVERTISING["CONTRACTS_ALL"]) &&
4258 array_key_exists("CONTRACTS_CNT", $CACHE_ADVERTISING) &&
4259 is_array($CACHE_ADVERTISING["CONTRACTS_CNT"]))
4260 {
4261
4262 $arCount = array_count_values($CACHE_ADVERTISING["CONTRACTS_ALL"]);
4263
4264 $arUpdate = Array();
4265 foreach($arCount as $CONTRACT_ID => $value)
4266 $arUpdate[$value][] = $CONTRACT_ID;
4267
4268 foreach ($arUpdate as $count => $arContact)
4269 {
4270 $arFields = Array("SHOW_COUNT" => "SHOW_COUNT + ".$count);
4271 if ($arContact == (array_intersect($arContact, $CACHE_ADVERTISING["CONTRACTS_CNT"])))
4272 {
4273 $arFields["VISITOR_COUNT"] = "VISITOR_COUNT + 1";
4274 $CACHE_ADVERTISING["CONTRACTS_CNT"] = array_diff($CACHE_ADVERTISING["CONTRACTS_CNT"], $arContact);
4275 }
4276 $sContact = '';
4277 foreach($arContact as $c)
4278 $sContact .= ($sContact <> ''? ',':'').intval($c);
4279
4280 $DB->Update("b_adv_contract",$arFields,"WHERE ID IN(".$sContact.")",$err_mess.__LINE__);
4281 }
4282
4283 if (!empty($CACHE_ADVERTISING["CONTRACTS_CNT"]))
4284 {
4285 $sContrCnt = '';
4286 foreach($CACHE_ADVERTISING["CONTRACTS_CNT"] as $c)
4287 $sContrCnt .= ($sContrCnt <> ''? ',':'').intval($c);
4288
4289 $arFields = Array("VISITOR_COUNT" => "VISITOR_COUNT + 1");
4290 $DB->Update("b_adv_banner",$arFields,"WHERE ID IN(".$sContrCnt.")",$err_mess.__LINE__);
4291 }
4292 }
4293 // сформируем значение cookie
4295 {
4296 $cookie_value = "";
4297 $arrCookie = $arrADV_VIEWED_BANNERS;
4298 foreach($arrCookie as $key => $arr)
4299 if (intval($key)>0)
4300 $cookie_value .= intval($arr["CONTRACT_ID"])."_".$key."_".intval($arr["COUNTER"]). "_".trim($arr["EXPIRATION_DATE"]).",";
4301
4302 // длина cookie не может превышать 4Кб
4303 $max_length = 4*1024;
4304 $j = 0;
4305 while (mb_strlen($cookie_value) > $max_length && $j<200)
4306 {
4307 $j++;
4308 $arrCookie_temp = $arrCookie;
4309 $arrCookie = array();
4310 $i=0;
4311 foreach($arrCookie_temp as $key => $arrValue)
4312 {
4313 $i++;
4314 if ($i>1)
4315 $arrCookie[$key] = $arrValue;
4316 }
4317 $cookie_value = "";
4318 foreach($arrCookie as $key => $arr)
4319 if (intval($key)>0)
4320 $cookie_value .= intval($arr["CONTRACT_ID"])."_".$key."_".intval($arr["COUNTER"]). "_".trim($arr["EXPIRATION_DATE"]).",";
4321 }
4322 $cookie_value = trim($cookie_value,",");
4323 $cookie_name = "BANNERS";
4324 $secure = (COption::GetOptionString("main", "use_secure_password_cookies", "N") == "Y" && CMain::IsHTTPS());
4325 $APPLICATION->set_cookie($cookie_name, $cookie_value, false, "/", false, $secure);
4326 }
4327
4329 }
4330 }
4331
4332 // фиксируем показ баннера
4333 public static function FixShow($arBanner)
4334 {
4335 global $DB, $CACHE_ADVERTISING;
4336
4337 if (intval($_SESSION["SESS_SEARCHER_ID"])<=0 && $arBanner["FIX_SHOW"] == "Y" && COption::GetOptionString('advertising', 'DONT_FIX_BANNER_SHOWS') <> "Y")
4338 {
4339 $BANNER_ID = intval($arBanner["ID"]);
4340 $CONTRACT_ID = intval($arBanner["CONTRACT_ID"]);
4341
4342 if ($BANNER_ID>0)
4343 {
4344 CAdvBanner::SetCookie($arBanner, $inc_banner_counter, $inc_contract_counter);
4345
4346 if ($arBanner["DATE_SHOW_FIRST"] == '')
4347 {
4348 $CACHE_ADVERTISING["ALL_DATE_SHOW_FIRST"][$BANNER_ID] = $DB->CurrentTimeFunction();
4349 }
4350
4351 if (
4352 isset($_SESSION["SESS_VIEWED_BANNERS"])
4353 && is_array($_SESSION["SESS_VIEWED_BANNERS"])
4354 && in_array($BANNER_ID, $_SESSION["SESS_VIEWED_BANNERS"])
4355 )
4356 {
4357 $inc_banner_counter="N";
4358 }
4359
4360 if (
4361 isset($_SESSION["SESS_VIEWED_CONTRACTS"])
4362 && is_array($_SESSION["SESS_VIEWED_CONTRACTS"])
4363 && in_array($CONTRACT_ID, $_SESSION["SESS_VIEWED_CONTRACTS"])
4364 )
4365 {
4366 $inc_contract_counter="N";
4367 }
4368
4369 $CACHE_ADVERTISING["BANNERS_ALL"][] = $BANNER_ID;
4370
4371 if ($inc_banner_counter=="Y")
4372 {
4373 $CACHE_ADVERTISING["BANNERS_CNT"][] = $BANNER_ID;
4374 $_SESSION["SESS_VIEWED_BANNERS"][] = $BANNER_ID;
4375 }
4376
4377 if ($CONTRACT_ID>0)
4378 {
4379 $CACHE_ADVERTISING["CONTRACTS_ALL"][] = $CONTRACT_ID;
4380
4381 if ($inc_contract_counter=="Y")
4382 {
4383 $CACHE_ADVERTISING["CONTRACTS_CNT"][] = $CONTRACT_ID;
4384 $_SESSION["SESS_VIEWED_CONTRACTS"][] = $CONTRACT_ID;
4385 }
4386 }
4387 }
4388 }
4389 }
4390
4391 public static function BeforeRestartBuffer()
4392 {
4395 "BANNERS_ALL" => array(),
4396 "BANNERS_CNT" => array(),
4397 "CONTRACTS_ALL" => array(),
4398 "CONTRACTS_CNT" => array(),
4399 );
4400 $arrADV_VIEWED_BANNERS = false;
4401
4402 //return true;
4403 }
4404
4405 // устанавливаем cookie посетителю о просмотре баннера
4406 public static function SetCookie($arBanner, &$inc_banner_counter, &$inc_contract_counter)
4407 {
4409 if (intval($arBanner["ID"])>0)
4410 {
4411 $inc_contract_counter = "N";
4412 $inc_banner_counter = "N";
4413
4414 $days = COption::GetOptionString("advertising", "COOKIE_DAYS");
4415 $cookie_name = "BANNERS";
4416 $arrCookie = array();
4417 $arrContracts = array();
4418
4419 // если мы уже получили на странице значение cookie то
4420 if (is_array($arrADV_VIEWED_BANNERS))
4421 {
4422 // берем массив arrCookie который уже определен на странице
4423 $arrCookie = $arrADV_VIEWED_BANNERS;
4424
4425 // соберем массив контрактов
4426 foreach ($arrCookie as $arr)
4427 {
4428 $arrContracts[] = $arr["CONTRACT_ID"];
4429 }
4430
4431 if (in_array($arBanner["ID"],array_keys($arrCookie)))
4432 {
4433 $arrCookie[$arBanner["ID"]]["COUNTER"] = $arrCookie[$arBanner["ID"]]["COUNTER"]+1;
4434 $arrCookie[$arBanner["ID"]]["EXPIRATION_DATE"] = date("dmY",time()+(intval($days)*86400));
4435 }
4436 }
4437 else // если мы первый раз обращаемся к значению хранимому в cookie
4438 {
4439 // то инициализируем массив arrCookie
4440 $arr = explode(",", $APPLICATION->get_cookie($cookie_name));
4441 if (is_array($arr) && count($arr)>0)
4442 {
4443 $now = time();
4444
4445 foreach($arr as $str)
4446 {
4447 $ar = explode("_",$str);
4448 $contract_id = intval($ar[0]);
4449 $arrContracts[] = $contract_id;
4450 $banner_id = intval($ar[1]);
4451 $counter = intval($ar[2]);
4452 if ($arBanner["ID"]==$banner_id)
4453 {
4454 $counter++;
4455 $arrCookie[$arBanner["ID"]] = array(
4456 "CONTRACT_ID" => $arBanner["CONTRACT_ID"],
4457 "COUNTER" => $counter,
4458 "EXPIRATION_DATE" => date("dmY",time()+(intval($days)*86400))
4459 );
4460 }
4461 else
4462 {
4463 $strDate = trim($ar[3]);
4464 $month = intval(mb_substr($strDate, 2, 2));
4465 $day = intval(mb_substr($strDate, 0, 2));
4466 $year = intval(mb_substr($strDate, 4, 4));
4467 $stmp = false;
4468
4469 if ($month && $day && $year)
4470 {
4471 $stmp = mktime(0, 0, 0, $month, $day, $year);
4472 }
4473
4474 if (
4475 $stmp
4476 && $stmp > $now
4477 )
4478 {
4479 $arrCookie[$banner_id] = array(
4480 "CONTRACT_ID" => $contract_id,
4481 "COUNTER" => $counter,
4482 "EXPIRATION_DATE" => ($stmp ? date("dmY", $stmp) : $strDate)
4483 );
4484 }
4485 }
4486 }
4487 }
4488 }
4489
4490 // если данный посетитель по контракту еще не фиксировался то
4491 if (!in_array($arBanner["CONTRACT_ID"], $arrContracts))
4492 $inc_contract_counter = "Y";
4493
4494 // если посетитель еще не фиксировался по текущему баннеру то
4495 if (!in_array($arBanner["ID"], array_keys($arrCookie)))
4496 {
4497 // взводим флаг о необходимости увеличить счетчик посетителей
4498 $inc_banner_counter="Y";
4499
4500 // добавляем текущий баннер в массив arrCookie
4501 $arrCookie[$arBanner["ID"]] = array(
4502 "CONTRACT_ID" => $arBanner["CONTRACT_ID"],
4503 "COUNTER" => 1,
4504 "EXPIRATION_DATE" => date("dmY",time()+(intval($days)*86400))
4505 );
4506 }
4507 $arrADV_VIEWED_BANNERS = $arrCookie;
4508 }
4509 }
4510
4511 // возвращает HTML произвольного баннера по типу
4512 public static function Show($TYPE_SID, $HTML_BEFORE="", $HTML_AFTER="")
4513 {
4514 global $APPLICATION, $USER;
4515
4516 $debug = null;
4517 if(\Bitrix\Main\Application::getInstance()->getKernelSession()["SESS_SHOW_INCLUDE_TIME_EXEC"]=="Y" && $USER->IsAdmin())
4518 {
4519 $debug = new CDebugInfo();
4520 $debug->Start();
4521 }
4522
4523 $arBanner = CAdvBanner::GetRandom($TYPE_SID);
4524 $strReturn = CAdvBanner::GetHTML($arBanner);
4525 if($strReturn <> '')
4526 {
4527 CAdvBanner::FixShow($arBanner);
4528
4529 if(($arIcons = CAdvBanner::GetEditIcons($arBanner, $TYPE_SID)) !== false)
4530 $strReturn = $APPLICATION->IncludeString($strReturn, $arIcons);
4531
4532 $strReturn = $HTML_BEFORE.$strReturn.$HTML_AFTER;
4533
4534 if($debug)
4535 $strReturn .= $debug->Output();
4536
4537 return $strReturn;
4538 }
4539
4540 if($debug)
4541 echo $debug->Output();
4542
4543 return false;
4544 }
4545
4546 public static function GetEditIcons($arBanner, $TYPE_SID="", $arIcons = array())
4547 {
4548 global $USER, $APPLICATION;
4549 static $arContractTypes = false;
4550 static $arContracts = false;
4551
4552 if($USER->IsAuthorized() && $APPLICATION->GetShowIncludeAreas())
4553 {
4555 {
4556 if (is_array($arIcons) && count($arIcons) > 0)
4557 {
4558 if (!empty($arBanner) && isset($arBanner["ID"]))
4559 {
4560 $curIcon = array(
4561 "URL" => 'javascript:'.$APPLICATION->GetPopupLink(
4562 array(
4563 'URL' => "/bitrix/admin/adv_banner_edit.php?bxpublic=Y&from_module=advertising&lang=".LANGUAGE_ID."&ID=".$arBanner["ID"]. "&CONTRACT_ID=".$arBanner["CONTRACT_ID"],
4564 'PARAMS' => array(
4565 'width' => 700,
4566 'height' => 400,
4567 'resize' => false,
4568 )
4569 )
4570 ),
4571 "TEXT" => $arBanner["NAME"]
4572 );
4573
4574 if (!is_array($arIcons[0]['MENU']))
4575 {
4576 $arIcons[0]['MENU'] = array(
4577 array(
4578 "URL" => $arIcons[0]['URL'],
4579 "TEXT" => $arIcons[0]['MESS']
4580 )
4581 );
4582 unset($arIcons[0]['URL']);
4583 unset($arIcons[0]['MESS']);
4584 }
4585
4586 array_push($arIcons[0]['MENU'], $curIcon);
4587 }
4588 }
4589 else
4590 {
4591 $arIcons = array();
4592 if (!empty($arBanner) && isset($arBanner["ID"]))
4593 {
4594 $arIcons[] = array(
4595 "URL" => 'javascript:'.$APPLICATION->GetPopupLink(
4596 array(
4597 'URL' => "/bitrix/admin/adv_banner_edit.php?bxpublic=Y&from_module=advertising&lang=".LANGUAGE_ID."&ID=".$arBanner["ID"]. "&CONTRACT_ID=".$arBanner["CONTRACT_ID"],
4598 'PARAMS' => array(
4599 'width' => 700,
4600 'height' => 400,
4601 'resize' => false,
4602 )
4603 )
4604 ),
4605 "ICON" => "bx-context-toolbar-edit-icon",
4606 "TITLE" => GetMessage("AD_PUBLIC_ICON_EDIT_BANNER"),
4607 "MESS" => $arBanner["NAME"]
4608 );
4609
4610 $TYPE_SID = $arBanner["TYPE_SID"];
4611 }
4612 if ($TYPE_SID <> '')
4613 {
4614 $arSubMenu = array();
4615
4616 if($arContracts === false)
4617 {
4618 $arContracts = array();
4619 $arContractTypes = array();
4620 $contracts = CAdvContract::GetList("s_sort", "desc", array("SITE" => SITE_ID));
4621 while($arContract = $contracts->Fetch())
4622 {
4623 $arContracts[] = $arContract;
4624 $arContractTypes[$arContract["ID"]] = CAdvContract::GetTypeArray($arContract["ID"]);
4625 }
4626 }
4627
4628 foreach($arContracts as $arContract)
4629 {
4630 if (array_key_exists("ALL", $arContractTypes[$arContract["ID"]]) || array_key_exists($TYPE_SID, $arContractTypes[$arContract["ID"]]))
4631 {
4632 $arSubMenu[] = array(
4633 "URL" => 'javascript:'.$APPLICATION->GetPopupLink(
4634 array(
4635 'URL' => "/bitrix/admin/adv_banner_edit.php?bxpublic=Y&from_module=advertising&lang=".LANGUAGE_ID."&TYPE_SID=".$TYPE_SID."&CONTRACT_ID=".$arContract["ID"],
4636 'PARAMS' => array(
4637 'width' => 700,
4638 'height' => 400,
4639 'resize' => false,
4640 )
4641 )
4642 ),
4643 "TEXT" => $arContract["NAME"]
4644 );
4645 }
4646 }
4647
4648 $arIcon = array(
4649 "ICON" => "bx-context-toolbar-create-icon",
4650 "TITLE" => GetMessage("AD_PUBLIC_ICON_ADD_BANNER")
4651 );
4652
4653 $nSubMenu = count($arSubMenu);
4654 if($nSubMenu == 1)
4655 {
4656 $arIcon["URL"] = $arSubMenu[0]["URL"];
4657 $arIcons[] = $arIcon;
4658 }
4659 elseif($nSubMenu > 1)
4660 {
4661 $arIcon["MENU"] = $arSubMenu;
4662 $arIcons[] = $arIcon;
4663 }
4664 }
4665
4666 $arIcons[] = array(
4667 "URL" => "/bitrix/admin/adv_banner_list.php?lang=".LANGUAGE_ID."&find_contract_id[]=".$arBanner["CONTRACT_ID"]. "&find_type_sid[]=".$arBanner["TYPE_SID"]."&set_filter=Y",
4668 "SRC" => "/bitrix/themes/.default/icons/advertising/comp_view.gif",
4669 "TITLE" => GetMessage("AD_PUBLIC_ICON_BANNER_LIST"),
4670 "IN_PARAMS_MENU" => true
4671 );
4672 }
4673
4674 return $arIcons;
4675 }
4676 }
4677 return false;
4678 }
4679
4680 public static function CheckDynamicFilter($arFilter)
4681 {
4682 global $strError;
4683 $str = "";
4684 $find_date_1 = $arFilter["DATE_1"];
4685 $find_date_2 = $arFilter["DATE_2"];
4686 if (trim($find_date_1) <> '' || trim($find_date_2) <> '')
4687 {
4688 $date_1_ok = false;
4689 $date1_stm = MkDateTime(ConvertDateTime($find_date_1,"D.M.Y"),"d.m.Y");
4690 $date2_stm = MkDateTime(ConvertDateTime($find_date_2,"D.M.Y")." 23:59","d.m.Y H:i");
4691 if (!$date1_stm && trim($find_date_1) <> '')
4692 $str.= GetMessage("AD_ERROR_WRONG_PERIOD_FROM")."<br>";
4693 else $date_1_ok = true;
4694 if (!$date2_stm && trim($find_date_2) <> '')
4695 $str.= GetMessage("AD_ERROR_WRONG_PERIOD_TILL")."<br>";
4696 elseif ($date_1_ok && $date2_stm <= $date1_stm && $date2_stm <> '')
4697 $str.= GetMessage("AD_ERROR_FROM_TILL_PERIOD")."<br>";
4698 }
4699 $strError .= $str;
4700 if ($str <> '') return false; else return true;
4701 }
4702
4703 // возвращает массив описывающий динамику баннеров
4704 public static function GetDynamicList($arFilter, &$arrLegend, &$is_filtered)
4705 {
4706 $err_mess = (CAdvBanner::err_mess())."<br>Function: GetDynamicList<br>Line: ";
4707 global $DB;
4708 $arSqlSearch = Array();
4710 {
4711 if (is_array($arFilter))
4712 {
4713 $filter_keys = array_keys($arFilter);
4714 for ($i=0, $n = count($filter_keys); $i < $n; $i++)
4715 {
4716 $key = $filter_keys[$i];
4717 $val = $arFilter[$filter_keys[$i]];
4718 if(is_array($val))
4719 {
4720 if(count($val)<=0) continue;
4721 }
4722 else
4723 {
4724 if( ((string)$val == '') || ("$val"=="NOT_REF") ) continue;
4725 }
4726 $key = strtoupper($key);
4727 switch($key)
4728 {
4729 case "DATE_1":
4730 $arSqlSearch[] = "D.DATE_STAT>=".$DB->CharToDateFunction($val, "SHORT");
4731 break;
4732 case "DATE_2":
4733 $arSqlSearch[] = "D.DATE_STAT<=".$DB->CharToDateFunction($val." 23:59:59", "FULL");
4734 break;
4735 }
4736 }
4737 }
4738 }
4739 $arContract = is_array($arFilter["CONTRACT_ID"]) ? $arFilter["CONTRACT_ID"] : array();
4740 $arBanner = is_array($arFilter["BANNER_ID"]) ? $arFilter["BANNER_ID"] : array();
4741 $arGroup = is_array($arFilter["GROUP_SID"]) ? $arFilter["GROUP_SID"] : array();
4742 $contract_total = $arFilter["CONTRACT_SUMMA"]=="Y" ? "Y" : "N";
4743 $banner_total = $arFilter["BANNER_SUMMA"]=="Y" ? "Y" : "N";
4744 $group_total = $arFilter["GROUP_SUMMA"]=="Y" ? "Y" : "N";
4745 $arShow = is_array($arFilter["WHAT_SHOW"]) ? $arFilter["WHAT_SHOW"] : array();
4746 if (in_array("ctr",$arShow))
4747 {
4748 $arShow[] = "show";
4749 $arShow[] = "click";
4750 }
4751 $arShow = array_unique($arShow);
4752 $arrDays = array();
4753 $arrLegend = array();
4754 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
4755 $strSql = CAdvBanner::GetDynamicList_SQL($strSqlSearch);
4756
4757 $rsD = $DB->Query($strSql, false, $err_mess.__LINE__);
4758 while ($arD = $rsD->Fetch())
4759 {
4760 $arrDays[$arD["DATE_STAT"]]["DATE"] = $arD["DATE_STAT"];
4761 $arrDays[$arD["DATE_STAT"]]["D"] = $arD["DAY"];
4762 $arrDays[$arD["DATE_STAT"]]["M"] = $arD["MONTH"];
4763 $arrDays[$arD["DATE_STAT"]]["Y"] = $arD["YEAR"];
4764
4765 foreach($arShow as $ctype)
4766 {
4767 if ($ctype=="CTR") continue;
4768 $ctype_u = mb_strtoupper($ctype);
4769 if (intval($arD[$ctype_u."_COUNT"])>0)
4770 {
4771 if (in_array($arD["CONTRACT_ID"], $arContract))
4772 {
4773 if ($contract_total=="N")
4774 {
4775 $arrLegend["3_CONTRACT_".$arD["CONTRACT_ID"]]["TYPE"] = "CONTRACT";
4776 $arrLegend["3_CONTRACT_".$arD["CONTRACT_ID"]]["ID"] = $arD["CONTRACT_ID"];
4777 $arrLegend["3_CONTRACT_".$arD["CONTRACT_ID"]]["NAME"] = $arD["CONTRACT_NAME"];
4778 $arrLegend["3_CONTRACT_".$arD["CONTRACT_ID"]]["COUNTER_TYPE"] = "DETAIL";
4779 $arrLegend["3_CONTRACT_".$arD["CONTRACT_ID"]][$ctype_u] += $arD[$ctype_u."_COUNT"];
4780 $arrDays[$arD["DATE_STAT"]]["CONTRACT"]["DETAIL_".$ctype_u][$arD["CONTRACT_ID"]] += $arD[$ctype_u."_COUNT"];
4781 }
4782 elseif ($contract_total=="Y")
4783 {
4784 $arrLegend["3_CONTRACT"]["TYPE"] = "CONTRACT";
4785 $arrLegend["3_CONTRACT"]["COUNTER_TYPE"] = "TOTAL";
4786 $arrLegend["3_CONTRACT"][$ctype_u] += $arD[$ctype_u."_COUNT"];
4787 $arrDays[$arD["DATE_STAT"]]["CONTRACT"]["TOTAL_".$ctype_u] += $arD[$ctype_u."_COUNT"];
4788 }
4789 }
4790 if (in_array($arD["BANNER_ID"], $arBanner))
4791 {
4792 if ($banner_total=="N")
4793 {
4794 $arrLegend["1_BANNER_".$arD["BANNER_ID"]]["TYPE"] = "BANNER";
4795 $arrLegend["1_BANNER_".$arD["BANNER_ID"]]["ID"] = $arD["BANNER_ID"];
4796 $arrLegend["1_BANNER_".$arD["BANNER_ID"]]["TYPE_SID"] = $arD["BANNER_TYPE_SID"];
4797 $arrLegend["1_BANNER_".$arD["BANNER_ID"]]["GROUP"] = $arD["GROUP_SID"];
4798 $arrLegend["1_BANNER_".$arD["BANNER_ID"]]["NAME"] = $arD["BANNER_NAME"];
4799 $arrLegend["1_BANNER_".$arD["BANNER_ID"]]["CONTRACT_ID"] = $arD["CONTRACT_ID"];
4800 $arrLegend["1_BANNER_".$arD["BANNER_ID"]]["COUNTER_TYPE"] = "DETAIL";
4801 $arrLegend["1_BANNER_".$arD["BANNER_ID"]][$ctype_u] += $arD[$ctype_u."_COUNT"];
4802 $arrDays[$arD["DATE_STAT"]]["BANNER"]["DETAIL_".$ctype_u][$arD["BANNER_ID"]] += $arD[$ctype_u."_COUNT"];
4803 }
4804 elseif ($banner_total=="Y")
4805 {
4806 $arrLegend["1_BANNER"]["TYPE"] = "BANNER";
4807 $arrLegend["1_BANNER"]["COUNTER_TYPE"] = "TOTAL";
4808 $arrLegend["1_BANNER"][$ctype_u] += $arD[$ctype_u."_COUNT"];
4809 $arrDays[$arD["DATE_STAT"]]["BANNER"]["TOTAL_".$ctype_u] += $arD[$ctype_u."_COUNT"];
4810 }
4811 }
4812 if (in_array($arD["GROUP_SID"], $arGroup))
4813 {
4814 if ($group_total=="N")
4815 {
4816 $arrLegend["2_GROUP_".$arD["GROUP_SID"]]["TYPE"] = "GROUP";
4817 $arrLegend["2_GROUP_".$arD["GROUP_SID"]]["ID"] = $arD["GROUP_SID"];
4818 $arrLegend["2_GROUP_".$arD["GROUP_SID"]]["COUNTER_TYPE"] = "DETAIL";
4819 $arrLegend["2_GROUP_".$arD["GROUP_SID"]][$ctype_u] += $arD[$ctype_u."_COUNT"];
4820 $arrDays[$arD["DATE_STAT"]]["GROUP"]["DETAIL_".$ctype_u][$arD["GROUP_SID"]] += $arD[$ctype_u."_COUNT"];
4821 }
4822 elseif ($group_total=="Y")
4823 {
4824 $arrLegend["2_GROUP"]["TYPE"] = "GROUP";
4825 $arrLegend["2_GROUP"]["COUNTER_TYPE"] = "TOTAL";
4826 $arrLegend["2_GROUP"][$ctype_u] += $arD[$ctype_u."_COUNT"];
4827 $arrDays[$arD["DATE_STAT"]]["GROUP"]["TOTAL_".$ctype_u] += $arD[$ctype_u."_COUNT"];
4828 }
4829 }
4830 }
4831 }
4832 }
4833
4834 if (in_array("ctr", $arShow))
4835 {
4836 // рассчитаем CTR
4837 foreach ($arrDays as $keyD => $arD)
4838 {
4839 foreach ($arrLegend as $arrS)
4840 {
4841 if ($arrS["COUNTER_TYPE"]=="DETAIL")
4842 {
4843 $show_value = intval($arD[$arrS["TYPE"]][$arrS["COUNTER_TYPE"]."_SHOW"][$arrS["ID"]]);
4844 $click_value = intval($arD[$arrS["TYPE"]][$arrS["COUNTER_TYPE"]."_CLICK"][$arrS["ID"]]);
4845 if ($show_value<=0) $ctr_value=0;
4846 else $ctr_value = round(($click_value*100)/$show_value, 2);
4847 $arD[$arrS["TYPE"]]["DETAIL_CTR"][$arrS["ID"]] = $ctr_value;
4848 $arrDays[$keyD] = $arD;
4849 }
4850 else
4851 {
4852 $show_value = intval($arD[$arrS["TYPE"]][$arrS["COUNTER_TYPE"]."_SHOW"]);
4853 $click_value = intval($arD[$arrS["TYPE"]][$arrS["COUNTER_TYPE"]."_CLICK"]);
4854 if ($show_value<=0) $ctr_value=0;
4855 else $ctr_value = round(($click_value*100)/$show_value, 2);
4856 $arD[$arrS["TYPE"]]["TOTAL_CTR"] = $ctr_value;
4857 $arrDays[$keyD] = $arD;
4858 }
4859 }
4860 }
4861 }
4862
4863 // Определим цвета и суммарный CTR
4864 $s = 0;
4865 if (in_array("ctr", $arShow)) $s++;
4866 if ($arFilter["WHAT_SHOW"]!=array("ctr") && in_array("show", $arShow)) $s++;
4867 if ($arFilter["WHAT_SHOW"]!=array("ctr") && in_array("click", $arShow)) $s++;
4868 if ($arFilter["WHAT_SHOW"]!=array("ctr") && in_array("visitor", $arShow)) $s++;
4869 $total = sizeof($arrLegend)*$s;
4870 $color = "";
4871 foreach ($arrLegend as $key => $arr)
4872 {
4873 if (in_array("ctr", $arShow))
4874 {
4875 $color = GetNextRGB($color, $total);
4876 $arr["COLOR_CTR"] = $color;
4877 if ($arr["SHOW"]<=0) $ctr = 0;
4878 else $ctr = round(($arr["CLICK"]*100)/$arr["SHOW"], 2);
4879 $arr["CTR"] = $ctr;
4880 }
4881 if ($arFilter["WHAT_SHOW"]!=array("ctr"))
4882 {
4883 if (in_array("show", $arShow))
4884 {
4885 $color = GetNextRGB($color, $total);
4886 $arr["COLOR_SHOW"] = $color;
4887 }
4888 if (in_array("click", $arShow))
4889 {
4890 $color = GetNextRGB($color, $total);
4891 $arr["COLOR_CLICK"] = $color;
4892 }
4893 if (in_array("visitor", $arShow))
4894 {
4895 $color = GetNextRGB($color, $total);
4896 $arr["COLOR_VISITOR"] = $color;
4897 }
4898 }
4899 $arr["COLOR"] = $color;
4900 $arrLegend[$key] = $arr;
4901 }
4902 krsort($arrLegend);
4903
4904 $is_filtered = (IsFiltered($strSqlSearch));
4905 reset($arrDays);
4906 reset($arrLegend);
4907 return $arrDays;
4908 }
4909
4910 public static function GetStatList($by, $order, $arFilter)
4911 {
4912 $err_mess = (CAdvBanner::err_mess())."<br>Function: GetStatList<br>Line: ";
4913 global $DB;
4914 $arSqlSearch = Array();
4916 {
4917 if (is_array($arFilter))
4918 {
4919 $filter_keys = array_keys($arFilter);
4920 for ($i=0, $n = count($filter_keys); $i < $n; $i++)
4921 {
4922 $key = $filter_keys[$i];
4923 $val = $arFilter[$filter_keys[$i]];
4924 if(is_array($val))
4925 {
4926 if(count($val)<=0) continue;
4927 }
4928 else
4929 {
4930 if( ((string)$val == '') || ("$val"=="NOT_REF") ) continue;
4931 }
4932 $key = strtoupper($key);
4933 switch($key)
4934 {
4935 case "DATE_1":
4936 $arSqlSearch[] = "D.DATE_STAT>=".$DB->CharToDateFunction($val, "SHORT");
4937 break;
4938 case "DATE_2":
4939 $arSqlSearch[] = "D.DATE_STAT<=".$DB->CharToDateFunction($val." 23:59:59", "FULL");
4940 break;
4941 }
4942 }
4943
4945
4946 if(!empty($arFilter['BANNER_ID']))
4947 {
4948 $where = new CSQLWhere();
4949 $arSqlSearch[] = $where->_NumberIN("D.BANNER_ID", $arFilter['BANNER_ID']);
4950 }
4951 }
4952 }
4953
4954 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
4955 if ($by == "s_date")
4956 {
4957 $strSqlOrder = " ORDER BY D.DATE_STAT ";
4958 }
4959 elseif ($by == "s_visitors")
4960 {
4961 $strSqlOrder = " ORDER BY VISITOR_COUNT ";
4962 }
4963 elseif ($by == "s_clicks")
4964 {
4965 $strSqlOrder = " ORDER BY CLICK_COUNT ";
4966 }
4967 elseif ($by == "s_ctr")
4968 {
4969 $strSqlOrder = " ORDER BY CTR";
4970 }
4971 elseif ($by == "s_show")
4972 {
4973 $strSqlOrder = " ORDER BY SHOW_COUNT ";
4974 }
4975 elseif ($by == "s_id")
4976 {
4977 $strSqlOrder = " ORDER BY D.BANNER_ID";
4978 }
4979 else
4980 {
4981 $strSqlOrder = " ORDER BY DATE_STAT";
4982 $by = "s_date";
4983 }
4984
4985 if ($order!="asc")
4986 {
4987 $strSqlOrder .= " desc ";
4988 }
4989
4990
4991 if ($by != "s_date")
4992 {
4993 $strSqlOrder .= ', DATE_STAT ASC';
4994 }
4995
4996 if ($arFilter['BANNER_SUMMA'] == 'Y')
4997 {
4998 $strSql = "
4999 SELECT
5000 ".$DB->DateToCharFunction("D.DATE_STAT","SHORT")." DATE_STAT,
5001 SUM(D.SHOW_COUNT) SHOW_COUNT,
5002 SUM(D.CLICK_COUNT) CLICK_COUNT,
5003 SUM(D.VISITOR_COUNT) VISITOR_COUNT,
5004 " . CAdvBanner::getCTRSQL() . "
5005 FROM
5006 b_adv_banner_2_day D
5007 INNER JOIN b_adv_banner B ON (D.BANNER_ID = B.ID)
5008 INNER JOIN b_adv_contract C ON (B.CONTRACT_ID = C.ID)
5009 WHERE
5010 $strSqlSearch
5011 GROUP by DATE_STAT
5012 $strSqlOrder
5013 ";
5014 }
5015 else
5016 {
5017 $strSql = "
5018 SELECT
5019 ".$DB->DateToCharFunction("D.DATE_STAT","SHORT")." DATE_STAT,
5020 SUM(D.SHOW_COUNT) SHOW_COUNT,
5021 SUM(D.CLICK_COUNT) CLICK_COUNT,
5022 SUM(D.VISITOR_COUNT) VISITOR_COUNT,
5023 D.BANNER_ID,
5024 B.NAME BANNER_NAME,
5025 " . CAdvBanner::getCTRSQL() . "
5026 FROM
5027 b_adv_banner_2_day D
5028 INNER JOIN b_adv_banner B ON (D.BANNER_ID = B.ID)
5029 INNER JOIN b_adv_contract C ON (B.CONTRACT_ID = C.ID)
5030 WHERE
5031 $strSqlSearch
5032 GROUP by D.DATE_STAT, D.BANNER_ID, B.NAME
5033 $strSqlOrder
5034 ";
5035 }
5036
5037 return $DB->Query($strSql, false, $err_mess.__LINE__);
5038 }
5039}
5040
5041/*****************************************************************
5042 Класс "Тип баннера"
5043*****************************************************************/
5044
5046{
5047 public static function err_mess()
5048 {
5049 $module_id = "advertising";
5050 return "<br>Module: ".$module_id."<br>Class: CAdvType_all<br>File: ".__FILE__;
5051 }
5052
5053 public static function CheckFilter($arFilter)
5054 {
5055 global $strError;
5056 $str = "";
5057 $find_date_modify_1 = $arFilter["DATE_MODIFY_1"];
5058 $find_date_modify_2 = $arFilter["DATE_MODIFY_2"];
5059 if (trim($find_date_modify_1) <> '' || trim($find_date_modify_2) <> '')
5060 {
5061 $date_1_ok = false;
5062 $date1_stm = MkDateTime(ConvertDateTime($find_date_modify_1,"D.M.Y"),"d.m.Y");
5063 $date2_stm = MkDateTime(ConvertDateTime($find_date_modify_2,"D.M.Y")." 23:59","d.m.Y H:i");
5064 if (!$date1_stm && trim($find_date_modify_1) <> '')
5065 $str.= GetMessage("AD_ERROR_WRONG_DATE_MODIFY_FROM")."<br>";
5066 else $date_1_ok = true;
5067 if (!$date2_stm && trim($find_date_modify_2) <> '')
5068 $str.= GetMessage("AD_ERROR_WRONG_DATE_MODIFY_TILL")."<br>";
5069 elseif ($date_1_ok && $date2_stm <= $date1_stm && $date2_stm <> '')
5070 $str.= GetMessage("AD_ERROR_FROM_TILL_DATE_MODIFY")."<br>";
5071 }
5072 $strError .= $str;
5073 if ($str <> '') return false; else return true;
5074 }
5075
5076 // получаем следующий порядок сортировки
5077 public static function GetNextSort()
5078 {
5079 global $DB;
5080 $err_mess = (CAdvType_all::err_mess())."<br>Function: GetNextSort<br>Line: ";
5081 $strSql = "SELECT max(SORT) MAX_SORT FROM b_adv_type";
5082 $z = $DB->Query($strSql, false, $err_mess.__LINE__);
5083 $zr = $z->Fetch();
5084 return intval($zr["MAX_SORT"])+100;
5085 }
5086
5087 public static function CheckFields($arFields, $OLD_SID, $CHECK_RIGHTS)
5088 {
5089 global $strError;
5090 $str = "";
5091 $SID = $arFields["SID"];
5092 if ($CHECK_RIGHTS=="Y")
5093 {
5094 $isAdmin = CAdvContract::IsAdmin();
5095 }
5096 else
5097 {
5098 $isAdmin = true;
5099 }
5100 if ($isAdmin)
5101 {
5102 $arrKeys = array_keys($arFields);
5103 if (in_array("SID", $arrKeys))
5104 {
5105 if(trim($SID) == '')
5106 {
5107 $str .= GetMessage("AD_ERROR_FORGOT_SID")."<br>";
5108 }
5109 else
5110 {
5111 if (preg_match("/[^A-Za-z_0-9]/", $SID))
5112 {
5113 $str .= GetMessage("AD_ERROR_INCORRECT_SID")."<br>";
5114 }
5115 else
5116 {
5117 if ($OLD_SID!=$SID)
5118 {
5119 $arFilter = array("SID" => $SID." & ~".$OLD_SID, "SID_EXACT_MATCH" => "Y");
5120 $rs = CAdvType::GetList('', '', $arFilter);
5121 $rows = 0;
5122 if (is_object($rs))
5123 {
5124 $rs->NavStart();
5125 $rows = intval($rs->SelectedRowsCount());
5126 }
5127
5128 if ($rows>=1 || $SID == "ALL" || $OLD_SID == "ALL")
5129 {
5130 $str .= str_replace("#SID#", ($OLD_SID == "ALL" ? $OLD_SID : $SID), GetMessage("AD_ERROR_SID_EXISTS"));
5131 }
5132 }
5133 }
5134 }
5135 }
5136 }
5137 else
5138 {
5139 if ($OLD_SID <> '') $str .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_TYPE")."<br>";
5140 else $str .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_FOR_CREATE_TYPE")."<br>";
5141 }
5142
5143 $strError .= $str;
5144 if ($str <> '') return false; else return true;
5145 }
5146
5147 // добавляем новый тип или модифицируем существующий
5148 public static function Set($arFields, $OLD_SID, $CHECK_RIGHTS="Y")
5149 {
5150 $err_mess = (CAdvType_all::err_mess())."<br>Function: Set<br>Line: ";
5151 global $DB, $USER;
5152 $SID = false;
5153 $OLD_SID = trim($OLD_SID);
5154 if (CAdvType::CheckFields($arFields, $OLD_SID, $CHECK_RIGHTS))
5155 {
5156 $arFields_i = array();
5157 $arrKeys = array_keys($arFields);
5158 if (in_array("SID", $arrKeys))
5159 $arFields_i["SID"] = "'".$DB->ForSql($arFields["SID"], 255)."'";
5160 if (in_array("ACTIVE", $arrKeys) && ($arFields["ACTIVE"]=="Y" || $arFields["ACTIVE"]=="N"))
5161 $arFields_i["ACTIVE"] = "'".$arFields["ACTIVE"]."'";
5162 if (in_array("SORT", $arrKeys))
5163 $arFields_i["SORT"] = "'".intval($arFields["SORT"])."'";
5164 if (in_array("NAME", $arrKeys))
5165 $arFields_i["NAME"] = "'".$DB->ForSql($arFields["NAME"], 255)."'";
5166 if (in_array("DESCRIPTION", $arrKeys))
5167 $arFields_i["DESCRIPTION"] = "'".$DB->ForSql($arFields["DESCRIPTION"], 2000)."'";
5168 if (count($arFields_i)>0)
5169 {
5170 if ($OLD_SID <> '')
5171 {
5172 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"]))
5173 $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
5174 else
5175 $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
5176
5177 if (in_array("MODIFIED_BY", $arrKeys))
5178 $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
5179 else
5180 $arFields_i["MODIFIED_BY"] = $USER->GetID();
5181
5182 $str = "";
5183 foreach ($arFields_i as $field => $value)
5184 {
5185 if ($value == '') $str .= "$field = '', "; else $str .= "$field = $value, ";
5186 }
5187 $str = trim($str, ", ");
5188 $strSql = "UPDATE b_adv_type SET ".$str." WHERE SID='".$DB->ForSql($OLD_SID, 255)."'";
5189 $DB->Query($strSql, false, $err_mess.__LINE__);
5190
5191 if (in_array("SID", $arrKeys))
5192 {
5193 $SID = $arFields["SID"];
5194 // если SID изменился то
5195 if ($arFields["SID"]!=$OLD_SID)
5196 {
5197 // обновим тип у баннеров
5198 $arF = array("TYPE_SID" => "'".$DB->ForSql($arFields["SID"],255)."'");
5199 $DB->Update("b_adv_banner",$arF,"WHERE TYPE_SID='".$DB->ForSql($OLD_SID, 255)."'",$err_mess.__LINE__);
5200
5201 // обновим тип у баннеров
5202 $arF = array("TYPE_SID" => "'".$DB->ForSql($arFields["SID"],255)."'");
5203 $DB->Update("b_adv_contract_2_type",$arF,"WHERE TYPE_SID='".$DB->ForSql($OLD_SID, 255)."'",$err_mess.__LINE__);
5204 }
5205 }
5206 else $SID = $OLD_SID;
5207 }
5208 elseif ($arFields_i["SID"] <> '')
5209 {
5210 if (in_array("DATE_CREATE", $arrKeys) && CheckDateTime($arFields["DATE_CREATE"]))
5211 $arFields_i["DATE_CREATE"] = $DB->CharToDateFunction($arFields["DATE_CREATE"]);
5212 else
5213 $arFields_i["DATE_CREATE"] = $DB->GetNowFunction();
5214
5215 if (in_array("CREATED_BY", $arrKeys))
5216 $arFields_i["CREATED_BY"] = intval($arFields["CREATED_BY"]);
5217 else
5218 $arFields_i["CREATED_BY"] = $USER->GetID();
5219
5220 if (in_array("DATE_MODIFY", $arrKeys) && CheckDateTime($arFields["DATE_MODIFY"]))
5221 $arFields_i["DATE_MODIFY"] = $DB->CharToDateFunction($arFields["DATE_MODIFY"]);
5222 else
5223 $arFields_i["DATE_MODIFY"] = $DB->GetNowFunction();
5224
5225 if (in_array("MODIFIED_BY", $arrKeys))
5226 $arFields_i["MODIFIED_BY"] = intval($arFields["MODIFIED_BY"]);
5227 else
5228 $arFields_i["MODIFIED_BY"] = $USER->GetID();
5229
5230 $str1 = $str2 = "";
5231 foreach ($arFields_i as $field => $value)
5232 {
5233 $str1 .= $field.", ";
5234 if ($value == '') $str2 .= "'', "; else $str2 .= "$value, ";
5235 }
5236 $str1 = trim($str1, ", ");
5237 $str2 = trim($str2, ", ");
5238 $strSql = "INSERT INTO b_adv_type (".$str1.") VALUES (".$str2.")";
5239 $DB->Query($strSql, false, $err_mess.__LINE__);
5240 $SID = $arFields["SID"];
5241 }
5242 }
5243 }
5244 else
5245 {
5246 $SID = $arFields["SID"];
5247 }
5248
5249 return $SID;
5250 }
5251
5252 // получаем тип баннера по ID
5253 public static function GetByID($TYPE_SID)
5254 {
5255 if (trim($TYPE_SID) == '') return false;
5256 $arFilter = array(
5257 "SID" => $TYPE_SID,
5258 "SID_EXACT_MATCH" => "Y"
5259 );
5260 $rs = CAdvType::GetList('', '', $arFilter);
5261 return $rs;
5262 }
5263
5264 // удаляем тип баннера
5265 public static function Delete($TYPE_SID, $CHECK_RIGHTS="Y")
5266 {
5267 $err_mess = (CAdvType_all::err_mess())."<br>Function: Delete<br>Line: ";
5268 global $DB, $strError;
5269 if ($TYPE_SID == '') return false;
5270 if ($CHECK_RIGHTS=="Y")
5271 {
5272 $isAdmin = CAdvContract::IsAdmin();
5273 }
5274 else
5275 {
5276 $isAdmin = true;
5277 }
5278 if ($isAdmin)
5279 {
5280 $strSql = "SELECT ID FROM b_adv_banner WHERE TYPE_SID = '".$DB->ForSql($TYPE_SID,255)."'";
5281 $rs = $DB->Query($strSql, false, $err_mess.__LINE__);
5282 while ($ar = $rs->Fetch()) CAdvBanner::Delete($ar["ID"], "N");
5283
5285
5286 $strSql = "DELETE FROM b_adv_type WHERE SID = '".$DB->ForSql($TYPE_SID,255)."'";
5287 $DB->Query($strSql, false, $err_mess.__LINE__);
5288 return true;
5289 }
5290 else
5291 $strError .= GetMessage("AD_ERROR_NOT_ENOUGH_PERMISSIONS_TYPE")."<br>";
5292 return false;
5293
5294 }
5295
5296 // удаляем связь типа с контрактом
5297 public static function DeleteContractLink($TYPE_SID)
5298 {
5299 $err_mess = (CAdvType_all::err_mess())."<br>Function: DeleteContractLink<br>Line: ";
5300 global $DB;
5301 if ($TYPE_SID == '')
5302 {
5303 return false;
5304 }
5305
5306 $strSql = "DELETE FROM b_adv_contract_2_type WHERE TYPE_SID = '".$DB->ForSql($TYPE_SID,255)."'";
5307 $DB->Query($strSql, false, $err_mess.__LINE__);
5308 return true;
5309 }
5310
5311 // получаем список типов баннеров
5312 public static function GetList($by = "s_sort", $order = "asc", $arFilter = [], $is_filtered = null, $CHECK_RIGHTS = "Y")
5313 {
5314 $err_mess = (CAdvType_all::err_mess())."<br>Function: GetList<br>Line: ";
5315 global $DB;
5316 $arSqlSearch = Array();
5317 if ($CHECK_RIGHTS=="Y")
5318 {
5319 $isAdmin = CAdvContract::IsAdmin();
5320 $isDemo = CAdvContract::IsDemo();
5321 $isManager = CAdvContract::IsManager();
5322 $isAdvertiser = CAdvContract::IsAdvertiser();
5323 }
5324 else
5325 {
5326 $isAdmin = true;
5327 $isDemo = true;
5328 $isManager = true;
5329 $isAdvertiser = true;
5330 }
5331 if ($isAdmin || $isDemo || $isManager || $isAdvertiser)
5332 {
5334 {
5335 if (is_array($arFilter))
5336 {
5337 $filter_keys = array_keys($arFilter);
5338 for ($i=0, $n = count($filter_keys); $i < $n; $i++)
5339 {
5340 $key = $filter_keys[$i];
5341 $val = $arFilter[$filter_keys[$i]];
5342 if(is_array($val))
5343 {
5344 if(count($val) <= 0)
5345 continue;
5346 }
5347 else
5348 {
5349 if( ((string)$val == '') || ($val === "NOT_REF") )
5350 continue;
5351 }
5352 $match_value_set = (in_array($key."_EXACT_MATCH", $filter_keys)) ? true : false;
5353 $key = strtoupper($key);
5354 switch($key)
5355 {
5356 case "SID":
5357 $match = ($arFilter[$key."_EXACT_MATCH"]=="N" && $match_value_set) ? "Y" : "N";
5358 $arSqlSearch[] = GetFilterQuery("T.SID", $val, $match);
5359 break;
5360 case "DATE_MODIFY_1":
5361 $arSqlSearch[] = "T.DATE_MODIFY>=".$DB->CharToDateFunction($val, "SHORT");
5362 break;
5363 case "DATE_MODIFY_2":
5364 $arSqlSearch[] = "T.DATE_MODIFY<=".$DB->CharToDateFunction($val." 23:59:59", "FULL");
5365 break;
5366 case "ACTIVE":
5367 $arSqlSearch[] = ($val=="Y") ? "T.ACTIVE='Y'" : "T.ACTIVE='N'";
5368 break;
5369 case "NAME":
5370 case "DESCRIPTION":
5371 $match = ($arFilter[$key."_EXACT_MATCH"]=="Y" && $match_value_set) ? "N" : "Y";
5372 $arSqlSearch[] = GetFilterQuery("T.".$key, $val, $match);
5373 break;
5374 }
5375 }
5376 }
5377 }
5378 if ($by == "s_sid") $strSqlOrder = " ORDER BY T.SID ";
5379 elseif ($by == "s_date_modify") $strSqlOrder = " ORDER BY T.DATE_MODIFY ";
5380 elseif ($by == "s_modified_by") $strSqlOrder = " ORDER BY T.MODIFIED_BY ";
5381 elseif ($by == "s_date_create") $strSqlOrder = " ORDER BY T.DATE_CREATE ";
5382 elseif ($by == "s_created_by") $strSqlOrder = " ORDER BY T.CREATED_BY ";
5383 elseif ($by == "s_active") $strSqlOrder = " ORDER BY T.ACTIVE ";
5384 elseif ($by == "s_name") $strSqlOrder = " ORDER BY T.NAME ";
5385 elseif ($by == "s_banners") $strSqlOrder = " ORDER BY BANNER_COUNT ";
5386 elseif ($by == "s_description") $strSqlOrder = " ORDER BY T.DESCRIPTION ";
5387 else
5388 {
5389 $strSqlOrder = " ORDER BY T.SORT ";
5390 }
5391
5392 if ($order == "desc")
5393 {
5394 $strSqlOrder .= " desc ";
5395 }
5396 else
5397 {
5398 $strSqlOrder .= " asc ";
5399 }
5400
5401 $strSqlSearch = GetFilterSqlSearch($arSqlSearch);
5402
5403 $strContracts = "";
5404 if (!$isAdmin && !$isDemo && !$isManager)
5405 {
5406 $strContracts = "0";
5407 $arPermissions = CAdvContract::GetUserPermissions();
5408 foreach ($arPermissions as $contract_id => $arContractPerms)
5409 {
5410 if (is_array($arContractPerms) && !empty($arContractPerms))
5411 $strContracts .= ",".$contract_id;
5412 }
5413 }
5414
5415 $strSql = "
5416 SELECT
5417 T.SID,
5418 T.ACTIVE,
5419 T.SORT,
5420 T.NAME,
5421 T.DESCRIPTION,
5422 ".$DB->DateToCharFunction("T.DATE_CREATE")." DATE_CREATE,
5423 ".$DB->DateToCharFunction("T.DATE_MODIFY")." DATE_MODIFY,
5424 T.CREATED_BY,
5425 T.MODIFIED_BY,
5426 count(distinct B.ID) BANNER_COUNT
5427 FROM
5428 b_adv_type T
5429 LEFT JOIN b_adv_banner B ON (B.TYPE_SID=T.SID".($strContracts == "" ? "" :" AND B.CONTRACT_ID IN (".$strContracts.")").")
5430 WHERE
5431 $strSqlSearch ".
5432 ($strContracts == "" ? "" :
5433 "and exists(select 'x' from b_adv_contract_2_type CT where (CT.TYPE_SID=T.SID OR CT.TYPE_SID='ALL') AND CT.CONTRACT_ID IN (".$strContracts.")) "
5434 ).
5435 " and T.SID<>'ALL'
5436 GROUP BY
5437 T.SID, T.ACTIVE, T.SORT, T.NAME, T.DESCRIPTION, T.DATE_CREATE, T.DATE_MODIFY, T.CREATED_BY, T.MODIFIED_BY
5438 $strSqlOrder
5439 ";
5440
5441 $res = $DB->Query($strSql, false, $err_mess.__LINE__);
5442
5443 return $res;
5444 }
5445 return null;
5446 }
5447}
5448
5449/********************************************
5450 совместимость со старой версией модуля
5451*********************************************/
5452
5454{
5455 public static function GetAdv($TYPE_SID)
5456 {
5457 return CAdvBanner::Show($TYPE_SID);
5458 }
5459
5460 public static function ClickAdv($BANNER_ID)
5461 {
5462 return CAdvBanner::Click($BANNER_ID);
5463 }
5464}
$arParams
Определения access_dialog.php:21
$path
Определения access_edit.php:21
$count
Определения admin_tab.php:4
$type
Определения options.php:106
global $APPLICATION
Определения include.php:80
$module_id
Определения options.php:6
static normalizeArrayValuesByInt(&$map, $sorted=true)
Определения collection.php:150
Определения advertising.php:1286
static FixShow($arBanner)
Определения advertising.php:4333
static GetStatList($by, $order, $arFilter)
Определения advertising.php:4910
static DeleteGroupLink($BANNER_ID)
Определения advertising.php:1525
static Copy($BANNER_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:1324
static GetPageArray($BANNER_ID, $SHOW="SHOW")
Определения advertising.php:1554
static GetRedirectURL($url, $arBanner)
Определения advertising.php:4005
static CalculateTimeDiff($arBanner)
Определения advertising.php:3929
static GetCurUri()
Определения advertising.php:1293
static GetStatusList()
Определения advertising.php:1537
static GetSiteArray($BANNER_ID)
Определения advertising.php:1603
static GetByID($BANNER_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:1310
static Show($TYPE_SID, $HTML_BEFORE="", $HTML_AFTER="")
Определения advertising.php:4512
static makeFileArray($data, $del=false, $description=null, $options=array())
Определения advertising.php:1930
static GetKeywords($TYPE_SID="", $LOGIC="", $EXACT_MATCH="")
Определения advertising.php:2946
static arr_comp_uniform($a, $b)
Определения advertising.php:3031
static PrepareHTML($text, $arBanner)
Определения advertising.php:3987
static DeleteCountryLink($BANNER_ID)
Определения advertising.php:1487
static ReplaceURL($text, $arBanner)
Определения advertising.php:4010
static GetHTML($arBanner, $bNoIndex=false)
Определения advertising.php:4016
static GetDesiredKeywords($TYPE_SID="", $EXACT_MATCH="")
Определения advertising.php:3026
static SetCookie($arBanner, &$inc_banner_counter, &$inc_contract_counter)
Определения advertising.php:4406
static SetKeywords($keywords, $TYPE_SID="", $LOGIC="DESIRED")
Определения advertising.php:2892
static SetDesiredKeywords($keywords, $TYPE_SID="")
Определения advertising.php:3016
static DeletePageLink($BANNER_ID, $where="")
Определения advertising.php:1513
static SetRequiredKeywords($keywords, $TYPE_SID="")
Определения advertising.php:3011
static CheckFields($arFields, $BANNER_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:1728
static DeleteSiteLink($BANNER_ID)
Определения advertising.php:1474
static CheckFile($arFile, $iMaxSize=0, $iMaxWidth=0, $iMaxHeight=0, $access_typies=array(), $bForceMD5=false, $bSkipExt=false)
Определения advertising.php:1860
static BeforeRestartBuffer()
Определения advertising.php:4391
static GetDynamicList($arFilter, &$arrLegend, &$is_filtered)
Определения advertising.php:4704
static GetRandomArray($TYPE_SID, $quantity=1)
Определения advertising.php:3474
static err_mess()
Определения advertising.php:1287
static GetEditIcons($arBanner, $TYPE_SID="", $arIcons=array())
Определения advertising.php:4546
static GetStatAdvArray($BANNER_ID)
Определения advertising.php:1705
static GetRequiredKeywords($TYPE_SID="", $EXACT_MATCH="")
Определения advertising.php:3021
static CheckDynamicFilter($arFilter)
Определения advertising.php:4680
static FixShowAll()
Определения advertising.php:4165
static __innerExtractBitrixDates($arBanner)
Определения advertising.php:3915
static ResetKeywords($TYPE_SID="", $LOGIC="", $EXACT_MATCH="")
Определения advertising.php:2996
static GetRandom($TYPE_SID)
Определения advertising.php:3042
static GetGroupArray($BANNER_ID)
Определения advertising.php:1579
static DeleteStatAdvLink($BANNER_ID)
Определения advertising.php:1500
static Delete($BANNER_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:1404
static GetUniformityCoef($arBanner)
Определения advertising.php:3905
static SetCurUri($uri=false)
Определения advertising.php:1302
static DeleteWeekdayLink($BANNER_ID)
Определения advertising.php:1461
static Set($arFields, $BANNER_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:2085
static GetCountryArray($BANNER_ID, $WHAT="COUNTRY")
Определения advertising.php:1626
static GetWeekdayArray($BANNER_ID)
Определения advertising.php:1681
static CalculateTimeProgress($arBanner)
Определения advertising.php:3953
static CalculateRotationProgress($arBanner)
Определения advertising.php:3976
static Click($BANNER_ID)
Определения advertising.php:619
static Add($arFields)
Определения advertising.php:286
static GetDynamicList_SQL($strSqlSearch)
Определения advertising.php:968
static err_mess()
Определения advertising.php:248
static getCTRSQL()
Определения advertising.php:266
static addBindField($field, $bannerField, &$modifyStatus)
Определения advertising.php:271
static GetList($by='s_id', $order='desc', $arFilter=[], $is_filtered=null, $CHECK_RIGHTS="Y")
Определения advertising.php:299
static Update($arFields, $BANNER_ID)
Определения advertising.php:254
static GetPageWeights_RS()
Определения advertising.php:703
Определения advertising.php:50
static GetStatList($by, $order, $arFilter)
Определения advertising.php:1149
static GetAdminRoleID()
Определения advertising.php:97
static Delete($CONTRACT_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:1052
static GetEmailArrayByRole($role)
Определения advertising.php:188
static GetTypeArray($CONTRACT_ID)
Определения advertising.php:531
static SendInfo()
Определения advertising.php:461
static GetGroupsByRole($role)
Определения advertising.php:160
static GetAdvertisersArray()
Определения advertising.php:175
static HaveRole($role, $USER_ID=false)
Определения advertising.php:103
static GetUserPermissions($CONTRACT_ID=0, $USER_ID=false)
Определения advertising.php:263
static DeleteWeekdayLink($CONTRACT_ID)
Определения advertising.php:1136
static GetMaxPermissionsArray()
Определения advertising.php:230
static GetManagerEmails()
Определения advertising.php:212
static DeletePageLink($CONTRACT_ID, $where="")
Определения advertising.php:1084
static DeleteTypeLink($CONTRACT_ID)
Определения advertising.php:1110
static IsAdmin($USER_ID=false)
Определения advertising.php:134
static GetNextSort()
Определения advertising.php:57
static SendEMail($arContract, $mess="")
Определения advertising.php:383
static DeleteSiteLink($CONTRACT_ID)
Определения advertising.php:1097
static GetOwnerEmails($CONTRACT_ID, &$OWNER_EMAIL, &$ADD_EMAIL, &$VIEW_EMAIL, &$EDIT_EMAIL)
Определения advertising.php:236
static GetAdvertiserRoleID()
Определения advertising.php:82
static err_mess()
Определения advertising.php:51
static GetContractPermissions($CONTRACT_ID)
Определения advertising.php:341
static Set($arFields, $CONTRACT_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:662
static GetByID($CONTRACT_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:610
static GetManagerRoleID()
Определения advertising.php:87
static GetPageArray($CONTRACT_ID, $SHOW="SHOW")
Определения advertising.php:587
static DeleteUserLink($CONTRACT_ID, $where="")
Определения advertising.php:1123
static IsDemo($USER_ID=false)
Определения advertising.php:146
static CheckFields($arFields, $CONTRACT_ID, $CHECK_RIGHTS="Y")
Определения advertising.php:623
static GetSiteArray($CONTRACT_ID)
Определения advertising.php:565
static GetDeniedRoleID()
Определения advertising.php:77
static GetDemoRoleID()
Определения advertising.php:92
static IsAdvertiser($USER_ID=false)
Определения advertising.php:127
static CheckFilter($arFilter)
Определения advertising.php:479
static GetWeekdayArray($CONTRACT_ID)
Определения advertising.php:506
static IsOwner($CONTRACT_ID, $USER_ID=false)
Определения advertising.php:330
static IsManager($USER_ID=false)
Определения advertising.php:153
static GetAdminEmails()
Определения advertising.php:206
static GetList($by="s_sort", $order="desc", $arFilter=[], $is_filtered=null, $CHECK_RIGHTS="Y")
Определения advertising.php:17
Определения advertising.php:5046
static GetNextSort()
Определения advertising.php:5077
static Delete($TYPE_SID, $CHECK_RIGHTS="Y")
Определения advertising.php:5265
static err_mess()
Определения advertising.php:5047
static GetByID($TYPE_SID)
Определения advertising.php:5253
static DeleteContractLink($TYPE_SID)
Определения advertising.php:5297
static GetList($by="s_sort", $order="asc", $arFilter=[], $is_filtered=null, $CHECK_RIGHTS="Y")
Определения advertising.php:5312
static Set($arFields, $OLD_SID, $CHECK_RIGHTS="Y")
Определения advertising.php:5148
static CheckFields($arFields, $OLD_SID, $CHECK_RIGHTS)
Определения advertising.php:5087
static CheckFilter($arFilter)
Определения advertising.php:5053
Определения advertising.php:5454
static GetAdv($TYPE_SID)
Определения advertising.php:5455
static ClickAdv($BANNER_ID)
Определения advertising.php:5460
static GetList($by='c_sort', $order='asc', $arFilter=[], $SHOW_USERS_AMOUNT="N")
Определения group.php:136
static GetGID($site_id=false)
Определения statevent.php:8
static GetInstance()
Определения virtual_io.php:60
Определения debuginfo.php:17
static MakeFileArray($path, $mimetype=false, $skipInternal=false, $external_id="")
Определения file.php:2005
static URN2URI($urn, $server_name='')
Определения http.php:39
Определения sqlwhere.php:1359
static GetAbsoluteRoot()
Определения file_temp.php:11
Определения user.php:6037
$options
Определения commerceml2.php:49
$str
Определения commerceml2.php:63
$arFields
Определения dblapprove.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
$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
$arGroups
Определения options.php:1766
$res
Определения filter_act.php:7
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
$perm
Определения options.php:169
$zr
Определения options.php:5
global $arrViewedBanners
Определения advertising.php:12
global $nRandom3
Определения advertising.php:17
global $nRandom2
Определения advertising.php:16
global $strAdvCurUri
Определения advertising.php:14
global $arrADV_VIEWED_BANNERS
Определения advertising.php:21
global $nRandom4
Определения advertising.php:18
global $arrADV_KEYWORDS
Определения advertising.php:13
global $nRandom5
Определения advertising.php:19
global $nRandom1
Определения advertising.php:15
$weightCalculated
Определения advertising.php:33
global $CACHE_ADVERTISING
Определения advertising.php:20
const BANNER_UNIFORMITY_DIVERGENCE_COEF
Определения advertising.php:43
$result
Определения get_property_values.php:14
if($ajaxMode) $ID
Определения get_user.php:27
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
Определения .description.php:24
$uid
Определения hot_keys_act.php:8
$strError
Определения options_user_settings.php:4
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$io
Определения csv_new_run.php:98
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
GetNextRGB($base_color, $total)
Определения img.php:93
if(file_exists($_SERVER['DOCUMENT_ROOT'] . "/urlrewrite.php")) $uri
Определения urlrewrite.php:61
const FORMAT_DATE
Определения include.php:63
$z
Определения options.php:31
if(!is_array($deviceNotifyCodes)) $access
Определения options.php:174
CheckSerializedData($str, $max_depth=200)
Определения tools.php:4949
ConvertDateTime($datetime, $to_format=false, $from_site=false, $bSearchInSitesOnly=false)
Определения tools.php:724
GetFileExtension($path)
Определения tools.php:2972
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
TrimArr(&$arr, $trim_value=false)
Определения tools.php:2110
GetFileType($path)
Определения tools.php:3047
htmlspecialcharsEx($str)
Определения tools.php:2685
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
TxtToHTML( $str, $bMakeUrls=true, $iMaxStringLen=0, $QUOTE_ENABLED="N", $NOT_CONVERT_AMPERSAND="Y", $CODE_ENABLED="N", $BIU_ENABLED="N", $quote_table_class="quotetable", $quote_head_class="tdquotehead", $quote_body_class="tdquote", $code_table_class="codetable", $code_head_class="tdcodehead", $code_body_class="tdcodebody", $code_textarea_class="codetextarea", $link_class="txttohtmllink", $arUrlEvent=[], $link_target="_self")
Определения tools.php:2442
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
CheckDateTime($datetime, $format=false)
Определения tools.php:398
MkDateTime($strDT, $format="d.m.Y H:i:s")
Определения tools.php:1977
MakeTimeStamp($datetime, $format=false)
Определения tools.php:538
$order
Определения payment.php:8
$year
Определения payment.php:9
$time
Определения payment.php:61
$counter
Определения options.php:5
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
$text
Определения template_pdf.php:79
$i
Определения factura.php:643
$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
else $a
Определения template.php:137
$val
Определения options.php:1793
$site_id
Определения sonet_set_content_view.php:9
const SITE_ID
Определения sonet_set_content_view.php:12
$rows
Определения options.php:264
if($_SERVER $cookie_name['REQUEST_METHOD']=="POST" && $STAT_RIGHT=="W" && $RestoreDefaults<> '' &&check_bitrix_sessid())
Определения options.php:55
$rs
Определения action.php:82
$k
Определения template_pdf.php:567
$n
Определения update_log.php:107
$arFilter
Определения user_search.php:106
$url
Определения iframe.php:7