PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.30.0
Independent Analytics – WordPress Analytics Plugin v1.30.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
108 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 class Menu_Bar_Stats
15 {
16 /**
17 * @var ?Resource_Identifier
18 */
19 private $current_resource_identifier;
20 /**
21 * @var int
22 */
23 private $views_today = 0;
24 /**
25 * @var int
26 */
27 private $views_yesterday = 0;
28 /**
29 * @var int
30 */
31 private $views_last_thirty = 0;
32 public function __construct()
33 {
34 $today = new Relative_Date_Range('TODAY');
35 $yesterday = new Relative_Date_Range('YESTERDAY');
36 $last_thirty = new Relative_Date_Range('LAST_THIRTY');
37 if (\is_admin()) {
38 $this->current_resource_identifier = Resource_Identifier::for_resource_being_edited();
39 } else {
40 $this->current_resource_identifier = Resource_Identifier::for_viewed_resource();
41 }
42 if (!\is_null($this->current_resource_identifier)) {
43 $this->views_today = self::get_views_in_date_range($today);
44 $this->views_yesterday = self::get_views_in_date_range($yesterday);
45 $this->views_last_thirty = self::get_views_in_date_range($last_thirty);
46 }
47 }
48 /**
49 * @return bool
50 */
51 public function is_enabled() : bool
52 {
53 if (!self::is_option_enabled()) {
54 return \false;
55 }
56 if (\is_null($this->current_resource_identifier)) {
57 return \false;
58 }
59 return \true;
60 }
61 /**
62 * @return array[]
63 */
64 private function get_menu_bar_items() : array
65 {
66 $today = Number_Formatter::decimal($this->views_today);
67 $yesterday = Number_Formatter::decimal($this->views_yesterday);
68 $last_thirty = Number_Formatter::decimal($this->views_last_thirty);
69 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']];
70 }
71 private function get_views_in_date_range(Date_Range $date_range) : int
72 {
73 $resources_table = Query::get_table_name(Query::RESOURCES);
74 $views_table = Query::get_table_name(Query::VIEWS);
75 $resource_statistics_query = Illuminate_Builder::get_builder();
76 $resource = $this->current_resource_identifier;
77 $resource_statistics_query->selectRaw('COUNT(*) AS views')->from("{$resources_table} as resources")->join("{$views_table} AS views", function (JoinClause $join) {
78 $join->on('resources.id', '=', 'views.resource_id');
79 })->where('resource', '=', $resource->type())->when($resource->has_meta(), function (Builder $query) use($resource) {
80 $query->where($resource->meta_key(), '=', $resource->meta_value());
81 })->whereBetween('views.viewed_at', [$date_range->iso_start(), $date_range->iso_end()]);
82 $resource_statistics = $resource_statistics_query->get()->first();
83 return $resource_statistics->views ?? 0;
84 }
85 public static function is_option_enabled() : bool
86 {
87 return \IAWP_SCOPED\iawp()->get_option('iawp_disable_admin_toolbar_analytics', \false) === \false && Capability_Manager::can_view();
88 }
89 public static function register()
90 {
91 \add_action('admin_bar_menu', function ($admin_bar) {
92 $menu_bar_stats = new self();
93 if (!$menu_bar_stats->is_enabled()) {
94 return;
95 }
96 foreach ($menu_bar_stats->get_menu_bar_items() as $menu_bar_item) {
97 $is_group = $menu_bar_item['is_group'] ?? \false;
98 // Should the item be registered as a group or a node?
99 if ($is_group) {
100 $admin_bar->add_group($menu_bar_item);
101 } else {
102 $admin_bar->add_node($menu_bar_item);
103 }
104 }
105 }, 100);
106 }
107 }
108