PluginProbe
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards / 5.5.84
WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards v5.5.84
5.5.84 5.5.83 5.5.82 5.5.81 5.5.80 5.5.79 5.5.77 5.5.76 5.5.75 5.5.73 5.5.72 5.5.22 5.5.23 5.5.29 5.5.3 5.5.31 5.5.32 5.5.34 5.5.35 5.5.36 5.5.37 5.5.4 5.5.40 5.5.41 5.5.42 All 160 releases
wp-data-access / WPDataRoles / WPDA_Roles.php

WPDA_Roles.php in WP Data Access – App Builder for Tables, Forms, Charts, Maps & Dashboards 5.5.84, at WPDataRoles/WPDA_Roles.php

105 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Suppress "error - 0 - No summary was found for this file" on phpdoc generation
5 *
6 * @package WPDataRoles
7 */
8
9 namespace WPDataRoles {
10
11 use WPDataAccess\WPDA;
12
13 /**
14 * Class WPDA_Roles
15 *
16 * Allow users to have multiple roles
17 *
18 * @author Peter Schulz
19 * @since 2.7.0
20 */
21 class WPDA_Roles {
22
23 private function can_management_roles() {
24 return
25 is_admin() &&
26 current_user_can( 'promote_users' ) &&
27 ( 'off' !== WPDA::get_option( WPDA::OPTION_WPDA_ENABLE_ROLE_MANAGEMENT ) );
28 }
29
30 /**
31 * @param $user
32 */
33 public function multiple_roles_selection( $user ) {
34 if ( ! $this->can_management_roles() ) {
35 return;
36 }
37
38 $user_roles = isset( $user->roles ) ? implode( "','", $user->roles ) : '';
39 ?>
40 <script type='text/javascript'>
41 jQuery('select[name="role"]').attr('multiple', 'yes').attr('size', '6').prop('name', 'wpda_role[]');
42 jQuery('#role').val(['<?php echo $user_roles; // phpcs:ignore WordPress.Security.EscapeOutput ?>']);
43 </script>
44 <?php
45 }
46
47 /**
48 * @param $user_id
49 */
50 public function multiple_roles_update( $user_id ) {
51 if ( ! $this->can_management_roles() ) {
52 return;
53 }
54
55 $wp_user = new \WP_User( $user_id );
56 if ( isset( $wp_user->data->user_login ) ) {
57 $user_login = $wp_user->data->user_login;
58 // Get access to editable roles
59 global $wp_roles;
60 if ( isset( $_REQUEST['wpda_role'] ) && is_array( $_REQUEST['wpda_role'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- verified on main page
61 // Process roles
62 $sanitized_roles = array();
63 foreach ( $_REQUEST['wpda_role'] as $new_user_role ) { // phpcs:ignore -- verified on main page
64 $sanitized_new_user_role = sanitize_text_field( wp_unslash( $new_user_role ) ); // input var okay.
65 $wp_user->add_role( $sanitized_new_user_role );
66 $sanitized_roles[ $sanitized_new_user_role ] = true;
67 }
68
69 // Remove unselected roles
70 foreach ( $wp_roles->roles as $role => $val ) {
71 if ( ! isset( $sanitized_roles[ $role ] ) ) {
72 $wp_user->remove_role( $role );
73 }
74 }
75 } else {
76 // REMOVED!!!
77 // When plugin role management is enabled, this removes all user roles when a user updates his profile.
78 // foreach ( $wp_roles->roles as $role => $val ) {
79 // $wp_user->remove_role( $role );
80 // }
81 }
82 }
83 }
84
85 /**
86 * Change role label in user list table
87 *
88 * @param $columns
89 *
90 * @return mixed
91 */
92 public function multiple_roles_label( $columns ) {
93 if ( ! $this->can_management_roles() ) {
94 return $columns;
95 }
96
97 $columns['role'] = __( 'Role(s)', 'wp-data-access' );
98
99 return $columns;
100 }
101
102 }
103
104 }
105