Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/paid-memberships-pro/includes/adminpages.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 + /**
3 + * Get array of PMPro Capabilities
4 + * Used below to figure out which page to have the main Membership menu link to.
5 + * The order is important. The first cap the user has is used.
6 + */
7 + function pmpro_getPMProCaps() {
8 + $pmpro_caps = array(
9 + //pmpro_memberships_menu //this controls viewing the menu itself
10 + 'pmpro_dashboard',
11 + 'pmpro_memberslist',
12 + 'pmpro_orders',
13 + 'pmpro_reports',
14 + 'pmpro_membershiplevels',
15 + 'pmpro_discountcodes',
16 + 'pmpro_pagesettings',
17 + 'pmpro_paymentsettings',
18 + 'pmpro_securitysettings',
19 + 'pmpro_emailsettings',
20 + 'pmpro_emailtemplates',
21 + 'pmpro_userfields',
22 + 'pmpro_designsettings',
23 + 'pmpro_advancedsettings',
24 + 'pmpro_addons',
25 + 'pmpro_updates',
26 + 'pmpro_manage_pause_mode'
27 + );
28 +
29 + return $pmpro_caps;
30 + }
31 +
32 + /**
33 + * Dashboard Menu
34 + */
35 + function pmpro_add_pages() {
36 + global $wpdb;
37 +
38 + //array of all caps in the menu
39 + $pmpro_caps = pmpro_getPMProCaps();
40 +
41 + //the top level menu links to the first page they have access to
42 + foreach( $pmpro_caps as $cap ) {
43 + if( current_user_can( $cap ) ) {
44 + $top_menu_cap = $cap;
45 + break;
46 + }
47 + }
48 +
49 + if( empty( $top_menu_cap ) ) {
50 + return;
51 + }
52 +
53 + // Top level menu
54 + add_menu_page( __( 'Memberships', 'paid-memberships-pro' ), __( 'Memberships', 'paid-memberships-pro' ), 'pmpro_memberships_menu', 'pmpro-dashboard', $top_menu_cap, 'dashicons-groups', 30 );
55 +
56 + // Main submenus
57 + add_submenu_page( 'pmpro-dashboard', __( 'Dashboard', 'paid-memberships-pro' ), __( 'Dashboard', 'paid-memberships-pro' ), 'pmpro_dashboard', 'pmpro-dashboard', 'pmpro_dashboard' );
58 + $members_list_table_hook = add_submenu_page( 'pmpro-dashboard', __( 'Members', 'paid-memberships-pro' ), __( 'Members', 'paid-memberships-pro' ), 'pmpro_memberslist', 'pmpro-memberslist', 'pmpro_memberslist' );
59 + $orders_list_table_hook = add_submenu_page( 'pmpro-dashboard', __( 'Orders', 'paid-memberships-pro' ), __( 'Orders', 'paid-memberships-pro' ), 'pmpro_orders', 'pmpro-orders', 'pmpro_orders' );
60 + $subscriptions_list_table_hook = add_submenu_page( 'pmpro-dashboard', __( 'Subscriptions', 'paid-memberships-pro' ), __( 'Subscriptions', 'paid-memberships-pro' ), pmpro_get_edit_member_capability(), 'pmpro-subscriptions', 'pmpro_subscriptions' );
61 + add_submenu_page( 'pmpro-dashboard', __( 'Reports', 'paid-memberships-pro' ), __( 'Reports', 'paid-memberships-pro' ), 'pmpro_reports', 'pmpro-reports', 'pmpro_reports' );
62 + add_submenu_page( 'pmpro-dashboard', __( 'Settings', 'paid-memberships-pro' ), __( 'Settings', 'paid-memberships-pro' ), 'pmpro_membershiplevels', 'pmpro-membershiplevels', 'pmpro_membershiplevels' );
63 + add_submenu_page( 'pmpro-dashboard', __( 'Add Ons', 'paid-memberships-pro' ), __( 'Add Ons', 'paid-memberships-pro' ), 'pmpro_addons', 'pmpro-addons', 'pmpro_addons' );
64 +
65 + // Check License Key for Correct Link Color
66 + $key = get_option( 'pmpro_license_key', '' );
67 + if ( pmpro_license_isValid( $key, NULL ) ) {
68 + $span_color = '#33FF00';
69 + } else {
70 + $span_color = '#FCD34D';
71 + }
72 + add_submenu_page( 'pmpro-dashboard', __( 'License', 'paid-memberships-pro' ),'<span style="color: ' . $span_color . '">' . __( 'License', 'paid-memberships-pro' ) . '</span>', 'manage_options', 'pmpro-license', 'pmpro_license_settings_page' );
73 +
74 + // Settings tabs
75 + $discount_codes_list_table_hook = add_submenu_page( 'admin.php', __( 'Discount Codes', 'paid-memberships-pro' ), __( 'Discount Codes', 'paid-memberships-pro' ), 'pmpro_discountcodes', 'pmpro-discountcodes', 'pmpro_discountcodes' );
76 + add_submenu_page( 'admin.php', __( 'Page Settings', 'paid-memberships-pro' ), __( 'Page Settings', 'paid-memberships-pro' ), 'pmpro_pagesettings', 'pmpro-pagesettings', 'pmpro_pagesettings' );
77 + add_submenu_page( 'admin.php', __( 'Payment Settings', 'paid-memberships-pro' ), __( 'Payment Settings', 'paid-memberships-pro' ), 'pmpro_paymentsettings', 'pmpro-paymentsettings', 'pmpro_paymentsettings' );
78 + add_submenu_page( 'admin.php', __( 'Security Settings', 'paid-memberships-pro' ), __( 'Security Settings', 'paid-memberships-pro' ), 'pmpro_securitysettings', 'pmpro-securitysettings', 'pmpro_securitysettings' );
79 + add_submenu_page( 'admin.php', __( 'Email Settings', 'paid-memberships-pro' ), __( 'Email Settings', 'paid-memberships-pro' ), 'pmpro_emailsettings', 'pmpro-emailsettings', 'pmpro_emailsettings' );
80 + add_submenu_page( 'admin.php', __( 'Email Templates', 'paid-memberships-pro' ), __( 'Email Templates', 'paid-memberships-pro' ), 'pmpro_emailtemplates', 'pmpro-emailtemplates', 'pmpro_emailtemplates' );
81 + add_submenu_page( 'admin.php', __( 'User Fields', 'paid-memberships-pro' ), __( 'User Fields', 'paid-memberships-pro' ), 'pmpro_userfields', 'pmpro-userfields', 'pmpro_userfields' );
82 + add_submenu_page( 'admin.php', __( 'Design Settings', 'paid-memberships-pro' ), __( 'Design Settings', 'paid-memberships-pro' ), 'pmpro_designsettings', 'pmpro-designsettings', 'pmpro_designsettings' );
83 + add_submenu_page( 'admin.php', __( 'Advanced Settings', 'paid-memberships-pro' ), __( 'Advanced Settings', 'paid-memberships-pro' ), 'pmpro_advancedsettings', 'pmpro-advancedsettings', 'pmpro_advancedsettings' );
84 +
85 + // Set up screen settings for list tables.
86 + add_action( 'load-' . $members_list_table_hook, 'PMPro_Members_List_Table::hook_screen_options' );
87 + add_action( 'load-' . $orders_list_table_hook, 'PMPro_Orders_List_Table::hook_screen_options' );
88 + add_action( 'load-' . $subscriptions_list_table_hook, 'PMPro_Subscriptions_List_Table::hook_screen_options' );
89 + add_action( 'load-' . $discount_codes_list_table_hook, 'PMPro_Discount_Code_List_Table::hook_screen_options' );
90 +
91 + //updates page only if needed
92 + if ( pmpro_isUpdateRequired() ) {
93 + add_submenu_page( 'pmpro-dashboard', __( 'Updates Required', 'paid-memberships-pro' ), __( 'Updates Required', 'paid-memberships-pro' ), 'pmpro_updates', 'pmpro-updates', 'pmpro_updates' );
94 + }
95 +
96 + //Logic added here in order to always reach this page if PMPro is setup. ?page=pmpro-wizard is always reachable should people want to rerun through the Setup Wizard.
97 + if ( pmpro_show_setup_wizard_link() ) {
98 + $wizard_location = 'pmpro-dashboard';
99 + } else {
100 + $wizard_location = 'admin.php'; // Registers the page, but doesn't show up in menu.
101 + }
102 +
103 + add_submenu_page( $wizard_location, __( 'Setup Wizard', 'paid-memberships-pro' ), __( 'Setup Wizard', 'paid-memberships-pro' ), 'pmpro_wizard', 'pmpro-wizard', 'pmpro_wizard' );
104 +
105 + // Hidden pages
106 + add_submenu_page( 'admin.php', __( 'Add Member', 'paid-memberships-pro' ), __( 'Add Member', 'paid-memberships-pro' ), pmpro_get_edit_member_capability(), 'pmpro-member', 'pmpro_member_edit_display' );
107 + }
108 + add_action( 'admin_menu', 'pmpro_add_pages' );
109 +
110 + /**
111 + * Keep the Memberships menu selected on subpages.
112 + */
113 + function pmpro_parent_file( $parent_file ) {
114 + global $parent_file, $plugin_page, $submenu_file;
115 +
116 + $pmpro_settings_tabs = array(
117 + 'pmpro-membershiplevels' => 'pmpro-membershiplevels',
118 + 'pmpro-discountcodes' => 'pmpro-membershiplevels',
119 + 'pmpro-pagesettings' => 'pmpro-membershiplevels',
120 + 'pmpro-paymentsettings' => 'pmpro-membershiplevels',
121 + 'pmpro-securitysettings' => 'pmpro-membershiplevels',
122 + 'pmpro-emailsettings' => 'pmpro-membershiplevels',
123 + 'pmpro-emailtemplates' => 'pmpro-membershiplevels',
124 + 'pmpro-userfields' => 'pmpro-membershiplevels',
125 + 'pmpro-designsettings' => 'pmpro-membershiplevels',
126 + 'pmpro-advancedsettings' => 'pmpro-membershiplevels',
127 + 'pmpro-member' => 'pmpro-memberslist',
128 + );
129 +
130 + if( isset( $_REQUEST['page']) && isset( $pmpro_settings_tabs[ $_REQUEST['page'] ] ) ) {
131 + $parent_file = 'pmpro-dashboard';
132 + $plugin_page = 'pmpro-dashboard';
133 + $submenu_file = $pmpro_settings_tabs[ $_REQUEST['page'] ];
134 + }
135 +
136 + return $parent_file;
137 + }
138 + add_filter( 'parent_file', 'pmpro_parent_file' );
139 +
140 + /**
141 + * Filter the title of the Edit Member admin page.
142 + */
143 + function pmpro_admin_title( $admin_title, $title ) {
144 + // Only filter on the Edit Member page.
145 + if ( isset( $_REQUEST['page']) && $_REQUEST['page'] === 'pmpro-member' ) {
146 + $user = PMPro_Member_Edit_Panel::get_user();
147 + if ( empty( $user->ID ) ) {
148 + $title = __( 'Add Member', 'paid-memberships-pro' );
149 + } else {
150 + /* translators: %s: User's display name. */
151 + $title = sprintf( __( 'Edit Member: %s', 'paid-memberships-pro' ), $user->display_name );
152 + }
153 + /* translators: Edit/Add Member Admin screen title. 1: Screen name, 2: Site name. */
154 + $admin_title = sprintf( __( '%1$s &lsaquo; %2$s &#8212; WordPress', 'paid-memberships-pro' ), $title, get_bloginfo( 'name' ) );
155 + }
156 + return $admin_title;
157 + }
158 + add_filter( 'admin_title', 'pmpro_admin_title', 10, 2 );
159 +
160 + /**
161 + * Admin Bar
162 + */
163 + function pmpro_admin_bar_menu() {
164 + global $wp_admin_bar;
165 +
166 + //view menu at all?
167 + if ( ! current_user_can( 'pmpro_memberships_menu' ) || ! is_admin_bar_showing() ) {
168 + return;
169 + }
170 +
171 + //array of all caps in the menu
172 + $pmpro_caps = pmpro_getPMProCaps();
173 +
174 + //the top level menu links to the first page they have access to
175 + foreach ( $pmpro_caps as $cap ) {
176 + if ( current_user_can( $cap ) ) {
177 + $top_menu_page = str_replace( '_', '-', $cap );
178 + break;
179 + }
180 + }
181 +
182 + $wp_admin_bar->add_menu(
183 + array(
184 + 'id' => 'paid-memberships-pro',
185 + 'title' => __( '<span class="ab-icon"></span>Memberships', 'paid-memberships-pro' ),
186 + 'href' => admin_url( 'admin.php?page=' . $top_menu_page )
187 + )
188 + );
189 +
190 + // Add menu item for Dashboard.
191 + if ( current_user_can( 'pmpro_dashboard' ) ) {
192 + $wp_admin_bar->add_menu(
193 + array(
194 + 'id' => 'pmpro-dashboard',
195 + 'parent' => 'paid-memberships-pro',
196 + 'title' => __( 'Dashboard', 'paid-memberships-pro' ),
197 + 'href' => admin_url( 'admin.php?page=pmpro-dashboard' )
198 + )
199 + );
200 + }
201 +
202 + // Add menu item for Members List.
203 + if ( current_user_can( 'pmpro_memberslist' ) ) {
204 + $wp_admin_bar->add_menu(
205 + array(
206 + 'id' => 'pmpro-members-list',
207 + 'parent' => 'paid-memberships-pro',
208 + 'title' => __( 'Members', 'paid-memberships-pro' ),
209 + 'href' => admin_url( 'admin.php?page=pmpro-memberslist' )
210 + )
211 + );
212 + }
213 +
214 + // Add menu item for Orders.
215 + if ( current_user_can( 'pmpro_orders' ) ) {
216 + $wp_admin_bar->add_menu(
217 + array(
218 + 'id' => 'pmpro-orders',
219 + 'parent' => 'paid-memberships-pro',
220 + 'title' => __( 'Orders', 'paid-memberships-pro' ),
221 + 'href' => admin_url( 'admin.php?page=pmpro-orders' )
222 + )
223 + );
224 + }
225 +
226 + // Add menu item for Subscriptions.
227 + if ( current_user_can( 'pmpro_edit_members' ) ) {
228 + $wp_admin_bar->add_menu(
229 + array(
230 + 'id' => 'pmpro-subscriptions',
231 + 'parent' => 'paid-memberships-pro',
232 + 'title' => __( 'Subscriptions', 'paid-memberships-pro' ),
233 + 'href' => admin_url( 'admin.php?page=pmpro-subscriptions' )
234 + )
235 + );
236 + }
237 +
238 + // Add menu item for Reports.
239 + if ( current_user_can( 'pmpro_reports' ) ) {
240 + $wp_admin_bar->add_menu(
241 + array(
242 + 'id' => 'pmpro-reports',
243 + 'parent' => 'paid-memberships-pro',
244 + 'title' => __( 'Reports', 'paid-memberships-pro' ),
245 + 'href' => admin_url( 'admin.php?page=pmpro-reports' )
246 + )
247 + );
248 + }
249 +
250 + // Add menu item for Settings.
251 + if ( current_user_can( 'pmpro_membershiplevels' ) ) {
252 + $wp_admin_bar->add_menu(
253 + array(
254 + 'id' => 'pmpro-membership-levels',
255 + 'parent' => 'paid-memberships-pro',
256 + 'title' => __( 'Settings', 'paid-memberships-pro' ),
257 + 'href' => admin_url( 'admin.php?page=pmpro-membershiplevels' )
258 + )
259 + );
260 + }
261 +
262 + // Add menu item for Add Ons.
263 + if ( current_user_can( 'pmpro_addons' ) ) {
264 + $wp_admin_bar->add_menu(
265 + array(
266 + 'id' => 'pmpro-addons',
267 + 'parent' => 'paid-memberships-pro',
268 + 'title' => __( 'Add Ons', 'paid-memberships-pro' ),
269 + 'href' => admin_url( 'admin.php?page=pmpro-addons' )
270 + )
271 + );
272 + }
273 +
274 + // Add menu item for License.
275 + if ( current_user_can( 'manage_options' ) ) {
276 + // Check License Key for Correct Link Color
277 + $key = get_option( 'pmpro_license_key', '' );
278 + if ( pmpro_license_isValid( $key, NULL ) ) {
279 + $span_color = '#33FF00';
280 + } else {
281 + $span_color = '#FCD34D';
282 + }
283 + $wp_admin_bar->add_menu(
284 + array(
285 + 'id' => 'pmpro-license',
286 + 'parent' => 'paid-memberships-pro',
287 + 'title' => '<span style="color: ' . $span_color . '; line-height: 26px;">' . __( 'License', 'paid-memberships-pro' ) . '</span>',
288 + 'href' => admin_url( 'admin.php?page=pmpro-license' )
289 + )
290 + );
291 + }
292 +
293 + // Add menu item for adding a new member.
294 + if ( current_user_can( 'edit_users' ) ) {
295 + $wp_admin_bar->add_menu(
296 + array(
297 + 'id' => 'pmpro-new-member',
298 + 'parent' => 'new-content',
299 + 'title' => __( 'Member', 'paid-memberships-pro' ),
300 + 'href' => add_query_arg(
301 + array(
302 + 'page' => 'pmpro-member',
303 + ),
304 + admin_url( 'admin.php' )
305 + )
306 + )
307 + );
308 + }
309 +
310 + // Add a menu item for editing the current user's member information.
311 + if ( current_user_can( 'manage_options' ) ) {
312 + $wp_admin_bar->add_menu(
313 + array(
314 + 'id' => 'pmpro-edit-member',
315 + 'parent' => 'user-actions',
316 + 'title' => __( 'Edit Member', 'paid-memberships-pro' ),
317 + 'href' => add_query_arg(
318 + array(
319 + 'page' => 'pmpro-member',
320 + 'user_id' => get_current_user_id(),
321 + ),
322 + admin_url( 'admin.php' )
323 + )
324 + )
325 + );
326 + }
327 + }
328 + add_action( 'admin_bar_menu', 'pmpro_admin_bar_menu', 1000 );
329 +
330 + /**
331 + * Redirect away from certain admin pages if the single item doesn't exist.
332 + *
333 + * @since 3.0
334 + * @return void
335 + */
336 + function pmpro_admin_init_redirect_single_item_edit() {
337 + // Set to the page we are on or empty string.
338 + $pmpro_admin_page = isset( $_REQUEST['page'] ) ? sanitize_text_field( $_REQUEST['page'] ) : '';
339 +
340 + // Return if no page is set.
341 + if ( empty( $pmpro_admin_page ) ) {
342 + return;
343 + }
344 +
345 + // If page doesn't start with 'pmpro-', return.
346 + if ( strpos( $pmpro_admin_page, 'pmpro-' ) !== 0 ) {
347 + return;
348 + }
349 +
350 + // Edit Membership Level or Group redirects.
351 + if ( $pmpro_admin_page == 'pmpro-membershiplevels' ) {
352 + // If the level they are trying to edit does not exist, redirect them to the membership levels page.
353 + if ( ! empty( $_REQUEST['edit'] ) && $_REQUEST['edit'] > 0 && empty( pmpro_getLevel( $_REQUEST['edit'] ) ) ) {
354 + wp_redirect( add_query_arg( array( 'page' => 'pmpro-membershiplevels' ), admin_url( 'admin.php' ) ) );
355 + exit;
356 + }
357 +
358 + // If the group they are trying to edit does not exist, redirect them to the membership levels page.
359 + if ( ! empty( $_REQUEST['edit_group'] ) && $_REQUEST['edit_group'] > 0 && empty( pmpro_get_level_group( $_REQUEST['edit_group'] ) ) ) {
360 + wp_redirect( add_query_arg( array( 'page' => 'pmpro-membershiplevels' ), admin_url( 'admin.php' ) ) );
361 + exit;
362 + }
363 + }
364 +
365 + // Edit Member redirect.
366 + if ( $pmpro_admin_page == 'pmpro-member' ) {
367 + // If the user they are trying to edit does not exist, redirect them to the members list.
368 + if ( ! empty( $_REQUEST['user_id'] ) && $_REQUEST['user_id'] > 0 && empty( PMPro_Member_Edit_Panel::get_user()->ID ) ) {
369 + wp_redirect( add_query_arg( array( 'page' => 'pmpro-memberslist' ), admin_url( 'admin.php' ) ) );
370 + exit;
371 + }
372 + }
373 +
374 + // Edit Discount Code redirect.
375 + if ( $pmpro_admin_page == 'pmpro-discountcodes' ) {
376 + // If the discount code they are trying to edit does not exist, redirect them to the discount codes page.
377 + if ( ! empty( $_REQUEST['edit'] ) && $_REQUEST['edit'] > 0 ) {
378 + $discount_code = new PMPro_Discount_Code();
379 + $discount_code->get_discount_code_by_id( $_REQUEST['edit'] );
380 + if ( empty( $discount_code->id ) ) {
381 + wp_redirect( add_query_arg( array( 'page' => 'pmpro-discountcodes' ), admin_url( 'admin.php' ) ) );
382 + exit;
383 + }
384 + }
385 + }
386 +
387 + // Edit Order redirect.
388 + if ( $pmpro_admin_page == 'pmpro-orders' ) {
389 + // If the order they are trying to edit does not exist, redirect them to the orders list.
390 + if ( ! empty( $_REQUEST['id'] ) && $_REQUEST['id'] > 0 && empty( MemberOrder::get_order( $_REQUEST['id'] ) ) ) {
391 + wp_redirect( add_query_arg( array( 'page' => 'pmpro-orders' ), admin_url( 'admin.php' ) ) );
392 + exit;
393 + }
394 + }
395 +
396 + // View Subscription redirect.
397 + if ( $pmpro_admin_page == 'pmpro-subscriptions' ) {
398 + // If the subscription they are trying to view does not exist, redirect them to the members list.
399 + if ( ! empty( $_REQUEST['id'] ) && empty( PMPro_Subscription::get_subscription( $_REQUEST['id'] ) ) ) {
400 + wp_redirect( add_query_arg( array( 'page' => 'pmpro-subscriptions' ), admin_url( 'admin.php' ) ) );
401 + exit;
402 + }
403 + }
404 + }
405 + add_action( 'admin_init', 'pmpro_admin_init_redirect_single_item_edit' );
406 +
407 + /**
408 + * Add the "Admin Membership Access" menu to the admin bar.
409 + */
410 + function pmpro_admin_membership_access_menu_bar() {
411 + global $wp_admin_bar, $current_user;
412 +
413 + // Only show when viewing the frontend of the site.
414 + if ( is_admin() ) {
415 + return;
416 + }
417 +
418 + /**
419 + * Filter to hide the "Admin Membership Access" menu in the admin bar.
420 + * @since 3.0
421 + * @param bool $hide Whether to hide the "Admin Membership Access" menu in the admin bar. Default false.
422 + */
423 + if ( apply_filters( 'pmpro_hide_admin_membership_access_toolbar', false ) ) {
424 + return;
425 + }
426 +
427 + // View menu at all?
428 + if ( ! current_user_can( 'manage_options' ) || ! is_admin_bar_showing() ) {
429 + return;
430 + }
431 +
432 + // Let's save or delete the option now.
433 + if ( ! empty( $_REQUEST['pmpro-admin-membership-access'] ) ) {
434 +
435 + // Check the nonce.
436 + check_admin_referer( 'pmpro_admin_membership_access', 'pmpro_admin_membership_access_nonce' );
437 +
438 + // Let's get the value of the view_as now:
439 + $admin_membership_access = sanitize_text_field( $_REQUEST['pmpro-admin-membership-access'] );
440 +
441 + if ( $admin_membership_access == 'no' ) {
442 + update_user_meta( $current_user->ID, 'pmpro_admin_membership_access', 'no' );
443 + } elseif ( $admin_membership_access == 'current' ) {
444 + update_user_meta( $current_user->ID, 'pmpro_admin_membership_access', 'current' );
445 + } else {
446 + update_user_meta( $current_user->ID, 'pmpro_admin_membership_access', 'yes' );
447 + }
448 +
449 + echo "<meta http-equiv='refresh' content='0'>";
450 + }
451 +
452 + // Let's get the option now so we can show it.
453 + $admin_membership_access = get_user_meta( $current_user->ID, 'pmpro_admin_membership_access', true );
454 + if ( ! in_array( $admin_membership_access, array( 'yes', 'no' ) ) ) {
455 + $admin_membership_access = 'current';
456 + }
457 +
458 + // Set the title and the option value.
459 + $title = '<span class="pmpro_admin-view pmpro_admin-view-' . esc_attr( $admin_membership_access ) . '">';
460 + if ( 'no' === $admin_membership_access ) {
461 + $title .= '<span class="ab-icon dashicons dashicons-lock non-member-icon"></span>' . esc_html__( 'View: No Access', 'paid-memberships-pro' );
462 + } elseif ( 'yes' === $admin_membership_access ) {
463 + $title .= '<span class="ab-icon dashicons dashicons-unlock has-access-icon"></span>' . esc_html__( 'View: With Access', 'paid-memberships-pro' );
464 + } else {
465 + $title .= '<span class="ab-icon dashicons dashicons-admin-users current-access-icon"></span>' . esc_html__( 'View: My Access', 'paid-memberships-pro' );
466 + }
467 + $title .= '</span>';
468 +
469 + $wp_admin_bar->add_menu(
470 + array(
471 + 'id' => 'pmpro-admin-membership-access',
472 + 'parent' => 'top-secondary',
473 + 'title' => $title,
474 + )
475 + );
476 +
477 + // Build a form input for changing the Admin Membership Access setting.
478 + ob_start();
479 + ?>
480 + <form method="POST" id="pmpro-admin-membership-access-form" action="">
481 + <p><?php esc_html_e( 'Preview your membership site by changing the selected view below.', 'paid-memberships-pro' ); ?></p>
482 + <select name="pmpro-admin-membership-access" id="pmpro-admin-membership-access" onchange="this.form.submit()">
483 + <option value="yes" <?php selected( $admin_membership_access, 'yes', true ); ?>><?php esc_html_e( 'View with membership access', 'paid-memberships-pro' ); ?></option>
484 + <option value="current" <?php selected( $admin_membership_access, 'current', true ); ?>><?php esc_html_e( 'View with current membership levels', 'paid-memberships-pro' ); ?></option>
485 + <option value="no" <?php selected( $admin_membership_access, 'no', true ); ?>><?php esc_html_e( 'View without membership access', 'paid-memberships-pro' ); ?></option>
486 + </select>
487 + <?php wp_nonce_field( 'pmpro_admin_membership_access', 'pmpro_admin_membership_access_nonce' ); ?>
488 + </form>
489 + <script>
490 + // Needed to fix Firefox issue where the admin membership access setting couldn't be changed.
491 + document.addEventListener( 'DOMContentLoaded', function() {
492 + document.getElementById( 'pmpro-admin-membership-access' ).addEventListener( 'mouseout', function( ev ) {
493 + ev.stopPropagation();
494 + });
495 + });
496 + </script>
497 + <?php
498 +
499 + // Add the form to the menu.
500 + $wp_admin_bar->add_node( array(
501 + 'parent' => 'pmpro-admin-membership-access',
502 + 'id' => 'pmpro-admin-membership-access-input',
503 + 'title' => ob_get_clean(),
504 + ) );
505 + }
506 + add_action( 'admin_bar_menu', 'pmpro_admin_membership_access_menu_bar' );
507 +
508 + /**
509 + * Functions to load pages from adminpages directory
510 + */
511 + function pmpro_reports() {
512 + //ensure, that the needed javascripts been loaded to allow drag/drop, expand/collapse and hide/show of boxes
513 + wp_enqueue_script( 'common' );
514 + wp_enqueue_script( 'wp-lists' );
515 + wp_enqueue_script( 'postbox' );
516 +
517 + require_once( PMPRO_DIR . '/adminpages/reports.php' );
518 + }
519 +
520 + function pmpro_memberslist() {
521 + require_once( PMPRO_DIR . '/adminpages/memberslist.php' );
522 + }
523 +
524 + function pmpro_discountcodes() {
525 + require_once( PMPRO_DIR . '/adminpages/discountcodes.php' );
526 + }
527 +
528 + function pmpro_dashboard() {
529 + //ensure, that the needed javascripts been loaded to allow drag/drop, expand/collapse and hide/show of boxes
530 + wp_enqueue_script( 'common' );
531 + wp_enqueue_script( 'wp-lists' );
532 + wp_enqueue_script( 'postbox' );
533 +
534 + require_once( PMPRO_DIR . '/adminpages/dashboard.php' );
535 + }
536 +
537 + function pmpro_wizard() {
538 + require_once( PMPRO_DIR . '/adminpages/wizard/wizard.php' );
539 + }
540 +
541 + function pmpro_membershiplevels() {
542 + require_once( PMPRO_DIR . '/adminpages/membershiplevels.php' );
543 + }
544 +
545 + function pmpro_pagesettings() {
546 + require_once( PMPRO_DIR . '/adminpages/pagesettings.php' );
547 + }
548 +
549 + function pmpro_paymentsettings() {
550 + require_once( PMPRO_DIR . '/adminpages/paymentsettings.php' );
551 + }
552 +
553 + function pmpro_securitysettings() {
554 + require_once( PMPRO_DIR . '/adminpages/securitysettings.php' );
555 + }
556 +
557 + function pmpro_emailsettings() {
558 + require_once( PMPRO_DIR . '/adminpages/emailsettings.php' );
559 + }
560 +
561 + function pmpro_userfields() {
562 + //ensure, that the needed javascripts been loaded to allow drag/drop, expand/collapse and hide/show of boxes
563 + wp_enqueue_script( 'common' );
564 + wp_enqueue_script( 'wp-lists' );
565 + wp_enqueue_script( 'postbox' );
566 +
567 + require_once( PMPRO_DIR . '/adminpages/userfields.php' );
568 + }
569 +
570 + function pmpro_emailtemplates() {
571 + require_once( PMPRO_DIR . '/adminpages/emailtemplates.php' );
572 + }
573 +
574 + function pmpro_designsettings() {
575 + require_once( PMPRO_DIR . '/adminpages/designsettings.php' );
576 + }
577 +
578 + function pmpro_advancedsettings() {
579 + require_once( PMPRO_DIR . '/adminpages/advancedsettings.php' );
580 + }
581 +
582 + function pmpro_addons() {
583 + require_once( PMPRO_DIR . '/adminpages/addons.php' );
584 + }
585 +
586 + function pmpro_orders() {
587 + require_once( PMPRO_DIR . '/adminpages/orders.php' );
588 + }
589 +
590 + function pmpro_subscriptions() {
591 + require_once( PMPRO_DIR . '/adminpages/subscriptions.php' );
592 + }
593 +
594 + function pmpro_license_settings_page() {
595 + require_once( PMPRO_DIR . '/adminpages/license.php' );
596 + }
597 +
598 + function pmpro_updates() {
599 + require_once( PMPRO_DIR . '/adminpages/updates.php' );
600 + }
601 +
602 + /**
603 + * Move orphaned pages under the pmpro-dashboard menu page.
604 + */
605 + function pmpro_fix_orphaned_sub_menu_pages( ) {
606 + global $submenu;
607 +
608 + if ( is_array( $submenu) && array_key_exists( 'pmpro-membershiplevels', $submenu ) ) {
609 + $pmpro_dashboard_submenu = $submenu['pmpro-dashboard'];
610 + $pmpro_old_memberships_submenu = $submenu['pmpro-membershiplevels'];
611 +
612 + if ( is_array( $pmpro_dashboard_submenu ) && is_array( $pmpro_old_memberships_submenu ) ) {
613 + $submenu['pmpro-dashboard'] = array_merge( $pmpro_dashboard_submenu, $pmpro_old_memberships_submenu );
614 + }
615 + }
616 + }
617 + add_action( 'admin_init', 'pmpro_fix_orphaned_sub_menu_pages', 99 );
618 +
619 + /**
620 + * Add a post display state for special PMPro pages in the page list table.
621 + *
622 + * @param array $post_states An array of post display states.
623 + * @param WP_Post $post The current post object.
624 + */
625 + function pmpro_display_post_states( $post_states, $post ) {
626 + // Get assigned page settings.
627 + global $pmpro_pages;
628 +
629 + if ( intval( $pmpro_pages['account'] ) === $post->ID ) {
630 + $post_states['pmpro_account_page'] = __( 'Membership Account Page', 'paid-memberships-pro' );
631 + }
632 +
633 + if ( intval( $pmpro_pages['billing'] ) === $post->ID ) {
634 + $post_states['pmpro_billing_page'] = __( 'Membership Billing Information Page', 'paid-memberships-pro' );
635 + }
636 +
637 + if ( intval( $pmpro_pages['cancel'] ) === $post->ID ) {
638 + $post_states['pmpro_cancel_page'] = __( 'Membership Cancel Page', 'paid-memberships-pro' );
639 + }
640 +
641 + if ( intval( $pmpro_pages['checkout'] ) === $post->ID ) {
642 + $post_states['pmpro_checkout_page'] = __( 'Membership Checkout Page', 'paid-memberships-pro' );
643 + }
644 +
645 + if ( intval( $pmpro_pages['confirmation'] ) === $post->ID ) {
646 + $post_states['pmpro_confirmation_page'] = __( 'Membership Confirmation Page', 'paid-memberships-pro' );
647 + }
648 +
649 + if ( intval( $pmpro_pages['invoice'] ) === $post->ID ) {
650 + $post_states['pmpro_invoice_page'] = __( 'Membership Orders Page', 'paid-memberships-pro' );
651 + }
652 +
653 + if ( intval( $pmpro_pages['levels'] ) === $post->ID ) {
654 + $post_states['pmpro_levels_page'] = __( 'Membership Levels Page', 'paid-memberships-pro' );
655 + }
656 +
657 + if ( intval( $pmpro_pages['login'] ) === $post->ID ) {
658 + $post_states['pmpro_login_page'] = __( 'Paid Memberships Pro Login Page', 'paid-memberships-pro' );
659 + }
660 +
661 + if ( intval( $pmpro_pages['member_profile_edit'] ) === $post->ID ) {
662 + $post_states['pmpro_member_profile_edit_page'] = __( 'Member Profile Edit Page', 'paid-memberships-pro' );
663 + }
664 +
665 + return $post_states;
666 + }
667 + add_filter( 'display_post_states', 'pmpro_display_post_states', 10, 2 );
668 +
669 + /**
670 + * Screen options for the List Table
671 + *
672 + * Callback for the load-($page_hook_suffix)
673 + * Called when the plugin page is loaded
674 + *
675 + * @since 2.0.0
676 + * @deprecated 3.0
677 + */
678 + function pmpro_list_table_screen_options() {
679 + _deprecated_function( __FUNCTION__, '3.0' );
680 +
681 + $arguments = array(
682 + 'label' => __( 'Members Per Page', 'paid-memberships-pro' ),
683 + 'default' => 13,
684 + 'option' => 'users_per_page',
685 + );
686 + add_screen_option( 'per_page', $arguments );
687 + // instantiate the User List Table
688 + $user_list_table = new PMPro_Members_List_Table();
689 + }
690 +
691 + /**
692 + * Add links to the plugin action links
693 + */
694 + function pmpro_add_action_links( $links ) {
695 +
696 + //array of all caps in the menu
697 + $pmpro_caps = pmpro_getPMProCaps();
698 +
699 + //the top level menu links to the first page they have access to
700 + foreach( $pmpro_caps as $cap ) {
701 + if ( current_user_can( $cap ) ) {
702 + $top_menu_page = str_replace( '_', '-', $cap );
703 + break;
704 + }
705 + }
706 +
707 + if ( empty( $top_menu_page ) ) {
708 + return $links;
709 + }
710 +
711 + $new_links = array(
712 + '<a href="' . admin_url( 'admin.php?page=' . $top_menu_page ) . '">Settings</a>',
713 + );
714 + return array_merge( $new_links, $links );
715 + }
716 + add_filter( 'plugin_action_links_' . plugin_basename( PMPRO_DIR . '/paid-memberships-pro.php' ), 'pmpro_add_action_links' );
717 +
718 + /**
719 + * Add links to the plugin row meta
720 + */
721 + function pmpro_plugin_row_meta( $links, $file ) {
722 + if ( strpos( $file, 'paid-memberships-pro.php' ) !== false ) {
723 + $new_links = array(
724 + '<a href="' . esc_url( apply_filters( 'pmpro_docs_url', 'http://paidmembershipspro.com/documentation/' ) ) . '" title="' . esc_attr( __( 'View PMPro Documentation', 'paid-memberships-pro' ) ) . '">' . __( 'Docs', 'paid-memberships-pro' ) . '</a>',
725 + '<a href="' . esc_url( apply_filters( 'pmpro_support_url', 'http://paidmembershipspro.com/support/' ) ) . '" title="' . esc_attr( __( 'Visit Customer Support Forum', 'paid-memberships-pro' ) ) . '">' . __( 'Support', 'paid-memberships-pro' ) . '</a>',
726 + );
727 + $links = array_merge( $links, $new_links );
728 + }
729 + return $links;
730 + }
731 + add_filter( 'plugin_row_meta', 'pmpro_plugin_row_meta', 10, 2 );
732 +
733 + function pmpro_users_action_links( $actions, $user ) {
734 + // If the user doesn't have the capability to edit members, return.
735 + if ( ! current_user_can( pmpro_get_edit_member_capability() ) ) {
736 + return $actions;
737 + }
738 +
739 + // If the user doesn't have an ID, return.
740 + if ( empty( $user->ID ) ) {
741 + return $actions;
742 + }
743 +
744 + // Add the edit member link.
745 + $actions['editmember'] = '<a href="' . esc_url( add_query_arg( array( 'page' => 'pmpro-member', 'user_id' => (int) $user->ID ), admin_url( 'admin.php' ) ) ) . '">' . __( 'Edit Member', 'paid-memberships-pro' ) . '</a>';
746 +
747 + return $actions;
748 + }
749 + add_filter( 'user_row_actions', 'pmpro_users_action_links', 10, 2 );
750 +