PageRenderTime 149ms CodeModel.GetById 36ms RepoModel.GetById 1ms app.codeStats 0ms

/application/modules/Core/Model/DbTable/Statistics.php

https://github.com/shopaholiccompany/shopaholic
PHP | 110 lines | 73 code | 15 blank | 22 comment | 7 complexity | 75b5511054bb2b0baa126ab4d8294905 MD5 | raw file
Possible License(s): BSD-3-Clause, GPL-3.0, LGPL-2.1
  1. <?php
  2. /**
  3. * SocialEngine
  4. *
  5. * @category Application_Core
  6. * @package Core
  7. * @copyright Copyright 2006-2010 Webligo Developments
  8. * @license http://www.socialengine.net/license/
  9. * @version $Id: Statistics.php 7244 2010-09-01 01:49:53Z john $
  10. * @author John
  11. */
  12. /**
  13. * @category Application_Core
  14. * @package Core
  15. * @copyright Copyright 2006-2010 Webligo Developments
  16. * @license http://www.socialengine.net/license/
  17. */
  18. class Core_Model_DbTable_Statistics extends Engine_Db_Table
  19. {
  20. public function increment($type, $value = 1, $time = null)
  21. {
  22. // Check args
  23. if( $value === 0 ) {
  24. return $this;
  25. }
  26. if( !is_numeric($value) ) {
  27. throw new Engine_Exception('statistics can only handle numeric values');
  28. }
  29. if( null === $time ) {
  30. $time = time();
  31. }
  32. // Check db
  33. $periodValue = gmdate('Y-m-d', $time);
  34. //$periodValue = gmdate('Y-m-d H:i:s');
  35. $sign = ( $value > 0 ? '+' : '-' );
  36. $absValue = abs($value);
  37. $updateCount = $this->update(array(
  38. 'value' => new Zend_Db_Expr('value ' . $sign . ' ' . $this->getAdapter()->quote($absValue)),
  39. ), array(
  40. 'type = ?' => $type,
  41. 'date = ?' => $periodValue,
  42. ));
  43. if( $updateCount < 1 ) {
  44. try {
  45. $this->insert(array(
  46. 'value' => $value,
  47. 'type' => $type,
  48. 'date' => $periodValue,
  49. ));
  50. } catch( Exception $e ) {
  51. // Meh, just ignore
  52. //throw $e;
  53. }
  54. }
  55. return $this;
  56. }
  57. public function getTotal($type, $start = null, $end = null)
  58. {
  59. $select = new Zend_Db_Select($this->getAdapter());
  60. $select
  61. ->from($this->info('name'), 'SUM(value) as sum')
  62. ->where('type = ?', $type)
  63. ;
  64. // Can pass "today" into start
  65. switch( $start ) {
  66. case 'day':
  67. $start = mktime(0, 0, 0, gmdate("n"), gmdate("j"), gmdate("Y"));
  68. $end = mktime(0, 0, 0, gmdate("n"), gmdate("j") + 1, gmdate("Y"));
  69. break;
  70. case 'week':
  71. $start = mktime(0, 0, 0, gmdate("n"), gmdate("j") - gmdate('N') + 1, gmdate("Y"));
  72. $end = mktime(0, 0, 0, gmdate("n"), gmdate("j") - gmdate('N') + 1 + 7, gmdate("Y"));
  73. break;
  74. case 'month':
  75. $start = mktime(0, 0, 0, gmdate("n"), gmdate("j"), gmdate("Y"));
  76. $end = mktime(0, 0, 0, gmdate("n") + 1, gmdate("j"), gmdate("Y"));
  77. break;
  78. case 'year':
  79. $start = mktime(0, 0, 0, gmdate("n"), gmdate("j"), gmdate("Y"));
  80. $end = mktime(0, 0, 0, gmdate("n"), gmdate("j"), gmdate("Y") + 1);
  81. break;
  82. }
  83. if( null !== $start ) {
  84. $select->where('date >= ?', gmdate('Y-m-d', $start));
  85. }
  86. if( null !== $end ) {
  87. $select->where('date < ?', gmdate('Y-m-d', $end));
  88. }
  89. $data = $select->query()->fetch();
  90. if( !isset($data['sum']) ) {
  91. return 0;
  92. }
  93. return $data['sum'];
  94. }
  95. }