PluginProbe
Plausible Analytics / trunk
Plausible Analytics vtrunk
2.6.1 2.6.0 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 All 52 releases
plausible-analytics / src / AdminBar.php

AdminBar.php in Plausible Analytics trunk, at src/AdminBar.php

167 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plausible Analytics | Admin
4 */
5
6 namespace Plausible\Analytics\WP;
7
8 class AdminBar {
9 /**
10 * Build class.
11 */
12 public function __construct() {
13 $this->init();
14 }
15
16 /**
17 * Action/filter hooks.
18 *
19 * @return void
20 */
21 private function init() {
22 add_action( 'admin_bar_menu', [ $this, 'admin_bar_node' ], 100 );
23 add_filter( 'plausible_analytics_admin_bar_args', [ $this, 'maybe_add_analytics' ], 10, 2 );
24 add_filter( 'plausible_analytics_admin_bar_args', [ $this, 'maybe_add_settings' ] );
25 }
26
27
28 /**
29 * Create admin bar nodes.
30 *
31 * @since 1.3.0
32 *
33 * @param \WP_Admin_Bar $admin_bar Admin bar object.
34 *
35 * @return void
36 */
37 public function admin_bar_node( $admin_bar ) {
38 $disable = ! empty( Helpers::get_settings()['disable_toolbar_menu'] );
39
40 if ( $disable ) {
41 return; // @codeCoverageIgnore
42 }
43
44 $settings = Helpers::get_settings();
45 $current_user = wp_get_current_user();
46
47 $has_access = false;
48 $user_roles_have_access = array_merge(
49 [ 'administrator' ],
50 $settings['expand_dashboard_access'] ?? []
51 );
52
53 foreach ( $current_user->roles as $role ) {
54 if ( in_array( $role, $user_roles_have_access, true ) ) {
55 $has_access = true;
56 break;
57 }
58 }
59
60 if ( ! $has_access ) {
61 return;
62 }
63
64 // Add main admin bar node.
65 $args = apply_filters( 'plausible_analytics_admin_bar_args', [
66 [
67 'id' => 'plausible-analytics',
68 'title' => 'Plausible Analytics',
69 ],
70 ], $settings );
71
72 foreach ( $args as $arg ) {
73 $admin_bar->add_node( $arg );
74 }
75 }
76
77 /**
78 * Adds the View Analytics link to the Admin Bar Menu if any of the related settings are enabled.
79 *
80 * @param $args
81 * @param $settings
82 *
83 * @return mixed
84 */
85 public function maybe_add_analytics( $args, $settings ) {
86 if ( ! empty( $settings['enable_analytics_dashboard'] ) || ( ! empty( $settings['self_hosted_domain'] ) && ! empty( $settings['self_hosted_shared_link'] ) ) ) {
87 $language_domains = Helpers::get_language_domains();
88
89 foreach ( $language_domains as $key => $language_domain ) {
90 $domain_key = $key !== 'default' ? $key : '';
91
92 if ( $domain_key && empty( $settings['shared_link'][ $domain_key ] ) ) {
93 continue; // @codeCoverageIgnore
94 }
95
96 $href = add_query_arg( 'page', 'plausible_analytics_statistics', admin_url( 'index.php' ) );
97
98 if ( $domain_key ) {
99 $href = add_query_arg( 'domain', $domain_key, $href );
100 }
101
102 $args[] = [
103 'id' => "view-analytics-$key",
104 /* translators: %s: language domain. */
105 'title' => sprintf(
106 esc_html__( 'View analytics for %s', 'plausible-analytics' ),
107 $language_domain
108 ),
109 'href' => $href,
110 'parent' => 'plausible-analytics',
111 ];
112 }
113
114 // Add a link to individual page stats.
115 if ( $this->is_singular() ) {
116 global $post;
117
118 $uri = wp_make_link_relative( get_permalink( $post->ID ) );
119
120 $args[] = [
121 'id' => 'view-page-analytics',
122 'title' => esc_html__( 'View page analytics', 'plausible-analytics' ),
123 'href' => add_query_arg(
124 'page-url',
125 is_home() ? '' : $uri,
126 admin_url( 'index.php?page=plausible_analytics_statistics' )
127 ),
128 'parent' => 'plausible-analytics',
129 ];
130 }
131 }
132
133 return apply_filters( 'plausible_analytics_admin_bar_view_analytics', $args );
134 }
135
136 /**
137 * This seam is merely to keep our code testable.
138 *
139 * @return bool
140 *
141 * @codeCoverageIgnore Because we don't want to test WP core functions.
142 */
143 protected function is_singular() {
144 return is_singular();
145 }
146
147 /**
148 * Adds the Settings link to the Admin Bar Menu if the current user can manage options.
149 *
150 * @param $args
151 *
152 * @return mixed
153 */
154 public function maybe_add_settings( $args ) {
155 if ( current_user_can( 'manage_options' ) ) {
156 $args[] = [
157 'id' => 'settings',
158 'title' => esc_html__( 'Settings', 'plausible-analytics' ),
159 'href' => admin_url( 'options-general.php?page=plausible_analytics' ),
160 'parent' => 'plausible-analytics',
161 ];
162 }
163
164 return $args;
165 }
166 }
167