1
0
AntonLV 9 жил өмнө
parent
commit
8e08920b45
64 өөрчлөгдсөн 495 нэмэгдсэн , 216 устгасан
  1. 19 61
      inc/classes/BxDolChart.php
  2. 88 0
      inc/classes/BxDolChartGrowth.php
  3. 77 0
      inc/classes/BxDolChartGrowthSpeed.php
  4. 2 2
      inc/design.inc.php
  5. 17 6
      inc/js/classes/BxDolChartGrowth.js
  6. 0 0
      install/sql/system.sql
  7. 5 0
      modules/boonex/albums/install/langs/en.xml
  8. 4 1
      modules/boonex/albums/install/sql/disable.sql
  9. 11 3
      modules/boonex/albums/install/sql/enable.sql
  10. 0 21
      modules/boonex/decorous/data/template/system/scripts/BxTemplChart.php
  11. 2 0
      modules/boonex/english/data/langs/system/en.xml
  12. 3 0
      modules/boonex/events/install/langs/en.xml
  13. 4 1
      modules/boonex/events/install/sql/disable.sql
  14. 8 2
      modules/boonex/events/install/sql/enable.sql
  15. 3 0
      modules/boonex/files/install/langs/en.xml
  16. 4 1
      modules/boonex/files/install/sql/disable.sql
  17. 8 2
      modules/boonex/files/install/sql/enable.sql
  18. 3 4
      modules/boonex/forum/install/langs/en.xml
  19. 5 1
      modules/boonex/forum/install/sql/disable.sql
  20. 9 2
      modules/boonex/forum/install/sql/enable.sql
  21. 3 0
      modules/boonex/groups/install/langs/en.xml
  22. 4 1
      modules/boonex/groups/install/sql/disable.sql
  23. 8 2
      modules/boonex/groups/install/sql/enable.sql
  24. 3 0
      modules/boonex/market/install/langs/en.xml
  25. 4 1
      modules/boonex/market/install/sql/disable.sql
  26. 8 2
      modules/boonex/market/install/sql/enable.sql
  27. 0 21
      modules/boonex/ocean/data/template/system/scripts/BxTemplChart.php
  28. 3 0
      modules/boonex/organizations/install/langs/en.xml
  29. 4 1
      modules/boonex/organizations/install/sql/disable.sql
  30. 8 2
      modules/boonex/organizations/install/sql/enable.sql
  31. 3 0
      modules/boonex/persons/install/langs/en.xml
  32. 4 1
      modules/boonex/persons/install/sql/disable.sql
  33. 8 2
      modules/boonex/persons/install/sql/enable.sql
  34. 3 0
      modules/boonex/polls/install/langs/en.xml
  35. 4 1
      modules/boonex/polls/install/sql/disable.sql
  36. 8 2
      modules/boonex/polls/install/sql/enable.sql
  37. 3 0
      modules/boonex/posts/install/langs/en.xml
  38. 4 1
      modules/boonex/posts/install/sql/disable.sql
  39. 8 2
      modules/boonex/posts/install/sql/enable.sql
  40. 0 21
      modules/boonex/protean/data/template/system/scripts/BxTemplChart.php
  41. 5 0
      modules/boonex/russian/data/langs/bx_albums/ru.xml
  42. 3 0
      modules/boonex/russian/data/langs/bx_events/ru.xml
  43. 3 0
      modules/boonex/russian/data/langs/bx_files/ru.xml
  44. 3 0
      modules/boonex/russian/data/langs/bx_forum/ru.xml
  45. 3 0
      modules/boonex/russian/data/langs/bx_groups/ru.xml
  46. 3 0
      modules/boonex/russian/data/langs/bx_market/ru.xml
  47. 3 0
      modules/boonex/russian/data/langs/bx_organizations/ru.xml
  48. 3 0
      modules/boonex/russian/data/langs/bx_persons/ru.xml
  49. 3 0
      modules/boonex/russian/data/langs/bx_polls/ru.xml
  50. 3 0
      modules/boonex/russian/data/langs/bx_posts/ru.xml
  51. 3 0
      modules/boonex/russian/data/langs/bx_shopify/ru.xml
  52. 3 0
      modules/boonex/russian/data/langs/bx_snipcart/ru.xml
  53. 2 0
      modules/boonex/russian/data/langs/system/ru.xml
  54. 3 0
      modules/boonex/shopify/install/langs/en.xml
  55. 5 1
      modules/boonex/shopify/install/sql/disable.sql
  56. 9 2
      modules/boonex/shopify/install/sql/enable.sql
  57. 3 0
      modules/boonex/snipcart/install/langs/en.xml
  58. 5 1
      modules/boonex/snipcart/install/sql/disable.sql
  59. 8 2
      modules/boonex/snipcart/install/sql/enable.sql
  60. 9 8
      template/chart_growth.html
  61. 4 1
      template/chart_stats.html
  62. 11 0
      template/css/chart.css
  63. 0 27
      template/scripts/BxBaseChart.php
  64. 36 7
      template/scripts/BxBaseChartServices.php

+ 19 - 61
inc/classes/BxDolChart.php

