Current_Traffic_Finder.php
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP; |
| 4 | |
| 5 | use IAWP\Date_Range\Date_Range; |
| 6 | use IAWP\Models\Current_Traffic; |
| 7 | use IAWPSCOPED\Illuminate\Database\Query\JoinClause; |
| 8 | /** @internal */ |
| 9 | class Current_Traffic_Finder |
| 10 | { |
| 11 | /** |
| 12 | * @var Date_Range |
| 13 | */ |
| 14 | private $date_range; |
| 15 | /** |
| 16 | * @param Date_Range $date_range Range to fetch referrers for |
| 17 | */ |
| 18 | public function __construct(Date_Range $date_range) |
| 19 | { |
| 20 | $this->date_range = $date_range; |
| 21 | } |
| 22 | public function fetch() : Current_Traffic |
| 23 | { |
| 24 | $views_table = \IAWP\Query::get_table_name(\IAWP\Query::VIEWS); |
| 25 | $sessions_table = \IAWP\Query::get_table_name(\IAWP\Query::SESSIONS); |
| 26 | $row = \IAWP\Illuminate_Builder::get_builder()->from($views_table, 'views')->selectRaw('COUNT(DISTINCT (sessions.visitor_id)) AS visitor_count')->selectRaw('COUNT(DISTINCT (views.resource_id)) AS page_count')->selectRaw('COUNT(DISTINCT (sessions.referrer_id)) AS referrer_count')->selectRaw('COUNT(DISTINCT (sessions.country_id)) AS country_count')->selectRaw('COUNT(DISTINCT (sessions.campaign_id)) AS campaign_count')->selectRaw('COUNT(*) AS view_count')->leftJoin("{$sessions_table} AS sessions", function (JoinClause $join) { |
| 27 | $join->on('views.session_id', '=', 'sessions.session_id'); |
| 28 | })->whereBetween('viewed_at', [$this->date_range->iso_start(), $this->date_range->iso_end()])->first(); |
| 29 | return new Current_Traffic($row); |
| 30 | } |
| 31 | } |
| 32 |