AJAX
4 days ago
Admin_Page
4 days ago
Click_Tracking
4 days ago
ColumnOptions
6 months ago
Cron
9 months ago
Data_Pruning
4 days ago
Date_Picker
3 months ago
Date_Range
5 months ago
Ecommerce
5 months ago
Email_Reports
4 days ago
Examiner
3 months ago
Favicon
2 months ago
Form_Submissions
4 days ago
Integrations
4 days ago
Journey
3 months ago
Migrations
6 months ago
Models
4 days ago
Overview
2 months ago
Public_API
5 months ago
RealTime
4 days ago
Rows
4 days ago
Statistics
4 days ago
Tables
4 days ago
Utils
4 days ago
Views
4 days ago
ViewsColumn
4 days ago
WooCommerceOrderMetaBox
5 months ago
ActivationLifecycle.php
3 months ago
Admin_Bar_Stats.php
4 days ago
Appearance.php
1 year ago
BreakdanceFormAction.php
4 days ago
Campaign_Builder.php
4 days ago
Capability_Manager.php
4 days ago
Chart.php
2 months ago
Chart_Data.php
1 year ago
Click_Tracking.php
2 months ago
ComplianzIntegration.php
3 months ago
Cron_Job.php
5 months ago
Cron_Manager.php
5 months ago
Dashboard_Options.php
6 months ago
Dashboard_Widget.php
2 months ago
Database.php
8 months ago
Database_Manager.php
4 days ago
Empty_Report_Option.php
2 years ago
Env.php
4 days ago
Examiner_Config.php
11 months ago
FetchFaviconsJob.php
5 months ago
Filters.php
3 months ago
Geo_Database_Health_Check_Job.php
9 months ago
Geo_Database_Manager.php
6 months ago
Geoposition.php
1 year ago
Icon_Directory.php
6 months ago
Icon_Directory_Factory.php
2 years ago
Illuminate_Builder.php
10 months ago
Independent_Analytics.php
4 days ago
Interrupt.php
3 months ago
Known_Referrers.php
4 days ago
MainWP.php
2 months ago
Map.php
9 months ago
Map_Data.php
1 year ago
Migration_Fixer_Job.php
5 months ago
Patch.php
1 year ago
Payload_Validator.php
9 months ago
Plugin_Conflict_Detector.php
4 days ago
Plugin_Group.php
6 months ago
Plugin_Group_Option.php
2 years ago
Query.php
1 year ago
Query_Taps.php
4 months ago
Quick_Stats.php
3 months ago
REST_API.php
4 days ago
Report.php
1 year ago
Report_Finder.php
6 months ago
Report_Options_Parser.php
9 months ago
Resource_Identifier.php
2 months ago
Settings.php
2 months ago
Sort_Configuration.php
9 months ago
Tables.php
8 months ago
Track_Resource_Changes.php
1 year ago
View_Counter.php
6 months ago
VisitorSaltRefreshInterval.php
6 months ago
WP_Option_Cache_Bust.php
2 years ago
Admin_Bar_Stats.php
79 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP; |
| 4 | |
| 5 | use IAWP\Date_Range\Date_Range; |
| 6 | use IAWP\Date_Range\Relative_Date_Range; |
| 7 | use IAWP\Utils\Number_Formatter; |
| 8 | use IAWPSCOPED\Illuminate\Database\Query\Builder; |
| 9 | /** @internal */ |
| 10 | class Admin_Bar_Stats |
| 11 | { |
| 12 | private ?\IAWP\Resource_Identifier $resource_identifier; |
| 13 | public function __construct() |
| 14 | { |
| 15 | $this->resource_identifier = \IAWP\Resource_Identifier::for_resource_being_edited() ?? \IAWP\Resource_Identifier::for_resource_being_viewed(); |
| 16 | } |
| 17 | public function should_render_ui() : bool |
| 18 | { |
| 19 | if (self::is_feature_enabled() && $this->resource_identifier) { |
| 20 | return \true; |
| 21 | } |
| 22 | return \false; |
| 23 | } |
| 24 | public function get_menu_bar_items() : array |
| 25 | { |
| 26 | $today = new Relative_Date_Range('TODAY'); |
| 27 | $yesterday = new Relative_Date_Range('YESTERDAY'); |
| 28 | $last_thirty = new Relative_Date_Range('LAST_THIRTY'); |
| 29 | $all_time = new Relative_Date_Range('ALL_TIME'); |
| 30 | $views_today = $this->get_views_in_date_range($today); |
| 31 | $views_yesterday = $this->get_views_in_date_range($yesterday); |
| 32 | $views_last_thirty = $this->get_views_in_date_range($last_thirty); |
| 33 | $views_total = $this->get_views_in_date_range($all_time); |
| 34 | $views_today = Number_Formatter::decimal($views_today); |
| 35 | $views_yesterday = Number_Formatter::decimal($views_yesterday); |
| 36 | $views_last_thirty = Number_Formatter::decimal($views_last_thirty); |
| 37 | $views_total = Number_Formatter::decimal($views_total); |
| 38 | return [['id' => 'iawp_admin_bar', 'title' => '<span class="ab-icon dashicons-analytics"></span>' . \sprintf('%s %s', $views_today, \esc_html__('Views', 'independent-analytics')), 'meta' => ['class' => 'iawp_admin_bar_button']], ['id' => 'iawp_admin_bar_group_title', 'title' => '<span>' . \esc_html__('Date', 'independent-analytics') . '</span> ' . '<span>' . \esc_html__('Views', 'independent-analytics') . '</span>', 'parent' => 'iawp_admin_bar'], ['id' => 'iawp_admin_bar_today', 'title' => '<span>' . \esc_html__('Today:', 'independent-analytics') . '</span> <span>' . \esc_html__($views_today) . '</span>', 'parent' => 'iawp_admin_bar'], ['id' => 'iawp_admin_bar_yesterday', 'title' => '<span>' . \esc_html__('Yesterday:', 'independent-analytics') . '</span> <span>' . \esc_html__($views_yesterday) . '</span>', 'parent' => 'iawp_admin_bar'], ['id' => 'iawp_admin_bar_last_thirty', 'title' => '<span>' . \esc_html__('Last 30 Days:', 'independent-analytics') . '</span> <span>' . \esc_html__($views_last_thirty) . '</span>', 'parent' => 'iawp_admin_bar'], ['id' => 'iawp_admin_bar_total', 'title' => '<span>' . \esc_html__('All Time:', 'independent-analytics') . '</span> <span>' . \esc_html__($views_total) . '</span>', 'parent' => 'iawp_admin_bar'], ['id' => 'iawp_admin_bar_dashboard_group', 'parent' => 'iawp_admin_bar', 'is_group' => \true], ['id' => 'iawp_admin_bar_dashboard_link', 'title' => \esc_html__('Analytics Dashboard', 'independent-analytics') . ' →', 'href' => \esc_url(\IAWPSCOPED\iawp_dashboard_url()), 'parent' => 'iawp_admin_bar_dashboard_group']]; |
| 39 | } |
| 40 | public function get_views_in_date_range(Date_Range $date_range) : int |
| 41 | { |
| 42 | $resource = $this->resource_identifier; |
| 43 | $view_query = \IAWP\Illuminate_Builder::new()->selectRaw('COUNT(*) AS views')->from(\IAWP\Tables::resources() . ' AS resources')->join(\IAWP\Tables::views() . ' AS views', 'views.resource_id', '=', 'resources.id')->where('resource', '=', $resource->type())->when($resource->has_meta(), function (Builder $query) use($resource) { |
| 44 | $query->where($resource->meta_key(), '=', $resource->meta_value()); |
| 45 | })->whereBetween('views.viewed_at', [$date_range->iso_start(), $date_range->iso_end()]); |
| 46 | $views = $view_query->value('views'); |
| 47 | if (\is_string($views)) { |
| 48 | if (\is_numeric($views)) { |
| 49 | $views = \intval($views); |
| 50 | } else { |
| 51 | $views = null; |
| 52 | } |
| 53 | } |
| 54 | return $views ?? 0; |
| 55 | } |
| 56 | public static function is_feature_enabled() : bool |
| 57 | { |
| 58 | return \IAWPSCOPED\iawp()->get_option('iawp_disable_admin_toolbar_analytics', \false) === \false && \IAWP\Capability_Manager::can_view(); |
| 59 | } |
| 60 | public static function register() : void |
| 61 | { |
| 62 | \add_action('admin_bar_menu', function ($admin_bar) { |
| 63 | $admin_bar_stats = new self(); |
| 64 | if (!$admin_bar_stats->should_render_ui()) { |
| 65 | return; |
| 66 | } |
| 67 | foreach ($admin_bar_stats->get_menu_bar_items() as $menu_bar_item) { |
| 68 | $is_group = $menu_bar_item['is_group'] ?? \false; |
| 69 | // Should the item be registered as a group or a node? |
| 70 | if ($is_group) { |
| 71 | $admin_bar->add_group($menu_bar_item); |
| 72 | } else { |
| 73 | $admin_bar->add_node($menu_bar_item); |
| 74 | } |
| 75 | } |
| 76 | }, 100); |
| 77 | } |
| 78 | } |
| 79 |