Diff: STRATO-apps/wordpress_03/app/wp-content/plugins/paid-memberships-pro/includes/adminpages.php
Keine Baseline-Datei – Diff nur gegen leer.
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 ‹ %2$s — 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
+