WordPress.org

Plugin Directory

Changeset 615835


Ignore:
Timestamp:
10/22/12 22:55:28 (18 months ago)
Author:
jblz
Message:

Jetpack: hook into set_user_role to synchronize connected user role changes

  • new function Jetpack->user_role_change()
  • makes xmlrpc_async_call to method jetpack.updateRole
  • passes user_id and a role string signature
  • sets a new master_user option when demoting the current master user
File:
1 edited

Legend:

Unmodified
Added
Removed
  • jetpack/trunk/jetpack.php

    r614241 r615835  
    280280        $user_token = Jetpack_Data::get_access_token( JETPACK_MASTER_USER ); 
    281281        return $user_token && is_object( $user_token ) && isset( $user_token->external_user_id ) && get_current_user_id() === $user_token->external_user_id; 
     282    } 
     283 
     284    /** 
     285    * Synchronize connected user role changes 
     286    */ 
     287    function user_role_change( $user_id ) { 
     288        if ( $this->is_active() && $this->is_user_connected( $user_id ) ) { 
     289 
     290            $current_user_id = get_current_user_id(); 
     291            wp_set_current_user( $user_id ); 
     292            $role = $this->translate_current_user_to_role(); 
     293            $signed_role = $this->sign_role( $role ); 
     294            wp_set_current_user( $current_user_id ); 
     295 
     296            $master_token = Jetpack_Data::get_access_token( JETPACK_MASTER_USER ); 
     297            $master_user_id = absint( $master_token->external_user_id ); 
     298 
     299            if ( !$master_user_id ) 
     300                return; // this shouldn't happen 
     301 
     302            $this->xmlrpc_async_call( 'jetpack.updateRole', $user_id, $signed_role ); 
     303            //@todo retry on failure 
     304 
     305            //try to choose a new master if we're demoting the current one 
     306            if ( $user_id == $master_user_id && 'administrator' != $role ) { 
     307                $query = new WP_User_Query( array( 
     308                        'fields'  => array( 'id' ), 
     309                        'role'    => 'administrator', 
     310                        'orderby' => 'id', 
     311                        'exclude' => array( $master_user_id ), 
     312                        'number'  => 1, 
     313                    ) 
     314                ); 
     315                $new_master = isset( $query->results[0]->id ) ? absint( $query->results[0]->id ) : 0; 
     316                if ( $new_master ) { 
     317                    Jetpack::update_option( 'master_user', $new_master ); 
     318                } 
     319            } 
     320        } 
    282321    } 
    283322 
     
    10991138            // Artificially throw errors in certain whitelisted cases during plugin activation 
    11001139            add_action( 'activate_plugin', array( $this, 'throw_error_on_activate_plugin' ) ); 
     1140 
     1141            // Kick off synchronization of user role when it changes 
     1142            add_action( 'set_user_role', array( $this, 'user_role_change' ) ); 
    11011143 
    11021144            // Add retina images hotfix to admin 
Note: See TracChangeset for help on using the changeset viewer.