Ten_Second_Interval.php
41 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Interval; |
| 4 | |
| 5 | use IAWP\Date_Range\Date_Range; |
| 6 | use IAWP\Illuminate_Builder; |
| 7 | use IAWP\Query; |
| 8 | use IAWPSCOPED\Illuminate\Database\Query\JoinClause; |
| 9 | /** @internal */ |
| 10 | class Ten_Second_Interval extends \IAWP\Interval\Interval |
| 11 | { |
| 12 | public function fetch(Date_Range $date_range) : array |
| 13 | { |
| 14 | $views_table = Query::get_table_name(Query::VIEWS); |
| 15 | $sessions_table = Query::get_table_name(Query::SESSIONS); |
| 16 | return Illuminate_Builder::new()->from($views_table, 'views')->selectRaw('COUNT(DISTINCT (sessions.visitor_id)) AS visitors')->selectRaw('COUNT(*) AS views')->selectRaw("ABS(CEILING(TIMESTAMPDIFF(SECOND, '{$date_range->iso_end()}', views.viewed_at) / 10)) AS interval_ago")->leftJoin("{$sessions_table} AS sessions", function (JoinClause $join) { |
| 17 | $join->on('views.session_id', '=', 'sessions.session_id'); |
| 18 | })->whereBetween('viewed_at', [$date_range->iso_start(), $date_range->iso_end()])->groupBy('interval_ago')->get()->all(); |
| 19 | } |
| 20 | public function get_date_interval() : \DateInterval |
| 21 | { |
| 22 | return new \DateInterval('PT10S'); |
| 23 | } |
| 24 | public function short_label() : string |
| 25 | { |
| 26 | return \__('sec'); |
| 27 | } |
| 28 | public function long_label_singular() : string |
| 29 | { |
| 30 | return \__('second ago'); |
| 31 | } |
| 32 | public function long_label_plural() : string |
| 33 | { |
| 34 | return \__('seconds ago'); |
| 35 | } |
| 36 | public function interval_multiplier() : int |
| 37 | { |
| 38 | return 10; |
| 39 | } |
| 40 | } |
| 41 |