BxDolChartGrowthSpeed.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 BxDolChartGrowthSpeed extends BxDolChart
  10. {
  11. protected function __construct($aObject)
  12. {
  13. parent::__construct($aObject);
  14. }
  15. protected function _getDataByInterval($iFrom, $iTo)
  16. {
  17. $sFieldDate = $this->_aObject['field_date_dt'] ? $this->_aObject['field_date_dt'] : $this->_aObject['field_date_ts'];
  18. $this->addMarkers([
  19. 'field_date' => "`" . $sFieldDate . "`",
  20. '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')",
  21. 'object' => $this->_aObject['object'],
  22. 'table' => "`{$this->_aObject['table']}`",
  23. 'where_inteval' => "AND `" . $this->_aObject['table'] . "`.`" . $sFieldDate . "` >= :from AND `" . $this->_aObject['table'] . "`.`" . $sFieldDate . "` <= :to"
  24. ]);
  25. // build query
  26. $sQuery = $this->_getQuery();
  27. $sQuery = $this->replaceMarkers($sQuery);
  28. $aBindings = array(
  29. 'from' => $this->_aObject['field_date_dt'] ? $this->_getDate($iFrom) . ' 00:00:00' : $iFrom,
  30. 'to' => $this->_aObject['field_date_dt'] ? $this->_getDate($iTo) . ' 23:59:59' : $iTo + 24*3600 - 1,
  31. );
  32. // get data
  33. if ($this->_aObject['column_date'] >= 0)
  34. $aData = $this->_oDb->getAllWithKey($sQuery, $this->_aObject['column_date'], $aBindings, PDO::FETCH_NUM);
  35. else
  36. $aData = $this->_oDb->getAll($sQuery, array(), $aBindings, PDO::FETCH_NUM);
  37. if (!$aData)
  38. return false;
  39. // fill in missed days and convert values to numbers
  40. if ($this->_aObject['column_date'] >= 0) {
  41. $iCountCurrent = 0;
  42. $aDataSlice = array_slice($aData, 0, 1);
  43. $iColumnsNum = count(array_pop($aDataSlice));
  44. for ($i = $iFrom ; $i <= ($iTo + 24*3600 - 1); $i += 24*60*60) {
  45. $sDate = $this->_getDate($i);
  46. $aRow = array ();
  47. for ($j = 0 ; $j < $iColumnsNum ; ++$j) {
  48. if($this->_aObject['column_date'] != $j) {
  49. $aRow[$j] = isset($aData[$sDate]) ? (int)$aData[$sDate][$j] : 0;
  50. }
  51. else
  52. $aRow[$j] = $sDate;
  53. }
  54. $aData[$sDate] = $aRow;
  55. }
  56. }
  57. else
  58. foreach ($aData as $k => $v)
  59. foreach ($aData[$k] as $kk => $vv)
  60. if ($kk > 0)
  61. $aData[$k][$kk] = (int)$aData[$k][$kk];
  62. // return values only
  63. ksort($aData);
  64. return array_values($aData);
  65. }
  66. }
  67. /** @} */