2require(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/main/include/prolog_admin_before.php");
23Loader::includeModule(
'seo');
24Loader::includeModule(
'socialservices');
26Loc::loadMessages(__DIR__.
'/../include.php');
27Loc::loadMessages(__DIR__.
'/../admin/seo_adv.php');
33 $bNeedAuth = !Service::isRegistered();
34 if(!$bNeedAuth &&
$action !=
"authorize")
36 $engine =
new Engine\YandexDirect();
41 $currentAuth = Service::getAuth(
$engine->getCode());
44 $currentUser = $currentAuth[
"user"];
60if(isset(
$action) && !$bNeedAuth)
67 if(!Service::isRegistered())
78 'message' => $e->getMessage(),
79 'code' => $e->getCode(),
88 if(Service::isRegistered())
92 Service::clearAuth(
$engine->getCode());
93 Service::unregister();
100 'message' => $e->getMessage(),
101 'code' => $e->getCode(),
110 Service::clearAuth(
$engine->getCode());
114 case 'wordstat_report_clear':
115 case 'wordstat_report':
117 if(
$_REQUEST[
'action'] ==
'wordstat_report_clear')
119 $reportList =
$engine->getWordstatReportList();
121 if(
count($reportList) >=
Engine\YandexDirect::MAX_WORDSTAT_REPORTS)
123 foreach($reportList as $firstReport)
125 $engine->deleteWordstatReport($firstReport[
"ReportID"]);
134 if(is_array($phraseList))
136 $phraseList = array_values(array_unique($phraseList));
137 $geoList = $geo <>
'' ? preg_split(
"/[^0-9\\-]+\\s*/", $geo) :
array();
139 $phraseHash = md5(implode(
'|', $phraseList).
'|||'.$geo);
141 if(!isset($_SESSION[
"SEO_REPORTS"]))
143 $_SESSION[
"SEO_REPORTS"] =
array();
148 foreach($_SESSION[
"SEO_REPORTS"] as
$k => $report)
150 $lifeTime = time() - $report[
"TS"];
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
157 $reportId = $report[
"REPORT_ID"];
158 $engine->deleteWordstatReport($reportId);
159 unset($_SESSION[
"SEO_REPORTS"][
$k]);
163 if(!isset($_SESSION[
"SEO_REPORTS"][$phraseHash]))
165 $reportId =
$engine->createWordstatReport($phraseList, $geoList);
167 $_SESSION[
"SEO_REPORTS"][$phraseHash] =
array(
168 "REPORT_ID" => intval($reportId),
169 "PHRASE" => $phraseList,
174 $res = $_SESSION[
"SEO_REPORTS"][$phraseHash];
178 $reportId = $_SESSION[
"SEO_REPORTS"][$phraseHash][
"REPORT_ID"];
186 case 'forecast_report_clear':
187 case 'forecast_report':
189 if(
$_REQUEST[
'action'] ==
'forecast_report_clear')
191 $reportList =
$engine->getForecastReportList();
193 if(
count($reportList) >=
Engine\YandexDirect::MAX_FORECAST_REPORTS)
195 foreach($reportList as $firstReport)
197 $engine->deleteForecastReport($firstReport[
"ForecastID"]);
206 if(is_array($phraseList))
208 $phraseList = array_values(array_unique($phraseList));
209 $geoList = $geo <>
'' ? preg_split(
"/[^0-9\-]+\\s*/", $geo) :
array();
211 $phraseHash = md5(implode(
'|', $phraseList).
'|||'.$geo);
213 if(!isset($_SESSION[
"SEO_FORECASTS"]))
215 $_SESSION[
"SEO_FORECASTS"] =
array();
220 foreach($_SESSION[
"SEO_FORECASTS"] as
$k => $report)
222 $lifeTime = time() - $report[
"TS"];
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
229 $reportId = $report[
"REPORT_ID"];
230 $engine->deleteForecastReport($reportId);
231 unset($_SESSION[
"SEO_FORECASTS"][
$k]);
235 if(!isset($_SESSION[
"SEO_FORECASTS"][$phraseHash]))
237 $reportId =
$engine->createForecastReport($phraseList, $geoList);
239 $_SESSION[
"SEO_FORECASTS"][$phraseHash] =
array(
240 "REPORT_ID" => intval($reportId),
241 "PHRASE" => $phraseList,
246 $res = $_SESSION[
"SEO_FORECASTS"][$phraseHash];
250 $reportId = $_SESSION[
"SEO_FORECASTS"][$phraseHash][
"REPORT_ID"];
257 case 'campaign_update':
258 $campaignId = intval(
$_REQUEST[
'campaign']);
264 case 'banner_update':
267 $campaignId = intval(
$_REQUEST[
'campaign']);
269 $res =
$engine->updateBannersManual($campaignId, $bannerId);
282 if($linkId > 0 & $bannerId > 0)
287 'LINK_TYPE' => $linkType,
288 'LINK_ID' => $linkId,
289 'BANNER_ID' => $bannerId,
297 'LINK_TYPE' => $linkType,
298 'LINK_ID' => $linkId,
299 'BANNER_ID' => $bannerId,
304 'LINK_TYPE' => $linkType,
305 'LINK_ID' => $linkId,
306 'BANNER_ID' => $bannerId,
320 Loader::includeModule(
'iblock');
326 $iblockElementInfo =
array(
335 '=LINK_TYPE' =>
Adv\LinkTable::TYPE_IBLOCK_ELEMENT,
336 '=LINK_ID' => $linkId,
337 "=BANNER.ENGINE_ID" =>
$engine->getId(),
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",
347 $arBanners =
array();
348 while($banner =
$dbRes->fetch())
350 if(!isset($arBanners[$banner[
'BANNER_CAMPAIGN_ID']]))
352 $arBanners[$banner[
'BANNER_CAMPAIGN_ID']] =
array();
355 $arBanners[$banner[
'BANNER_CAMPAIGN_ID']][] = $banner;
356 $iblockElementInfo[
'IBLOCK'][
'ID'] = $banner[
'LINK_IBLOCK_ID'];
360 "order" =>
array(
"NAME" =>
"asc"),
362 "=ID" > array_keys($arBanners),
363 '=ACTIVE' =>
Adv\YandexCampaignTable::ACTIVE,
364 '=ENGINE_ID' =>
$engine->getId(),
367 "ID",
"NAME",
"XML_ID"
370 $campaignList =
array();
372 while($campaign =
$dbRes->fetch())
374 $campaignList[$campaign[
'ID']] = $campaign;
377 require(__DIR__.
"/../admin/tab/seo_search_yandex_direct_list_link.php");
383 '=BANNER_ID' => $bannerId,
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',
395 while($link =
$dbRes->fetch())
397 if(!isset($link[
'LINK_TYPE']) && $elementId > 0)
399 $link[
'LINK_TYPE'] = Adv\LinkTable::TYPE_IBLOCK_ELEMENT;
407 require(__DIR__.
"/../admin/tab/seo_search_yandex_direct_list_banner.php");
410 $res[
'list_html'] = ob_get_contents();
418 $campaignId = intval(
$_REQUEST[
'campaign']);
425 '=CAMPAIGN_ID' => $campaignId,
426 '=ACTIVE' =>
Adv\YandexBannerTable::ACTIVE,
427 '=ENGINE_ID' =>
$engine->getId(),
432 'select' =>
array(
'ID',
'NAME',
'XML_ID')
434 while($banner =
$dbRes->fetch())
446 $loadingSession =
$_REQUEST[
'loading_session'];
453 isset($_SESSION[$loadingSession])
454 && $_SESSION[$loadingSession][
'BANNER_ID'] == $bannerId
457 $dateStart =
new Date($_SESSION[$loadingSession][
'DATE_START']);
458 $dateFinish =
new Date($_SESSION[$loadingSession][
'DATE_FINISH']);
459 $gaps = $_SESSION[$loadingSession][
'GAPS'];
463 $res =
array(
'error' =>
array(
'message' =>
'loading session broken'));
471 array(
"week_ago",
"month_ago",
"interval")
482 if(Date::isCorrect($period[
'_from']))
484 $dateStart =
new Date($period[
'_from']);
488 $res =
array(
'error' =>
array(
'message' => Loc::getMessage(
'SEO_ERROR_INCORRECT_DATE').
': '.$period[
'_from']));
492 if(Date::isCorrect($period[
'_to']))
494 $dateFinish =
new Date($period[
'_to']);
498 $res =
array(
'error' =>
array(
'message' => Loc::getMessage(
'SEO_ERROR_INCORRECT_DATE').
': '.$period[
'_to']));
502 $statsData = Adv\YandexStatTable::getBannerStat(
508 $gaps = Adv\YandexStatTable::getMissedPeriods($statsData, $dateStart, $dateFinish);
513 $res =
array(
'error' =>
array(
'message' =>
'invalid interval type'));
526 $sessionGaps = $gaps;
527 foreach($gaps as
$key => $gap)
529 Adv\YandexStatTable::loadBannerStat($bannerId, $gap[0], $gap[1]);
530 unset($sessionGaps[
$key]);
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),
545 $_SESSION[$loadingSession][
"GAPS"] = $sessionGaps;
552 catch(
Engine\YandexDirectException $e)
554 $res =
array(
'error' =>
array(
'message' => $e->getMessage(),
"code" => $e->getCode()));
563 unset($_SESSION[$loadingSession]);
566 if(!
$res[
'error'] ||
$res[
"code"] ==
Engine\YandexDirect::ERROR_NO_STATS)
568 $statsData = Adv\YandexStatTable::getBannerStat(
574 $graphData =
array();
576 foreach($statsData as $date => $dayData)
578 unset($dayData[
'ID']);
579 unset($dayData[
'CAMPAIGN_ID']);
580 unset($dayData[
'BANNER_ID']);
581 unset($dayData[
'DATE_DAY']);
583 $dayData[
'date'] = $date;
584 $graphData[] = $dayData;
587 $res[
"data"] = $graphData;
588 $res[
"date_from"] = $dateStart->toString();
589 $res[
"date_to"] = $dateFinish->toString();
592 \
Bitrix\
Main\ModuleManager::isModuleInstalled(
'sale')
593 && \
Bitrix\
Main\ModuleManager::isModuleInstalled(
'catalog')
594 && Loader::includeModule(
'currency')
597 $orderStats = Adv\OrderTable::getList(
array(
599 '=BANNER_ID' => $bannerId,
600 '=PROCESSED' =>
Adv\OrderTable::PROCESSED,
601 ">=TIMESTAMP_X" => $dateStart,
602 "<TIMESTAMP_X" => $dateFinish,
607 'select' =>
array(
'BANNER_SUM'),
612 if($stat = $orderStats->fetch())
614 $res[
"order_sum"] = $stat[
'BANNER_SUM'];
618 $res[
"order_sum"] = 0;
621 $res[
"order_sum_format"] = \CCurrencyLang::CurrencyFormat(doubleval(
$res[
"order_sum"]), \
Bitrix\Currency\CurrencyManager::getBaseCurrency(),
true);
628 "session" => $loadingSession,
629 "amount" => $_SESSION[$loadingSession][
'ORIGINAL_CNT'],
630 "left" =>
count($_SESSION[$loadingSession][
"GAPS"]),
636 case 'campaign_stats':
639 $campaignId = intval(
$_REQUEST[
'campaign']);
640 $loadingSession =
$_REQUEST[
'loading_session'];
647 isset($_SESSION[$loadingSession])
648 && $_SESSION[$loadingSession][
'CAMPAIGN_ID'] == $campaignId
651 $dateStart =
new Date($_SESSION[$loadingSession][
'DATE_START']);
652 $dateFinish =
new Date($_SESSION[$loadingSession][
'DATE_FINISH']);
653 $gaps = $_SESSION[$loadingSession][
'GAPS'];
657 $res =
array(
'error' =>
array(
'message' =>
'loading session broken'));
665 array(
"week_ago",
"month_ago",
"interval")
676 if(Date::isCorrect($period[
'_from']))
678 $dateStart =
new Date($period[
'_from']);
682 $res =
array(
'error' =>
array(
'message' => Loc::getMessage(
'SEO_ERROR_INCORRECT_DATE').
': '.$period[
'_from']));
686 if(Date::isCorrect($period[
'_to']))
688 $dateFinish =
new Date($period[
'_to']);
692 $res =
array(
'error' =>
array(
'message' => Loc::getMessage(
'SEO_ERROR_INCORRECT_DATE').
': '.$period[
'_to']));
696 $statsData = Adv\YandexStatTable::getCampaignStat(
702 $gaps = Adv\YandexStatTable::getMissedPeriods($statsData, $dateStart, $dateFinish);
706 $res =
array(
'error' =>
array(
'message' =>
'invalid interval type'));
719 $sessionGaps = $gaps;
720 foreach($gaps as
$key => $gap)
722 Adv\YandexStatTable::loadCampaignStat($campaignId, $gap[0], $gap[1]);
723 unset($sessionGaps[
$key]);
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),
738 $_SESSION[$loadingSession][
"GAPS"] = $sessionGaps;
745 catch(
Engine\YandexDirectException $e)
747 $res =
array(
'error' =>
array(
'message' => $e->getMessage(),
"code" => $e->getCode()));
756 unset($_SESSION[$loadingSession]);
759 if(!
$res[
'error'] ||
$res[
"code"] ==
Engine\YandexDirect::ERROR_NO_STATS)
761 $statsData = Adv\YandexStatTable::getCampaignStat(
767 $graphData =
array();
769 foreach($statsData as $date => $dayData)
771 $graphData[] =
array(
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'],
786 $res[
"data"] = $graphData;
787 $res[
"date_from"] = $dateStart->toString();
788 $res[
"date_to"] = $dateFinish->toString();
794 "session" => $loadingSession,
795 "amount" => $_SESSION[$loadingSession][
'ORIGINAL_CNT'],
796 "left" =>
count($_SESSION[$loadingSession][
"GAPS"]),
802 case 'banner_stat_detail':
803 $res =
array(
'error' =>
array(
'message' =>
'Wrong banners list'));
807 && Loader::includeModule(
'currency');
812 $bSingle = !is_array($bannerId);
815 $bannerId =
array($bannerId);
818 array_map(
'intval', $bannerId);
820 if(
count($bannerId) > 0)
822 $dbBanners = Adv\YandexBannerTable::getList(
array(
825 '=ENGINE_ID' =>
$engine->getId(),
826 '=ACTIVE' =>
Adv\YandexBannerTable::ACTIVE,
829 'ID',
'CAMPAIGN_ID',
'SETTINGS'
833 $bannerList =
array();
834 $campaignList =
array();
836 while($banner = $dbBanners->fetch())
838 $campaignList[] = $banner[
'CAMPAIGN_ID'];
839 $bannerList[$banner[
'ID']] = $banner;
842 $campaignList = array_unique($campaignList);
844 if(
count($campaignList) > 0)
846 $dbCampaigns = Adv\YandexCampaignTable::getList(
array(
848 '@ID' => $campaignList,
849 '=ENGINE_ID' =>
$engine->getId(),
850 '=ACTIVE' =>
Adv\YandexCampaignTable::ACTIVE,
857 $campaignList =
array();
858 while($campaign = $dbCampaigns->fetch())
860 $campaignList[$campaign[
'ID']] = $campaign;
863 $dateFinish =
new Date();
865 $bannerListToCheck =
array();
866 foreach($bannerList as
$key => $banner)
868 $banner[
'DATE_START'] = $campaignList[$banner[
'CAMPAIGN_ID']][
'SETTINGS'][
'StartDate'];
872 $banner[
'PROFIT'] = 0;
875 if($banner[
'DATE_START'])
877 $banner[
'DATE_START'] =
new Date($banner[
'DATE_START'],
'Y-m-d');
879 $banner[
'STATS_DATA'] = Adv\YandexStatTable::getBannerStat(
881 $banner[
'DATE_START'],
885 $gaps = Adv\YandexStatTable::getMissedPeriods($banner[
'STATS_DATA'], $banner[
'DATE_START'], $dateFinish);
889 $banner[
'LOADING_NEEDED'] =
true;
890 $bannerListToCheck[] = $banner[
'ID'];
894 $bannerListToCheck[] = $banner[
'ID'];
898 $bannerList[
$key] = $banner;
901 if($bSale &&
count($bannerListToCheck) > 0)
903 $orderStats = Adv\OrderTable::getList(
array(
905 '@BANNER_ID' => $bannerListToCheck,
906 '=PROCESSED' =>
Adv\OrderTable::PROCESSED,
911 'select' =>
array(
'BANNER_ID',
'BANNER_SUM'),
916 while($stat = $orderStats->fetch())
918 $bannerList[$stat[
'BANNER_ID']][
'PROFIT'] = $stat[
'BANNER_SUM'];
923 require(__DIR__.
"/../admin/tab/seo_search_yandex_direct_stat.php");
924 $res =
array(
'html' => ob_get_contents());
937 catch(
Engine\YandexDirectException $e)
941 'message' => $e->getMessage(),
942 'code' => $e->getCode(),
947 Header(
'Content-type: application/json; charset='.
LANG_CHARSET);
948 echo \Bitrix\Main\Web\Json::encode(
$res);
static isModuleInstalled($moduleName)
static CalcDates($field_id, $aInput, &$aRes)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
$_SERVER["DOCUMENT_ROOT"]
check_bitrix_sessid($varname='sessid')
GetMessage($name, $aReplace=null)
sortByColumn(array &$array, $columns, $callbacks='', $defaultValueIfNotSetValue=null, $preserveKeys=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</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."%"