PluginProbe ʕ •ᴥ•ʔ
Admin and Site Enhancements (ASE) / 7.6.10
Admin and Site Enhancements (ASE) v7.6.10
9.1.0 9.0.2 9.0.1 9.0.0 8.9.2 8.9.1 8.9.0 8.8.8 8.8.7 8.8.6 8.8.5 8.8.4 8.8.3 8.8.2 8.8.1 8.8.0 8.7.3 8.7.2 8.7.1 8.2.1 8.2.2 8.2.3 8.3.0 8.3.1 8.3.2 8.4.0 8.4.1 8.4.2 8.5.0 8.5.1 8.5.2 8.6.0 8.6.1 8.6.2 8.7.0 5.0.1 5.0.2 5.0.2.1 5.0.2.2 5.0.2.3 5.0.2.4 5.1.0 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.7.0 5.7.1 5.8.0 5.8.1 6.0.0 6.0.3 6.0.4 6.0.5 6.0.5.1 6.0.6 6.0.7 6.0.8.1 6.1.0 6.1.3 6.2.0 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.3.0 6.3.1 6.3.2 6.4.0 6.5.0 6.5.1 6.6.0 6.7.0 6.8.0 6.8.2 6.8.3 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13.1 6.9.13.2 6.9.2 6.9.3 6.9.4 6.9.5 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.2 7.0.2.1 7.0.2.2 7.0.2.3 7.0.3 7.1.0 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2.0 7.2.1 7.3.0 7.3.1 7.3.2 7.3.3 7.4.0 7.4.2 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.5.0 7.5.1 7.5.2 7.5.3 7.5.4 7.6.0 7.6.1 7.6.1.1 7.6.10 7.6.11 7.6.2 7.6.3 7.6.4 7.6.5 7.6.6 7.6.7 7.6.7.1 7.6.8 7.6.9 7.7.0 7.8.0 7.8.1 7.8.10 7.8.11 7.8.12 7.8.13 7.8.14 7.8.15 7.8.16 7.8.17 7.8.18 7.8.2 7.8.3 7.8.4 7.8.5 7.8.5.1 7.8.6 7.8.7 7.8.8 7.8.9 7.9.0 7.9.1 7.9.10 7.9.11 7.9.2 7.9.3 7.9.4 7.9.5 7.9.6 7.9.7 7.9.8 7.9.9 8.0.0 8.0.1 8.0.2 8.0.3 8.0.4 8.0.5 8.0.6 8.0.7 8.0.8 8.1.0 8.1.1 8.1.2 8.1.3 8.1.4 8.2.0 trunk 1.0.0 1.1.0 1.2.0 1.3.0 1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 1.9.0 2.0.0 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 2.6.0 2.7.0 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.2.0 3.3.0 3.4.0 3.5.0 3.6.1 3.7.0 3.8.0 3.9.0 3.9.1 3.9.2 4.0.0 4.0.1 4.1.0 4.2.0 4.2.1 4.2.2 4.3.0 4.3.1 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.9.0 4.9.1 4.9.2 4.9.3 5.0.0
admin-site-enhancements / classes / class-multiple-user-roles.php
admin-site-enhancements / classes Last commit date
class-activation.php 1 year ago class-admin-menu-organizer.php 1 year ago class-auto-publish-posts-with-missed-schedule.php 1 year ago class-avif-upload.php 1 year ago class-change-login-url.php 1 year ago class-cleanup-admin-bar.php 1 year ago class-common-methods.php 1 year ago class-content-duplication.php 1 year ago class-content-order.php 1 year ago class-custom-admin-footer-text.php 1 year ago class-custom-body-class.php 1 year ago class-custom-css.php 1 year ago class-custom-nav-menu-items-in-new-tab.php 1 year ago class-deactivation.php 1 year ago class-disable-comments.php 1 year ago class-disable-dashboard-widgets.php 1 year ago class-disable-feeds.php 1 year ago class-disable-gutenberg.php 1 year ago class-disable-rest-api.php 1 year ago class-disable-smaller-components.php 1 year ago class-disable-updates.php 1 year ago class-disable-xml-rpc.php 1 year ago class-display-system-summary.php 1 year ago class-email-address-obfuscator.php 1 year ago class-email-delivery.php 1 year ago class-enhance-list-tables.php 1 year ago class-external-permalinks.php 1 year ago class-heartbeat-control.php 1 year ago class-hide-admin-bar.php 1 year ago class-hide-admin-notices.php 1 year ago class-image-sizes-panel.php 1 year ago class-image-upload-control.php 1 year ago class-insert-head-body-footer-code.php 1 year ago class-last-login-column.php 1 year ago class-limit-login-attempts.php 1 year ago class-login-id-type.php 1 year ago class-login-logout-menu.php 1 year ago class-maintenance-mode.php 1 year ago class-manage-ads-appads-txt.php 1 year ago class-manage-robots-txt.php 1 year ago class-media-replacement.php 1 year ago class-multiple-user-roles.php 1 year ago class-obfuscate-author-slugs.php 1 year ago class-open-external-links-in-new-tab.php 1 year ago class-password-protection.php 1 year ago class-redirect-after-login.php 1 year ago class-redirect-after-logout.php 1 year ago class-redirect-fourofour.php 1 year ago class-registration-date-column.php 1 year ago class-revisions-control.php 1 year ago class-search-engines-visibility.php 1 year ago class-settings-fields-render.php 1 year ago class-settings-sanitization.php 1 year ago class-settings-sections-fields.php 1 year ago class-show-custom-taxonomy-filters.php 1 year ago class-site-identity-on-login-page.php 1 year ago class-svg-upload.php 1 year ago class-various-admin-ui-enhancements.php 1 year ago class-view-admin-as-role.php 1 year ago class-wider-admin-menu.php 1 year ago class-wp-config-transformer.php 1 year ago
class-multiple-user-roles.php
134 lines
1 <?php
2
3 namespace ASENHA\Classes;
4
5 /**
6 * Class for Multiple User Roles module
7 *
8 * @since 6.9.5
9 */
10 class Multiple_User_Roles {
11
12 /**
13 * Add UI to enable multiple user roles selection
14 *
15 * @since 4.8.0
16 */
17 public function add_multiple_roles_ui( $user ) {
18
19 // Get user roles that the current user is allowed to edit
20 $roles = get_editable_roles();
21
22 // Get the roles of the user being shown / edited / created
23 if ( ! empty( $user->roles ) ) {
24 $user_roles = array_intersect( array_values( $user->roles ), array_keys( $roles ) ); // indexed array of role slugs
25 } else {
26 $user_roles = array();
27 }
28
29 // Only show roles checkboxes for users that can assign roles to other users
30 if ( current_user_can( 'promote_users', get_current_user_id() ) ) {
31
32 ?>
33 <div class="asenha-roles-temporary-container">
34 <table class="form-table">
35 <tr>
36 <th>
37 <label>Roles</label>
38 </th>
39 <td>
40 <?php
41 foreach ( $roles as $role_slug => $role_info ) {
42
43 $checkbox_id = $role_slug . '_role';
44 $role_name = translate_user_role( $role_info['name'] );
45 if ( ! empty( $user_roles ) && in_array( $role_slug, $user_roles ) ) {
46 $checked = 'checked="checked"';
47 } else {
48 $checked = '';
49 }
50
51 // Output roles checkboxes
52 ?>
53 <label for="<?php esc_attr_e( $checkbox_id ); ?>"><input type="checkbox" id="<?php esc_attr_e( $checkbox_id ); ?>" value="<?php esc_attr_e( $role_slug ); ?>" name="asenha_assigned_roles[]" <?php esc_attr_e( $checked ) ?> /> <?php esc_html_e( $role_name ); ?></label><br />
54 <?php
55
56 }
57
58 wp_nonce_field( 'asenha_set_multiple_roles', 'asenha_multiple_roles_nonce' );
59
60 ?>
61 </td>
62 </tr>
63 </table>
64 </div>
65 <?php
66
67 }
68
69 }
70
71 /**
72 * Save changes in roles assignment
73 *
74 * @since 4.8.0
75 */
76 public function save_roles_assignment( $user_id ) {
77
78 if ( ! isset( $_POST['asenha_multiple_roles_nonce'] ) ) {
79 return;
80 }
81
82 if ( ! current_user_can( 'promote_users', get_current_user_id() ) || ! wp_verify_nonce( $_POST['asenha_multiple_roles_nonce'], 'asenha_set_multiple_roles' ) ) {
83 return;
84 }
85
86 // Get user roles that the current user is allowed to edit
87 $roles = get_editable_roles();
88
89 // Get the roles of the user being shown / edited / created
90 $user = get_user_by( 'id', (int) $user_id ); // WP_User object
91 $user_roles = array_intersect( array_values( $user->roles ), array_keys( $roles ) ); // Current/existing roles
92
93 if ( ! empty( $_POST['asenha_assigned_roles'] ) ) {
94
95 $assigned_roles = array_map( 'sanitize_text_field', $_POST['asenha_assigned_roles'] );
96
97 // Make sure only valid roles are processed
98 $assigned_roles = array_intersect( $assigned_roles, array_keys( $roles ) );
99
100 $roles_to_remove = array();
101 $roles_to_add = array();
102
103 if ( empty( $assigned_roles ) ) {
104
105 // Remove all current/existing roles
106 $roles_to_remove = $user_roles;
107
108 } else {
109
110 // Identify and remove roles not present in the newly assigned roles
111 $roles_to_remove = array_diff( $user_roles, $assigned_roles );
112
113 if ( ! empty( $roles_to_remove ) ) {
114 foreach ( $roles_to_remove as $role_to_remove ) {
115 $user->remove_role( $role_to_remove );
116 }
117 }
118
119 // Identify and add roles not present in the existing roles
120 $roles_to_add = array_diff( $assigned_roles, $user_roles );
121
122 if ( ! empty( $roles_to_add ) ) {
123 foreach ( $roles_to_add as $role_to_add ) {
124 $user->add_role( $role_to_add );
125 }
126 }
127
128 }
129
130 }
131
132 }
133
134 }