BxDolChart.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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 $_aMarkers;
  15. protected $_sStatusActive;
  16. /**
  17. * Constructor
  18. * @param $aObject array of chart options
  19. */
  20. protected function __construct($aObject)
  21. {
  22. parent::__construct();
  23. $this->_oDb = new BxDolChartQuery($this->_aObject);
  24. $this->_sObject = $aObject['object'];
  25. $this->_aObject = $aObject;
  26. $this->_aMarkers = [];
  27. $this->_sStatusActive = 'active';
  28. }
  29. /**
  30. * Get editor object instance by object name
  31. * @param $sObject object name
  32. * @return object instance or false on error
  33. */
  34. static public function getObjectInstance($sObject = false, $oTemplate = false)
  35. {
  36. if(isset($GLOBALS['bxDolClasses']['BxDolChart!' . $sObject]))
  37. return $GLOBALS['bxDolClasses']['BxDolChart!' . $sObject];
  38. $aObject = BxDolChartQuery::getChartObject($sObject);
  39. if(!$aObject || !is_array($aObject))
  40. return false;
  41. $sClass = 'BxDolChart';
  42. if(!empty($aObject['class_name'])) {
  43. $sClass = $aObject['class_name'];
  44. if(!empty($aObject['class_file']))
  45. require_once(BX_DIRECTORY_PATH_ROOT . $aObject['class_file']);
  46. }
  47. $o = new $sClass($aObject, $oTemplate);
  48. return ($GLOBALS['bxDolClasses']['BxDolChart!' . $sObject] = $o);
  49. }
  50. public function actionLoadDataByInterval()
  51. {
  52. $iFrom = $this->_getTimestamp(bx_get('from'));
  53. $iTo = $this->_getTimestamp(bx_get('to'), true);
  54. return echoJson($this->getDataByInterval($iFrom, $iTo));
  55. }
  56. public function getDataByInterval($iFrom, $iTo)
  57. {
  58. if(!$iFrom || !$iTo)
  59. return ['error' => _t('_Error Occured')];
  60. $mixedResult = $this->checkAllowedView();
  61. if($mixedResult !== CHECK_ACTION_RESULT_ALLOWED)
  62. return ['error' => $mixedResult];
  63. $aData = $this->_getDataByInterval($iFrom, $iTo);
  64. if(empty($aData) || !is_array($aData))
  65. return ['error' => _t('_Empty')];
  66. return [
  67. 'title' => _t($this->_aObject['title']),
  68. 'data' => $aData,
  69. 'hide_date_range' => $this->_aObject['field_date_dt'] || $this->_aObject['field_date_ts'] ? false : true,
  70. 'column_date' => $this->_aObject['column_date'] >= 0 ? $this->_aObject['column_date'] : false,
  71. 'column_count' => $this->_aObject['column_count'] >= 0 ? $this->_aObject['column_count'] : false,
  72. 'type' => $this->_aObject['type'] ? $this->_aObject['type'] : 'line',
  73. 'options' => $this->_aObject['options'] ? unserialize($this->_aObject['options']) : false,
  74. ];
  75. }
  76. public function checkAllowedView($isPerformAction = false)
  77. {
  78. return BxDolService::call('system', 'check_allowed_view', array($isPerformAction), 'TemplChartServices');
  79. }
  80. public function addMarkers($a)
  81. {
  82. if(empty($a) || !is_array($a))
  83. return false;
  84. $this->_aMarkers = array_merge($this->_aMarkers, $a);
  85. return true;
  86. }
  87. public function replaceMarkers($s)
  88. {
  89. return bx_replace_markers($s, $this->_aMarkers);
  90. }
  91. protected function _getQuery()
  92. {
  93. if(!empty($this->_aObject['query']))
  94. return $this->_aObject['query'];
  95. $sWhereClause = "";
  96. if(!empty($this->_aObject['field_status'])) {
  97. $aStatusFields = explode(',', $this->_aObject['field_status']);
  98. foreach($aStatusFields as $sStatusField)
  99. $sWhereClause .= " AND `" . $sStatusField . "`='" . $this->_sStatusActive . "'";
  100. }
  101. 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";
  102. }
  103. public function getTimestamp($sDate, $isNowIfError = false)
  104. {
  105. return $this->_getTimestamp($sDate, $isNowIfError);
  106. }
  107. protected function _getTimestamp($sDate, $isNowIfError = false)
  108. {
  109. $aDate = explode('-', $sDate); // YYYY-MM-DD
  110. if(!$aDate || empty($aDate[0]) || empty($aDate[1]) || empty($aDate[2]) || !(int)$aDate[0] || !(int)$aDate[1] || !(int)$aDate[2])
  111. return $isNowIfError ? time() : false;
  112. return mktime(0, 0, 0, $aDate[1], $aDate[2], $aDate[0]);
  113. }
  114. protected function _getDate($iDate)
  115. {
  116. return date('Y-m-d', $iDate);
  117. }
  118. }
  119. /** @} */