RomanL 8 년 전
부모
커밋
b62f81fd22

+ 62 - 4
modules/boonex/analytics/classes/BxAnalyticsModule.php

@@ -128,13 +128,71 @@ class BxAnalyticsModule extends BxDolModule
         echo json_encode($aRv);
     }
           
-    public function actionGetReportsData($sModuleName, $sReportName, $sDateFrom, $sDateTo)
+    public function actionGetReportsData($sModuleName, $sReportName, $sDateFrom, $sDateTo, $sType = '')
     {
         if(!BxDolAcl::getInstance()->isMemberLevelInSet(192))
             return '';
         
-        header('Content-Type: application/json');
-              
+        if ($sType == 'csv'){
+            header('Content-type: text/csv');
+            header('Content-disposition: attachment;filename=' . $sModuleName . '_' . $sReportName . '_' . $sDateFrom . '_' . $sDateTo . '.csv');
+            echo $this->actionGetReportsDataCsv($sModuleName, $sReportName, $sDateFrom, $sDateTo);
+            
+        }
+        
+        if ($sType == ''){
+            header('Content-Type: application/json');
+            echo $this->actionGetReportsDataJson($sModuleName, $sReportName, $sDateFrom, $sDateTo);
+        }
+            
+    }
+    
+    private function actionGetReportsDataCsv($sModuleName, $sReportName, $sDateFrom, $sDateTo)
+    {
+        $sRv = '';
+        $sColumn = ";";
+        $sRow = "\n";
+        $sData = $this->actionGetReportsDataJson($sModuleName, $sReportName, $sDateFrom, $sDateTo);
+        $oRv = json_decode($sData, true); 
+        $oData = $oRv['data'];
+        $sCol1 = $oRv['strings'][0];
+        $iColumnCount = count($oData['datasets']);
+        $sRv .= $sCol1 . $sColumn;
+        foreach($oData['datasets'] as $aItem){
+            $sRv .= ($aItem['label'] != '' ? $aItem['label'] : $oRv['strings'][1]) . $sColumn;
+        }
+   
+        $sRv .= $sRow;
+        $iK = 0;
+        foreach($oData['datasets'][0]['data'] as $sDx => $aItemData){
+            $sTxt = "";
+            if (is_array($oData['datasets'][0]['data'][$sDx]))
+                $sTxt = $oData['datasets'][0]['data'][$sDx]['x'];
+            else
+                $sTxt = $oData['labels'][$sDx];
+            if (isset($oRv['links']) && count($oRv['links'])>0) {
+                $sTxt .= ' (' . $oRv['links'][$sDx] . ')';
+            }
+            
+            $sRv .= $sTxt . $sColumn;
+            for ($i = 0; $i < $iColumnCount; $i++) {
+                $sText = '';
+                if (is_array($aItemData)) {
+                    $sText = $aItemData['y'];
+                }
+                else {
+                    $sText = $aItemData;
+                }
+                $sRv .= $sText . $sColumn;
+            }
+            $sRv .= $sRow;
+            $iK++;
+        }
+        echo $sRv;
+    }
+    
+    private function actionGetReportsDataJson($sModuleName, $sReportName, $sDateFrom, $sDateTo)
+    { 
         $iDateFrom = strtotime($sDateFrom);
         $iDateTo = strtotime($sDateTo) + 86400;
         $sType = "bar";
@@ -330,7 +388,7 @@ class BxAnalyticsModule extends BxDolModule
             'strings' => $aValues['strings'],
         );
         
-        echo json_encode($aDataForChart);
+        return json_encode($aDataForChart);
     }
           
     public function getSelectedModules()

+ 2 - 1
modules/boonex/analytics/classes/BxAnalyticsTemplate.php