@@ -11,9 +11,12 @@
 class BxDolChart extends BxDolFactory implements iBxDolFactoryObject
 {
     protected $_oDb;
+
     protected $_sObject;
     protected $_aObject;
 
+    protected $_sStatusActive;
+
     /**
      * Constructor
      * @param $aObject array of chart options
@@ -26,6 +29,8 @@ class BxDolChart extends BxDolFactory implements iBxDolFactoryObject
 
         $this->_sObject = $aObject['object'];
         $this->_aObject = $aObject;
+
+        $this->_sStatusActive = 'active';
     }
 
     /**
@@ -42,7 +47,7 @@ class BxDolChart extends BxDolFactory implements iBxDolFactoryObject
         if(!$aObject || !is_array($aObject))
             return false;
 
-        $sClass = 'BxTemplChart';
+        $sClass = 'BxDolChart';
         if(!empty($aObject['class_name'])) {
             $sClass = $aObject['class_name'];
             if(!empty($aObject['class_file']))
@@ -64,7 +69,7 @@ class BxDolChart extends BxDolFactory implements iBxDolFactoryObject
         if(!$iFrom || !$iTo)
             return echoJson(array('error' => _t('_Error Occured')));
 
-        $aData = $this->getDataByInterval($iFrom, $iTo);
+        $aData = $this->_getDataByInterval($iFrom, $iTo);
         if(empty($aData) || !is_array($aData))
             return echoJson(array('error' => _t('_Empty')));
 
@@ -74,7 +79,7 @@ class BxDolChart extends BxDolFactory implements iBxDolFactoryObject
             'hide_date_range' => $this->_aObject['field_date_dt'] || $this->_aObject['field_date_ts'] ? false : true,
             'column_date' => $this->_aObject['column_date'] >= 0 ? $this->_aObject['column_date'] : false,
             'column_count' => $this->_aObject['column_count'] >= 0 ? $this->_aObject['column_count'] : false,
-            'type' => $this->_aObject['type'] ? $this->_aObject['type'] : 'AreaChart',
+            'type' => $this->_aObject['type'] ? $this->_aObject['type'] : 'line',
             'options' => $this->_aObject['options'] ? unserialize($this->_aObject['options']) : false,
         ));
     }
@@ -84,66 +89,19 @@ class BxDolChart extends BxDolFactory implements iBxDolFactoryObject
         return BxDolService::call('system', 'check_allowed_view', array($isPerformAction), 'TemplChartServices');
     }
 
-    public function getDataByInterval($iFrom, $iTo)
+    protected function _getQuery()
     {
-        // build query
-        $sQuery = $this->_aObject['query'] ? $this->_aObject['query'] : "SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} WHERE {field_date} >= :from AND {field_date} <= :to GROUP BY `period` ORDER BY {field_date} ASC";
-        $sQuery = bx_replace_markers($sQuery, array (
-            'field_date_formatted' => "DATE_FORMAT(" . ($this->_aObject['field_date_dt'] ? "`{$this->_aObject['field_date_dt']}`" : "FROM_UNIXTIME(`{$this->_aObject['field_date_ts']}`)") . ", '%Y-%m-%d')",
-            'object' => $this->_aObject['object'],
-            'table' => "`{$this->_aObject['table']}`",
-            'field_date' => "`" . ($this->_aObject['field_date_dt'] ? $this->_aObject['field_date_dt'] : $this->_aObject['field_date_ts']) . "`",
-        ));
-
-        $aBindings = array(
-            'from' => $this->_aObject['field_date_dt'] ? $this->_getDate($iFrom) . ' 00:00:00' : $iFrom,
-            'to' => $this->_aObject['field_date_dt'] ? $this->_getDate($iTo) . ' 23:59:59' : $iTo + 24*3600 - 1,
-        );
-        
-        // get data
-        if ($this->_aObject['column_date'] >= 0)
-            $aData = $this->_oDb->getAllWithKey($sQuery, $this->_aObject['column_date'], $aBindings, PDO::FETCH_NUM);
-        else
-            $aData = $this->_oDb->getAll($sQuery, array(), $aBindings, PDO::FETCH_NUM);
-
-        if (!$aData)
-            return false;
-    
-        // fill in missed days and convert values to numbers
-        if ($this->_aObject['column_date'] >= 0) {
-            $aDataSlice = array_slice($aData, 0, 1);
-            $iColumnsNum = count(array_pop($aDataSlice));
-            for ($i = $iFrom ; $i <= ($iTo + 24*3600 - 1); $i += 24*60*60) {
-                $sDate = $this->_getDate($i);
-                $aRow = array ();
-                for ($j = 0 ; $j < $iColumnsNum ; ++$j) {
-                    $v = isset($aData[$sDate]) ? (int)$aData[$sDate][$j] : 0;
-                    $aRow[$j] = ($j == $this->_aObject['column_date'] ? $sDate : $v);
-                }
-                $aData[$sDate] = $aRow;
-            }
-        } 
-        else
-            foreach ($aData as $k => $v)
-                foreach ($aData[$k] as $kk => $vv)
-                    if ($kk > 0)
-                        $aData[$k][$kk] = (int)$aData[$k][$kk];
-
-        // return values only
-        ksort($aData);
-        return array_values($aData);
-    }
-
-    public function getDataByStatus()
-    {
-        // build query
-        $sQuery = $this->_aObject['query'] ? $this->_aObject['query'] : "SELECT COUNT(*) AS {object} FROM {table} WHERE 1" . (!empty($this->_aObject['query_status']) ? $this->_aObject['query_status'] : '');
-        $sQuery = bx_replace_markers($sQuery, array (
-            'object' => $this->_aObject['object'],
-            'table' => "`{$this->_aObject['table']}`",
-        ));
+        if(!empty($this->_aObject['query'])) 
+            return $this->_aObject['query'];
+
+        $sWhereClause = "";
+        if(!empty($this->_aObject['field_status'])) {
+            $aStatusFields = explode(',', $this->_aObject['field_status']);
+            foreach($aStatusFields as $sStatusField)
+                $sWhereClause .= " AND `" . $sStatusField . "`='" . $this->_sStatusActive . "'";
+        }
 
-        return $this->_oDb->getOne($sQuery);
+        return "SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} WHERE 1 " . $sWhereClause . " {where_inteval} GROUP BY `period` ORDER BY {field_date} ASC";
     }
 
     protected function _getTimestamp($sDate, $isNowIfError = false)

+ 88 - 0
inc/classes/BxDolChartGrowth.php

@@ -0,0 +1,88 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaCore UNA Core
+ * @{
+ */
+
+
+class BxDolChartGrowth extends BxDolChart
+{
+    protected function __construct($aObject)
+    {
+        parent::__construct($aObject);
+    }
+
+    protected function _getDataByInterval($iFrom, $iTo)
+    {
+        $sFieldDate = $this->_aObject['field_date_dt'] ? $this->_aObject['field_date_dt'] : $this->_aObject['field_date_ts'];
+        $aMarkers = array (
+        	'field_date' => "`" . $sFieldDate . "`",
+            'field_date_formatted' => "DATE_FORMAT(" . ($this->_aObject['field_date_dt'] ? "`{$this->_aObject['field_date_dt']}`" : "FROM_UNIXTIME(`{$this->_aObject['field_date_ts']}`)") . ", '%Y-%m-%d')",
+            'object' => $this->_aObject['object'],
+            'table' => "`{$this->_aObject['table']}`",
+            'where_inteval' => "AND `" . $this->_aObject['table'] . "`.`" . $sFieldDate . "` >= :from AND `" . $this->_aObject['table'] . "`.`" . $sFieldDate . "` <= :to"
+        );
+
+        // build query
+        $sQuery = $this->_getQuery();
+        $sQueryInterval = bx_replace_markers($sQuery, $aMarkers);
+
+        $aBindings = array(
+            'from' => $this->_aObject['field_date_dt'] ? $this->_getDate($iFrom) . ' 00:00:00' : $iFrom,
+            'to' => $this->_aObject['field_date_dt'] ? $this->_getDate($iTo) . ' 23:59:59' : $iTo + 24*3600 - 1,
+        );
+
+        // get data
+        if ($this->_aObject['column_date'] >= 0)
+            $aData = $this->_oDb->getAllWithKey($sQueryInterval, $this->_aObject['column_date'], $aBindings, PDO::FETCH_NUM);
+        else
+            $aData = $this->_oDb->getAll($sQueryInterval, array(), $aBindings, PDO::FETCH_NUM);
+
+        if (!$aData)
+            return false;
+
+        // get interval first value
+        $aMarkers['where_inteval'] = "AND `" . $this->_aObject['table'] . "`.`" . $sFieldDate . "` < :from";
+        $aDataInit = $this->_oDb->getAll(bx_replace_markers($sQuery, $aMarkers), array(
+            'from' => $aBindings['from']
+        ));
+
+        $iCountInit = 0;
+        foreach($aDataInit as $aDataItem) 
+            $iCountInit += $aDataItem[$this->_aObject['object']];
+
+        // fill in missed days and convert values to numbers
+        if ($this->_aObject['column_date'] >= 0) {
+            $iCountCurrent = 0;
+            $aDataSlice = array_slice($aData, 0, 1);
+            $iColumnsNum = count(array_pop($aDataSlice));
+            for ($i = $iFrom ; $i <= ($iTo + 24*3600 - 1); $i += 24*60*60) {
+                $sDate = $this->_getDate($i);
+                $aRow = array ();
+                for ($j = 0 ; $j < $iColumnsNum ; ++$j) {
+                    if($this->_aObject['column_date'] != $j) {
+                        $iCountCurrent += isset($aData[$sDate]) ? (int)$aData[$sDate][$j] : 0;
+                        $aRow[$j] = $iCountInit + $iCountCurrent;
+                    }
+                    else
+                        $aRow[$j] = $sDate;
+                }
+                $aData[$sDate] = $aRow;
+            }
+        } 
+        else
+            foreach ($aData as $k => $v)
+                foreach ($aData[$k] as $kk => $vv)
+                    if ($kk > 0)
+                        $aData[$k][$kk] = (int)$aData[$k][$kk];
+
+        // return values only
+        ksort($aData);
+        return array_values($aData);
+    }
+}
+
+/** @} */

+ 77 - 0
inc/classes/BxDolChartGrowthSpeed.php

@@ -0,0 +1,77 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    UnaCore UNA Core
+ * @{
+ */
+
+
+class BxDolChartGrowthSpeed extends BxDolChart
+{
+    protected function __construct($aObject)
+    {
+        parent::__construct($aObject);
+    }
+
+    protected function _getDataByInterval($iFrom, $iTo)
+    {
+        $sFieldDate = $this->_aObject['field_date_dt'] ? $this->_aObject['field_date_dt'] : $this->_aObject['field_date_ts'];
+        $aMarkers = array (
+        	'field_date' => "`" . $sFieldDate . "`",
+            'field_date_formatted' => "DATE_FORMAT(" . ($this->_aObject['field_date_dt'] ? "`{$this->_aObject['field_date_dt']}`" : "FROM_UNIXTIME(`{$this->_aObject['field_date_ts']}`)") . ", '%Y-%m-%d')",
+            'object' => $this->_aObject['object'],
+            'table' => "`{$this->_aObject['table']}`",
+            'where_inteval' => "AND `" . $this->_aObject['table'] . "`.`" . $sFieldDate . "` >= :from AND `" . $this->_aObject['table'] . "`.`" . $sFieldDate . "` <= :to"
+        );
+
+        // build query
+        $sQuery = $this->_getQuery();
+        $sQuery = bx_replace_markers($sQuery, $aMarkers);
+
+        $aBindings = array(
+            'from' => $this->_aObject['field_date_dt'] ? $this->_getDate($iFrom) . ' 00:00:00' : $iFrom,
+            'to' => $this->_aObject['field_date_dt'] ? $this->_getDate($iTo) . ' 23:59:59' : $iTo + 24*3600 - 1,
+        );
+
+        // get data
+        if ($this->_aObject['column_date'] >= 0)
+            $aData = $this->_oDb->getAllWithKey($sQuery, $this->_aObject['column_date'], $aBindings, PDO::FETCH_NUM);
+        else
+            $aData = $this->_oDb->getAll($sQuery, array(), $aBindings, PDO::FETCH_NUM);
+
+        if (!$aData)
+            return false;
+
+        // fill in missed days and convert values to numbers
+        if ($this->_aObject['column_date'] >= 0) {
+            $iCountCurrent = 0;
+            $aDataSlice = array_slice($aData, 0, 1);
+            $iColumnsNum = count(array_pop($aDataSlice));
+            for ($i = $iFrom ; $i <= ($iTo + 24*3600 - 1); $i += 24*60*60) {
+                $sDate = $this->_getDate($i);
+                $aRow = array ();
+                for ($j = 0 ; $j < $iColumnsNum ; ++$j) {
+                    if($this->_aObject['column_date'] != $j) {
+                        $aRow[$j] = isset($aData[$sDate]) ? (int)$aData[$sDate][$j] : 0;
+                    }
+                    else
+                        $aRow[$j] = $sDate;
+                }
+                $aData[$sDate] = $aRow;
+            }
+        } 
+        else
+            foreach ($aData as $k => $v)
+                foreach ($aData[$k] as $kk => $vv)
+                    if ($kk > 0)
+                        $aData[$k][$kk] = (int)$aData[$k][$kk];
+
+        // return values only
+        ksort($aData);
+        return array_values($aData);
+    }
+}
+
+/** @} */

+ 2 - 2
inc/design.inc.php

@@ -116,9 +116,9 @@ function getVersionComment()
 
 function getSiteStatUser()
 {
-    $sqlQuery = "SELECT `Name` as `name`, `Title` as `capt`, `UserQuery` as `query`, `UserLink` as `link`, `IconName` as `icon`, `AdminQuery` as `adm_query`, `AdminLink` as `adm_link` FROM `sys_stat_site` ORDER BY `StatOrder`";
+    $sqlQuery = "SELECT * FROM `sys_statistics` ORDER BY `order`";
 
-    $aStat = BxDolDb::getInstance()->fromCache('sys_stat_site', 'getAllWithKey', $sqlQuery, 'name');
+    $aStat = BxDolDb::getInstance()->fromCache('sys_statistics', 'getAllWithKey', $sqlQuery, 'name');
 
     return "<pre>TODO: nice output\n" . print_r($aStat, true) . '</pre>';
 }

+ 17 - 6
inc/js/classes/BxDolChartGrowth.js

@@ -20,6 +20,9 @@ function BxDolChartGrowth (oOptions) {
 
     this._sDateFormat = 'yy-mm-dd';
     this._oChart = null;
+    this._oChartOptionsDefault = {};
+    this._sChartColorBorder = undefined == oOptions.sChartColorBorder ? 'rgba(74, 144, 226, 1.0)' : oOptions.sChartColorBorder;
+    this._sChartColorBackground = undefined == oOptions.sChartColorBackground ? 'rgba(74, 144, 226, 0.4)' : oOptions.sChartColorBackground;
 
     var $this = this;
     $(document).ready(function() {
@@ -30,7 +33,9 @@ function BxDolChartGrowth (oOptions) {
 BxDolChartGrowth.prototype.loadData = function()
 {
 	var $this = this;
-	var oGraphWrp = $('#' + this._sKeyGraph).parents('div:first');
+	var oGraph = $('#' + this._sKeyGraph);
+	var oGraphWrp = oGraph.parents('div:first');
+	var oGraphErr = oGraphWrp.find('.bx-chart-growth-graph-error').hide();
 
     $('#' + this._sKeyObjects).attr('disabled', true);
 
@@ -50,7 +55,10 @@ BxDolChartGrowth.prototype.loadData = function()
             bx_loading(oGraphWrp, false);
 
             if(oData.error != undefined) {
-                alert(oData.error);
+            	if($this._oChart)
+                	$this._oChart.destroy();
+
+            	oGraphErr.html(oData.error).show();
                 return;
             } 
 
@@ -64,6 +72,7 @@ BxDolChartGrowth.prototype.loadData = function()
             	$('#' + $this._sKeyDateTo).parents('.bx-form-element-wrapper:first').fadeIn();
             }
 
+            var oChartOptions = oData.options || {};
             var oChartLabels = new Array();
             var oChartData = new Array();
 
@@ -82,16 +91,18 @@ BxDolChartGrowth.prototype.loadData = function()
             if($this._oChart)
             	$this._oChart.destroy();
 
-	    	$this._oChart = new Chart($('#' + $this._sKeyGraph), {
-	    		type: 'line',
+	    	$this._oChart = new Chart(oGraph, {
+	    		type: oData.type != undefined ? oData.type : 'line',
 	    		data: {
 	            	labels: oChartLabels,
 	            	datasets: [{
 	            		label: oData.title,
-	            		data: oChartData
+	            		data: oChartData,
+	            		borderColor: $this._sChartColorBorder,
+	            		backgroundColor: $this._sChartColorBackground
 	            	}]
 	            },
-	    		options: {}
+	    		options: $.extend({}, $this._oChartOptionsDefault, oChartOptions)
 	    	});
     	},
     	'json'

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
install/sql/system.sql


+ 5 - 0
modules/boonex/albums/install/langs/en.xml

@@ -179,6 +179,11 @@
     <string name="_bx_albums_grid_action_err_delete"><![CDATA[Cannot delete the selected album(s).]]></string>
     <string name="_bx_albums_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_albums_chart_growth"><![CDATA[Albums: Growth]]></string>
+    <string name="_bx_albums_chart_growth_speed"><![CDATA[Albums: Growth Speed]]></string>
+    <string name="_bx_albums_chart_growth_media"><![CDATA[Images: Growth]]></string>
+    <string name="_bx_albums_chart_growth_speed_media"><![CDATA[Images: Growth Speed]]></string>
+
     <string name="_bx_albums_txt_all_entries_by"><![CDATA[<a href="{0}">All Albums by {1} ({2})</a>]]></string>
     <string name="_bx_albums_txt_sample_single"><![CDATA[album]]></string>
     <string name="_bx_albums_txt_sample_single_with_article"><![CDATA[an album]]></string>

+ 4 - 1
modules/boonex/albums/install/sql/disable.sql

@@ -33,8 +33,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` IN ('bx_albums', 'bx_albums_
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_albums');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_albums%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` IN ('bx_albums', 'bx_albums_media');
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_albums%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_albums_administration', 'bx_albums_common');

+ 11 - 3
modules/boonex/albums/install/sql/enable.sql

@@ -363,11 +363,19 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_albums', 'bx_albums_administration', 'id', '', ''),
 ('bx_albums', 'bx_albums_common', 'id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_albums', 'bx_albums', '_bx_albums', 'page.php?i=albums-home', 'picture-o col-blue1', 'SELECT COUNT(*) FROM `bx_albums_albums` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1),
+('bx_albums', 'bx_albums_media', '_bx_albums_media', '', 'picture-o col-blue1', 'SELECT COUNT(*) FROM `bx_albums_files` WHERE 1', @iMaxOrderStats + 2);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_albums', '_bx_albums', 'bx_albums_albums', 'added', '', '', ' AND {table}.`status` = ''active'' AND {table}.`status_admin` = ''active''', 1, @iMaxOrderCharts + 1, '', ''),
-('bx_albums_media', '_bx_albums_media', 'bx_albums_files', 'added', '', '', '', 1, @iMaxOrderCharts + 2, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_albums_growth', '_bx_albums_chart_growth', 'bx_albums_albums', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_albums_growth_speed', '_bx_albums_chart_growth_speed', 'bx_albums_albums', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', ''),
+('bx_albums_growth_media', '_bx_albums_chart_growth_media', 'bx_albums_files', 'added', '', '', '', 1, @iMaxOrderCharts + 3, 'BxDolChartGrowth', ''),
+('bx_albums_growth_speed_media', '_bx_albums_chart_growth_speed_media', 'bx_albums_files', 'added', '', '', '', 1, @iMaxOrderCharts + 4, 'BxDolChartGrowthSpeed', '');
 
 -- GRIDS: moderation tools
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 0 - 21
modules/boonex/decorous/data/template/system/scripts/BxTemplChart.php

@@ -1,21 +0,0 @@
-<?php defined('BX_DOL') or die('hack attempt');
-/**
- * Copyright (c) UNA, Inc - https://una.io
- * MIT License - https://opensource.org/licenses/MIT
- *
- * @defgroup    UnaTemplate UNA Template Classes
- * @{
- */
-
-/**
- * @see BxDolChart
- */
-class BxTemplChart extends BxBaseChart
-{
-    public function __construct ($aObject, $oTemplate = false)
-    {
-        parent::__construct ($aObject, $oTemplate);
-    }
-}
-
-/** @} */

+ 2 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -1598,6 +1598,8 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_chart_growth_object"><![CDATA[Display]]></string>
 	<string name="_sys_chart_growth_date_from"><![CDATA[From]]></string>
 	<string name="_sys_chart_growth_date_to"><![CDATA[To]]></string>
+	<string name="_sys_chart_accounts_growth"><![CDATA[Accounts: Growth]]></string>
+	<string name="_sys_chart_accounts_growth_speed"><![CDATA[Accounts: Growth Speeed]]></string>
 	<string name="_sys_close"><![CDATA[Close]]></string>
 	<string name="_sys_conn_err_connection_already_exists"><![CDATA[Connection already exists]]></string>
 	<string name="_sys_conn_err_connection_does_not_exists"><![CDATA[Connection doesn't exist]]></string>

+ 3 - 0
modules/boonex/events/install/langs/en.xml

@@ -240,6 +240,9 @@
 	<string name="_bx_events_grid_action_err_delete"><![CDATA[Cannot delete the selected event(s).]]></string>
 	<string name="_bx_events_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_events_chart_growth"><![CDATA[Events: Growth]]></string>
+    <string name="_bx_events_chart_growth_speed"><![CDATA[Events: Growth Speed]]></string>
+
     <string name="_bx_events_txt_account_pending"><![CDATA[This event is pending approval, please wait until it is activated.]]></string>
     <string name="_bx_events_txt_account_suspended"><![CDATA[This event is suspended.]]></string>
     <string name="_bx_events_txt_N_fans"><![CDATA[{0} members]]></string>

+ 4 - 1
modules/boonex/events/install/sql/disable.sql

@@ -54,8 +54,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` = 'bx_events';
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_events');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_events%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_events';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_events%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_events_administration', 'bx_events_moderation', 'bx_events_common', 'bx_events_fans');

+ 8 - 2
modules/boonex/events/install/sql/enable.sql

@@ -369,10 +369,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_events', 'bx_events_administration', 'td`.`id', '', ''),
 ('bx_events', 'bx_events_common', 'td`.`id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_events', 'bx_events', '_bx_events', 'page.php?i=events-home', 'calendar col-red2', 'SELECT COUNT(*) FROM `bx_events_data` AS `td` LEFT JOIN `sys_profiles` AS `tp` ON `td`.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_events'' WHERE 1 AND `tp`.`status`=''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_events', '_bx_events', 'bx_events_data', 'added', '', '', '', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_events_growth', '_bx_events_chart_growth', 'bx_events_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_events'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_events_growth_speed', '_bx_events_chart_growth_speed', 'bx_events_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_events'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRID: connections
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 3 - 0
modules/boonex/files/install/langs/en.xml

@@ -167,6 +167,9 @@
     <string name="_bx_files_grid_action_err_delete"><![CDATA[Cannot delete the selected file(s).]]></string>
     <string name="_bx_files_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_files_chart_growth"><![CDATA[Files: Growth]]></string>
+    <string name="_bx_files_chart_growth_speed"><![CDATA[Files: Growth Speed]]></string>
+
     <string name="_bx_files_pre_lists_cats"><![CDATA[File categories]]></string>
     <string name="_bx_files_cat_documentation"><![CDATA[Documentation]]></string>
     <string name="_bx_files_cat_presentation"><![CDATA[Presentation]]></string>

+ 4 - 1
modules/boonex/files/install/sql/disable.sql

@@ -36,8 +36,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` IN ('bx_files', 'bx_files_cm
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_files');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_files%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_files';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_files%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_files_administration', 'bx_files_common');

+ 8 - 2
modules/boonex/files/install/sql/enable.sql

@@ -338,10 +338,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_files', 'bx_files_administration', 'id', '', ''),
 ('bx_files', 'bx_files_common', 'id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_files', 'bx_files', '_bx_files', 'page.php?i=files-home', 'file-o col-red3', 'SELECT COUNT(*) FROM `bx_files_main` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_files', '_bx_files', 'bx_files_main', 'added', '', '', ' AND {table}.`status` = ''active'' AND {table}.`status_admin` = ''active''', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_files_growth', '_bx_files_chart_growth', 'bx_files_main', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_files_growth_speed', '_bx_files_chart_growth_speed', 'bx_files_main', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRIDS: moderation tools
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 3 - 4
modules/boonex/forum/install/langs/en.xml

@@ -231,14 +231,13 @@
 	<string name="_bx_forum_grid_err_show_to"><![CDATA[Cannot update category.]]></string>
 	<string name="_bx_forum_grid_btn_save"><![CDATA[Save]]></string>
 	<string name="_bx_forum_grid_btn_cancel"><![CDATA[Cancel]]></string>
-	
-    <string name="_bx_forum_grid_txt_"><![CDATA[]]></string>
-    <string name="_bx_forum_grid_txt_"><![CDATA[]]></string>
-    <string name="_bx_forum_grid_txt_"><![CDATA[]]></string>
 
 	<string name="_bx_forum_pre_lists_cats"><![CDATA[Forum categories]]></string>
     <string name="_bx_forum_cat_General"><![CDATA[General]]></string>
 
+    <string name="_bx_forum_chart_growth"><![CDATA[Discussions: Growth]]></string>
+    <string name="_bx_forum_chart_growth_speed"><![CDATA[Discussions: Growth Speed]]></string>
+    
     <string name="_bx_forum_draft_saving_error"><![CDATA[Draft saving error!]]></string>
     <string name="_bx_forum_draft_saved_success"><![CDATA[Draft saved.]]></string>
     <string name="_bx_forum_err_not_found"><![CDATA[Discussion wasn't found.]]></string>

+ 5 - 1
modules/boonex/forum/install/sql/disable.sql

@@ -77,8 +77,12 @@ DELETE FROM `sys_objects_content_info` WHERE `name` IN (@sName, 'bx_forum_cmts')
 DELETE FROM `sys_content_info_grids` WHERE `object` IN (@sName);
 
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_forum%';
+
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = @sName;
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_forum%';
 
 
 -- ALERTS

+ 9 - 2
modules/boonex/forum/install/sql/enable.sql

@@ -469,10 +469,17 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 (@sName, 'bx_forum_common', 'id', '', '');
 
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+(@sName, @sName, '_bx_forum', 'page.php?i=discussions-home', 'comments-o col-blue2', 'SELECT COUNT(*) FROM `bx_forum_discussions` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-(@sName, '_bx_forum', 'bx_forum_discussions', 'added', '', '', ' AND {table}.`status` = ''active'' AND {table}.`status_admin` = ''active''', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_forum_growth', '_bx_forum_chart_growth', 'bx_forum_discussions', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_forum_growth_speed', '_bx_forum_chart_growth_speed', 'bx_forum_discussions', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 
 -- ALERTS

+ 3 - 0
modules/boonex/groups/install/langs/en.xml

@@ -209,6 +209,9 @@
 	<string name="_bx_groups_grid_action_err_delete"><![CDATA[Cannot delete the selected group(s).]]></string>
 	<string name="_bx_groups_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_groups_chart_growth"><![CDATA[Groups: Growth]]></string>
+    <string name="_bx_groups_chart_growth_speed"><![CDATA[Groups: Growth Speed]]></string>
+
     <string name="_bx_groups_txt_account_pending"><![CDATA[This group is pending approval, please wait until it is activated.]]></string>
     <string name="_bx_groups_txt_account_suspended"><![CDATA[This group is suspended.]]></string>
     <string name="_bx_groups_txt_N_fans"><![CDATA[{0} members]]></string>

+ 4 - 1
modules/boonex/groups/install/sql/disable.sql

@@ -54,8 +54,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` = 'bx_groups';
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_groups');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_groups%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_groups';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_groups%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_groups_administration', 'bx_groups_moderation', 'bx_groups_common', 'bx_groups_fans');

+ 8 - 2
modules/boonex/groups/install/sql/enable.sql

@@ -354,10 +354,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_groups', 'bx_groups_administration', 'td`.`id', '', ''),
 ('bx_groups', 'bx_groups_common', 'td`.`id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_groups', 'bx_groups', '_bx_groups', 'page.php?i=groups-home', 'group col-red2', 'SELECT COUNT(*) FROM `bx_groups_data` AS `td` LEFT JOIN `sys_profiles` AS `tp` ON `td`.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_groups'' WHERE 1 AND `tp`.`status`=''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_groups', '_bx_groups', 'bx_groups_data', 'added', '', '', '', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_groups_growth', '_bx_groups_chart_growth', 'bx_groups_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_groups'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_groups_growth_speed', '_bx_groups_chart_growth_speed', 'bx_groups_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_groups'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRID: connections
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 3 - 0
modules/boonex/market/install/langs/en.xml

@@ -267,6 +267,9 @@
 	<string name="_bx_market_grid_txt_lcs_type_recurring"><![CDATA[recurring]]></string>
 	<string name="_bx_market_grid_txt_lcs_never"><![CDATA[never]]></string>
 
+    <string name="_bx_market_chart_growth"><![CDATA[Market: Growth]]></string>
+    <string name="_bx_market_chart_growth_speed"><![CDATA[Market: Growth Speed]]></string>
+    
     <string name="_bx_market_pre_lists_cats"><![CDATA[Product categories]]></string>
     <string name="_bx_market_cat_administration"><![CDATA[Administration]]></string>
     <string name="_bx_market_cat_adult"><![CDATA[Adult]]></string>

+ 4 - 1
modules/boonex/market/install/sql/disable.sql

@@ -39,8 +39,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` IN ('bx_market', 'bx_market_
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_market');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_market%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_market';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_market%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_market_administration', 'bx_market_common', 'bx_market_licenses');

+ 8 - 2
modules/boonex/market/install/sql/enable.sql

@@ -415,10 +415,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_market', 'bx_market_administration', 'id', '', ''),
 ('bx_market', 'bx_market_common', 'id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_market', 'bx_market', '_bx_market', 'page.php?i=products-home', 'shopping-cart col-green3', 'SELECT COUNT(*) FROM `bx_market_products` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_market', '_bx_market', 'bx_market_products', 'added', '', '', ' AND {table}.`status` = ''active'' AND {table}.`status_admin` = ''active''', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_market_growth', '_bx_market_chart_growth', 'bx_market_products', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_market_growth_speed', '_bx_market_chart_growth_speed', 'bx_market_products', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRIDS: moderation tools
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 0 - 21
modules/boonex/ocean/data/template/system/scripts/BxTemplChart.php

@@ -1,21 +0,0 @@
-<?php defined('BX_DOL') or die('hack attempt');
-/**
- * Copyright (c) UNA, Inc - https://una.io
- * MIT License - https://opensource.org/licenses/MIT
- *
- * @defgroup    UnaTemplate UNA Template Classes
- * @{
- */
-
-/**
- * @see BxDolChart
- */
-class BxTemplChart extends BxBaseChart
-{
-    public function __construct ($aObject, $oTemplate = false)
-    {
-        parent::__construct ($aObject, $oTemplate);
-    }
-}
-
-/** @} */

+ 3 - 0
modules/boonex/organizations/install/langs/en.xml

@@ -212,6 +212,9 @@
 	<string name="_bx_orgs_grid_action_err_delete"><![CDATA[Cannot delete the selected organization(s).]]></string>
 	<string name="_bx_orgs_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_orgs_chart_growth"><![CDATA[Organizations: Growth]]></string>
+    <string name="_bx_orgs_chart_growth_speed"><![CDATA[Organizations: Growth Speed]]></string>
+    
     <string name="_bx_orgs_txt_account_pending"><![CDATA[This profile is pending approval, please wait until it is activated.]]></string>
     <string name="_bx_orgs_txt_account_suspended"><![CDATA[This profile is suspended.]]></string>
 

+ 4 - 1
modules/boonex/organizations/install/sql/disable.sql

@@ -48,8 +48,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` = 'bx_organizations';
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_organizations');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_organizations%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_organizations';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_organizations%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_organizations_administration', 'bx_organizations_moderation', 'bx_organizations_common');

+ 8 - 2
modules/boonex/organizations/install/sql/enable.sql

@@ -368,10 +368,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_organizations', 'bx_organizations_administration', 'td`.`id', '', ''),
 ('bx_organizations', 'bx_organizations_common', 'td`.`id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_organizations', 'bx_organizations', '_bx_orgs', 'page.php?i=organizations-home', 'briefcase col-red2', 'SELECT COUNT(*) FROM `bx_organizations_data` AS `td` LEFT JOIN `sys_profiles` AS `tp` ON `td`.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_organizations'' WHERE 1 AND `tp`.`status`=''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_organizations', '_bx_orgs', 'bx_organizations_data', 'added', '', '', '', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_organizations_growth', '_bx_orgs_chart_growth', 'bx_organizations_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_organizations'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_organizations_growth_speed', '_bx_orgs_chart_growth_speed', 'bx_organizations_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_organizations'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRIDS: administration
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 3 - 0
modules/boonex/persons/install/langs/en.xml

@@ -208,6 +208,9 @@
     <string name="_bx_persons_grid_action_err_delete"><![CDATA[Cannot delete the selected person(s).]]></string>
     <string name="_bx_persons_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_persons_chart_growth"><![CDATA[Persons: Growth]]></string>
+    <string name="_bx_persons_chart_growth_speed"><![CDATA[Persons: Growth Speed]]></string>
+
     <string name="_bx_persons_txt_account_pending"><![CDATA[This profile is pending approval, please wait until it is activated.]]></string>
     <string name="_bx_persons_txt_account_suspended"><![CDATA[This profile is suspended.]]></string>
     <string name="_bx_persons_txt_N_friends"><![CDATA[{0} friends]]></string>

+ 4 - 1
modules/boonex/persons/install/sql/disable.sql

@@ -45,8 +45,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` = 'bx_persons';
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_persons');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_persons%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_persons';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_persons%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_persons_administration', 'bx_persons_common');

+ 8 - 2
modules/boonex/persons/install/sql/enable.sql

@@ -354,10 +354,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_persons', 'bx_persons_administration', 'td`.`id', '', ''),
 ('bx_persons', 'bx_persons_common', 'td`.`id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_persons', 'bx_persons', '_bx_persons', 'page.php?i=persons-home', 'user col-blue3', 'SELECT COUNT(*) FROM `bx_persons_data` AS `td` LEFT JOIN `sys_profiles` AS `tp` ON `td`.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_persons'' WHERE 1 AND `tp`.`status`=''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_persons', '_bx_persons', 'bx_persons_data', 'added', '', '', '', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_persons_growth', '_bx_persons_chart_growth', 'bx_persons_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_persons'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_persons_growth_speed', '_bx_persons_chart_growth_speed', 'bx_persons_data', 'added', '', '', 'SELECT {field_date_formatted} AS `period`, COUNT(*) AS {object} FROM {table} LEFT JOIN `sys_profiles` AS `tp` ON {table}.`id` = `tp`.`content_id` AND `tp`.`type`=''bx_persons'' WHERE 1 AND `tp`.`status`=''active'' {where_inteval} GROUP BY `period` ORDER BY {table}.{field_date} ASC', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRIDS: administration
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 3 - 0
modules/boonex/polls/install/langs/en.xml

@@ -170,6 +170,9 @@
     <string name="_bx_polls_grid_action_err_delete"><![CDATA[Cannot delete the selected poll(s).]]></string>
     <string name="_bx_polls_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_polls_chart_growth"><![CDATA[Polls: Growth]]></string>
+    <string name="_bx_polls_chart_growth_speed"><![CDATA[Polls: Growth Speed]]></string>
+
     <string name="_bx_polls_pre_lists_cats"><![CDATA[Poll categories]]></string>
     <string name="_bx_polls_cat_beauty_and_style"><![CDATA[Beauty & Style]]></string>
     <string name="_bx_polls_cat_business_and_money"><![CDATA[Business & Money]]></string>

+ 4 - 1
modules/boonex/polls/install/sql/disable.sql

@@ -36,8 +36,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` IN ('bx_polls', 'bx_polls_cm
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_polls');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_polls%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_polls';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_polls%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_polls_administration', 'bx_polls_common');

+ 8 - 2
modules/boonex/polls/install/sql/enable.sql

@@ -334,10 +334,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_polls', 'bx_polls_administration', 'id', '', ''),
 ('bx_polls', 'bx_polls_common', 'id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_polls', 'bx_polls', '_bx_polls', 'page.php?i=polls-home', 'tasks col-green1', 'SELECT COUNT(*) FROM `bx_polls_entries` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_polls', '_bx_polls', 'bx_polls_entries', 'added', '', '', ' AND {table}.`status` = ''active'' AND {table}.`status_admin` = ''active''', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_polls_growth', '_bx_polls_chart_growth', 'bx_polls_entries', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_polls_growth_speed', '_bx_polls_chart_growth_speed', 'bx_polls_entries', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRIDS: moderation tools
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 3 - 0
modules/boonex/posts/install/langs/en.xml

@@ -163,6 +163,9 @@
     <string name="_bx_posts_grid_action_err_delete"><![CDATA[Cannot delete the selected post(s).]]></string>
     <string name="_bx_posts_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_posts_chart_growth"><![CDATA[Posts: Growth]]></string>
+    <string name="_bx_posts_chart_growth_speed"><![CDATA[Posts: Growth Speed]]></string>
+
     <string name="_bx_posts_pre_lists_cats"><![CDATA[Post categories]]></string>
     <string name="_bx_posts_cat_Animals_Pets"><![CDATA[Animals & Pets]]></string>
     <string name="_bx_posts_cat_Architecture"><![CDATA[Architecture]]></string>

+ 4 - 1
modules/boonex/posts/install/sql/disable.sql

@@ -36,8 +36,11 @@ DELETE FROM `sys_objects_content_info` WHERE `name` IN ('bx_posts', 'bx_posts_cm
 
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_posts');
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_posts%';
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_posts';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_posts%';
 
 -- GRIDS
 DELETE FROM `sys_objects_grid` WHERE `object` IN ('bx_posts_administration', 'bx_posts_common');

+ 8 - 2
modules/boonex/posts/install/sql/enable.sql

@@ -337,10 +337,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_posts', 'bx_posts_administration', 'id', '', ''),
 ('bx_posts', 'bx_posts_common', 'id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_posts', 'bx_posts', '_bx_posts', 'page.php?i=posts-home', 'file-text col-red3', 'SELECT COUNT(*) FROM `bx_posts_posts` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_posts', '_bx_posts', 'bx_posts_posts', 'added', '', '', ' AND {table}.`status` = ''active'' AND {table}.`status_admin` = ''active''', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_posts_growth', '_bx_posts_chart_growth', 'bx_posts_posts', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_posts_growth_speed', '_bx_posts_chart_growth_speed', 'bx_posts_posts', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRIDS: moderation tools
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 0 - 21
modules/boonex/protean/data/template/system/scripts/BxTemplChart.php

@@ -1,21 +0,0 @@
-<?php defined('BX_DOL') or die('hack attempt');
-/**
- * Copyright (c) UNA, Inc - https://una.io
- * MIT License - https://opensource.org/licenses/MIT
- *
- * @defgroup    UnaTemplate UNA Template Classes
- * @{
- */
-
-/**
- * @see BxDolChart
- */
-class BxTemplChart extends BxBaseChart
-{
-    public function __construct ($aObject, $oTemplate = false)
-    {
-        parent::__construct ($aObject, $oTemplate);
-    }
-}
-
-/** @} */

+ 5 - 0
modules/boonex/russian/data/langs/bx_albums/ru.xml

@@ -179,6 +179,11 @@
     <string name="_bx_albums_grid_action_err_delete"><![CDATA[Невозможно удалить выбранный(ные) альбом(ы).]]></string>
     <string name="_bx_albums_grid_txt_account_manager"><![CDATA[Перенаправить в управление аккаунтом.]]></string>
 
+    <string name="_bx_albums_chart_growth"><![CDATA[Альбомы: Развитие]]></string>
+    <string name="_bx_albums_chart_growth_speed"><![CDATA[Альбомы: Скорость развития]]></string>
+    <string name="_bx_albums_chart_growth_media"><![CDATA[Изображения: Развитие]]></string>
+    <string name="_bx_albums_chart_growth_speed_media"><![CDATA[Изображения: Скорость развития]]></string>
+
     <string name="_bx_albums_txt_all_entries_by"><![CDATA[<a href="{0}">Все альбомы от {1} ({2})</a>]]></string>
     <string name="_bx_albums_txt_sample_single"><![CDATA[альбом]]></string>
     <string name="_bx_albums_txt_sample_single_with_article"><![CDATA[альбом]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_events/ru.xml

@@ -239,6 +239,9 @@
 	<string name="_bx_events_grid_action_err_delete"><![CDATA[Невозможно удалить выбранные события.]]></string>
 	<string name="_bx_events_grid_txt_account_manager"><![CDATA[Перенаправить в управление аккаунтом.]]></string>
 
+    <string name="_bx_events_chart_growth"><![CDATA[События: Развитие]]></string>
+    <string name="_bx_events_chart_growth_speed"><![CDATA[События: Скорость развития]]></string>
+
     <string name="_bx_events_txt_account_pending"><![CDATA[Это событие ожидает одобрения. Пожалуйста, дождитесь ее активации.]]></string>
     <string name="_bx_events_txt_account_suspended"><![CDATA[Это событие заблокировано.]]></string>
     <string name="_bx_events_txt_N_fans"><![CDATA[{0} участников]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_files/ru.xml

@@ -167,6 +167,9 @@
     <string name="_bx_files_grid_action_err_delete"><![CDATA[Ошибка удаления выбранных файлов]]></string>
     <string name="_bx_files_grid_txt_account_manager"><![CDATA[Перейти к управлению учетной записи]]></string>
 
+    <string name="_bx_files_chart_growth"><![CDATA[Файлы: Развитие]]></string>
+    <string name="_bx_files_chart_growth_speed"><![CDATA[Файлы: Скорость развития]]></string>
+
     <string name="_bx_files_pre_lists_cats"><![CDATA[Категории файлов]]></string>
     <string name="_bx_files_cat_documentation"><![CDATA[Документация]]></string>
     <string name="_bx_files_cat_presentation"><![CDATA[Презентация]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_forum/ru.xml

@@ -235,6 +235,9 @@
     <string name="_bx_forum_pre_lists_cats"><![CDATA[Категории обсуждений]]></string>
     <string name="_bx_forum_cat_General"><![CDATA[Общие]]></string>
 
+    <string name="_bx_forum_chart_growth"><![CDATA[Обсуждения: Развитие]]></string>
+    <string name="_bx_forum_chart_growth_speed"><![CDATA[Обсуждения: Скорость развития]]></string>
+
     <string name="_bx_forum_draft_saving_error"><![CDATA[Ошибка сохранения черновика!]]></string>
     <string name="_bx_forum_draft_saved_success"><![CDATA[Черновик сохранён.]]></string>
     <string name="_bx_forum_err_not_found"><![CDATA[Обсуждение не найдено.]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_groups/ru.xml

@@ -209,6 +209,9 @@
 	<string name="_bx_groups_grid_action_err_delete"><![CDATA[Невозможно удалить выбранную(ные) группу(ы).]]></string>
 	<string name="_bx_groups_grid_txt_account_manager"><![CDATA[Перенаправить в управление аккаунтом.]]></string>
 
+    <string name="_bx_groups_chart_growth"><![CDATA[Группы: Развитие]]></string>
+    <string name="_bx_groups_chart_growth_speed"><![CDATA[Группы: Скорость развития]]></string>
+
     <string name="_bx_groups_txt_account_pending"><![CDATA[Эта группа ожидает одобрения. Пожалуйста, дождитесь ее активации.]]></string>
     <string name="_bx_groups_txt_account_suspended"><![CDATA[Эта группа заблокирована.]]></string>
     <string name="_bx_groups_txt_N_fans"><![CDATA[{0} участников]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_market/ru.xml

@@ -267,6 +267,9 @@
 	<string name="_bx_market_grid_txt_lcs_type_recurring"><![CDATA[подписка]]></string>
 	<string name="_bx_market_grid_txt_lcs_never"><![CDATA[никогда]]></string>
 
+    <string name="_bx_market_chart_growth"><![CDATA[Рынок: Развитие]]></string>
+    <string name="_bx_market_chart_growth_speed"><![CDATA[Рынок: Скорость развития]]></string>
+
     <string name="_bx_market_pre_lists_cats"><![CDATA[Категории продуктов]]></string>
     <string name="_bx_market_cat_administration"><![CDATA[Администрирование]]></string>
     <string name="_bx_market_cat_adult"><![CDATA[Для взрослых]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_organizations/ru.xml

@@ -212,6 +212,9 @@
 	<string name="_bx_orgs_grid_action_err_delete"><![CDATA[Невозможно удалить выбранную(ные) организацию(ции).]]></string>
 	<string name="_bx_orgs_grid_txt_account_manager"><![CDATA[Перенаправить в Управление аккаунтом.]]></string>
 
+    <string name="_bx_orgs_chart_growth"><![CDATA[Организации: Развитие]]></string>
+    <string name="_bx_orgs_chart_growth_speed"><![CDATA[Организации: Скорость развития]]></string>
+
     <string name="_bx_orgs_txt_account_pending"><![CDATA[Этот профиль ожидает одобрения. Пожалуйста, дождитесь его активации.]]></string>
     <string name="_bx_orgs_txt_account_suspended"><![CDATA[Этот профиль заблокирован.]]></string>
 

+ 3 - 0
modules/boonex/russian/data/langs/bx_persons/ru.xml

@@ -209,6 +209,9 @@
     <string name="_bx_persons_grid_action_err_delete"><![CDATA[Невозможно удалить выбранную(ные) персону(ны).]]></string>
     <string name="_bx_persons_grid_txt_account_manager"><![CDATA[Перенаправить в Управление аккаунтом.]]></string>
 
+    <string name="_bx_persons_chart_growth"><![CDATA[Персоны: Развитие]]></string>
+    <string name="_bx_persons_chart_growth_speed"><![CDATA[Персоны: Скорость развития]]></string>
+
     <string name="_bx_persons_txt_account_pending"><![CDATA[Этот профиль ожидает одобрения. Пожалуйста, дождитесь его активации.]]></string>
     <string name="_bx_persons_txt_account_suspended"><![CDATA[Этот профиль заблокирован.]]></string>
     <string name="_bx_persons_txt_N_friends"><![CDATA[Друзья: {0}]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_polls/ru.xml

@@ -169,6 +169,9 @@
     <string name="_bx_polls_grid_action_err_delete"><![CDATA[Невозможно удалить выбранное(ные) голосование(ния).]]></string>
     <string name="_bx_polls_grid_txt_account_manager"><![CDATA[Перенаправить в Управление аккаунтом.]]></string>
 
+    <string name="_bx_polls_chart_growth"><![CDATA[Голосования: Развитие]]></string>
+    <string name="_bx_polls_chart_growth_speed"><![CDATA[Голосования: Скорость развития]]></string>
+
     <string name="_bx_polls_pre_lists_cats"><![CDATA[Категории голосований]]></string>
     <string name="_bx_polls_cat_beauty_and_style"><![CDATA[Красота и стиль]]></string>
     <string name="_bx_polls_cat_business_and_money"><![CDATA[Бизнес и деньги]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_posts/ru.xml

@@ -163,6 +163,9 @@
     <string name="_bx_posts_grid_action_err_delete"><![CDATA[Невозможно удалить выбранную(ные) публикацию(ции).]]></string>
     <string name="_bx_posts_grid_txt_account_manager"><![CDATA[Перенаправить в Управление аккаунтом.]]></string>
 
+    <string name="_bx_posts_chart_growth"><![CDATA[Публикации: Развитие]]></string>
+    <string name="_bx_posts_chart_growth_speed"><![CDATA[Публикации: Скорость развития]]></string>
+
     <string name="_bx_posts_pre_lists_cats"><![CDATA[Категории публикаций]]></string>
     <string name="_bx_posts_cat_Animals_Pets"><![CDATA[Животные]]></string>
     <string name="_bx_posts_cat_Architecture"><![CDATA[Архитектура]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_shopify/ru.xml

@@ -183,6 +183,9 @@
     <string name="_bx_shopify_grid_action_err_delete"><![CDATA[Невозможно удалить выбранный(ные) товар(ы).]]></string>
     <string name="_bx_shopify_grid_txt_account_manager"><![CDATA[Перенаправить в Управление аккаунтом.]]></string>
 
+    <string name="_bx_shopify_chart_growth"><![CDATA[Shopify: Развитие]]></string>
+    <string name="_bx_shopify_chart_growth_speed"><![CDATA[Shopify: Скорость развития]]></string>
+
     <string name="_bx_shopify_pre_lists_cats"><![CDATA[Категории товаров]]></string>
     <string name="_bx_shopify_cat_automotive_and_industrial"><![CDATA[Автомобили и Техника]]></string>
     <string name="_bx_shopify_cat_beauty_health_food"><![CDATA[Красота, Здоровье и Еда]]></string>

+ 3 - 0
modules/boonex/russian/data/langs/bx_snipcart/ru.xml

@@ -196,6 +196,9 @@
     <string name="_bx_snipcart_grid_action_err_delete"><![CDATA[Невозможно удалить выбранный(ные) товар(ы).]]></string>
     <string name="_bx_snipcart_grid_txt_account_manager"><![CDATA[Перенаправить в Управление аккаунтом.]]></string>
 
+    <string name="_bx_snipcart_chart_growth"><![CDATA[Snipcart: Развитие]]></string>
+    <string name="_bx_snipcart_chart_growth_speed"><![CDATA[Snipcart: Скорость развития]]></string>
+
     <string name="_bx_snipcart_pre_lists_cats"><![CDATA[Категории товаров]]></string>
     <string name="_bx_snipcart_cat_automotive_and_industrial"><![CDATA[Автомобили и Техника]]></string>
     <string name="_bx_snipcart_cat_beauty_health_food"><![CDATA[Красота, Здоровье и Еда]]></string>

+ 2 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -1596,6 +1596,8 @@
 	<string name="_sys_chart_growth_object"><![CDATA[Вывести]]></string>
     <string name="_sys_chart_growth_date_from"><![CDATA[С]]></string>
     <string name="_sys_chart_growth_date_to"><![CDATA[По]]></string>
+    <string name="_sys_chart_accounts_growth"><![CDATA[Аккаунты: Развитие]]></string>
+    <string name="_sys_chart_accounts_growth_speed"><![CDATA[Аккаунты: Скорость развития]]></string>
 	<string name="_sys_close"><![CDATA[Закрыть]]></string>
 	<string name="_sys_conn_err_connection_already_exists"><![CDATA[Связь уже существует]]></string>
 	<string name="_sys_conn_err_connection_does_not_exists"><![CDATA[Связь не существует]]></string>

+ 3 - 0
modules/boonex/shopify/install/langs/en.xml

@@ -183,6 +183,9 @@
     <string name="_bx_shopify_grid_action_err_delete"><![CDATA[Cannot delete the selected product(s).]]></string>
     <string name="_bx_shopify_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_shopify_chart_growth"><![CDATA[Shopify: Growth]]></string>
+    <string name="_bx_shopify_chart_growth_speed"><![CDATA[Shopify: Growth Speed]]></string>
+
     <string name="_bx_shopify_pre_lists_cats"><![CDATA[Goods categories]]></string>
     <string name="_bx_shopify_cat_automotive_and_industrial"><![CDATA[Automotive & Industrial]]></string>
     <string name="_bx_shopify_cat_beauty_health_food"><![CDATA[Beauty, Health & Food]]></string>

+ 5 - 1
modules/boonex/shopify/install/sql/disable.sql

@@ -45,8 +45,12 @@ DELETE FROM `sys_objects_content_info` WHERE `name` IN ('bx_shopify', 'bx_shopif
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_shopify');
 
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_shopify%';
+
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_shopify';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_shopify%';
 
 
 -- GRIDS

+ 9 - 2
modules/boonex/shopify/install/sql/enable.sql

@@ -317,10 +317,17 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_shopify', 'bx_shopify_common', 'id', '', '');
 
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_shopify', 'bx_shopify', '_bx_shopify', 'page.php?i=shopify-home', 'shopping-cart col-green1', 'SELECT COUNT(*) FROM `bx_shopify_entries` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_shopify', '_bx_shopify', 'bx_shopify_entries', 'added', '', '', ' AND {table}.`status` = ''active'' AND {table}.`status_admin` = ''active''', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_shopify_growth', '_bx_shopify_chart_growth', 'bx_shopify_entries', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_shopify_growth_speed', '_bx_shopify_chart_growth_speed', 'bx_shopify_entries', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 
 -- GRIDS: moderation tools

+ 3 - 0
modules/boonex/snipcart/install/langs/en.xml

@@ -196,6 +196,9 @@
     <string name="_bx_snipcart_grid_action_err_delete"><![CDATA[Cannot delete the selected product(s).]]></string>
     <string name="_bx_snipcart_grid_txt_account_manager"><![CDATA[Redirect to manage account.]]></string>
 
+    <string name="_bx_snipcart_chart_growth"><![CDATA[Snipcart: Growth]]></string>
+    <string name="_bx_snipcart_chart_growth_speed"><![CDATA[Snipcart: Growth Speed]]></string>
+
     <string name="_bx_snipcart_pre_lists_cats"><![CDATA[Goods categories]]></string>
     <string name="_bx_snipcart_cat_automotive_and_industrial"><![CDATA[Automotive & Industrial]]></string>
     <string name="_bx_snipcart_cat_beauty_health_food"><![CDATA[Beauty, Health & Food]]></string>

+ 5 - 1
modules/boonex/snipcart/install/sql/disable.sql

@@ -45,8 +45,12 @@ DELETE FROM `sys_objects_content_info` WHERE `name` IN ('bx_snipcart', 'bx_snipc
 DELETE FROM `sys_content_info_grids` WHERE `object` IN ('bx_snipcart');
 
 
+-- STATS
+DELETE FROM `sys_statistics` WHERE `name` LIKE 'bx_snipcart%';
+
+
 -- CHARTS
-DELETE FROM `sys_objects_chart` WHERE `object` = 'bx_snipcart';
+DELETE FROM `sys_objects_chart` WHERE `object` LIKE 'bx_snipcart%';
 
 
 -- GRIDS

+ 8 - 2
modules/boonex/snipcart/install/sql/enable.sql

@@ -318,10 +318,16 @@ INSERT INTO `sys_content_info_grids` (`object`, `grid_object`, `grid_field_id`,
 ('bx_snipcart', 'bx_snipcart_administration', 'id', '', ''),
 ('bx_snipcart', 'bx_snipcart_common', 'id', '', '');
 
+-- STATS
+SET @iMaxOrderStats = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_statistics`);
+INSERT INTO `sys_statistics` (`module`, `name`, `title`, `link`, `icon`, `query`, `order`) VALUES 
+('bx_snipcart', 'bx_snipcart', '_bx_snipcart', 'page.php?i=snipcart-home', 'shopping-cart col-green1', 'SELECT COUNT(*) FROM `bx_snipcart_entries` WHERE 1 AND `status` = ''active'' AND `status_admin` = ''active''', @iMaxOrderStats + 1);
+
 -- CHARTS
 SET @iMaxOrderCharts = (SELECT IFNULL(MAX(`order`), 0) FROM `sys_objects_chart`);
-INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `query`, `query_status`, `active`, `order`, `class_name`, `class_file`) VALUES
-('bx_snipcart', '_bx_snipcart', 'bx_snipcart_entries', 'added', '', '', ' AND {table}.`status` = ''active'' AND {table}.`status_admin` = ''active''', 1, @iMaxOrderCharts + 1, '', '');
+INSERT INTO `sys_objects_chart` (`object`, `title`, `table`, `field_date_ts`, `field_date_dt`, `field_status`, `query`, `active`, `order`, `class_name`, `class_file`) VALUES
+('bx_snipcart_growth', '_bx_snipcart_chart_growth', 'bx_snipcart_entries', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 1, 'BxDolChartGrowth', ''),
+('bx_snipcart_growth_speed', '_bx_snipcart_chart_growth_speed', 'bx_snipcart_entries', 'added', '', 'status,status_admin', '', 1, @iMaxOrderCharts + 2, 'BxDolChartGrowthSpeed', '');
 
 -- GRIDS: moderation tools
 INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `field_id`, `field_order`, `field_active`, `paginate_url`, `paginate_per_page`, `paginate_simple`, `paginate_get_start`, `paginate_get_per_page`, `filter_fields`, `filter_fields_translatable`, `filter_mode`, `sorting_fields`, `sorting_fields_translatable`, `visible_for_levels`, `override_class_name`, `override_class_file`) VALUES

+ 9 - 8
template/chart_growth.html

@@ -1,14 +1,15 @@
 <div class="bx-chart-growth">
 	<div class="bx-chart-growth-controls bx-def-margin-bottom">__controls__</div>
 	<div class="bx-chart-growth-graph bx-def-border">
+        <div class="bx-chart-growth-graph-error bx-def-font-align-center"></div>
 		<canvas id="bx_chart_growth_graph" width="100%"></canvas>
-		<script type="text/javascript">
-			var oBxDolChartGrowth = new BxDolChartGrowth({
-				sObjName: 'oBxDolChartGrowth',
-				sRootUrl: '<bx_url_root />',
-				sDateFrom: '__date_from__',
-				sDateTo: '__date_to__'
-			});
-		</script>
 	</div>
+	<script type="text/javascript">
+        var oBxDolChartGrowth = new BxDolChartGrowth({
+            sObjName: 'oBxDolChartGrowth',
+            sRootUrl: '<bx_url_root />',
+            sDateFrom: '__date_from__',
+            sDateTo: '__date_to__'
+        });
+    </script>
 </div>

+ 4 - 1
template/chart_stats.html

@@ -2,7 +2,10 @@
     <div class="bx-chart-stats-items bx-def-margin-bottom">
         <bx_repeat:items>
             <div class="bx-cs-item bx-def-padding-thd-leftright bx-def-box-sizing">
-                <span class="bx-def-font-h3">__value__</span> __title__
+                <bx_if:show_link>
+                    <a href="__link__"><span class="bx-def-font-h3">__value__</span> __title__</a>
+                </bx_if:show_link>
+                <bx_if:show_text><span class="bx-def-font-h3">__value__</span> __title__</bx_if:show_text>
             </div>
         </bx_repeat:items>
     </div>

+ 11 - 0
template/css/chart.css

@@ -5,10 +5,20 @@
 
 /*+++ Chart Growth: Graph +++*/
 .bx-chart-growth-graph {
+	position: relative;
 	height: 15rem;
 	background-color: #ffffff;
 }
 
+.bx-chart-growth-graph-error {
+	position: absolute;
+	display: none;
+	top: 0px;
+	left: 0px;
+	width: 100%;
+	height: 100%;
+    line-height: 15rem;
+}
 
 /*--- Chart Stats ---*/
 div.bx-chart-stats-items,
@@ -20,6 +30,7 @@ div.bx-chart-stats-graph {
 /*+++ Chart Stats: Info +++*/
 div.bx-chart-stats-items {
 	position: relative;
+	min-width: 25rem;
 }
 div.bx-chart-stats-items div.bx-cs-item {
 	display: inline-block;

+ 0 - 27
template/scripts/BxBaseChart.php

@@ -1,27 +0,0 @@
-<?php defined('BX_DOL') or die('hack attempt');
-/**
- * Copyright (c) UNA, Inc - https://una.io
- * MIT License - https://opensource.org/licenses/MIT
- *
- * @defgroup    UnaBaseView UNA Base Representation Classes
- * @{
- */
-
-/**
- * Chart representation.
- * @see BxDolChart
- */
-class BxBaseChart extends BxDolChart
-{
-    public function __construct ($aObject, $oTemplate)
-    {
-        parent::__construct ($aObject);
-
-        if ($oTemplate)
-            $this->_oTemplate = $oTemplate;
-        else
-            $this->_oTemplate = BxDolTemplate::getInstance();
-    }
-}
-
-/** @} */

+ 36 - 7
template/scripts/BxBaseChartServices.php

@@ -107,19 +107,48 @@ class BxBaseChartServices extends BxDol
         $aTmplVarsItems = array();
         $aTmplVarsDataLabels = $aTmplVarsDataSet = array();
 
-        $aObjects = BxDolChartQuery::getChartObjects();
-        foreach($aObjects as $aObject) {
-            $sTitle = _t($aObject['title']);
-            $sValue = BxDolChart::getObjectInstance($aObject['object'])->getDataByStatus();
+        $oDb = BxDolDb::getInstance();
+
+        $sQuery = "SELECT * FROM `sys_statistics` WHERE 1 ORDER BY `order`";
+        $aItems = $oDb->getAll($sQuery);
+
+        foreach($aItems as $aItem) {
+            $sTitle = _t($aItem['title']);
+
+            $iValue = 0;
+            if(!empty($aItem['query']))
+                $iValue = (int)$oDb->getOne($aItem['query']);
+            else if(BxDolRequest::serviceExists($aItem['module'], 'get_query_statistics'))
+                $iValue = (int)BxDolService::call($aItem['module'], 'get_query_statistics', array($aItem));
+
+            $sLink = '';
+            if(!empty($aItem['link']))
+                $sLink = BxDolPermalinks::getInstance()->permalink($aItem['link']);
+            $bLink = !empty($sLink);
 
             $aTmplVarsItems[] = array(
-                'title' => $sTitle,
-            	'value' => $sValue,
+            	'title' => $sTitle,
+                'value' => $iValue,
+                'bx_if:show_link' => array(
+                    'condition' => $bLink,
+                    'content' => array(
+                        'link' => $sLink,
+                        'title' => $sTitle,
+                		'value' => $iValue,
+                    )
+                ),
+                'bx_if:show_text' => array(
+                    'condition' => !$bLink,
+                    'content' => array(
+                        'title' => $sTitle,
+                		'value' => $iValue,
+                    )
+                )
             );
 
             $aTmplVarsDataLabels[] = $sTitle;
 
-            $aTmplVarsDataSet['data'][] = $sValue;
+            $aTmplVarsDataSet['data'][] = $iValue;
             $aTmplVarsDataSet['backgroundColor'][] = '#' . dechex(rand(0x000000, 0xFFFFFF));
         }
 

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно