PluginProbe
Authorizer / 3.9.0
Authorizer v3.9.0
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 +43 -51 2.9.13.9.0 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
@@ -603,9 +597,9 @@
603 597 if ( ! Helper::in_multi_array( $user_email, $auth_settings_access_users_approved ) ) {
604 598 $approved_user = array(
605 599 'email' => Helper::lowercase( $user_email ),
606 600 'role' => is_array( $user_roles ) && count( $user_roles ) > 0 ? $user_roles[0] : $default_role,
607 - 'date_added' => date( 'M Y', strtotime( $date_registered ) ),
601 + 'date_added' => wp_date( 'M Y', strtotime( $date_registered ) ),
608 602 'local_user' => true,
609 603 );
610 604 array_push( $auth_settings_access_users_approved, $approved_user );
611 605 $updated = true;
@@ -640,13 +634,13 @@
640 634 if ( ! Helper::in_multi_array( $user_email, $auth_multisite_settings_access_users_approved ) ) {
641 635 $multisite_approved_user = array(
642 636 'email' => Helper::lowercase( $user_email ),
643 637 'role' => count( $user->roles ) > 0 ? $user->roles[0] : 'administrator',
644 - 'date_added' => date( 'M Y', strtotime( $user->user_registered ) ),
638 + 'date_added' => wp_date( 'M Y', strtotime( $user->user_registered ) ),
645 639 'local_user' => true,
646 640 );
647 641 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 );
642 + update_blog_option( get_main_site_id( get_main_network_id() ), 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
649 643 }
650 644
651 645 // Go through all pending/approved lists on individual sites and remove this user from them.
652 646 // phpcs:ignore WordPress.WP.DeprecatedFunctions.wp_get_sitesFound
@@ -654,9 +648,8 @@
654 648 foreach ( $sites as $site ) {
655 649 $blog_id = function_exists( 'get_sites' ) ? $site->blog_id : $site['blog_id'];
656 650 $this->remove_network_user_from_site_when_removed( $user_id, $blog_id );
657 651 }
658 -
659 652 }
660 653
661 654
662 655 /**
@@ -685,9 +678,9 @@
685 678 unset( $auth_multisite_settings_access_users_approved[ $key ] );
686 679 }
687 680 }
688 681 if ( $list_changed ) {
689 - update_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
682 + update_blog_option( get_main_site_id( get_main_network_id() ), 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved );
690 683 }
691 684
692 685 // Go through this user's current sites and add them to the approved list
693 686 // (since they are no longer on the network approved list).
@@ -696,6 +689,5 @@
696 689 $blog_id = $site->userblog_id;
697 690 $this->add_network_user_to_site( $user_id, $blog_id );
698 691 }
699 692 }
700 -
701 693 }