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 / views / class-view-general.php

class-view-general.php in Members – Membership & User Role Editor Plugin 3.2.24, at admin/views/class-view-general.php

483 lines 16.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Handles the general settings view.
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 namespace Members\Admin;
13
14 defined('ABSPATH') || exit;
15 /**
16 * Sets up and handles the general settings view.
17 *
18 * @since 2.0.0
19 * @access public
20 */
21 class View_General extends View {
22
23 /**
24 * Holds an array the plugin settings.
25 *
26 * @since 2.0.0
27 * @access public
28 * @var array
29 */
30 public $settings = array();
31
32 /**
33 * Enqueue scripts/styles.
34 *
35 * @since 2.0.0
36 * @access public
37 * @return void
38 */
39 public function enqueue() {
40 wp_enqueue_script( 'members-settings' );
41
42 // Add reset roles data to the settings script (must run after enqueue).
43 wp_localize_script( 'members-settings', 'membersResetRoles', array(
44 'nonce' => wp_create_nonce( 'members_reset_roles' ),
45 'ajaxurl' => admin_url( 'admin-ajax.php' ),
46 'confirmMessage' => esc_html__( 'This will remove only roles created with Members and reset the five WordPress roles (Administrator, Editor, Author, Contributor, Subscriber) to their default capabilities. Roles from other plugins (e.g. WooCommerce) will not be removed. Continue?', 'members' ),
47 'successMessage' => esc_html__( 'Members-created roles have been removed and WordPress roles have been reset to their defaults.', 'members' ),
48 'errorMessage' => esc_html__( 'An error occurred while resetting roles. Please try again.', 'members' )
49 ) );
50 }
51
52 /**
53 * Registers the plugin settings.
54 *
55 * @since 2.0.0
56 * @access public
57 * @return void
58 */
59 function register_settings() {
60
61 // Get the current plugin settings w/o the defaults.
62 $this->settings = get_option( 'members_settings' );
63
64 // Register the setting.
65 register_setting( 'members_settings', 'members_settings', array( $this, 'validate_settings' ) );
66
67 /* === Settings Sections === */
68
69 // Add settings sections.
70 add_settings_section( 'roles_caps', esc_html__( 'Roles and Capabilities', 'members' ), array( $this, 'section_roles_caps' ), 'members-settings' );
71 add_settings_section( 'content_permissions', esc_html__( 'Content Permissions', 'members' ), '__return_false', 'members-settings' );
72 add_settings_section( 'private_site', esc_html__( 'Private Site', 'members' ), '__return_false', 'members-settings' );
73 add_settings_section( 'misc', esc_html__( 'Miscellaneous', 'members' ), '__return_false', 'members-settings' );
74
75 /* === Settings Fields === */
76
77 // Role manager fields.
78 add_settings_field( 'enable_role_manager', esc_html__( 'Role Manager', 'members' ), array( $this, 'field_enable_role_manager' ), 'members-settings', 'roles_caps' );
79 add_settings_field( 'enable_multi_roles', esc_html__( 'Multiple User Roles', 'members' ), array( $this, 'field_enable_multi_roles' ), 'members-settings', 'roles_caps' );
80 add_settings_field( 'explicit_denied_caps', esc_html__( 'Capabilities', 'members' ), array( $this, 'field_explicit_denied_caps' ), 'members-settings', 'roles_caps' );
81
82 // Content permissions fields.
83 add_settings_field( 'enable_content_permissions', esc_html__( 'Enable Permissions', 'members' ), array( $this, 'field_enable_content_permissions' ), 'members-settings', 'content_permissions' );
84 add_settings_field( 'hide_protected_posts_rest_api', esc_html__( 'Hide Protected Posts from WP REST API', 'members' ), array( $this, 'field_hide_protected_posts_rest_api' ), 'members-settings', 'content_permissions' );
85 add_settings_field( 'content_permissions_error', esc_html__( 'Error Message', 'members' ), array( $this, 'field_content_permissions_error' ), 'members-settings', 'content_permissions' );
86
87 // Private site fields.
88 add_settings_field( 'enable_private_site', esc_html__( 'Enable Private Site', 'members' ), array( $this, 'field_enable_private_site' ), 'members-settings', 'private_site' );
89 add_settings_field( 'private_rest_api', esc_html__( 'REST API', 'members' ), array( $this, 'field_private_rest_api' ), 'members-settings', 'private_site' );
90 add_settings_field( 'enable_private_feed', esc_html__( 'Disable Feed', 'members' ), array( $this, 'field_enable_private_feed' ), 'members-settings', 'private_site' );
91 add_settings_field( 'private_feed_error', esc_html__( 'Feed Error Message', 'members' ), array( $this, 'field_private_feed_error' ), 'members-settings', 'private_site' );
92
93 // Misc fields.
94 add_settings_field( 'review_prompt_removed', esc_html__( 'Disable Review Prompt', 'members' ), array( $this, 'field_remove_review_prompt' ), 'members-settings', 'misc' );
95
96 do_action( 'members_register_settings' );
97 }
98
99 /**
100 * Validates the plugin settings.
101 *
102 * @since 2.0.0
103 * @access public
104 * @param array $input
105 * @return array
106 */
107 function validate_settings( $settings ) {
108
109 // Validate true/false checkboxes.
110 $settings['role_manager'] = ! empty( $settings['role_manager'] ) ? true : false;
111 $settings['explicit_denied_caps'] = ! empty( $settings['explicit_denied_caps'] ) ? true : false;
112 $settings['show_human_caps'] = ! empty( $settings['show_human_caps'] ) ? true : false;
113 $settings['multi_roles'] = ! empty( $settings['multi_roles'] ) ? true : false;
114 $settings['content_permissions'] = ! empty( $settings['content_permissions'] ) ? true : false;
115 $settings['private_blog'] = ! empty( $settings['private_blog'] ) ? true : false;
116 $settings['private_rest_api'] = ! empty( $settings['private_rest_api'] ) ? true : false;
117 $settings['hide_posts_rest_api'] = ! empty( $settings['hide_posts_rest_api'] ) ? true : false;
118 $settings['private_feed'] = ! empty( $settings['private_feed'] ) ? true : false;
119
120 // Kill evil scripts.
121 $settings['content_permissions_error'] = stripslashes( wp_filter_post_kses( addslashes( $settings['content_permissions_error'] ) ) );
122 $settings['private_feed_error'] = stripslashes( wp_filter_post_kses( addslashes( $settings['private_feed_error'] ) ) );
123
124 // Return the validated/sanitized settings.
125 return apply_filters( 'members_validate_settings', $settings );
126 }
127
128 /**
129 * Role/Caps section callback.
130 *
131 * @since 2.0.0
132 * @access public
133 * @return void
134 */
135 public function section_roles_caps() { ?>
136 <p class="description">
137 <?php esc_html_e( 'Your roles and capabilities will not revert back to their previous settings after deactivating or uninstalling this plugin, so use this feature wisely.', 'members' ); ?>
138 </p>
139 <?php }
140
141 /**
142 * Role manager field callback.
143 *
144 * @since 2.0.0
145 * @access public
146 * @return void
147 */
148 public function field_enable_role_manager() { ?>
149
150 <label>
151 <input type="checkbox" name="members_settings[role_manager]" value="true" <?php checked( members_role_manager_enabled() ); ?> />
152 <?php esc_html_e( 'Enable the role manager.', 'members' ); ?>
153 </label>
154 <?php }
155
156 /**
157 * Explicit denied caps field callback.
158 *
159 * @since 2.0.0
160 * @access public
161 * @return void
162 */
163 public function field_explicit_denied_caps() { ?>
164
165 <fieldset>
166
167 <p>
168 <label>
169 <input type="checkbox" name="members_settings[explicit_denied_caps]" value="true" <?php checked( members_explicitly_deny_caps() ); ?> />
170 <?php esc_html_e( 'Denied capabilities should always overrule granted capabilities.', 'members' ); ?>
171 </label>
172 </p>
173
174 <p>
175 <label>
176 <input type="checkbox" name="members_settings[show_human_caps]" value="true" <?php checked( members_show_human_caps() ); ?> />
177 <?php esc_html_e( 'Show human-readable capabilities when possible.', 'members' ); ?>
178 </label>
179 </p>
180
181 </fieldset>
182 <?php }
183
184 /**
185 * Multiple roles field callback.
186 *
187 * @since 2.0.0
188 * @access public
189 * @return void
190 */
191 public function field_enable_multi_roles() { ?>
192
193 <label>
194 <input type="checkbox" name="members_settings[multi_roles]" value="true" <?php checked( members_multiple_user_roles_enabled() ); ?> />
195 <?php esc_html_e( 'Allow users to be assigned more than a single role.', 'members' ); ?>
196 </label>
197 <?php }
198
199 /**
200 * Enable content permissions field callback.
201 *
202 * @since 2.0.0
203 * @access public
204 * @return void
205 */
206 public function field_enable_content_permissions() { ?>
207
208 <label>
209 <input type="checkbox" name="members_settings[content_permissions]" value="true" <?php checked( members_content_permissions_enabled() ); ?> />
210 <?php esc_html_e( 'Enable the content permissions feature.', 'members' ); ?>
211 </label>
212 <?php }
213
214 /**
215 * Content permissions error message field callback.
216 *
217 * @since 2.0.0
218 * @access public
219 * @return void
220 */
221 public function field_content_permissions_error() {
222
223 wp_editor(
224 members_get_setting( 'content_permissions_error' ),
225 'members_settings_content_permissions_error',
226 array(
227 'textarea_name' => 'members_settings[content_permissions_error]',
228 'drag_drop_upload' => true,
229 'editor_height' => 250
230 )
231 );
232 }
233
234 /**
235 * Enable private site field callback.
236 *
237 * @since 2.0.0
238 * @access public
239 * @return void
240 */
241 public function field_enable_private_site() { ?>
242
243 <label>
244 <input type="checkbox" name="members_settings[private_blog]" value="true" <?php checked( members_is_private_blog() ); ?> />
245 <?php esc_html_e( 'Redirect all logged-out users to the login page before allowing them to view the site.', 'members' ); ?>
246 </label>
247 <?php }
248
249 /**
250 * Hide protected posts REST API field callback.
251 *
252 * @since 3.2.11
253 * @access public
254 * @return void
255 */
256 public function field_hide_protected_posts_rest_api() { ?>
257
258 <label>
259 <input type="checkbox" name="members_settings[hide_posts_rest_api]" value="true" <?php checked( members_is_hidden_protected_posts_enabled() ); ?> />
260 <?php esc_html_e( 'Block protected posts from showing in the REST API requests.', 'members' ); ?>
261 </label>
262 <?php }
263
264 /**
265 * Enable private REST API field callback.
266 *
267 * @since 2.0.0
268 * @access public
269 * @return void
270 */
271 public function field_private_rest_api() { ?>
272
273 <label>
274 <input type="checkbox" name="members_settings[private_rest_api]" value="true" <?php checked( members_is_private_rest_api() ); ?> />
275 <?php esc_html_e( 'Require authentication for access to the REST API.', 'members' ); ?>
276 </label>
277 <?php }
278
279 /**
280 * Enable private feed field callback.
281 *
282 * @since 2.0.0
283 * @access public
284 * @return void
285 */
286 public function field_enable_private_feed() { ?>
287
288 <label>
289 <input type="checkbox" name="members_settings[private_feed]" value="true" <?php checked( members_is_private_feed() ); ?> />
290 <?php esc_html_e( 'Show error message for feed items.', 'members' ); ?>
291 </label>
292 <?php }
293
294 /**
295 * Private feed error message field callback.
296 *
297 * @since 2.0.0
298 * @access public
299 * @return void
300 */
301 public function field_private_feed_error() {
302
303 wp_editor(
304 members_get_setting( 'private_feed_error' ),
305 'members_settings_private_feed_error',
306 array(
307 'textarea_name' => 'members_settings[private_feed_error]',
308 'drag_drop_upload' => true,
309 'editor_height' => 250
310 )
311 );
312 }
313
314 /**
315 * Private feed error message field callback.
316 *
317 * @since 2.0.0
318 * @access public
319 * @return void
320 */
321 public function field_remove_review_prompt() {
322
323 ?>
324 <label>
325 <input type="checkbox" name="members_settings[review_prompt_removed]" value="1" <?php checked( members_get_setting( 'review_prompt_removed' ) ); ?> />
326 <?php esc_html_e( 'Permanently remove Members review prompt.', 'members' ); ?>
327 </label>
328 <?php
329 }
330
331 /**
332 * Renders the settings page.
333 *
334 * @since 2.0.0
335 * @access public
336 * @return void
337 */
338 public function template() { ?>
339 <form method="post" action="options.php">
340 <?php settings_fields( 'members_settings' ); ?>
341 <?php do_settings_sections( 'members-settings' ); ?>
342
343 <table class="form-table" role="presentation">
344 <tr>
345 <th scope="row"><?php esc_html_e( 'Reset Roles', 'members' ); ?></th>
346 <td>
347 <button type="button" id="members-reset-roles" class="button button-warning">
348 <?php esc_html_e( 'Reset to Default WordPress Roles', 'members' ); ?>
349 </button>
350 <span class="spinner members-reset-spinner"></span>
351 <div id="members-reset-roles-message"></div>
352 <p class="description">
353 <?php esc_html_e( 'Removes only roles created with Members and resets the five WordPress roles to their default capabilities. Roles from other plugins (e.g. WooCommerce) are not removed.', 'members' ); ?>
354 </p>
355 </td>
356 </tr>
357 </table>
358
359 <?php submit_button( esc_attr__( 'Update Settings', 'members' ), 'primary' ); ?>
360 </form>
361 <?php }
362
363 /**
364 * Adds help tabs.
365 *
366 * @since 2.0.0
367 * @access public
368 * @return void
369 */
370 public function add_help_tabs() {
371
372 // Get the current screen.
373 $screen = get_current_screen();
374
375 // Roles/Caps help tab.
376 $screen->add_help_tab(
377 array(
378 'id' => 'roles-caps',
379 'title' => esc_html__( 'Role and Capabilities', 'members' ),
380 'callback' => array( $this, 'help_tab_roles_caps' )
381 )
382 );
383
384 // Content Permissions help tab.
385 $screen->add_help_tab(
386 array(
387 'id' => 'content-permissions',
388 'title' => esc_html__( 'Content Permissions', 'members' ),
389 'callback' => array( $this, 'help_tab_content_permissions' )
390 )
391 );
392
393 // Widgets help tab.
394 $screen->add_help_tab(
395 array(
396 'id' => 'sidebar-widgets',
397 'title' => esc_html__( 'Sidebar Widgets', 'members' ),
398 'callback' => array( $this, 'help_tab_sidebar_widgets' )
399 )
400 );
401
402 // Private Site help tab.
403 $screen->add_help_tab(
404 array(
405 'id' => 'private-site',
406 'title' => esc_html__( 'Private Site', 'members' ),
407 'callback' => array( $this, 'help_tab_private_site' )
408 )
409 );
410
411 // Set the help sidebar.
412 $screen->set_help_sidebar( members_get_help_sidebar_text() );
413 }
414
415 /**
416 * Displays the roles/caps help tab.
417 *
418 * @since 2.0.0
419 * @access public
420 * @return void
421 */
422 public function help_tab_roles_caps() { ?>
423
424 <p>
425 <?php esc_html_e( 'The role manager allows you to manage roles on your site by giving you the ability to create, edit, and delete any role. Note that changes to roles do not change settings for the Members plugin. You are literally changing data in your WordPress database. This plugin feature merely provides an interface for you to make these changes.', 'members' ); ?>
426 </p>
427
428 <p>
429 <?php esc_html_e( 'The multiple user roles feature allows you to assign more than one role to each user from the edit user screen.', 'members' ); ?>
430 </p>
431
432 <p>
433 <?php esc_html_e( 'Tick the checkbox for denied capabilities to always take precedence over granted capabilities when there is a conflict. This is only relevant when using multiple roles per user.', 'members' ); ?>
434 </p>
435
436 <p>
437 <?php esc_html_e( 'Tick the checkbox to show human-readable capabilities when possible. Note that custom capabilities and capabilities from third-party plugins will show the machine-readable capability name unless they are registered.', 'members' ); ?>
438 </p>
439 <?php }
440
441 /**
442 * Displays the content permissions help tab.
443 *
444 * @since 2.0.0
445 * @access public
446 * @return void
447 */
448 public function help_tab_content_permissions() { ?>
449
450 <p>
451 <?php printf( esc_html__( "The content permissions features adds a meta box to the edit post screen that allows you to grant permissions for who can read the post content based on the user's role. Only users of roles with the %s capability will be able to use this component.", 'members' ), '<code>restrict_content</code>' ); ?>
452 </p>
453 <?php }
454
455 /**
456 * Displays the sidebar widgets help tab.
457 *
458 * @since 2.0.0
459 * @access public
460 * @return void
461 */
462 public function help_tab_sidebar_widgets() { ?>
463
464 <p>
465 <?php esc_html_e( "The sidebar widgets feature adds additional widgets for use in your theme's sidebars.", 'members' ); ?>
466 </p>
467 <?php }
468
469 /**
470 * Displays the private site help tab.
471 *
472 * @since 2.0.0
473 * @access public
474 * @return void
475 */
476 public function help_tab_private_site() { ?>
477
478 <p>
479 <?php esc_html_e( 'The private site feature redirects all users who are not logged into the site to the login page, creating an entirely private site. You may also replace your feed content with a custom error message.', 'members' ); ?>
480 </p>
481 <?php }
482 }
483