PluginProbe ʕ •ᴥ•ʔ
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress / trunk
Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress vtrunk
4.16.18 4.16.17 4.16.16 trunk 1.0 1.0.1 1.0.2 1.1 1.1.1 1.1.2 1.1.3 1.1.4 1.1.5 1.1.5a 1.1.6 1.1.7 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.3 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.1.9 2.2.10 2.2.11 2.2.12 2.2.13 2.2.14 2.2.15 2.2.16 2.2.2 2.2.5 2.2.6 2.2.7 2.2.8 2.2.9 3.0 3.1 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.17 3.1.18 3.1.19 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 3.2.0 3.2.1 3.2.10 3.2.11 3.2.12 3.2.13 3.2.14 3.2.15 3.2.16 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 4.0.0 4.0.1 4.0.2 4.0.3 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.13.3 4.13.4 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.15.0 4.15.1 4.15.10 4.15.11 4.15.12 4.15.13 4.15.14 4.15.15 4.15.16 4.15.17 4.15.18 4.15.19 4.15.2 4.15.20 4.15.20.1 4.15.21 4.15.22 4.15.23 4.15.24 4.15.25 4.15.3 4.15.4 4.15.5 4.15.6 4.15.7 4.15.8 4.15.9 4.16.0 4.16.1 4.16.10 4.16.11 4.16.12 4.16.13 4.16.14 4.16.15 4.16.2 4.16.3 4.16.4 4.16.5 4.16.6 4.16.7 4.16.8 4.16.9 4.2.0 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.5.0 4.5.1 4.5.2 4.5.3 4.5.4 4.5.5 4.6.0 4.7.0 4.8.0 4.9.0
wp-user-avatar / src / Admin / UserRolesEdit.php
wp-user-avatar / src / Admin Last commit date
SettingsPages 1 month ago ProfileCustomFields.php 3 years ago UserRolesEdit.php 10 months ago index.php 4 years ago
UserRolesEdit.php
140 lines
1 <?php
2
3 namespace ProfilePress\Core\Admin;
4
5 use WP_User;
6
7 class UserRolesEdit
8 {
9 public function __construct()
10 {
11 add_action('show_user_profile', [$this, 'display_secondary_user_roles_field'], -1);
12 add_action('edit_user_profile', [$this, 'display_secondary_user_roles_field'], -1);
13
14
15 add_action('admin_footer', [$this, 'scripts'], 99);
16 add_action('admin_head', [$this, 'styles']);
17
18 // Must use `profile_update` to change role. Otherwise, WP will wipe it out.
19 add_action('profile_update', [$this, 'update_roles'], 99, 2);
20 }
21
22 public function display_secondary_user_roles_field($user)
23 {
24 if (current_user_can('promote_users') && current_user_can('edit_user', $user->ID)) :
25
26 $editable_roles = get_editable_roles();
27 // Compare user role against currently editable roles.
28 $user_roles = array_intersect(array_values($user->roles), array_keys($editable_roles));
29
30 wp_nonce_field('ppress_new_user_roles', 'ppress_new_user_roles_nonce');
31 ?>
32 <h2><?php esc_html_e('Roles', 'wp-user-avatar'); ?></h2>
33 <table class="form-table">
34 <tbody>
35 <tr>
36 <th><?php esc_html_e('Select User Roles', 'wp-user-avatar'); ?></th>
37 <td>
38 <div class="wp-tab-panel">
39 <ul>
40 <?php foreach ($editable_roles as $role => $details): ?>
41 <li>
42 <label>
43 <input type="checkbox" name="ppress_user_roles[]" value="<?php echo esc_attr($role); ?>" <?php echo in_array($role, $user_roles) ? 'checked="checked"' : ''; ?>>
44 <?php echo translate_user_role($details['name']); ?>
45 </label>
46 </li>
47 <?php endforeach; ?>
48 </ul>
49 </div>
50 </td>
51 </tr>
52 </tbody>
53 </table>
54 <?php endif;
55 }
56
57 /**
58 * @param int $user_id
59 * @param WP_User $old_user_data
60 *
61 * @return void
62 */
63 public function update_roles($user_id, $old_user_data)
64 {
65 // Early return if user lacks permissions
66 if ( ! current_user_can('promote_users') || ! current_user_can('edit_user', $user_id)) return;
67
68 if (empty($_POST['ppress_new_user_roles_nonce']) || ! wp_verify_nonce($_POST['ppress_new_user_roles_nonce'], 'ppress_new_user_roles')) return;
69
70 // Cache editable roles and extract just the role names for efficiency
71 $editable_roles = array_keys(get_editable_roles());
72
73 // Get current user roles
74 $current_roles = (array)$old_user_data->roles;
75
76 // Get and sanitize new roles, defaulting to empty array
77 $new_roles = isset($_POST['ppress_user_roles']) ? array_map('sanitize_text_field', (array)$_POST['ppress_user_roles']) : [];
78
79 // Filter new roles to only include editable ones
80 $new_roles = array_intersect($new_roles, $editable_roles);
81
82 // Calculate roles to add and remove
83 $roles_to_add = array_diff($new_roles, $current_roles);
84 $roles_to_remove = array_intersect(array_diff($current_roles, $new_roles), $editable_roles);
85
86 // Add new roles
87 foreach ($roles_to_add as $role) {
88 $old_user_data->add_role($role);
89 }
90
91 // Remove old roles
92 foreach ($roles_to_remove as $role) {
93 $old_user_data->remove_role($role);
94 }
95
96 do_action('ppress_user_roles_updated', $user_id, $roles_to_add, $roles_to_remove);
97 }
98
99 public function scripts()
100 {
101 if ( ! $this->is_profile_page()) return;
102 ?>
103 <script type="text/javascript">
104 document.addEventListener('DOMContentLoaded', () => {
105 document.querySelectorAll('.user-role-wrap').forEach(function (el) {
106 return el.remove();
107 });
108 });
109 </script>
110 <?php
111 }
112
113 public function styles()
114 {
115 if ( ! $this->is_profile_page()) return;
116 ?>
117 <style>.user-role-wrap {
118 display: none !important;
119 }</style>
120 <?php
121 }
122
123 private function is_profile_page()
124 {
125 global $pagenow;
126
127 return in_array($pagenow, ['profile.php', 'user-edit.php']);
128 }
129
130 public static function get_instance()
131 {
132 static $instance = null;
133
134 if (is_null($instance)) {
135 $instance = new self();
136 }
137
138 return $instance;
139 }
140 }