@@ -35,7 +35,8 @@ class BxAnalyticsTemplate extends BxBaseModGeneralTemplate
         $this->addCss(array('main.css', BX_DIRECTORY_PATH_MODULES . 'boonex/analytics/plugins/daterangepicker/|daterangepicker.css', BX_DIRECTORY_PATH_MODULES . 'boonex/analytics/plugins/datatables/|datatables.min.css'));
         return $this->getJsCode('analytics') . $this->parseHtmlByName('canvas.html', array(
              'bx_repeat:items' => $aModulesList2,
-             'interval' => $sDate
+             'interval' => $sDate,
+             'export_to_csv_title' => _t('_bx_analytics_txt_export_to_csv_title')
             ));
     }
 }

+ 2 - 1
modules/boonex/analytics/install/langs/en.xml

@@ -30,9 +30,10 @@
   <string name="_bx_analytics_txt_total_count"><![CDATA[{0} - total number]]></string>
   <string name="_bx_analytics_txt_count"><![CDATA[{0} - number]]></string>
   <string name="_bx_analytics_txt_accounts"><![CDATA[Accounts]]></string>
+  <string name="_bx_analytics_txt_export_to_csv_title"><![CDATA[Export to CSV file]]></string>
   <string name="_bx_analytics_txt_total_content"><![CDATA[All content]]></string>
   <string name="_bx_analytics_type_top_by_views_label"><![CDATA[Number of views]]></string>
   <string name="_bx_analytics_type_top_by_likes_label"><![CDATA[Number of likes]]></string>
   <string name="_bx_analytics_type_top_by_followers_label"><![CDATA[Number of followed]]></string>
-  <string name="_bx_analytics_type_top_by_activity_label"><![CDATA[Number of content]]></string>  
+  <string name="_bx_analytics_type_top_by_activity_label"><![CDATA[Number of content]]></string>
 </resources>

+ 4 - 2
modules/boonex/analytics/js/analytics.js

@@ -15,6 +15,7 @@ function BxAnalytics(oOptions) {
     this._sContainerDataSelector = '#' + this._sContainerId + " .bx_analytics_data";
     this._sCanvasSelector = '#' + this._sContainerId + " .bx_analytics_grath";
     this._sDatePickerSelector = '#' + this._sContainerId + " .bx_analytics_date_picker";
+    this._sExportUrlSelector = '#' + this._sContainerId + " .bx_analytics_export_url";
     this._sActionsUri = oOptions.sActionUri;
     this._aStrings = oOptions.aStrings;
     var $this = this;
@@ -58,8 +59,9 @@ BxAnalytics.prototype.reloadReports = function () {
 BxAnalytics.prototype.reloadData = function () {
     var $this = this;
     bx_loading($($this._sContainerDataSelector), true);
-    $.getJSON($this._sActionsUri + 'GetReportsData/' + $($this._sModuleSelector).val() + '/' + $($this._sReportSelector).val() + '/' + $($this._sDatePickerSelector).data('daterangepicker').startDate.format('YYYY-MM-DD') + '/' + $($this._sDatePickerSelector).data('daterangepicker').endDate.format('YYYY-MM-DD') + '/', function (oData) {
-
+    $sUrl = $this._sActionsUri + 'GetReportsData/' + $($this._sModuleSelector).val() + '/' + $($this._sReportSelector).val() + '/' + $($this._sDatePickerSelector).data('daterangepicker').startDate.format('YYYY-MM-DD') + '/' + $($this._sDatePickerSelector).data('daterangepicker').endDate.format('YYYY-MM-DD') + '/';
+    $($this._sExportUrlSelector).attr('href', $sUrl + 'csv/');
+    $.getJSON($sUrl, function (oData) {
         Chart.defaults.global.layout = {
             padding: {
                 left: 40,

+ 3 - 0
modules/boonex/analytics/template/canvas.html

@@ -16,4 +16,7 @@
             <table class="bx_analytics_table" width="100%"></table>
         </div>
     </div>
+    <p>
+        <a href="javascript:" class="bx_analytics_export_url">__export_to_csv_title__</a>
+    </p>
 </div>