PageRenderTime 40ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/core/bb3countdown.php

https://gitlab.com/protoneutron/bb3countdown
PHP | 192 lines | 164 code | 12 blank | 16 comment | 17 complexity | e2a7d86e8aeb5b184396d9b862ded05b MD5 | raw file
  1. <?php
  2. /**
  3. *
  4. * @package BB3CountDown
  5. * @copyright (c) 2014 PPK
  6. * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
  7. *
  8. *
  9. */
  10. namespace ppk\bb3countdown\core;
  11. /**
  12. * @ignore
  13. */
  14. if (!defined('IN_PHPBB'))
  15. {
  16. exit;
  17. }
  18. class bb3countdown
  19. {
  20. /** @var \phpbb\config\config */
  21. protected $config;
  22. /** @var \phpbb\template\template */
  23. protected $template;
  24. /**
  25. * @var scalar string
  26. */
  27. protected $phpbb_root_path;
  28. public function __construct(\phpbb\config\config $config, \phpbb\template\template $template, $phpbb_root_path)
  29. {
  30. $this->config = $config;
  31. $this->template = $template;
  32. $this->root_path = $phpbb_root_path;
  33. }
  34. public function display_bb3countdown()
  35. {
  36. $dt=time();
  37. $bb3countdown_passed=$bb3countdown_prefix=$bb3countdown_suffix=$bb3countdown_start=$bb3countdown_end='';
  38. $bb3countdown_precision=in_array($this->config['bb3countdown_precision'], array('s', 'm', 'h', 'd')) ? $this->config['bb3countdown_precision'] : 'd';
  39. if($this->config['bb3countdown_start'])
  40. {
  41. $bb3countdown_start_dt=$this->my_split_config($this->config['bb3countdown_start'], 2, 'strval', ' ');
  42. $bb3countdown_start_date=$this->my_split_config($bb3countdown_start_dt[0], 3, 'my_int_val', '-');
  43. $bb3countdown_start_time=$this->my_split_config($bb3countdown_start_dt[1], 3, 'my_int_val', ':');
  44. $bb3countdown_precisionspeed=$this->my_split_config($this->config['bb3countdown_precisionspeed'], 3, 'my_int_val');
  45. if(checkdate($bb3countdown_start_date[1], $bb3countdown_start_date[2], $bb3countdown_start_date[0]) && $this->my_checktime($bb3countdown_start_time[0], $bb3countdown_start_time[1], $bb3countdown_start_time[2]))
  46. {
  47. $countdown_start=mktime(intval($bb3countdown_start_time[0]), intval($bb3countdown_start_time[1]), intval($bb3countdown_start_time[2]), intval($bb3countdown_start_date[1]), intval($bb3countdown_start_date[2]), intval($bb3countdown_start_date[0]));
  48. if($countdown_start < $dt)
  49. {
  50. $bb3countdown_passed=htmlspecialchars_decode($this->config['bb3countdown_passed']);
  51. }
  52. else
  53. {
  54. $bb3countdown_prefix=htmlspecialchars_decode($this->config['bb3countdown_prefix']);
  55. $bb3countdown_suffix=htmlspecialchars_decode($this->config['bb3countdown_suffix']);
  56. $bb3countdown_start="{$bb3countdown_start_date[0]}, ".($bb3countdown_start_date[1]-1).", {$bb3countdown_start_date[2]}, {$bb3countdown_start_time[0]}, {$bb3countdown_start_time[1]}, {$bb3countdown_start_time[2]}";
  57. }
  58. if($this->config['bb3countdown_end'])
  59. {
  60. $bb3countdown_end_dt=$this->my_split_config($this->config['bb3countdown_end'], 2, 'strval', ' ');
  61. $bb3countdown_end_date=$this->my_split_config($bb3countdown_end_dt[0], 3, 'my_int_val', '-');
  62. $bb3countdown_end_time=$this->my_split_config($bb3countdown_end_dt[1], 3, 'my_int_val', ':');
  63. if(checkdate($bb3countdown_end_date[1], $bb3countdown_end_date[2], $bb3countdown_end_date[0]) && $this->my_checktime($bb3countdown_end_time[0], $bb3countdown_end_time[1], $bb3countdown_end_time[2]))
  64. {
  65. if(mktime(intval($bb3countdown_end_time[0]), intval($bb3countdown_end_time[1]), intval($bb3countdown_end_time[2]), intval($bb3countdown_end_date[1]), intval($bb3countdown_end_date[2]), intval($bb3countdown_end_date[0])) < $dt)
  66. {
  67. $bb3countdown_passed=$bb3countdown_start='';
  68. }
  69. else
  70. {
  71. $bb3countdown_passed=htmlspecialchars_decode($this->config['bb3countdown_passed']);
  72. $bb3countdown_start="{$bb3countdown_start_date[0]}, ".($bb3countdown_start_date[1]-1).", {$bb3countdown_start_date[2]}, {$bb3countdown_start_time[0]}, {$bb3countdown_start_time[1]}, {$bb3countdown_start_time[2]}";
  73. }
  74. }
  75. }
  76. else
  77. {
  78. $bb3countdown_passed=htmlspecialchars_decode($this->config['bb3countdown_passed']);
  79. $bb3countdown_start="{$bb3countdown_start_date[0]}, ".($bb3countdown_start_date[1]-1).", {$bb3countdown_start_date[2]}, {$bb3countdown_start_time[0]}, {$bb3countdown_start_time[1]}, {$bb3countdown_start_time[2]}";
  80. }
  81. foreach($bb3countdown_precisionspeed as $pk=>$pv)
  82. {
  83. if($pk==0 && $countdown_start-$dt < $pv*86400)
  84. {
  85. $bb3countdown_precision='h';
  86. }
  87. else if($pk==1 && $countdown_start-$dt < $pv*3600)
  88. {
  89. $bb3countdown_precision='m';
  90. }
  91. else if($pk==2 && $countdown_start-$dt < $pv*60)
  92. {
  93. $bb3countdown_precision='s';
  94. }
  95. }
  96. $this->template->assign_vars(array(
  97. 'S_COUNTDOWN_PASSED' => str_replace("'", '"', $bb3countdown_passed),
  98. 'S_COUNTDOWN_PREFIX' => str_replace("'", '"', $bb3countdown_prefix),
  99. 'S_COUNTDOWN_SUFFIX' => str_replace("'", '"', $bb3countdown_suffix),
  100. 'S_COUNTDOWN_PRECISION' => $bb3countdown_precision,
  101. 'S_COUNTDOWN_START' => $bb3countdown_start,
  102. 'S_COUNTDOWN_END' => $bb3countdown_end,
  103. 'BB3CD_BOARD_URL' => $this->root_path,
  104. )
  105. );
  106. }
  107. }
  108. }
  109. public function my_split_config($config, $count=0, $type=false, $split='')
  110. {
  111. $count=intval($count);
  112. $s_config=$count > 0 ? @explode($split ? $split : ' ', $config, $count) : @explode($split ? $split : ' ', $config);
  113. $count=$count > 0 ? $count : count($s_config);
  114. if($count)
  115. {
  116. for($i=0;$i<$count;$i++)
  117. {
  118. $s_config[$i]=isset($s_config[$i]) ? $s_config[$i] : '';
  119. if($type)
  120. {
  121. $use_function=false;
  122. if(is_array($type) && isset($type[$i]) && !empty($type[$i]))
  123. {
  124. $use_function=$type[$i];
  125. }
  126. else if(is_string($type) && !empty($type))
  127. {
  128. $use_function=$type;
  129. }
  130. if($use_function)
  131. {
  132. $s_config[$i]=@function_exists($use_function) ? call_user_func($use_function, $s_config[$i]) : call_user_func(array($this, $use_function), $s_config[$i]);
  133. }
  134. }
  135. }
  136. }
  137. return $s_config;
  138. }
  139. public function my_int_val($v=0, $max=0, $drop=false, $negative=false)
  140. {
  141. if(!$v || ($v < 0 && !$negative))
  142. {
  143. return 0;
  144. }
  145. else if($drop && $v>$max)
  146. {
  147. return 0;
  148. }
  149. else if($max && $v>$max)
  150. {
  151. return $max;
  152. }
  153. return @number_format($v+0, 0, '', '');
  154. }
  155. public function my_checktime($h, $m, $s)
  156. {
  157. if(!is_numeric($h) || !is_numeric($m) || !is_numeric($s))
  158. {
  159. return false;
  160. }
  161. if($h > -1 && $h < 24 && $m > -1 && $m < 60 && $s > -1 && $s < 60)
  162. {
  163. return true;
  164. }
  165. return false;
  166. }
  167. }
  168. ?>