PluginProbe
Analytify – Google Analytics Dashboard For WordPress (GA4 analytics tracking) / trunk
Analytify – Google Analytics Dashboard For WordPress (GA4 analytics tracking) vtrunk
9.1.2 9.1.1 9.1.0 9.0.2 9.0.1 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.1.0 1.1.1 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 All 153 releases
wp-analytify / inc / analytify-navigation.php

analytify-navigation.php in Analytify – Google Analytics Dashboard For WordPress (GA4 analytics tracking) trunk, at inc/analytify-navigation.php

321 lines 10.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Navigation File for Analytify Plugin
4 *
5 * This file contains all dashboard navigation functionality including
6 * menu generation, navigation anchors, && submenu markup.
7 *
8 * @package WP_Analytify
9 * @since 8.0.0
10 */
11
12 // Prevent direct access.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit;
15 }
16
17 /**
18 * Navigation Methods for Analytify_General Class
19 */
20 trait Analytify_Navigation {
21
22 /**
23 * Create dashboard navigation anchors.
24 *
25 * @param array $nav_item Single navigation item data array.
26 *
27 * @return mixed $anchor
28 */
29 private function navigation_anchors( array $nav_item ) {
30
31 $current_screen = get_current_screen()->base;
32 $current_addon_name = '';
33
34 // Check if child dashboard page for addon/module.
35 // Sanitize GET parameters for security.
36 if ( isset( $_GET['addon'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reading URL parameters for display purposes
37 $current_addon_name = sanitize_text_field( wp_unslash( $_GET['addon'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reading URL parameters for display purposes
38 } elseif ( isset( $_GET['show'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reading URL parameters for display purposes
39 $current_addon_name = sanitize_text_field( wp_unslash( $_GET['show'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Reading URL parameters for display purposes
40 }
41
42 // Initialize variables to prevent undefined variable errors.
43 $nav_link = '';
44 $active_tab = '';
45
46 if ( 'pro_feature' === $nav_item['module_type'] ) {
47 // Module availbe in pro version as switchable feature.
48
49 $nav_link = $this->addon_is_active( 'wp-analytify-pro' ) && 'active' === $this->modules[ $nav_item['addon_slug'] ]['status'] ? admin_url( 'admin.php?page=' . $nav_item['page_slug'] ) : admin_url( 'admin.php?page=analytify-promo&addon=' . $nav_item['addon_slug'] );
50 $active_tab = ( 'analytify_page_' . $nav_item['page_slug'] === $current_screen || $nav_item['addon_slug'] === $current_addon_name ) ? 'nav-tab-active' : '';
51 } elseif ( 'pro_inner' === $nav_item['module_type'] ) {
52 // Module build in pro version.
53
54 $nav_link = $this->addon_is_active( 'wp-analytify-pro' ) ? admin_url( 'admin.php?page=' . $nav_item['page_slug'] . '&show=' . $nav_item['addon_slug'] ) : admin_url( 'admin.php?page=analytify-promo&addon=' . $nav_item['addon_slug'] );
55 $active_tab = ( 'analytify_page_' . $nav_item['page_slug'] === $current_screen || $nav_item['addon_slug'] === $current_addon_name ) ? 'nav-tab-active' : '';
56 } elseif ( 'pro_addon' === $nav_item['module_type'] ) {
57 // Not inner module, rather a seperate plugin.
58
59 $nav_link = $this->addon_is_active( $nav_item['addon_slug'] ) ? admin_url( 'admin.php?page=' . $nav_item['page_slug'] ) : admin_url( 'admin.php?page=analytify-promo&addon=' . $nav_item['addon_slug'] );
60 $active_tab = ( 'analytify_page_' . $nav_item['page_slug'] === $current_screen || $nav_item['addon_slug'] === $current_addon_name ) ? 'nav-tab-active' : '';
61 } elseif ( 'free' === $nav_item['module_type'] ) {
62 // Free version main dashboard page.
63
64 $nav_link = admin_url( 'admin.php?page=' . $nav_item['page_slug'] );
65 $active_tab = ( 'toplevel_page_' . $nav_item['page_slug'] === $current_screen && empty( $current_addon_name ) ) ? 'nav-tab-active' : '';
66 }
67
68 $anchor = '<a href="' . esc_url( $nav_link ) . '" class="analytify_nav_tab ' . $active_tab . '">' . $nav_item['name'];
69 $anchor .= ( isset( $nav_item['sub_name'] ) && ! empty( $nav_item['sub_name'] ) ) ? '<span>' . $nav_item['sub_name'] . '</span>' : '';
70 $anchor .= '</a>';
71
72 return $anchor;
73 }
74
75 /**
76 * Generate dashboard navigation markup.
77 *
78 * @param array $nav_items Navigation items data array.
79 */
80 private function navigation_markup( array $nav_items ) {
81 if ( is_array( $nav_items ) && 0 < count( $nav_items ) ) {
82 echo '<div class="analytify_nav_tab_wrapper nav-tab-wrapper">';
83 echo wp_kses_post( $this->generate_submenu_markup( $nav_items, 'analytify_nav_tab_wrapper', 'analytify_nav_tab_parent' ) );
84 echo '</div>';
85 }
86 }
87
88 /**
89 * Create HTML markup for navigation on dashboard.
90 *
91 * @param array $nav_items Navigation items data array.
92 * @param string $wrapper_classes Class attribute for navigation wrapper.
93 * @param string $list_item_classes Class attribute for list item.
94 *
95 * @return mixed $markup
96 */
97 private function generate_submenu_markup( array $nav_items, $wrapper_classes = false, $list_item_classes = false ) {
98
99 // Hide tabs filter.
100 $hide_tabs = apply_filters( 'analytify_hide_dashboard_tabs', array() );
101
102 // Wrapper.
103 $markup = '<ul';
104 $markup .= $wrapper_classes ? ' class="' . $wrapper_classes . '"' : '';
105 $markup .= '>';
106
107 // Loop over all the menu items.
108 foreach ( $nav_items as $items ) {
109
110 // Exclude hidden tabs from dashboard as in filter.
111 if ( $hide_tabs && in_array( $items['name'], $hide_tabs, true ) ) {
112 continue;
113 }
114
115 $markup .= '<li';
116 $markup .= $list_item_classes ? ' class="' . $list_item_classes . '"' : '';
117 $markup .= '>';
118
119 // generate anchor.
120 $markup .= $this->navigation_anchors( $items );
121
122 // check if the menu has children, then call itself to generate the child menu.
123 if ( isset( $items['children'] ) && is_array( $items['children'] ) ) {
124 $markup .= $this->generate_submenu_markup( $items['children'] );
125 }
126
127 $markup .= '</li>';
128 }
129
130 // End wrapper.
131 $markup .= '</ul>';
132
133 return $markup;
134 }
135
136 /**
137 * Register dashboard navigation menu.
138 *
139 * @version 9.0.0
140 */
141 public function dashboard_navigation() {
142
143 $nav_items = apply_filters(
144 'analytify_filter_navigation_items',
145 array(
146
147 array(
148 'name' => 'Audience',
149 'sub_name' => 'Overview',
150 'page_slug' => 'analytify-dashboard',
151 'addon_slug' => 'wp-analytify',
152 'module_type' => 'free',
153 ),
154
155 array(
156 'name' => 'Conversions',
157 'sub_name' => 'All Events',
158 'page_slug' => 'analytify-forms',
159 'addon_slug' => 'wp-analytify-forms',
160 'module_type' => 'pro_addon',
161 'children' => array(
162 array(
163 'name' => 'Forms Tracking',
164 'sub_name' => 'View Forms Analytics',
165 'page_slug' => 'analytify-forms',
166 'addon_slug' => 'wp-analytify-forms',
167 'module_type' => 'pro_addon',
168 ),
169 array(
170 'name' => 'Events Tracking',
171 'sub_name' => 'Affiliates, clicks & links tracking',
172 'page_slug' => 'analytify-events',
173 'addon_slug' => 'events-tracking',
174 'module_type' => 'pro_feature',
175 ),
176 array(
177 'name' => 'Video Tracking',
178 'sub_name' => 'Track actions, duration & events',
179 'page_slug' => 'analytify-dashboard',
180 'addon_slug' => 'video-tracking',
181 'module_type' => 'pro_inner',
182 ),
183 ),
184 ),
185
186 array(
187 'name' => 'Acquisition',
188 'sub_name' => 'Goals, Campaigns',
189 'page_slug' => 'analytify-campaigns',
190 'addon_slug' => 'wp-analytify-campaigns',
191 'module_type' => 'pro_addon',
192 'children' => array(
193 array(
194 'name' => 'Search Console',
195 'sub_name' => 'Google Search Console',
196 'page_slug' => 'analytify-dashboard',
197 'addon_slug' => 'search-console-report',
198 'module_type' => 'pro_inner',
199 ),
200 array(
201 'name' => 'Campaigns',
202 'sub_name' => 'UTM Overview',
203 'page_slug' => 'analytify-campaigns',
204 'addon_slug' => 'wp-analytify-campaigns',
205 'module_type' => 'pro_addon',
206 ),
207 array(
208 'name' => 'Goals',
209 'sub_name' => 'Key Events',
210 'page_slug' => 'analytify-goals',
211 'addon_slug' => 'wp-analytify-goals',
212 'module_type' => 'pro_addon',
213 ),
214 array(
215 'name' => 'PageSpeed Insights',
216 'sub_name' => 'Google Web Performance',
217 'page_slug' => 'analytify-dashboard',
218 'addon_slug' => 'page-speed',
219 'module_type' => 'pro_inner',
220 ),
221 ),
222 ),
223
224 array(
225 'name' => 'Monetization',
226 'sub_name' => 'Overview',
227 'page_slug' => 'analytify-woocommerce',
228 'addon_slug' => 'wp-analytify-woocommerce',
229 'module_type' => 'pro_addon',
230 'clickable' => true,
231 'children' => array(
232 array(
233 'name' => 'WooCommerce',
234 'sub_name' => 'eCommerce Stats',
235 'page_slug' => 'analytify-woocommerce',
236 'addon_slug' => 'wp-analytify-woocommerce',
237 'module_type' => 'pro_addon',
238 ),
239 array(
240 'name' => 'EDD',
241 'sub_name' => 'Checkout behavior',
242 'page_slug' => 'edd-dashboard',
243 'addon_slug' => 'wp-analytify-edd',
244 'module_type' => 'pro_addon',
245 ),
246 array(
247 'name' => 'LifterLMS',
248 'sub_name' => 'Course Stats',
249 'page_slug' => 'analytify-lifterlms',
250 'addon_slug' => 'wp-analytify-lifterlms',
251 'module_type' => 'pro_addon',
252 ),
253 array(
254 'name' => 'Paid Memberships Pro',
255 'sub_name' => 'Membership Analytics',
256 'page_slug' => 'analytify-pmpro',
257 'addon_slug' => 'wp-analytify-pmpro',
258 'module_type' => 'pro_addon',
259 ),
260 array(
261 'name' => 'LearnDash',
262 'sub_name' => 'Course Analytics',
263 'page_slug' => 'analytify-learndash',
264 'addon_slug' => 'wp-analytify-learndash',
265 'module_type' => 'pro_addon',
266 ),
267 ),
268 ),
269
270 array(
271 'name' => 'Engagement',
272 'sub_name' => 'Authors, Dimensions',
273 'page_slug' => 'analytify-authors',
274 'addon_slug' => 'wp-analytify-authors',
275 'module_type' => 'pro_addon',
276 'children' => array(
277 array(
278 'name' => 'Authors',
279 'sub_name' => 'Authors Content Overview',
280 'page_slug' => 'analytify-authors',
281 'addon_slug' => 'wp-analytify-authors',
282 'module_type' => 'pro_addon',
283 ),
284 array(
285 'name' => 'Demographics',
286 'sub_name' => 'Age, Gender & Interests',
287 'page_slug' => 'analytify-dashboard',
288 'addon_slug' => 'detail-demographic',
289 'module_type' => 'pro_inner',
290 ),
291 array(
292 'name' => 'Search Terms',
293 'sub_name' => 'On Site Searches',
294 'page_slug' => 'analytify-dashboard',
295 'addon_slug' => 'search-terms',
296 'module_type' => 'pro_inner',
297 ),
298 array(
299 'name' => 'Dimensions',
300 'sub_name' => 'Custom Dimensions',
301 'page_slug' => 'analytify-dimensions',
302 'addon_slug' => 'custom-dimensions',
303 'module_type' => 'pro_feature',
304 ),
305 ),
306 ),
307
308 array(
309 'name' => 'Real-Time',
310 'sub_name' => 'Live Stats',
311 'page_slug' => 'analytify-dashboard',
312 'addon_slug' => 'detail-realtime',
313 'module_type' => 'pro_inner',
314 ),
315 )
316 );
317
318 $this->navigation_markup( $nav_items );
319 }
320 }
321