PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 6.4.4
Jetpack – WP Security, Backup, Speed, & Growth v6.4.4
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 All 500 releases
jetpack / sync / class.jetpack-sync-users.php
class.jetpack-sync-users.php
82 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Class Jetpack_Sync_Users
5 *
6 * Responsible for syncing user data changes.
7 */
8 class Jetpack_Sync_Users {
9 static $user_roles = array();
10
11 static function init() {
12 if ( Jetpack::is_active() ) {
13 // Kick off synchronization of user role when it changes
14 add_action( 'set_user_role', array( __CLASS__, 'user_role_change' ) );
15 }
16 }
17
18 /**
19 * Synchronize connected user role changes
20 */
21 static function user_role_change( $user_id ) {
22 if ( Jetpack::is_user_connected( $user_id ) ) {
23 self::update_role_on_com( $user_id );
24 //try to choose a new master if we're demoting the current one
25 self::maybe_demote_master_user( $user_id );
26 }
27 }
28
29 static function get_role( $user_id ) {
30 if ( isset( self::$user_roles[ $user_id ] ) ) {
31 return self::$user_roles[ $user_id ];
32 }
33
34 $current_user_id = get_current_user_id();
35 wp_set_current_user( $user_id );
36 $role = Jetpack::translate_current_user_to_role();
37 wp_set_current_user( $current_user_id );
38 $user_roles[ $user_id ] = $role;
39
40 return $role;
41 }
42
43 static function get_signed_role( $user_id ) {
44 return Jetpack::sign_role( self::get_role( $user_id ), $user_id );
45 }
46
47 static function update_role_on_com( $user_id ) {
48 $signed_role = self::get_signed_role( $user_id );
49 Jetpack::xmlrpc_async_call( 'jetpack.updateRole', $user_id, $signed_role );
50 }
51
52 static function maybe_demote_master_user( $user_id ) {
53 $master_user_id = Jetpack_Options::get_option( 'master_user' );
54 $role = self::get_role( $user_id );
55 if ( $user_id == $master_user_id && 'administrator' != $role ) {
56 $query = new WP_User_Query(
57 array(
58 'fields' => array( 'id' ),
59 'role' => 'administrator',
60 'orderby' => 'id',
61 'exclude' => array( $master_user_id ),
62 )
63 );
64 $new_master = false;
65 foreach ( $query->results as $result ) {
66 $found_user_id = absint( $result->id );
67 if ( $found_user_id && Jetpack::is_user_connected( $found_user_id ) ) {
68 $new_master = $found_user_id;
69 break;
70 }
71 }
72
73 if ( $new_master ) {
74 Jetpack_Options::update_option( 'master_user', $new_master );
75 }
76 // else disconnect..?
77 }
78 }
79 }
80
81 Jetpack_Sync_Users::init();
82