| @@ -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 |
| @@ -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; |
| @@ -210,9 +210,9 @@ | ||
| 210 | 210 | * @param stdClass $user Updated WP_User object for user being edited (passed by reference). |
| 211 | 211 | */ |
| 212 | 212 | public function edit_user_profile_update_role( &$errors, $update, &$user ) { |
| 213 | 213 | // Do nothing if we're not updating role. |
| 214 | - if ( ! property_exists( $user, 'role' ) ) { | |
| 214 | + if ( ! property_exists( $user, 'role' ) || ! property_exists( $user, 'ID' ) ) { | |
| 215 | 215 | return; |
| 216 | 216 | } |
| 217 | 217 | |
| 218 | 218 | // Safety check; will likely not fire if we reach this function. |
| @@ -244,9 +244,53 @@ | ||
| 244 | 244 | update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved ); |
| 245 | 245 | } |
| 246 | 246 | } |
| 247 | 247 | |
| 248 | + /** | |
| 249 | + * Update user role in approved list if it's changed via bulk action on the | |
| 250 | + * WordPress list users page. | |
| 251 | + * | |
| 252 | + * @hook set_user_role | |
| 253 | + * | |
| 254 | + * @param integer $user_id The user ID. | |
| 255 | + * @param string $role The new role. | |
| 256 | + * @param array $old_roles An array of the user's previous roles. | |
| 257 | + */ | |
| 258 | + public function set_user_role_sync_role( $user_id = 0, $role = '', $old_roles = array() ) { | |
| 259 | + // Ensure valid user ID and user has permission to edit this user. | |
| 260 | + if ( empty( $user_id ) || ! current_user_can( 'edit_user', $user_id ) ) { | |
| 261 | + return; | |
| 262 | + } | |
| 248 | 263 | |
| 264 | + // Get original user object (fail if not a real WordPress user). | |
| 265 | + $userdata = get_userdata( $user_id ); | |
| 266 | + if ( ! $userdata ) { | |
| 267 | + return; | |
| 268 | + } | |
| 269 | + | |
| 270 | + // If user is in approved list, update his/her associated role. | |
| 271 | + if ( Authorization::get_instance()->is_email_in_list( $userdata->user_email, 'approved' ) ) { | |
| 272 | + $changed = false; | |
| 273 | + $options = Options::get_instance(); | |
| 274 | + $auth_settings_access_users_approved = $options->sanitize_user_list( $options->get( 'access_users_approved', Helper::SINGLE_CONTEXT ) ); | |
| 275 | + foreach ( $auth_settings_access_users_approved as $key => $check_user ) { | |
| 276 | + if ( 0 === strcasecmp( $check_user['email'], $userdata->user_email ) ) { | |
| 277 | + if ( empty( $role ) ) { | |
| 278 | + unset( $auth_settings_access_users_approved[ $key ] ); | |
| 279 | + $changed = true; | |
| 280 | + } elseif ( $auth_settings_access_users_approved[ $key ]['role'] !== $role ) { | |
| 281 | + $auth_settings_access_users_approved[ $key ]['role'] = $role; | |
| 282 | + $changed = true; | |
| 283 | + } | |
| 284 | + } | |
| 285 | + } | |
| 286 | + if ( $changed ) { | |
| 287 | + update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved ); | |
| 288 | + } | |
| 289 | + } | |
| 290 | + } | |
| 291 | + | |
| 292 | + | |
| 249 | 293 | /** |
| 250 | 294 | * Sync any email address changes to WordPress accounts to the corresponding |
| 251 | 295 | * entry in the Authorizer approved list. |
| 252 | 296 | * |
| @@ -464,9 +508,9 @@ | ||
| 464 | 508 | if ( ! Helper::in_multi_array( $user_email, $auth_settings_access_users_approved ) && ! Helper::in_multi_array( $user_email, $auth_settings_access_users_blocked ) ) { |
| 465 | 509 | $approved_user = array( |
| 466 | 510 | 'email' => Helper::lowercase( $user_email ), |
| 467 | 511 | 'role' => $user_role, |
| 468 | - 'date_added' => date( 'M Y', strtotime( $user->user_registered ) ), | |
| 512 | + 'date_added' => wp_date( 'M Y', strtotime( $user->user_registered ) ), | |
| 469 | 513 | 'local_user' => true, |
| 470 | 514 | ); |
| 471 | 515 | array_push( $auth_settings_access_users_approved, $approved_user ); |
| 472 | 516 | update_option( 'auth_settings_access_users_approved', $auth_settings_access_users_approved ); |
| @@ -603,9 +647,9 @@ | ||
| 603 | 647 | if ( ! Helper::in_multi_array( $user_email, $auth_settings_access_users_approved ) ) { |
| 604 | 648 | $approved_user = array( |
| 605 | 649 | 'email' => Helper::lowercase( $user_email ), |
| 606 | 650 | 'role' => is_array( $user_roles ) && count( $user_roles ) > 0 ? $user_roles[0] : $default_role, |
| 607 | - 'date_added' => date( 'M Y', strtotime( $date_registered ) ), | |
| 651 | + 'date_added' => wp_date( 'M Y', strtotime( $date_registered ) ), | |
| 608 | 652 | 'local_user' => true, |
| 609 | 653 | ); |
| 610 | 654 | array_push( $auth_settings_access_users_approved, $approved_user ); |
| 611 | 655 | $updated = true; |
| @@ -640,9 +684,9 @@ | ||
| 640 | 684 | if ( ! Helper::in_multi_array( $user_email, $auth_multisite_settings_access_users_approved ) ) { |
| 641 | 685 | $multisite_approved_user = array( |
| 642 | 686 | 'email' => Helper::lowercase( $user_email ), |
| 643 | 687 | 'role' => count( $user->roles ) > 0 ? $user->roles[0] : 'administrator', |
| 644 | - 'date_added' => date( 'M Y', strtotime( $user->user_registered ) ), | |
| 688 | + 'date_added' => wp_date( 'M Y', strtotime( $user->user_registered ) ), | |
| 645 | 689 | 'local_user' => true, |
| 646 | 690 | ); |
| 647 | 691 | array_push( $auth_multisite_settings_access_users_approved, $multisite_approved_user ); |
| 648 | 692 | update_blog_option( get_network()->blog_id, 'auth_multisite_settings_access_users_approved', $auth_multisite_settings_access_users_approved ); |