1
0

BxDolChart.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php defined('BX_DOL') or die('hack attempt');
  2. /**
  3. * Copyright (c) UNA, Inc - https://una.io
  4. * MIT License - https://opensource.org/licenses/MIT
  5. *
  6. * @defgroup UnaCore UNA Core
  7. * @{
  8. */
  9. class BxDolChart extends BxDolFactory implements iBxDolFactoryObject
  10. {
  11. protected $_oDb;
  12. protected $_sObject;
  13. protected $_aObject;
  14. protected $_sStatusActive;
  15. /**
  16. * Constructor
  17. * @param $aObject array of chart options
  18. */
  19. protected function __construct($aObject)
  20. {
  21. parent::__construct();
  22. $this->_oDb = new BxDolChartQuery($this->_aObject);
  23. $this->_sObject = $aObject['object'];
  24. $this->_aObject = $aObject;
  25. $this->_sStatusActive = 'active';
  26. }
  27. /**
  28. * Get editor object instance by object name
  29. * @param $sObject object name
  30. * @return object instance or false on error
  31. */
  32. static public function getObjectInstance($sObject = false, $oTemplate = false)
  33. {
  34. if(isset($GLOBALS['bxDolClasses']['BxDolChart!' . $sObject]))
  35. return $GLOBALS['bxDolClasses']['BxDolChart!' . $sObject];
  36. $aObject = BxDolChartQuery::getChartObject($sObject);
  37. if(!$aObject || !is_array($aObject))
  38. return false;
  39. $sClass = 'BxDolChart';
  40. if(!empty($aObject['class_name'])) {
  41. $sClass = $aObject['class_name'];
  42. if(!empty($aObject['class_file']))
  43. require_once(BX_DIRECTORY_PATH_ROOT . $aObject['class_file']);
  44. }
  45. $o = new $sClass($aObject, $oTemplate);
  46. return ($GLOBALS['bxDolClasses']['BxDolChart!' . $sObject] = $o);
  47. }
  48. public function actionLoadDataByInterval()
  49. {
  50. $mixedResult = $this->checkAllowedView();
  51. if($mixedResult !== CHECK_ACTION_RESULT_ALLOWED)
  52. return array('error' => $mixedResult);
  53. $iFrom = $this->_getTimestamp(bx_get('from'));
  54. $iTo = $this->_getTimestamp(bx_get('to'), true);
  55. if(!$iFrom || !$iTo)
  56. return echoJson(array('error' => _t('_Error Occured')));
  57. $aData = $this->_getDataByInterval($iFrom, $iTo);
  58. if(empty($aData) || !is_array($aData))
  59. return echoJson(array('error' => _t('_Empty')));
  60. return echoJson(array (
  61. 'title' => _t($this->_aObject['title']),
  62. 'data' => $aData,
  63. 'hide_date_range' => $this->_aObject['field_date_dt'] || $this->_aObject['field_date_ts'] ? false : true,
  64. 'column_date' => $this->_aObject['column_date'] >= 0 ? $this->_aObject['column_date'] : false,
  65. 'column_count' => $this->_aObject['column_count'] >= 0 ? $this->_aObject['column_count'] : false,
  66. 'type' => $this->_aObject['type'] ? $this->_aObject['type'] : 'line',
  67. 'options' => $this->_aObject['options'] ? unserialize($this->_aObject['options']) : false,
  68. ));
  69. }
  70. public function checkAllowedView($isPerformAction = false)
  71. {
  72. return BxDolService::call('system', 'check_allowed_view', array($isPerformAction), 'TemplChartServices');
  73. }
  74. protected function _getQuery()
  75. {
  76. if(!empty($this->_aObject['query']))
  77. return $this->_aObject['query'];
  78. $sWhereClause = "";
  79. if(!empty($this->_aObject['field_status'])) {
  80. $aStatusFields = explode(',', $this->_aObject['field_status']);
  81. foreach($aStatusFields as $sStatusField)
  82. $sWhereClause .= " AND `" . $sStatusField . "`='" . $this->_sStatusActive . "'";
  83. }
  84. 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";
  85. }
  86. protected function _getTimestamp($sDate, $isNowIfError = false)
  87. {
  88. $aDate = explode('-', $sDate); // YYYY-MM-DD
  89. if(!$aDate || empty($aDate[0]) || empty($aDate[1]) || empty($aDate[2]) || !(int)$aDate[0] || !(int)$aDate[1] || !(int)$aDate[2])
  90. return $isNowIfError ? time() : false;
  91. return mktime(0, 0, 0, $aDate[1], $aDate[2], $aDate[0]);
  92. }
  93. protected function _getDate($iDate)
  94. {
  95. return date('Y-m-d', $iDate);
  96. }
  97. }
  98. /** @} */