1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
seo_yandex_direct.php
См. документацию.
1<?
2require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
3
12
13if (!$USER->CanDoOperation('seo_tools') || !check_bitrix_sessid())
14 die(GetMessage("ACCESS_DENIED"));
15
22
23Loader::includeModule('seo');
24Loader::includeModule('socialservices');
25
26Loc::loadMessages(__DIR__.'/../include.php');
27Loc::loadMessages(__DIR__.'/../admin/seo_adv.php');
28
29$action = isset($_REQUEST['action']) ? $_REQUEST["action"] : null;
30
31if($action !== "register")
32{
33 $bNeedAuth = !Service::isRegistered();
34 if(!$bNeedAuth && $action != "authorize")
35 {
36 $engine = new Engine\YandexDirect();
37 $currentUser = null;
38
39 try
40 {
41 $currentAuth = Service::getAuth($engine->getCode());
42 if($currentAuth)
43 {
44 $currentUser = $currentAuth["user"];
45 $bNeedAuth = false;
46 }
47 }
48 catch(Exception $e)
49 {
50 $bNeedAuth = true;
51 }
52 }
53
54}
55else
56{
57 $bNeedAuth = false;
58}
59
60if(isset($action) && !$bNeedAuth)
61{
62 try
63 {
64 switch($_REQUEST['action'])
65 {
66 case 'register':
67 if(!Service::isRegistered())
68 {
69 try
70 {
71 Service::register();
72 $res = array("result" => true);
73 }
74 catch(\Bitrix\Main\SystemException $e)
75 {
76 $res = array(
77 'error' => array(
78 'message' => $e->getMessage(),
79 'code' => $e->getCode(),
80 )
81 );
82 }
83 }
84
85 break;
86
87 case 'unregister':
88 if(Service::isRegistered())
89 {
90 try
91 {
92 Service::clearAuth($engine->getCode());
93 Service::unregister();
94 $res = array("result" => true);
95 }
96 catch(\Bitrix\Main\SystemException $e)
97 {
98 $res = array(
99 'error' => array(
100 'message' => $e->getMessage(),
101 'code' => $e->getCode(),
102 )
103 );
104 }
105 }
106
107 break;
108
109 case 'nullify_auth':
110 Service::clearAuth($engine->getCode());
111 $res = array("result" => true);
112 break;
113
114 case 'wordstat_report_clear':
115 case 'wordstat_report':
116
117 if($_REQUEST['action'] == 'wordstat_report_clear')
118 {
119 $reportList = $engine->getWordstatReportList();
120
121 if(count($reportList) >= Engine\YandexDirect::MAX_WORDSTAT_REPORTS)
122 {
123 foreach($reportList as $firstReport)
124 {
125 $engine->deleteWordstatReport($firstReport["ReportID"]);
126 break;
127 }
128 }
129 }
130
131 $phraseList = $_REQUEST['phrase'];
132 $geo = trim($_REQUEST['geo']);
133
134 if(is_array($phraseList))
135 {
136 $phraseList = array_values(array_unique($phraseList));
137 $geoList = $geo <> '' ? preg_split("/[^0-9\\-]+\\s*/", $geo) : array();
138
139 $phraseHash = md5(implode('|', $phraseList).'|||'.$geo);
140
141 if(!isset($_SESSION["SEO_REPORTS"]))
142 {
143 $_SESSION["SEO_REPORTS"] = array();
144 }
145
146 sortByColumn($_SESSION["SEO_REPORTS"], "TS");
147
148 foreach($_SESSION["SEO_REPORTS"] as $k => $report)
149 {
150 $lifeTime = time() - $report["TS"];
151 if(
152 $lifeTime > Engine\YandexDirect::TTL_WORDSTAT_REPORT
153 && $lifeTime < Engine\YandexDirect::TTL_WORDSTAT_REPORT_EXT
154 || count($_SESSION["SEO_REPORTS"]) >= Engine\YandexDirect::MAX_WORDSTAT_REPORTS
155 )
156 {
157 $reportId = $report["REPORT_ID"];
158 $engine->deleteWordstatReport($reportId);
159 unset($_SESSION["SEO_REPORTS"][$k]);
160 }
161 }
162
163 if(!isset($_SESSION["SEO_REPORTS"][$phraseHash]))
164 {
165 $reportId = $engine->createWordstatReport($phraseList, $geoList);
166
167 $_SESSION["SEO_REPORTS"][$phraseHash] = array(
168 "REPORT_ID" => intval($reportId),
169 "PHRASE" => $phraseList,
170 "GEO" => $geoList,
171 "TS" => time(),
172 );
173
174 $res = $_SESSION["SEO_REPORTS"][$phraseHash];
175 }
176 else
177 {
178 $reportId = $_SESSION["SEO_REPORTS"][$phraseHash]["REPORT_ID"];
179 $res = $engine->getWordstatReport($reportId);
180 }
181 }
182
183 break;
184
185
186 case 'forecast_report_clear':
187 case 'forecast_report':
188
189 if($_REQUEST['action'] == 'forecast_report_clear')
190 {
191 $reportList = $engine->getForecastReportList();
192
193 if(count($reportList) >= Engine\YandexDirect::MAX_FORECAST_REPORTS)
194 {
195 foreach($reportList as $firstReport)
196 {
197 $engine->deleteForecastReport($firstReport["ForecastID"]);
198 break;
199 }
200 }
201 }
202
203 $phraseList = $_REQUEST['phrase'];
204 $geo = trim($_REQUEST['geo']);
205
206 if(is_array($phraseList))
207 {
208 $phraseList = array_values(array_unique($phraseList));
209 $geoList = $geo <> '' ? preg_split("/[^0-9\-]+\\s*/", $geo) : array();
210
211 $phraseHash = md5(implode('|', $phraseList).'|||'.$geo);
212
213 if(!isset($_SESSION["SEO_FORECASTS"]))
214 {
215 $_SESSION["SEO_FORECASTS"] = array();
216 }
217
218 sortByColumn($_SESSION["SEO_FORECASTS"], "TS");
219
220 foreach($_SESSION["SEO_FORECASTS"] as $k => $report)
221 {
222 $lifeTime = time() - $report["TS"];
223 if(
224 $lifeTime > Engine\YandexDirect::TTL_FORECAST_REPORT
225 && $lifeTime < Engine\YandexDirect::TTL_FORECAST_REPORT_EXT
226 || count($_SESSION["SEO_FORECASTS"]) >= Engine\YandexDirect::MAX_FORECAST_REPORTS
227 )
228 {
229 $reportId = $report["REPORT_ID"];
230 $engine->deleteForecastReport($reportId);
231 unset($_SESSION["SEO_FORECASTS"][$k]);
232 }
233 }
234
235 if(!isset($_SESSION["SEO_FORECASTS"][$phraseHash]))
236 {
237 $reportId = $engine->createForecastReport($phraseList, $geoList);
238
239 $_SESSION["SEO_FORECASTS"][$phraseHash] = array(
240 "REPORT_ID" => intval($reportId),
241 "PHRASE" => $phraseList,
242 "GEO" => $geoList,
243 "TS" => time(),
244 );
245
246 $res = $_SESSION["SEO_FORECASTS"][$phraseHash];
247 }
248 else
249 {
250 $reportId = $_SESSION["SEO_FORECASTS"][$phraseHash]["REPORT_ID"];
251 $res = $engine->getForecastReport($reportId);
252 }
253 }
254
255 break;
256
257 case 'campaign_update':
258 $campaignId = intval($_REQUEST['campaign']);
259
260 $res = $engine->updateCampaignManual($campaignId);
261
262 break;
263
264 case 'banner_update':
265
266 $bannerId = intval($_REQUEST['banner']);
267 $campaignId = intval($_REQUEST['campaign']);
268
269 $res = $engine->updateBannersManual($campaignId, $bannerId);
270
271 break;
272
273 case 'link_delete':
274 case 'link_create':
275
276 $res = array('result' => false);
277
278 $bannerId = intval($_REQUEST['banner']);
279 $linkId = intval($_REQUEST['link']);
280 $linkType = $_REQUEST['link_type'];
281
282 if($linkId > 0 & $bannerId > 0)
283 {
284 if($_REQUEST['action'] == 'link_delete')
285 {
286 $result = Adv\LinkTable::delete(array(
287 'LINK_TYPE' => $linkType,
288 'LINK_ID' => $linkId,
289 'BANNER_ID' => $bannerId,
290 ));
291
292 $res = array('result' => $result->isSuccess());
293 }
294 elseif($_REQUEST['action'] == 'link_create')
295 {
296 $dbRes = Adv\LinkTable::getByPrimary(array(
297 'LINK_TYPE' => $linkType,
298 'LINK_ID' => $linkId,
299 'BANNER_ID' => $bannerId,
300 ));
301 if(!$dbRes->fetch())
302 {
303 $result = Adv\LinkTable::add(array(
304 'LINK_TYPE' => $linkType,
305 'LINK_ID' => $linkId,
306 'BANNER_ID' => $bannerId,
307 ));
308
309 $res = array('result' => $result->isSuccess());
310 }
311 else
312 {
313 $res = array('result' => true);
314 }
315 }
316 }
317
318 if($res['result'] && $_REQUEST['get_list_html'])
319 {
320 Loader::includeModule('iblock');
321
322 ob_start();
323
324 if($_REQUEST['get_list_html'] == '1')
325 {
326 $iblockElementInfo = array(
327 "ID" => $linkId,
328 "IBLOCK" => array(
329 "ID" => 0
330 )
331 );
332
333 $dbRes = Adv\LinkTable::getList(array(
334 "filter" => array(
335 '=LINK_TYPE' => Adv\LinkTable::TYPE_IBLOCK_ELEMENT,
336 '=LINK_ID' => $linkId,
337 "=BANNER.ENGINE_ID" => $engine->getId(),
338 ),
339 "select" => array(
340 "BANNER_ID",
341 "BANNER_NAME" => "BANNER.NAME", "BANNER_XML_ID" => "BANNER.XML_ID",
342 "BANNER_CAMPAIGN_ID" => "BANNER.CAMPAIGN_ID",
343 "LINK_IBLOCK_ID" => "IBLOCK_ELEMENT.IBLOCK_ID",
344 )
345 ));
346
347 $arBanners = array();
348 while($banner = $dbRes->fetch())
349 {
350 if(!isset($arBanners[$banner['BANNER_CAMPAIGN_ID']]))
351 {
352 $arBanners[$banner['BANNER_CAMPAIGN_ID']] = array();
353 }
354
355 $arBanners[$banner['BANNER_CAMPAIGN_ID']][] = $banner;
356 $iblockElementInfo['IBLOCK']['ID'] = $banner['LINK_IBLOCK_ID'];
357 }
358
359 $dbRes = Adv\YandexCampaignTable::getList(array(
360 "order" => array("NAME" => "asc"),
361 "filter" => array(
362 "=ID" > array_keys($arBanners),
363 '=ACTIVE' => Adv\YandexCampaignTable::ACTIVE,
364 '=ENGINE_ID' => $engine->getId(),
365 ),
366 'select' => array(
367 "ID", "NAME", "XML_ID"
368 )
369 ));
370 $campaignList = array();
371
372 while($campaign = $dbRes->fetch())
373 {
374 $campaignList[$campaign['ID']] = $campaign;
375 }
376
377 require(__DIR__."/../admin/tab/seo_search_yandex_direct_list_link.php");
378 }
379 elseif($_REQUEST['get_list_html'] == '2')
380 {
381 $dbRes = Adv\LinkTable::getList(array(
382 "filter" => array(
383 '=BANNER_ID' => $bannerId,
384 ),
385 "select" => array(
386 "LINK_TYPE", "LINK_ID",
387 "ELEMENT_NAME" => "IBLOCK_ELEMENT.NAME",
388 "ELEMENT_IBLOCK_ID" => "IBLOCK_ELEMENT.IBLOCK_ID",
389 "ELEMENT_IBLOCK_TYPE_ID" => "IBLOCK_ELEMENT.IBLOCK.IBLOCK_TYPE_ID",
390 'ELEMENT_IBLOCK_SECTION_ID' => 'IBLOCK_ELEMENT.IBLOCK_SECTION_ID',
391 )
392 ));
393
394 $arLinks = array();
395 while($link = $dbRes->fetch())
396 {
397 if(!isset($link['LINK_TYPE']) && $elementId > 0)
398 {
399 $link['LINK_TYPE'] = Adv\LinkTable::TYPE_IBLOCK_ELEMENT;
400 }
401
402 $arLinks[] = $link;
403 }
404
405 $ID = $bannerId;
406
407 require(__DIR__."/../admin/tab/seo_search_yandex_direct_list_banner.php");
408 }
409
410 $res['list_html'] = ob_get_contents();
411
412 ob_end_clean();
413 }
414
415 break;
416
417 case 'banners_get':
418 $campaignId = intval($_REQUEST['campaign']);
419
420 if($campaignId > 0)
421 {
422 $res = array();
423 $dbRes = Adv\YandexBannerTable::getList(array(
424 'filter' => array(
425 '=CAMPAIGN_ID' => $campaignId,
426 '=ACTIVE' => Adv\YandexBannerTable::ACTIVE,
427 '=ENGINE_ID' => $engine->getId(),
428 ),
429 'order' => array(
430 'NAME' => 'ASC',
431 ),
432 'select' => array('ID', 'NAME', 'XML_ID')
433 ));
434 while($banner = $dbRes->fetch())
435 {
436 $res[] = $banner;
437 }
438 }
439
440 break;
441
442 case 'banner_stats':
443 $res = array();
444
445 $bannerId = intval($_REQUEST['banner']);
446 $loadingSession = $_REQUEST['loading_session'];
447
448 $gaps = array();
449
450 if($loadingSession)
451 {
452 if(
453 isset($_SESSION[$loadingSession])
454 && $_SESSION[$loadingSession]['BANNER_ID'] == $bannerId
455 )
456 {
457 $dateStart = new Date($_SESSION[$loadingSession]['DATE_START']);
458 $dateFinish = new Date($_SESSION[$loadingSession]['DATE_FINISH']);
459 $gaps = $_SESSION[$loadingSession]['GAPS'];
460 }
461 else
462 {
463 $res = array('error' => array('message' => 'loading session broken'));
464 break;
465 }
466 }
467 else
468 {
469 if(in_array(
470 $_REQUEST["type"],
471 array("week_ago", "month_ago", "interval")
472 ))
473 {
474 $period = array();
476 "_datesel" => $_REQUEST["type"],
477 "_days" => 1,
478 "_from" => $_REQUEST["date_from"],
479 "_to" => $_REQUEST["date_to"],
480 ), $period);
481
482 if(Date::isCorrect($period['_from']))
483 {
484 $dateStart = new Date($period['_from']);
485 }
486 else
487 {
488 $res = array('error' => array('message' => Loc::getMessage('SEO_ERROR_INCORRECT_DATE').': '.$period['_from']));
489 break;
490 }
491
492 if(Date::isCorrect($period['_to']))
493 {
494 $dateFinish = new Date($period['_to']);
495 }
496 else
497 {
498 $res = array('error' => array('message' => Loc::getMessage('SEO_ERROR_INCORRECT_DATE').': '.$period['_to']));
499 break;
500 }
501
502 $statsData = Adv\YandexStatTable::getBannerStat(
503 $bannerId,
504 $dateStart,
505 $dateFinish
506 );
507
508 $gaps = Adv\YandexStatTable::getMissedPeriods($statsData, $dateStart, $dateFinish);
509
510 }
511 else
512 {
513 $res = array('error' => array('message' => 'invalid interval type'));
514 }
515 }
516
517 $errorMessage = null;
518 $finish = true;
519
520 if(count($gaps) > 0)
521 {
522 $cnt = 0;
523
524 try
525 {
526 $sessionGaps = $gaps;
527 foreach($gaps as $key => $gap)
528 {
529 Adv\YandexStatTable::loadBannerStat($bannerId, $gap[0], $gap[1]);
530 unset($sessionGaps[$key]);
531
532 if(++$cnt > 2)
533 {
534 if(!$loadingSession)
535 {
536 $loadingSession = uniqid("YD_LOADING_", true);
537 $_SESSION[$loadingSession] = array(
538 "BANNER_ID" => $bannerId,
539 "DATE_START" => $dateStart->toString(),
540 "DATE_FINISH" => $dateFinish->toString(),
541 "ORIGINAL_CNT" => count($gaps),
542 );
543 }
544
545 $_SESSION[$loadingSession]["GAPS"] = $sessionGaps;
546 $finish = false;
547
548 break;
549 }
550 }
551 }
552 catch(Engine\YandexDirectException $e)
553 {
554 $res = array('error' => array('message' => $e->getMessage(), "code" => $e->getCode()));
555 $finish = true;
556 }
557 }
558
559 if($finish)
560 {
561 if($loadingSession)
562 {
563 unset($_SESSION[$loadingSession]);
564 }
565
566 if(!$res['error'] || $res["code"] == Engine\YandexDirect::ERROR_NO_STATS)
567 {
568 $statsData = Adv\YandexStatTable::getBannerStat(
569 $bannerId,
570 $dateStart,
571 $dateFinish
572 );
573
574 $graphData = array();
575
576 foreach($statsData as $date => $dayData)
577 {
578 unset($dayData['ID']);
579 unset($dayData['CAMPAIGN_ID']);
580 unset($dayData['BANNER_ID']);
581 unset($dayData['DATE_DAY']);
582
583 $dayData['date'] = $date;
584 $graphData[] = $dayData;
585 }
586
587 $res["data"] = $graphData;
588 $res["date_from"] = $dateStart->toString();
589 $res["date_to"] = $dateFinish->toString();
590
591 if(
592 \Bitrix\Main\ModuleManager::isModuleInstalled('sale')
593 && \Bitrix\Main\ModuleManager::isModuleInstalled('catalog')
594 && Loader::includeModule('currency')
595 )
596 {
597 $orderStats = Adv\OrderTable::getList(array(
598 'filter' => array(
599 '=BANNER_ID' => $bannerId,
600 '=PROCESSED' => Adv\OrderTable::PROCESSED,
601 ">=TIMESTAMP_X" => $dateStart,
602 "<TIMESTAMP_X" => $dateFinish,
603 ),
604 'group' => array(
605 'BANNER_ID'
606 ),
607 'select' => array('BANNER_SUM'),
608 'runtime' => array(
609 new \Bitrix\Main\Entity\ExpressionField('BANNER_SUM', 'SUM(SUM)'),
610 ),
611 ));
612 if($stat = $orderStats->fetch())
613 {
614 $res["order_sum"] = $stat['BANNER_SUM'];
615 }
616 else
617 {
618 $res["order_sum"] = 0;
619 }
620
621 $res["order_sum_format"] = \CCurrencyLang::CurrencyFormat(doubleval($res["order_sum"]), \Bitrix\Currency\CurrencyManager::getBaseCurrency(), true);
622 }
623 }
624 }
625 else
626 {
627 $res = array(
628 "session" => $loadingSession,
629 "amount" => $_SESSION[$loadingSession]['ORIGINAL_CNT'],
630 "left" => count($_SESSION[$loadingSession]["GAPS"]),
631 );
632 }
633
634 break;
635
636 case 'campaign_stats':
637 $res = array();
638
639 $campaignId = intval($_REQUEST['campaign']);
640 $loadingSession = $_REQUEST['loading_session'];
641
642 $gaps = array();
643
644 if($loadingSession)
645 {
646 if(
647 isset($_SESSION[$loadingSession])
648 && $_SESSION[$loadingSession]['CAMPAIGN_ID'] == $campaignId
649 )
650 {
651 $dateStart = new Date($_SESSION[$loadingSession]['DATE_START']);
652 $dateFinish = new Date($_SESSION[$loadingSession]['DATE_FINISH']);
653 $gaps = $_SESSION[$loadingSession]['GAPS'];
654 }
655 else
656 {
657 $res = array('error' => array('message' => 'loading session broken'));
658 break;
659 }
660 }
661 else
662 {
663 if(in_array(
664 $_REQUEST["type"],
665 array("week_ago", "month_ago", "interval")
666 ))
667 {
668 $period = array();
670 "_datesel" => $_REQUEST["type"],
671 "_days" => 1,
672 "_from" => $_REQUEST["date_from"],
673 "_to" => $_REQUEST["date_to"],
674 ), $period);
675
676 if(Date::isCorrect($period['_from']))
677 {
678 $dateStart = new Date($period['_from']);
679 }
680 else
681 {
682 $res = array('error' => array('message' => Loc::getMessage('SEO_ERROR_INCORRECT_DATE').': '.$period['_from']));
683 break;
684 }
685
686 if(Date::isCorrect($period['_to']))
687 {
688 $dateFinish = new Date($period['_to']);
689 }
690 else
691 {
692 $res = array('error' => array('message' => Loc::getMessage('SEO_ERROR_INCORRECT_DATE').': '.$period['_to']));
693 break;
694 }
695
696 $statsData = Adv\YandexStatTable::getCampaignStat(
697 $campaignId,
698 $dateStart,
699 $dateFinish
700 );
701
702 $gaps = Adv\YandexStatTable::getMissedPeriods($statsData, $dateStart, $dateFinish);
703 }
704 else
705 {
706 $res = array('error' => array('message' => 'invalid interval type'));
707 }
708 }
709
710 $errorMessage = null;
711 $finish = true;
712
713 if(count($gaps) > 0)
714 {
715 $cnt = 0;
716
717 try
718 {
719 $sessionGaps = $gaps;
720 foreach($gaps as $key => $gap)
721 {
722 Adv\YandexStatTable::loadCampaignStat($campaignId, $gap[0], $gap[1]);
723 unset($sessionGaps[$key]);
724
725 if(++$cnt > 2)
726 {
727 if(!$loadingSession)
728 {
729 $loadingSession = uniqid("YD_LOADING_", true);
730 $_SESSION[$loadingSession] = array(
731 "CAMPAIGN_ID" => $campaignId,
732 "DATE_START" => $dateStart->toString(),
733 "DATE_FINISH" => $dateFinish->toString(),
734 "ORIGINAL_CNT" => count($gaps),
735 );
736 }
737
738 $_SESSION[$loadingSession]["GAPS"] = $sessionGaps;
739 $finish = false;
740
741 break;
742 }
743 }
744 }
745 catch(Engine\YandexDirectException $e)
746 {
747 $res = array('error' => array('message' => $e->getMessage(), "code" => $e->getCode()));
748 $finish = true;
749 }
750 }
751
752 if($finish)
753 {
754 if($loadingSession)
755 {
756 unset($_SESSION[$loadingSession]);
757 }
758
759 if(!$res['error'] || $res["code"] == Engine\YandexDirect::ERROR_NO_STATS)
760 {
761 $statsData = Adv\YandexStatTable::getCampaignStat(
762 $campaignId,
763 $dateStart,
764 $dateFinish
765 );
766
767 $graphData = array();
768
769 foreach($statsData as $date => $dayData)
770 {
771 $graphData[] = array(
772 'date' => $date,
773 'CURRENCY' => $dayData['CURRENCY'],
774 'SUM' => round($dayData['CAMPAIGN_SUM'], 2),
775 'SUM_SEARCH' => round($dayData['CAMPAIGN_SUM_SEARCH'], 2),
776 'SUM_CONTEXT' => round($dayData['CAMPAIGN_SUM_CONTEXT'], 2),
777 'SHOWS' => $dayData['CAMPAIGN_SHOWS'],
778 'SHOWS_SEARCH' => $dayData['CAMPAIGN_SHOWS_SEARCH'],
779 'SHOWS_CONTEXT' => $dayData['CAMPAIGN_SHOWS_CONTEXT'],
780 'CLICKS' => $dayData['CAMPAIGN_CLICKS'],
781 'CLICKS_SEARCH' => $dayData['CAMPAIGN_CLICKS_SEARCH'],
782 'CLICKS_CONTEXT' => $dayData['CAMPAIGN_CLICKS_CONTEXT'],
783 );
784 }
785
786 $res["data"] = $graphData;
787 $res["date_from"] = $dateStart->toString();
788 $res["date_to"] = $dateFinish->toString();
789 }
790 }
791 else
792 {
793 $res = array(
794 "session" => $loadingSession,
795 "amount" => $_SESSION[$loadingSession]['ORIGINAL_CNT'],
796 "left" => count($_SESSION[$loadingSession]["GAPS"]),
797 );
798 }
799
800 break;
801
802 case 'banner_stat_detail':
803 $res = array('error' => array('message' => 'Wrong banners list'));
804
807 && Loader::includeModule('currency');
808
809 $bannerId = $_REQUEST['banner'];
810 if($bannerId)
811 {
812 $bSingle = !is_array($bannerId);
813 if($bSingle)
814 {
815 $bannerId = array($bannerId);
816 }
817
818 array_map('intval', $bannerId);
819
820 if(count($bannerId) > 0)
821 {
822 $dbBanners = Adv\YandexBannerTable::getList(array(
823 'filter' => array(
824 '@ID' => $bannerId,
825 '=ENGINE_ID' => $engine->getId(),
826 '=ACTIVE' => Adv\YandexBannerTable::ACTIVE,
827 ),
828 'select' => array(
829 'ID', 'CAMPAIGN_ID', 'SETTINGS'
830 ),
831 ));
832
833 $bannerList = array();
834 $campaignList = array();
835
836 while($banner = $dbBanners->fetch())
837 {
838 $campaignList[] = $banner['CAMPAIGN_ID'];
839 $bannerList[$banner['ID']] = $banner;
840 }
841
842 $campaignList = array_unique($campaignList);
843
844 if(count($campaignList) > 0)
845 {
846 $dbCampaigns = Adv\YandexCampaignTable::getList(array(
847 'filter' => array(
848 '@ID' => $campaignList,
849 '=ENGINE_ID' => $engine->getId(),
850 '=ACTIVE' => Adv\YandexCampaignTable::ACTIVE,
851 ),
852 'select' => array(
853 'ID', 'SETTINGS'
854 ),
855 ));
856
857 $campaignList = array();
858 while($campaign = $dbCampaigns->fetch())
859 {
860 $campaignList[$campaign['ID']] = $campaign;
861 }
862
863 $dateFinish = new Date();
864
865 $bannerListToCheck = array();
866 foreach($bannerList as $key => $banner)
867 {
868 $banner['DATE_START'] = $campaignList[$banner['CAMPAIGN_ID']]['SETTINGS']['StartDate'];
869
870 if($bSale)
871 {
872 $banner['PROFIT'] = 0;
873 }
874
875 if($banner['DATE_START'])
876 {
877 $banner['DATE_START'] = new Date($banner['DATE_START'], 'Y-m-d');
878
879 $banner['STATS_DATA'] = Adv\YandexStatTable::getBannerStat(
880 $banner['ID'],
881 $banner['DATE_START'],
882 $dateFinish
883 );
884
885 $gaps = Adv\YandexStatTable::getMissedPeriods($banner['STATS_DATA'], $banner['DATE_START'], $dateFinish);
886
887 if(count($gaps) > 0)
888 {
889 $banner['LOADING_NEEDED'] = true;
890 $bannerListToCheck[] = $banner['ID'];
891 }
892 else
893 {
894 $bannerListToCheck[] = $banner['ID'];
895 }
896 }
897
898 $bannerList[$key] = $banner;
899 }
900
901 if($bSale && count($bannerListToCheck) > 0)
902 {
903 $orderStats = Adv\OrderTable::getList(array(
904 'filter' => array(
905 '@BANNER_ID' => $bannerListToCheck,
906 '=PROCESSED' => Adv\OrderTable::PROCESSED,
907 ),
908 'group' => array(
909 'BANNER_ID'
910 ),
911 'select' => array('BANNER_ID', 'BANNER_SUM'),
912 'runtime' => array(
913 new \Bitrix\Main\Entity\ExpressionField('BANNER_SUM', 'SUM(SUM)'),
914 ),
915 ));
916 while($stat = $orderStats->fetch())
917 {
918 $bannerList[$stat['BANNER_ID']]['PROFIT'] = $stat['BANNER_SUM'];
919 }
920 }
921
922 ob_start();
923 require(__DIR__."/../admin/tab/seo_search_yandex_direct_stat.php");
924 $res = array('html' => ob_get_contents());
925 ob_end_clean();
926 }
927 }
928 }
929
930 break;
931
932 default:
933 $res = array('error' => array('message' => 'unknown action'));
934 break;
935 }
936 }
937 catch(Engine\YandexDirectException $e)
938 {
939 $res = array(
940 'error' => array(
941 'message' => $e->getMessage(),
942 'code' => $e->getCode(),
943 )
944 );
945 }
946
947 Header('Content-type: application/json; charset='.LANG_CHARSET);
948 echo \Bitrix\Main\Web\Json::encode($res);
949}
Определения loader.php:13
static isModuleInstalled($moduleName)
Определения modulemanager.php:125
Определения date.php:9
static CalcDates($field_id, $aInput, &$aRes)
Определения grids.php:477
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$result
Определения get_property_values.php:14
if($ajaxMode) $ID
Определения get_user.php:27
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $USER
Определения csv_new_run.php:40
const LANG_CHARSET
Определения include.php:65
check_bitrix_sessid($varname='sessid')
Определения tools.php:4686
GetMessage($name, $aReplace=null)
Определения tools.php:3397
sortByColumn(array &$array, $columns, $callbacks='', $defaultValueIfNotSetValue=null, $preserveKeys=false)
Определения tools.php:5087
Определения action.php:3
Определения ufield.php:9
Определения auto.php:2
Определения bitrix.php:9
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
die
Определения quickway.php:367
</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
$engine
Определения options.php:121
$k
Определения template_pdf.php:567
$action
Определения file_dialog.php:21
$dbRes
Определения yandex_detail.php:168