Current Path : /var/www/html/clients/e-nkama.ru/e-nkama_bitrix/bitrix/modules/sender/admin/ |
Current File : /var/www/html/clients/e-nkama.ru/e-nkama_bitrix/bitrix/modules/sender/admin/statistics.php |
<? define("ADMIN_MODULE_NAME", "sender"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php"); if(!\Bitrix\Main\Loader::includeModule("sender")) ShowError(\Bitrix\Main\Localization\Loc::getMessage("MAIN_MODULE_NOT_INSTALLED")); IncludeModuleLangFile(__FILE__); $MAILING_ID = intval($_REQUEST['MAILING_ID']); $ID = intval($_REQUEST['ID']); $find_mailing_id = intval($_REQUEST['find_mailing_id']); if($find_mailing_id>0) $MAILING_ID= $find_mailing_id; $find_mailing_chain_id = intval($_REQUEST['find_mailing_chain_id']); if($find_mailing_chain_id>0) $ID = $find_mailing_chain_id; CJSCore::RegisterExt('sender_stat', array( 'js' => array( '/bitrix/js/main/amcharts/3.3/amcharts.js', '/bitrix/js/main/amcharts/3.3/funnel.js', '/bitrix/js/main/amcharts/3.3/serial.js', '/bitrix/js/main/amcharts/3.3/themes/light.js', ), 'rel' => array('ajax', "date") )); CJSCore::Init(array("sender_stat")); $POST_RIGHT = $APPLICATION->GetGroupRight("sender"); if($POST_RIGHT=="D") $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); $sTableID = "tbl_sender_statistics"; $oSort = new CAdminSorting($sTableID, "ID", "desc"); $lAdmin = new CAdminList($sTableID, $oSort); function CheckFilter() { global $FilterArr, $lAdmin; foreach ($FilterArr as $f) global $$f; return count($lAdmin->arFilterErrors)==0; } if($lAdmin->IsDefaultFilter()) { } $FilterArr = Array( "find_mailing_id", "find_mailing_chain_id", ); $lAdmin->InitFilter($FilterArr); if (CheckFilter()) { $arFilter = Array( "=POSTING.MAILING_CHAIN.ID" => $find_mailing_chain_id, ); if($find_mailing_id>0) $arFilter["=POSTING.MAILING_ID"] = $find_mailing_id; foreach($arFilter as $k => $v) if($v!==0 && empty($v)) unset($arFilter[$k]); } if($ID <= 0) { $postingDb = \Bitrix\Sender\PostingTable::getList(array( 'select' => array('MAILING_CHAIN_ID'), 'filter' => array('MAILING_ID' => $MAILING_ID, '!DATE_SENT' => null), 'order' => array('DATE_SENT' => 'DESC', 'DATE_CREATE' => 'DESC'), )); $arPosting = $postingDb->fetch(); if($arPosting) $ID = intval($arPosting['MAILING_CHAIN_ID']); } $statClickList = array(); $statResult = array( 'all' => 0, 'all_print' => 0, 'delivered' => 0, 'error' => 0, 'not_send' => 0, 'read' => 0, 'click' => 0, 'unsub' => 0, ); if($ID > 0) { $postingDb = \Bitrix\Sender\PostingTable::getList(array( 'select' => array( 'ID', 'DATE_CREATE', 'DATE_SENT', 'STATUS', 'MAILING_CHAIN_REITERATE' => 'MAILING_CHAIN.REITERATE', 'SUBJECT' => 'MAILING_CHAIN.SUBJECT', 'COUNT_SEND_ALL', 'COUNT_SEND_NONE', 'COUNT_SEND_ERROR', 'COUNT_SEND_SUCCESS', 'COUNT_SEND_DENY', 'COUNT_READ', 'COUNT_CLICK', 'COUNT_UNSUB' ), 'filter' => array('MAILING_CHAIN_ID' => $ID, '!DATE_SENT' => null), 'order' => array('DATE_SENT' => 'DESC', 'DATE_CREATE' => 'DESC'), 'limit' => 1 )); $arPosting = $postingDb->fetch(); // get reiterate postings statistic $arPostingReiterateList = array(); if (!empty($arPosting) && $arPosting['MAILING_CHAIN_REITERATE'] == 'Y') { $defaultDate = new \Bitrix\Main\Type\DateTime(); $postingReiterateList = array(); $postingReiterateDb = \Bitrix\Sender\PostingTable::getList(array( 'select' => array( 'ID', 'DATE_SENT', 'COUNT_SEND_ALL', 'COUNT_READ', 'COUNT_CLICK', 'COUNT_UNSUB' ), 'filter' => array( 'MAILING_CHAIN_ID' => $ID, '!STATUS' => \Bitrix\Sender\PostingTable::STATUS_NEW, ), 'order' => array('DATE_SENT' => 'DESC', 'ID' => 'DESC'), 'limit' => 50, )); while($postingReiterate = $postingReiterateDb->fetch()) { $postingReiterate['CNT'] = $postingReiterate['COUNT_SEND_ALL']; $postingReiterateList[$postingReiterate['ID']] = $postingReiterate; } foreach($postingReiterateList as $arPostingReiterate) { if(empty($arPostingReiterate['DATE_SENT'])) $arPostingReiterate['DATE_SENT'] = $defaultDate; $cntDivider = $arPostingReiterate['CNT'] > 0 ? $arPostingReiterate['CNT'] : 1; $cntDivider = $cntDivider/100; $defaultDateTimeStamp = $arPostingReiterate['DATE_SENT']->getTimestamp(); $arPostingReiterateList[$defaultDateTimeStamp] = array( 'date' => $arPostingReiterate['DATE_SENT']->format("d/m"), 'sent' => $arPostingReiterate['CNT'], 'read' => $arPostingReiterate['COUNT_READ'], 'click' => $arPostingReiterate['COUNT_CLICK'], 'unsub' => $arPostingReiterate['COUNT_UNSUB'], 'sent_prsnt' => '100', 'read_prsnt' => round($arPostingReiterate['COUNT_READ']/$cntDivider, 2), 'click_prsnt' => round($arPostingReiterate['COUNT_CLICK']/$cntDivider, 2), 'unsub_prsnt' => round($arPostingReiterate['COUNT_UNSUB']/$cntDivider, 2) ); } if(!empty($arPostingReiterateList)) { if (count($arPostingReiterateList) < 2) { $arPostingReiterateList = array(); } else { ksort($arPostingReiterateList); $arPostingReiterateList = array_values($arPostingReiterateList); } } } // get statistic by last posting if(!empty($arPosting)) { $statResult['all'] = ($arPosting['STATUS'] != \Bitrix\Sender\PostingTable::STATUS_ABORT ? $arPosting['COUNT_SEND_ALL'] : 0); $statResult['delivered'] = $arPosting['COUNT_SEND_SUCCESS']; $statResult['not_send'] = $arPosting['COUNT_SEND_NONE']; $statResult['error'] = $arPosting['COUNT_SEND_ERROR']; $statResult['read'] = $arPosting['COUNT_READ']; $statResult['click'] = $arPosting['COUNT_CLICK']; $statResult['unsub'] = $arPosting['COUNT_UNSUB']; $statResult['all_print'] = $statResult['all']; } // get url clicking statistic if(!empty($arPosting)) { $statClickDb = \Bitrix\Sender\PostingClickTable::getList(array( 'select' => array( 'URL', 'CNT' ), 'filter' => array('POSTING_ID' => $arPosting['ID']), 'runtime' => array( new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(%s)', 'ID'), ), 'group' => array('URL'), 'order' => array('CNT' => 'DESC'), 'limit' => 15 )); while($statClick = $statClickDb->fetch()) { $statClickList[] = $statClick; } } } $strError = ""; if(empty($arPosting)) { $strError = GetMessage("sender_stat_error_no_data"); } $lAdmin->BeginCustomContent(); if(!empty($strError)): CAdminMessage::ShowMessage($strError); else: if(intval($statResult['all'])<=0) { $statResult['all'] = 1; } $cntDivider = $statResult['all']/100; ?> <div class="sender_statistics"> <div class="sender-stat-cont"> <div class="sender-stat-left"> <?=GetMessage("sender_stat_report")?> <div class="sender-stat-info"> <div class="sender-stat-info-list"> <table> <tr><td class="sender-stat-info-list-head" colspan="2"><?=GetMessage("sender_stat_report_title")?> <?=htmlspecialcharsbx($arPosting['DATE_SENT'])?></td></tr> <tr> <td><?=GetMessage("sender_stat_report_subject")?></td> <td class="sender-stat-info-list-value"><?=htmlspecialcharsbx($arPosting['SUBJECT'])?></td> </tr> <tr> <td><?=GetMessage("sender_stat_report_date_create")?></td> <td class="sender-stat-info-list-value"><?=htmlspecialcharsbx($arPosting['DATE_CREATE'])?></td> </tr> <tr> <td><?=GetMessage("sender_stat_report_date_sent")?></td> <td class="sender-stat-info-list-value"><?=htmlspecialcharsbx($arPosting['DATE_SENT'])?></td> </tr> </table> </div> <div class="sender-stat-info-cnt"> <?if(!empty($statResult)):?> <table> <tr> <td><?=GetMessage("sender_stat_report_cnt_all")?></td> <td> <span><?=intval($statResult['all_print'])?> </span> (<?=round(intval($statResult['all_print'])/$cntDivider, 2)?>%) </td> </tr> <tr><td colspan="2"> </td></tr> <tr> <td class="sender-stat-info-cnt-metric-add"><?=GetMessage("sender_stat_report_cnt_in")?></td> <td></td> </tr> <tr> <td class="sender-stat-info-cnt-metric-name"><?=GetMessage("sender_stat_report_cnt_read")?></td> <td> <span><?=intval($statResult['read'])?> </span> (<?=round(intval($statResult['read'])/$cntDivider, 2)?>%) </td> </tr> <tr> <td class="sender-stat-info-cnt-metric-name"><?=GetMessage("sender_stat_report_cnt_click")?></td> <td> <span><?=intval($statResult['click'])?> </span> (<?=round(intval($statResult['click'])/$cntDivider, 2)?>%) </td> </tr> <tr> <td class="sender-stat-info-cnt-metric-name"><?=GetMessage("sender_stat_report_cnt_error")?></td> <td> <span><?=intval($statResult['error'])?> </span> (<?=round(intval($statResult['error'])/$cntDivider, 2)?>%) </td> </tr> <tr><td colspan="2"> </td></tr> <tr> <td><?=GetMessage("sender_stat_report_cnt_unsub")?></td> <td> <span><?=intval($statResult['unsub'])?> </span> (<?=round(intval($statResult['unsub'])/$cntDivider, 2)?>%) </td> </tr> </table> <?endif;?> </div> </div> </div> <div class="sender-stat-right"> <?=GetMessage("sender_stat_graph")?> <div id="chartdiv" class="sender-stat-graph"></div> <div class="container-fluid"></div> </div> </div> <script> <? $postingDataProvider = array(); $postingDataProvider[] = array( "title" => GetMessage("sender_stat_graph_all"), "value" => intval($statResult['all']), "value_print" => intval($statResult['all_print']), "value_prsnt" => round(intval($statResult['all_print'])/$cntDivider, 2) ); $paramList = array('read', 'click', 'unsub', 'error'); foreach($paramList as $paramName) { if(intval($statResult[$paramName])>0) { $postingDataProvider[] = array( "title" => GetMessage("sender_stat_graph_" . $paramName), "value" => intval($statResult[$paramName]), "value_print" => intval($statResult[$paramName]), "value_prsnt" => round(intval($statResult[$paramName])/$cntDivider, 2) ); } } ?> BX.ready(function(){ var chart = AmCharts.makeChart("chartdiv", { "type": "funnel", "theme": "light", "dataProvider": <?=CUtil::PhpToJSObject($postingDataProvider)?>, "balloon": { "fixedPosition": false }, "valueField": "value", "titleField": "title", "marginRight": 250, "marginLeft": 0, "startX": 0, "depth3D":0, "angle":0, "outlineAlpha": (BX.browser.IsIE()) ? 0 : 20, "outlineColor":"#FFFFFF", "outlineThickness": 10, "labelPosition": "right", "labelText": String.fromCharCode("0x200B")+" [[title]]: [[value_print]]", "balloonText": "[[title]]: [[value_prsnt]]%[[description]]" }); }); </script> <?if(!empty($arPostingReiterateList)):?> <div class="sender-stat-reiterate-cont"> <div class="sender-stat-reiterate-head"><?=GetMessage("sender_stat_graphperiod")?></div> <div id="reiteratechartdiv" class="sender-stat-reiterate-graph"></div> </div> <script> BX.ready(function(){ var reiterateChart = AmCharts.makeChart("reiteratechartdiv", { "type": "serial", "theme": "light", "pathToImages": "/bitrix/js/main/amcharts/3.3/images/", "legend": { "equalWidths": false, "periodValueText": "<?=GetMessage("sender_stat_graphperiod_all")?> [[value.sum]]", "position": "top", "valueAlign": "left", "valueWidth": 100 }, "dataProvider": <?=CUtil::PhpToJSObject($arPostingReiterateList);?>, "valueAxes": [{ "stackType": "regular", "gridAlpha": 0.07, "position": "left", "title": "<?=GetMessage("sender_stat_graphperiod_action")?>" }], "graphs": [{ "balloonText": "<?=GetMessage("sender_stat_graphperiod_cnt_all")?>: <span style='font-size:14px; color:#000000;'><b>[[value]]</b></span>", "fillAlphas": 0.6, "hidden": false, "lineAlpha": 0.4, "title": "<?=GetMessage("sender_stat_graphperiod_cnt_all")?>", "valueField": "sent" }, { "balloonText": "<?=GetMessage("sender_stat_graphperiod_cnt_read")?>: <span style='font-size:14px; color:#000000;'><b>[[read_prsnt]]%</b></span>", "fillAlphas": 0.6, "hidden": false, "lineAlpha": 0.4, "title": "<?=GetMessage("sender_stat_graphperiod_cnt_read")?>", "valueField": "read" }, { "balloonText": "<?=GetMessage("sender_stat_graphperiod_cnt_click")?>: <span style='font-size:14px; color:#000000;'><b>[[click_prsnt]]%</b></span>", "fillAlphas": 0.6, "hidden": false, "lineAlpha": 0.4, "title": "<?=GetMessage("sender_stat_graphperiod_cnt_click")?>", "valueField": "click" }, { "balloonText": "<?=GetMessage("sender_stat_graphperiod_cnt_unsub")?>: <span style='font-size:14px; color:#000000;'><b>[[unsub_prsnt]]%</b></span>", "fillAlphas": 0.6, "hidden": false, "lineAlpha": 0.4, "title": "<?=GetMessage("sender_stat_graphperiod_cnt_unsub")?>", "valueField": "unsub" }], "plotAreaBorderAlpha": 0, "marginTop": 10, "marginLeft": 0, "marginBottom": 0, "chartScrollbar": {}, "chartCursor": { "cursorAlpha": 0 }, "categoryAxis": { }, "categoryField": "date" }); }); </script> <?endif;?> <div class="sender-stat-reiterate-cont" style="margin-top: 0px;"> <div class="sender-stat-reiterate-head"><?=GetMessage("sender_stat_click_title")?></div> <div class="" style="width: 90%;"> <br> <table width="100%" class="list-table"> <tbody><tr class="heading"> <td align="left" width="20%"><?=GetMessage("sender_stat_click_cnt")?></td> <td style="text-align: left !important;"><?=GetMessage("sender_stat_click_link")?></td> </tr> <?foreach($statClickList as $clickItem):?> <tr> <td align="left"><?=htmlspecialcharsbx($clickItem['CNT'])?></td> <td align="left"><a href="<?=htmlspecialcharsbx($clickItem['URL'])?>"><?=htmlspecialcharsbx($clickItem['URL'])?></a></td> </tr> <?endforeach?> <?if(count($statClickList) <= 0):?> <tr> <td colspan="2" align="left"><?=GetMessage("sender_stat_click_no_data")?></td> </tr> <?endif;?> </tbody> </table> </div> </div> </div> <? endif; $lAdmin->EndCustomContent(); $lAdmin->CheckListMode(); $APPLICATION->SetTitle(GetMessage("sender_stat_title")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); $arMailingFilter = array(); $arFilterNames = array( GetMessage("sender_stat_flt_mailing") ); if($MAILING_ID > 0) { $arFilterNames[] = GetMessage("sender_stat_flt_mailing_chain"); $arMailingFilter['=ID'] = $MAILING_ID; } $oFilter = new CAdminFilter( $sTableID."_filter", $arFilterNames ); ?> <form name="find_form" method="get" action="<?echo $APPLICATION->GetCurPage();?>"> <?$oFilter->Begin();?> <tr> <td><?=GetMessage("sender_stat_flt_mailing")?>:</td> <td> <? $arr = array(); $mailingDb = \Bitrix\Sender\MailingTable::getList(array( 'select'=>array('REFERENCE'=>'NAME','REFERENCE_ID'=>'ID'), 'filter' => $arMailingFilter )); while($arMailing = $mailingDb->fetch()) { $arr['reference'][] = $arMailing['REFERENCE']; $arr['reference_id'][] = $arMailing['REFERENCE_ID']; } echo SelectBoxFromArray("find_mailing_id", $arr, $MAILING_ID, false, ""); ?> </td> </tr> <?if($MAILING_ID > 0):?> <tr> <td><?=GetMessage("sender_stat_flt_mailing_chain")?>:</td> <td valign="middle"> <? $arr = array(); $mailingChainDb = \Bitrix\Sender\MailingChainTable::getList(array( 'select' => array('REFERENCE'=>'SUBJECT','REFERENCE_ID'=>'ID'), 'filter' => array('MAILING_ID' => $MAILING_ID) )); while($arMailingChain = $mailingChainDb->fetch()) { $arr['reference'][] = $arMailingChain['REFERENCE']; $arr['reference_id'][] = $arMailingChain['REFERENCE_ID']; } echo SelectBoxFromArray("find_mailing_chain_id", $arr, $ID, false, ""); ?> </td> </tr> <?endif;?> <? $oFilter->Buttons(array("table_id"=>$sTableID,"url"=>$APPLICATION->GetCurPage(),"form"=>"find_form")); $oFilter->End(); ?> </form> <?$lAdmin->DisplayList();?> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");?>