Busiest_Day_Of_Week_Module.php
5 months ago
Busiest_Time_Of_Day_Module.php
1 year ago
Line_Chart_Module.php
9 months ago
Map_Module.php
9 months ago
Module.php
3 months ago
New_Sessions_Module.php
1 year ago
Pie_Chart_Module.php
9 months ago
Quick_Stats_Module.php
9 months ago
Recent_Conversions_Module.php
5 months ago
Recent_Views_Module.php
5 months ago
Top_Ten_Module.php
9 months ago
Recent_Views_Module.php
60 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Overview\Modules; |
| 4 | |
| 5 | use IAWPSCOPED\Carbon\CarbonImmutable; |
| 6 | use IAWP\Icon_Directory_Factory; |
| 7 | use IAWP\Illuminate_Builder; |
| 8 | use IAWP\Tables; |
| 9 | use IAWP\Utils\Format; |
| 10 | use IAWP\Utils\Timezone; |
| 11 | /** @internal */ |
| 12 | class Recent_Views_Module extends \IAWP\Overview\Modules\Module |
| 13 | { |
| 14 | public function module_type() : string |
| 15 | { |
| 16 | return 'recent-views'; |
| 17 | } |
| 18 | public function module_name() : string |
| 19 | { |
| 20 | return \__('Recent Views', 'independent-analytics'); |
| 21 | } |
| 22 | public function subtitle() : string |
| 23 | { |
| 24 | return \__('Most Recent', 'independent-analytics'); |
| 25 | } |
| 26 | public function calculate_dataset() |
| 27 | { |
| 28 | $tables = Tables::class; |
| 29 | $query = Illuminate_Builder::new()->select(['views.viewed_at', 'resources.cached_title AS page_title', 'countries.country_code', 'countries.country', 'device_types.device_type', 'device_browsers.device_browser AS browser'])->from($tables::views(), 'views')->leftJoin("{$tables::resources()} as resources", 'views.resource_id', '=', 'resources.id')->leftJoin("{$tables::sessions()} as sessions", 'views.session_id', '=', 'sessions.session_id')->leftJoin("{$tables::countries()} as countries", 'sessions.country_id', '=', 'countries.country_id')->leftJoin("{$tables::device_types()} as device_types", 'sessions.device_type_id', '=', 'device_types.device_type_id')->leftJoin("{$tables::device_browsers()} as device_browsers", 'sessions.device_browser_id', '=', 'device_browsers.device_browser_id')->orderBy('views.viewed_at', 'desc')->limit(40); |
| 30 | return $query->get()->map(function ($row) { |
| 31 | $date = CarbonImmutable::parse($row->viewed_at, 'utc')->setTimezone(Timezone::site_timezone()); |
| 32 | $long_date_string = $date->format(Format::date_time()); |
| 33 | if ($date->isToday()) { |
| 34 | $short_date_string = $date->format(Format::time()); |
| 35 | } elseif ($date->isYesterday()) { |
| 36 | $short_date_string = \__('Yesterday', 'independent-analytics'); |
| 37 | } else { |
| 38 | $short_date_string = $date->startOfDay()->diffForHumans(); |
| 39 | } |
| 40 | return ['viewed_at' => $short_date_string, 'viewed_at_the_long_way' => $long_date_string, 'page_title' => $row->page_title, 'country_code' => $row->country_code, 'country' => $row->country ?? \__('Unknown Country', 'independent-analytics'), 'device_type' => $row->device_type ?? \__('Unknown Device Type', 'independent-analytics'), 'browser' => $row->browser ?? \__('Unknown Browser', 'independent-analytics')]; |
| 41 | })->all(); |
| 42 | } |
| 43 | public function add_icons_to_dataset(array $dataset) : array |
| 44 | { |
| 45 | $flags = Icon_Directory_Factory::flags(); |
| 46 | $device_types = Icon_Directory_Factory::device_types(); |
| 47 | $browsers = Icon_Directory_Factory::browsers(); |
| 48 | return \array_map(function (array $row) use($flags, $device_types, $browsers) { |
| 49 | $row['flag'] = $flags->find($row['country_code'] ?? ''); |
| 50 | $row['device_type_icon'] = $device_types->find($row['device_type'] ?? ''); |
| 51 | $row['browser_icon'] = $browsers->find($row['browser'] ?? ''); |
| 52 | return $row; |
| 53 | }, $dataset); |
| 54 | } |
| 55 | protected function module_fields() : array |
| 56 | { |
| 57 | return []; |
| 58 | } |
| 59 | } |
| 60 |