PluginProbe
Members – Membership & User Role Editor Plugin / 3.2.24
Members – Membership & User Role Editor Plugin v3.2.24
3.2.25 3.2.26 3.2.24 3.2.23 3.2.22 3.2.21 trunk 0.1 0.1.1 0.2 0.2.1 0.2.2 0.2.3 0.2.4 0.2.5 1.0.0 1.0.1 1.0.2 1.1.0 1.1.1 1.1.2 1.1.3 2.0.0 2.0.1 2.0.2 All 66 releases
members / admin / functions-admin.php

functions-admin.php in Members – Membership & User Role Editor Plugin 3.2.24, at admin/functions-admin.php

346 lines 11.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * General admin functionality.
4 *
5 * @package Members
6 * @subpackage Admin
7 * @author The MemberPress Team
8 * @copyright Copyright (c) 2009 - 2018, The MemberPress Team
9 * @link https://members-plugin.com/
10 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
11 */
12 if (!defined('ABSPATH')) {
13 die('You are not allowed to call this page directly.');
14 }
15
16 # Register scripts/styles.
17 add_action( 'admin_enqueue_scripts', 'members_admin_register_scripts', 0 );
18 add_action( 'admin_enqueue_scripts', 'members_admin_register_styles', 0 );
19
20 /**
21 * Get an Underscore JS template.
22 *
23 * @since 1.0.0
24 * @access public
25 * @param string $name
26 * @return bool
27 */
28 function members_get_underscore_template( $name ) {
29 require_once( members_plugin()->dir . "admin/tmpl/{$name}.php" );
30 }
31
32 /**
33 * Registers custom plugin scripts.
34 *
35 * @since 1.0.0
36 * @access public
37 * @return void
38 */
39 function members_admin_register_scripts() {
40
41 $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
42
43 $settings_file = members_plugin()->dir . "js/settings{$min}.js";
44 $settings_ver = file_exists( $settings_file ) ? filemtime( $settings_file ) : false;
45 wp_register_script( 'members-settings', members_plugin()->uri . "js/settings{$min}.js", array( 'jquery' ), $settings_ver, true );
46
47 $edit_post_file = members_plugin()->dir . "js/edit-post{$min}.js";
48 $edit_post_ver = file_exists( $edit_post_file ) ? filemtime( $edit_post_file ) : false;
49 wp_register_script( 'members-edit-post', members_plugin()->uri . "js/edit-post{$min}.js", array( 'jquery' ), $edit_post_ver, true );
50
51 $edit_role_file = members_plugin()->dir . "js/edit-role{$min}.js";
52 $edit_role_ver = file_exists( $edit_role_file ) ? filemtime( $edit_role_file ) : false;
53 wp_register_script( 'members-edit-role', members_plugin()->uri . "js/edit-role{$min}.js", array( 'postbox', 'wp-util', 'wp-i18n' ), $edit_role_ver, true );
54
55 // Load JSON translations for `wp.i18n._n()` / `wp.i18n.__()` calls used by
56 // the capability filter. Strings still translated via PHP `__()` continue to
57 // flow through `wp_localize_script()` below for backward compatibility.
58 if ( function_exists( 'wp_set_script_translations' ) ) {
59 wp_set_script_translations( 'members-edit-role', 'members' );
60 }
61
62 // Localize our script with some text we want to pass in.
63 $i18n = array(
64 'button_role_edit' => esc_html__( 'Edit', 'members' ),
65 'button_role_ok' => esc_html__( 'OK', 'members' ),
66 'label_grant_cap' => esc_html__( 'Grant %s capability', 'members' ),
67 'label_deny_cap' => esc_html__( 'Deny %s capability', 'members' ),
68 'ays_delete_role' => esc_html__( 'Are you sure you want to delete this role? This is a permanent action and cannot be undone.', 'members' ),
69 'hidden_caps' => members_get_hidden_caps(),
70 'cap_filter_no_results' => esc_html__( 'No capabilities match your filter.', 'members' ),
71 'cap_filter_no_results_on_tab' => esc_html__( 'No capabilities match your filter on this tab.', 'members' ),
72 'cap_filter_elsewhere_one' => esc_html__( '%d capability match on other tabs.', 'members' ),
73 'cap_filter_elsewhere_other' => esc_html__( '%d capabilities match on other tabs.', 'members' ),
74 'cap_filter_match' => esc_html__( '%d match', 'members' ),
75 'cap_filter_matches' => esc_html__( '%d matches', 'members' ),
76 );
77
78 wp_localize_script( 'members-edit-role', 'members_i18n', $i18n );
79
80 $import_export_file = members_plugin()->dir . "js/import-export{$min}.js";
81 $import_export_ver = file_exists( $import_export_file ) ? filemtime( $import_export_file ) : false;
82 wp_register_script( 'members-import-export', members_plugin()->uri . "js/import-export{$min}.js", array( 'jquery' ), $import_export_ver, true );
83 }
84
85 /**
86 * Registers custom plugin scripts.
87 *
88 * @since 1.0.0
89 * @access public
90 * @return void
91 */
92 function members_admin_register_styles() {
93
94 $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
95
96 wp_register_style( 'members-admin', members_plugin()->uri . "css/admin{$min}.css" );
97 }
98
99 /**
100 * Function for safely deleting a role and transferring the deleted role's users to the default
101 * role. Note that this function can be extremely intensive. Whenever a role is deleted, it's
102 * best for the site admin to assign the user's of the role to a different role beforehand.
103 *
104 * @since 0.2.0
105 * @access public
106 * @param string $role
107 * @return void
108 */
109 function members_delete_role( $role ) {
110
111 // Get the default role.
112 $default_role = get_option( 'default_role' );
113
114 // Don't delete the default role. Site admins should change the default before attempting to delete the role.
115 if ( $role == $default_role )
116 return;
117
118 // Get all users with the role to be deleted.
119 $users = get_users( array( 'role' => $role ) );
120
121 // Check if there are any users with the role we're deleting.
122 if ( is_array( $users ) ) {
123
124 // If users are found, loop through them.
125 foreach ( $users as $user ) {
126
127 // If the user has the role and no other roles, set their role to the default.
128 if ( $user->has_cap( $role ) && 1 >= count( $user->roles ) )
129 $user->set_role( $default_role );
130
131 // Else, remove the role.
132 else if ( $user->has_cap( $role ) )
133 $user->remove_role( $role );
134 }
135 }
136
137 // Remove the role.
138 remove_role( $role );
139
140 // Stop tracking as Members-created (if it was).
141 members_untrack_created_role( $role );
142
143 // Remove the role from the role factory.
144 members_unregister_role( $role );
145 }
146
147 /**
148 * Returns an array of all the user meta keys in the $wpdb->usermeta table.
149 *
150 * @since 0.2.0
151 * @access public
152 * @global object $wpdb
153 * @return array
154 */
155 function members_get_user_meta_keys() {
156 global $wpdb;
157
158 return $wpdb->get_col( "SELECT meta_key FROM $wpdb->usermeta GROUP BY meta_key ORDER BY meta_key" );
159 }
160
161 /**
162 * Check whether the MemberPress plugin is active.
163 *
164 * @return boolean
165 */
166 function members_is_memberpress_active() {
167 return defined( 'MEPR_PLUGIN_SLUG' );
168 }
169
170 add_action( 'admin_enqueue_scripts', 'members_add_pointers' );
171 /**
172 * Adds helper pointers to the admin
173 *
174 * @return void
175 */
176 function members_add_pointers() {
177
178 $pointers = apply_filters( 'members_admin_pointers', array() );
179
180 if ( empty( $pointers ) ) {
181 return;
182 }
183
184 // Get dismissed pointers
185 $dismissed = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
186 $valid_pointers =array();
187
188 // Check pointers and remove dismissed ones.
189 foreach ( $pointers as $pointer_id => $pointer ) {
190
191 // Sanity check
192 if ( in_array( $pointer_id, $dismissed ) || empty( $pointer ) || empty( $pointer_id ) || empty( $pointer['target'] ) || empty( $pointer['options'] ) ) {
193 continue;
194 }
195
196 $pointer['pointer_id'] = $pointer_id;
197
198 $valid_pointers['pointers'][] = $pointer;
199 }
200
201 if ( empty( $valid_pointers ) ) {
202 return;
203 }
204
205 wp_enqueue_style( 'wp-pointer' );
206 wp_enqueue_script( 'members-pointers', members_plugin()->uri . '/js/members-pointers.min.js', array( 'wp-pointer' ) );
207 wp_localize_script( 'members-pointers', 'membersPointers', $valid_pointers );
208 }
209
210 add_action( 'in_admin_header', 'members_admin_header', 0 );
211 /**
212 * Branded header
213 *
214 * @return void
215 */
216 function members_admin_header() {
217
218 if ( members_is_memberpress_active() || empty( $_GET['page'] ) || ! in_array( $_GET['page'], array( 'roles', 'members', 'members-settings', 'members-about', 'members-payments', 'members-growth-tools' ) ) ) {
219 return;
220 }
221
222 $dismissed = get_option( 'members_dismiss_upgrade_header', false );
223
224 ?>
225
226 <?php if ( empty( $dismissed ) ) : ?>
227 <div class="members-upgrade-header" id="members-upgrade-header">
228 <span id="close-members-upgrade-header">X</span>
229 <?php _e( 'You\'re using Members. To unlock more features, consider <a href="https://memberpress.com/plans/pricing/?utm_source=members_plugin&utm_medium=link&utm_campaign=in_plugin&utm_content=pro_features">adding MemberPress.</a>' ); ?>
230 </div>
231 <?php endif; ?>
232
233 <div id="members-admin-header">
234 <img class="members-logo" src="<?php echo members_plugin()->uri . 'img/Members-header.svg'; ?>" />
235 <a class="members-by-mp" href="https://memberpress.com/?utm_source=members_plugin&utm_medium=link&utm_campaign=header_logo&utm_content=link_1" target="_blank" rel="noopener">
236 <span class="members-by-label">by</span>
237 <img class="members-mp-logo" src="<?php echo members_plugin()->uri . 'img/memberpress-logo-white.png'; ?>" />
238 </a>
239 </div>
240
241 <script>
242 jQuery(document).ready(function($) {
243 $('#close-members-upgrade-header').on('click', function(event) {
244 var upgradeHeader = $('#members-upgrade-header');
245 upgradeHeader.fadeOut();
246 $.ajax({
247 url: ajaxurl,
248 type: 'POST',
249 data: {
250 action: 'members_dismiss_upgrade_header',
251 nonce: "<?php echo wp_create_nonce( 'members_dismiss_upgrade_header' ); ?>"
252 },
253 })
254 .done(function() {
255 console.log("success");
256 })
257 .fail(function() {
258 console.log("error");
259 })
260 .always(function() {
261 console.log("complete");
262 });
263 });
264 });
265 </script>
266
267 <?php
268 }
269
270 add_action( 'in_admin_footer', 'members_admin_promote_links' );
271 /**
272 * Promotional links footer
273 *
274 * @return void
275 */
276 function members_admin_promote_links() {
277 global $current_screen, $plp_update;
278
279 if( empty( $current_screen->id ) || ! members_is_admin_page() ) {
280 return;
281 }
282
283 $links = array(
284 array(
285 'url' => 'https://wordpress.org/support/plugin/members/',
286 'text' => __('Support', 'members'),
287 'target' => '_blank'
288 ),
289 array(
290 'url' => 'https://members-plugin.com/',
291 'text' => __( 'Docs', 'members' ),
292 'target' => '_blank'
293 ),
294 array(
295 'url' => '/wp-admin/admin.php?page=members-about',
296 'text' => __( 'About Us', 'members' ),
297 'target' => '_blank'
298 )
299 );
300
301 $title = __( 'Made with ♥ by the MemberPress Team', 'members' );
302
303 require_once( members_plugin()->dir . 'admin/views/promotion.php' );
304 }
305
306 add_action( 'wp_ajax_members_dismiss_upgrade_header', 'members_dismiss_upgrade_header' );
307 /**
308 * Dismisses the Members upgrade header bar.
309 *
310 * @return void
311 */
312 function members_dismiss_upgrade_header() {
313
314 // Security check
315 if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce( $_POST['nonce'], 'members_dismiss_upgrade_header' ) ) {
316 die();
317 }
318 if ( ! current_user_can( 'manage_options' ) ) {
319 wp_send_json_error( array(
320 'msg' => esc_html__( 'You are not allowed to make these changes.', 'members' )
321 ) );
322 }
323 update_option( 'members_dismiss_upgrade_header', true );
324 }
325
326 /**
327 * Conditional to check whether we're on a Members admin page.
328 *
329 * @return boolean
330 */
331 function members_is_admin_page() {
332 $screen = get_current_screen();
333
334 if ( ! empty( $screen->id ) && ! empty( Members\Admin\Settings_Page::get_instance()->admin_pages ) && in_array( $screen->id, Members\Admin\Settings_Page::get_instance()->admin_pages ) ) {
335 return true;
336 }
337
338 // Fallback: pages registered outside Settings_Page (e.g. the Growth Tools
339 // submenu is registered by the caseproof/growth-tools composer package).
340 if ( ! empty( $_GET['page'] ) && in_array( $_GET['page'], array( 'roles', 'members', 'members-settings', 'members-about', 'members-payments', 'members-growth-tools' ), true ) ) {
341 return true;
342 }
343
344 return false;
345 }
346