PluginProbe
Authorizer / 3.9.1
Authorizer v3.9.1
3.15.3 3.15.2 3.15.1 3.15.0 3.14.3 3.14.4 3.14.2 3.14.1 2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.9.0 2.9.1 2.9.10 2.9.11 2.9.12 2.9.13 2.9.2 2.9.3 2.9.6 All 126 releases
← All changes | src/authorizer/class-sync-userdata.php +49 -55 2.9.03.9.1 View file →
@@ -16,9 +16,9 @@
16 16 /**
17 17 * Contains functions for interfacing with WordPress users and syncing between
18 18 * them and users in the Authorizer lists.
19 19 */
20 -class Sync_Userdata extends Static_Instance {
20 +class Sync_Userdata extends Singleton {
21 21
22 22 /**
23 23 * Adds all WordPress users in the current site to the approved list,
24 24 * unless they are already in the blocked list. Also removes them
@@ -30,9 +30,9 @@
30 30 */
31 31 public function add_wp_users_to_approved_list() {
32 32 $options = Options::get_instance();
33 33 // Add current WordPress users to the approved list.
34 - $auth_multisite_settings_access_users_approved = is_multisite() ? get_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', array() ) : array();
34 + $auth_multisite_settings_access_users_approved = is_multisite() ? get_blog_option( get_main_site_id( get_main_network_id() ), 'auth_multisite_settings_access_users_approved', array() ) : array();
35 35 $auth_settings_access_users_pending = $options->get( 'access_users_pending', Helper::SINGLE_CONTEXT );
36 36 $auth_settings_access_users_approved = $options->get( 'access_users_approved', Helper::SINGLE_CONTEXT );
37 37 $auth_settings_access_users_blocked = $options->get( 'access_users_blocked', Helper::SINGLE_CONTEXT );
38 38 $updated = false;
@@ -56,9 +56,9 @@
56 56 if ( ! Helper::in_multi_array( $user->user_email, $auth_settings_access_users_approved ) ) {
57 57 $approved_user = array(
58 58 'email' => Helper::lowercase( $user->user_email ),
59 59 'role' => count( $user->roles ) > 0 ? $user->roles[0] : '',
60 - 'date_added' => date( 'M Y', strtotime( $user->user_registered ) ),
60 + 'date_added' => wp_date( 'M Y', strtotime( $user->user_registered ) ),
61 61 'local_user' => true,
62 62 );
63 63 array_push( $auth_settings_access_users_approved, $approved_user );
64 64 $updated = true;
@@ -198,37 +198,25 @@
198 198 }
199 199
200 200
201 201 /**
202 - * Keep authorizer approved users' roles in sync with WordPress roles
203 - * if someone changes the role via the WordPress Edit User page
204 - * (wp-admin/user-edit.php or wp-admin/profile.php).
202 + * Update user role in approved list if it's changed via bulk action on the
203 + * WordPress list users page.
205 204 *
206 - * Action: user_profile_update_errors
205 + * @hook set_user_role
207 206 *
208 - * @param WP_Error $errors Errors object to add any custom errors to (passed by reference).
209 - * @param bool $update True if updating existing user, false if saving a new one.
210 - * @param stdClass $user Updated WP_User object for user being edited (passed by reference).
207 + * @param integer $user_id The user ID.
208 + * @param string $role The new role.
209 + * @param array $old_roles An array of the user's previous roles.
211 210 */
212 - public function edit_user_profile_update_role( &$errors, $update, &$user ) {
213 - // Do nothing if we're not updating role.
214 - if ( ! property_exists( $user, 'role' ) ) {
211 + public function set_user_role_sync_role( $user_id = 0, $role = '', $old_roles = array() ) {
212 + // Ensure valid user ID and user has permission to edit this user.
213 + if ( empty( $user_id ) || ! current_user_can( 'edit_user', $user_id ) ) {
215 214 return;
216 215 }
217 216
218 - // Safety check; will likely not fire if we reach this function.
219 - if ( ! current_user_can( 'edit_user', $user->ID ) ) {
220 - return;
221 - }
222 -
223 - // Don't perform Authorizer updates if we have a WordPress error.
224 - $errors_on_user_update = $errors->get_error_codes();
225 - if ( ! empty( $errors_on_user_update ) ) {
226 - return;
227 - }
228 -
229 217 // Get original user object (fail if not a real WordPress user).
230 - $userdata = get_userdata( $user->ID );
218 + $userdata = get_userdata( $user_id );
231 219 if ( ! $userdata ) {
232 220 return;
233 221 }
234 222
@@ -233,16 +221,25 @@
233 221 }
234 222
235 223 // If user is in approved list, update his/her associated role.
236 224 if ( Authorization::get_instance()->is_email_in_list( $userdata->user_email, 'approved' ) ) {
225 + $changed = false;
237 226 $options = Options::get_instance();
238 227 $auth_settings_access_users_approved = $options->sanitize_user_list( $options->get( 'access_users_approved', Helper::SINGLE_CONTEXT ) );
239 228 foreach ( $auth_settings_access_users_approved as $key => $check_user ) {
240 229 if ( 0 === strcasecmp( $check_user['email'], $userdata->user_email ) ) {
241 - $auth_settings_access_users_approved[ $key ]['role'] = $user->role;
230 + if ( empty( $role ) ) {
231 + unset( $auth_settings_access_users_approved[ $key ] );
232 + $changed = true;
233 + } elseif ( $auth_settings_access_users_approved[ $key ]['role'] !== $role ) {
234 + $auth_settings_access_users_approved[ $key ]['role'] = $role;
235 + $changed = true;
236 + }
242 237 }
243 238 }
244 - update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved );
239 + if ( $changed ) {
240 + update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved );
241 + }
245 242 }
246 243 }
247 244
248 245
@@ -284,9 +281,9 @@
284 281 if ( 0 === strcasecmp( $check_user['email'], $userdata['user_email'] ) ) {
285 282 unset( $auth_multisite_settings_access_users_approved[ $key ] );
286 283 }
287 284 }
288 - update_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
285 + update_blog_option( get_main_site_id( get_main_network_id() ), 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
289 286 }
290 287
291 288 // Go through all approved lists on individual sites and sync this user there.
292 289 // phpcs:ignore WordPress.WP.DeprecatedFunctions.wp_get_sitesFound
@@ -315,24 +312,22 @@
315 312 if ( $updated ) {
316 313 update_blog_option( $blog_id, 'auth_settings_access_users_approved', $auth_settings_access_users_approved );
317 314 }
318 315 }
319 - } else {
316 + } elseif ( Authorization::get_instance()->is_email_in_list( $user['user_email'], 'approved' ) ) {
320 317 // In a single site environment, just find the old user in the approved list and update the email.
321 - if ( Authorization::get_instance()->is_email_in_list( $user['user_email'], 'approved' ) ) {
322 - $auth_settings_access_users_approved = $options->sanitize_user_list( $options->get( 'access_users_approved', Helper::SINGLE_CONTEXT ) );
323 - foreach ( $auth_settings_access_users_approved as $key => $check_user ) {
324 - // Update old user email in approved list to the new email.
325 - if ( 0 === strcasecmp( $check_user['email'], $user['user_email'] ) ) {
326 - $auth_settings_access_users_approved[ $key ]['email'] = Helper::lowercase( $userdata['user_email'] );
327 - }
328 - // If new user email is already in approved list, remove that entry.
329 - if ( 0 === strcasecmp( $check_user['email'], $userdata['user_email'] ) ) {
330 - unset( $auth_settings_access_users_approved[ $key ] );
331 - }
318 + $auth_settings_access_users_approved = $options->sanitize_user_list( $options->get( 'access_users_approved', Helper::SINGLE_CONTEXT ) );
319 + foreach ( $auth_settings_access_users_approved as $key => $check_user ) {
320 + // Update old user email in approved list to the new email.
321 + if ( 0 === strcasecmp( $check_user['email'], $user['user_email'] ) ) {
322 + $auth_settings_access_users_approved[ $key ]['email'] = Helper::lowercase( $userdata['user_email'] );
332 323 }
333 - update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved );
324 + // If new user email is already in approved list, remove that entry.
325 + if ( 0 === strcasecmp( $check_user['email'], $userdata['user_email'] ) ) {
326 + unset( $auth_settings_access_users_approved[ $key ] );
327 + }
334 328 }
329 + update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved );
335 330 }
336 331
337 332 // We're hooking into this filter merely for its location in the codebase,
338 333 // so make sure to return the filter value unmodified.
@@ -395,9 +390,9 @@
395 390 unset( $auth_multisite_settings_access_users_approved[ $key ] );
396 391 }
397 392 }
398 393 if ( $list_changed ) {
399 - update_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
394 + update_blog_option( get_main_site_id( get_main_network_id() ), 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
400 395 }
401 396
402 397 // Go through all pending/approved lists on individual sites and remove this user from them.
403 398 // phpcs:ignore WordPress.WP.DeprecatedFunctions.wp_get_sitesFound
@@ -405,9 +400,8 @@
405 400 foreach ( $sites as $site ) {
406 401 $blog_id = function_exists( 'get_sites' ) ? $site->blog_id : $site['blog_id'];
407 402 $this->remove_network_user_from_site_when_removed( $user_id, $blog_id );
408 403 }
409 -
410 404 }
411 405
412 406
413 407 /**
@@ -464,9 +458,9 @@
464 458 if ( ! Helper::in_multi_array( $user_email, $auth_settings_access_users_approved ) && ! Helper::in_multi_array( $user_email, $auth_settings_access_users_blocked ) ) {
465 459 $approved_user = array(
466 460 'email' => Helper::lowercase( $user_email ),
467 461 'role' => $user_role,
468 - 'date_added' => date( 'M Y', strtotime( $user->user_registered ) ),
462 + 'date_added' => wp_date( 'M Y', strtotime( $user->user_registered ) ),
469 463 'local_user' => true,
470 464 );
471 465 array_push( $auth_settings_access_users_approved, $approved_user );
472 466 update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved );
@@ -558,9 +552,9 @@
558 552 * @param array $default_role Default role, if no role specified.
559 553 */
560 554 protected function add_user_to_authorizer_when_created( $user_email, $date_registered, $user_roles = array(), $default_role = array() ) {
561 555 $options = Options::get_instance();
562 - $auth_multisite_settings_access_users_approved = is_multisite() ? get_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', array() ) : array();
556 + $auth_multisite_settings_access_users_approved = is_multisite() ? get_blog_option( get_main_site_id( get_main_network_id() ), 'auth_multisite_settings_access_users_approved', array() ) : array();
563 557 $auth_settings_access_users_pending = $options->get( 'access_users_pending', Helper::SINGLE_CONTEXT );
564 558 $auth_settings_access_users_approved = $options->get( 'access_users_approved', Helper::SINGLE_CONTEXT );
565 559 $auth_settings_access_users_blocked = $options->get( 'access_users_blocked', Helper::SINGLE_CONTEXT );
566 560
@@ -573,12 +567,14 @@
573 567 // name to save (and default to no role if the display name isn't found).
574 568 global $wp_roles;
575 569 $default_role_display_name = $default_role['name'];
576 570 $default_role = '';
577 - foreach ( $wp_roles->role_names as $role_name => $display_name ) {
578 - if ( $default_role_display_name === $display_name ) {
579 - $default_role = $role_name;
580 - break;
571 + if ( ! empty( $wp_roles ) && is_array( $wp_roles->role_names ) ) {
572 + foreach ( $wp_roles->role_names as $role_name => $display_name ) {
573 + if ( $default_role_display_name === $display_name ) {
574 + $default_role = $role_name;
575 + break;
576 + }
581 577 }
582 578 }
583 579 }
584 580
@@ -603,9 +599,9 @@
603 599 if ( ! Helper::in_multi_array( $user_email, $auth_settings_access_users_approved ) ) {
604 600 $approved_user = array(
605 601 'email' => Helper::lowercase( $user_email ),
606 602 'role' => is_array( $user_roles ) && count( $user_roles ) > 0 ? $user_roles[0] : $default_role,
607 - 'date_added' => date( 'M Y', strtotime( $date_registered ) ),
603 + 'date_added' => wp_date( 'M Y', strtotime( $date_registered ) ),
608 604 'local_user' => true,
609 605 );
610 606 array_push( $auth_settings_access_users_approved, $approved_user );
611 607 $updated = true;
@@ -640,13 +636,13 @@
640 636 if ( ! Helper::in_multi_array( $user_email, $auth_multisite_settings_access_users_approved ) ) {
641 637 $multisite_approved_user = array(
642 638 'email' => Helper::lowercase( $user_email ),
643 639 'role' => count( $user->roles ) > 0 ? $user->roles[0] : 'administrator',
644 - 'date_added' => date( 'M Y', strtotime( $user->user_registered ) ),
640 + 'date_added' => wp_date( 'M Y', strtotime( $user->user_registered ) ),
645 641 'local_user' => true,
646 642 );
647 643 array_push( $auth_multisite_settings_access_users_approved, $multisite_approved_user );
648 - update_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
644 + update_blog_option( get_main_site_id( get_main_network_id() ), 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
649 645 }
650 646
651 647 // Go through all pending/approved lists on individual sites and remove this user from them.
652 648 // phpcs:ignore WordPress.WP.DeprecatedFunctions.wp_get_sitesFound
@@ -654,9 +650,8 @@
654 650 foreach ( $sites as $site ) {
655 651 $blog_id = function_exists( 'get_sites' ) ? $site->blog_id : $site['blog_id'];
656 652 $this->remove_network_user_from_site_when_removed( $user_id, $blog_id );
657 653 }
658 -
659 654 }
660 655
661 656
662 657 /**
@@ -685,9 +680,9 @@
685 680 unset( $auth_multisite_settings_access_users_approved[ $key ] );
686 681 }
687 682 }
688 683 if ( $list_changed ) {
689 - update_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
684 + update_blog_option( get_main_site_id( get_main_network_id() ), 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
690 685 }
691 686
692 687 // Go through this user's current sites and add them to the approved list
693 688 // (since they are no longer on the network approved list).
@@ -696,6 +691,5 @@
696 691 $blog_id = $site->userblog_id;
697 692 $this->add_network_user_to_site( $user_id, $blog_id );
698 693 }
699 694 }
700 -
701 695 }