PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.2.0
Independent Analytics – WordPress Analytics Plugin v2.2.0
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Menu_Bar_Stats / Menu_Bar_Stats.php
independent-analytics / IAWP / Menu_Bar_Stats Last commit date
Menu_Bar_Stats.php 2 years ago
Menu_Bar_Stats.php
109 lines
1 <?php
2
3 namespace IAWP_SCOPED\IAWP\Menu_Bar_Stats;
4
5 use IAWP_SCOPED\IAWP\Capability_Manager;
6 use IAWP_SCOPED\IAWP\Date_Range\Date_Range;
7 use IAWP_SCOPED\IAWP\Date_Range\Relative_Date_Range;
8 use IAWP_SCOPED\IAWP\Illuminate_Builder;
9 use IAWP_SCOPED\IAWP\Query;
10 use IAWP_SCOPED\IAWP\Resource_Identifier;
11 use IAWP_SCOPED\IAWP\Utils\Number_Formatter;
12 use IAWP_SCOPED\Illuminate\Database\Query\Builder;
13 use IAWP_SCOPED\Illuminate\Database\Query\JoinClause;
14 /** @internal */
15 class Menu_Bar_Stats
16 {
17 /**
18 * @var ?Resource_Identifier
19 */
20 private $current_resource_identifier;
21 /**
22 * @var int
23 */
24 private $views_today = 0;
25 /**
26 * @var int
27 */
28 private $views_yesterday = 0;
29 /**
30 * @var int
31 */
32 private $views_last_thirty = 0;
33 public function __construct()
34 {
35 $today = new Relative_Date_Range('TODAY');
36 $yesterday = new Relative_Date_Range('YESTERDAY');
37 $last_thirty = new Relative_Date_Range('LAST_THIRTY');
38 if (\is_admin()) {
39 $this->current_resource_identifier = Resource_Identifier::for_resource_being_edited();
40 } else {
41 $this->current_resource_identifier = Resource_Identifier::for_resource_being_viewed();
42 }
43 if (!\is_null($this->current_resource_identifier)) {
44 $this->views_today = self::get_views_in_date_range($today);
45 $this->views_yesterday = self::get_views_in_date_range($yesterday);
46 $this->views_last_thirty = self::get_views_in_date_range($last_thirty);
47 }
48 }
49 /**
50 * @return bool
51 */
52 public function is_enabled() : bool
53 {
54 if (!self::is_option_enabled()) {
55 return \false;
56 }
57 if (\is_null($this->current_resource_identifier)) {
58 return \false;
59 }
60 return \true;
61 }
62 /**
63 * @return array[]
64 */
65 private function get_menu_bar_items() : array
66 {
67 $today = Number_Formatter::decimal($this->views_today);
68 $yesterday = Number_Formatter::decimal($this->views_yesterday);
69 $last_thirty = Number_Formatter::decimal($this->views_last_thirty);
70 return [['id' => 'iawp_admin_bar', 'title' => '<span class="ab-icon dashicons-analytics"></span>' . \sprintf('%s Views', \esc_html_x($today, 'X 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__($today) . '</span>', 'parent' => 'iawp_admin_bar'], ['id' => 'iawp_admin_bar_yesterday', 'title' => '<span>' . \esc_html__('Yesterday:', 'independent-analytics') . '</span> <span>' . \esc_html__($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__($last_thirty) . '</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') . ' &rarr;', 'href' => \esc_url(\IAWP_SCOPED\iawp_dashboard_url()), 'parent' => 'iawp_admin_bar_dashboard_group']];
71 }
72 private function get_views_in_date_range(Date_Range $date_range) : int
73 {
74 $resources_table = Query::get_table_name(Query::RESOURCES);
75 $views_table = Query::get_table_name(Query::VIEWS);
76 $resource_statistics_query = Illuminate_Builder::get_builder();
77 $resource = $this->current_resource_identifier;
78 $resource_statistics_query->selectRaw('COUNT(*) AS views')->from("{$resources_table} as resources")->join("{$views_table} AS views", function (JoinClause $join) {
79 $join->on('resources.id', '=', 'views.resource_id');
80 })->where('resource', '=', $resource->type())->when($resource->has_meta(), function (Builder $query) use($resource) {
81 $query->where($resource->meta_key(), '=', $resource->meta_value());
82 })->whereBetween('views.viewed_at', [$date_range->iso_start(), $date_range->iso_end()]);
83 $resource_statistics = $resource_statistics_query->get()->first();
84 return $resource_statistics->views ?? 0;
85 }
86 public static function is_option_enabled() : bool
87 {
88 return \IAWP_SCOPED\iawp()->get_option('iawp_disable_admin_toolbar_analytics', \false) === \false && Capability_Manager::can_view();
89 }
90 public static function register()
91 {
92 \add_action('admin_bar_menu', function ($admin_bar) {
93 $menu_bar_stats = new self();
94 if (!$menu_bar_stats->is_enabled()) {
95 return;
96 }
97 foreach ($menu_bar_stats->get_menu_bar_items() as $menu_bar_item) {
98 $is_group = $menu_bar_item['is_group'] ?? \false;
99 // Should the item be registered as a group or a node?
100 if ($is_group) {
101 $admin_bar->add_group($menu_bar_item);
102 } else {
103 $admin_bar->add_node($menu_bar_item);
104 }
105 }
106 }, 100);
107 }
108 }
109