PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0.1
Jetpack – WP Security, Backup, Speed, & Growth v16.0.1
16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-sync / src / class-users.php
jetpack / jetpack_vendor / automattic / jetpack-sync / src Last commit date
modules 3 weeks ago replicastore 3 months ago sync-queue 5 months ago class-actions.php 1 month ago class-activity-log-event.php 3 weeks ago class-data-settings.php 1 month ago class-dedicated-sender.php 7 months ago class-default-filter-settings.php 4 years ago class-defaults.php 2 days ago class-functions.php 1 month ago class-health.php 4 months ago class-json-deflate-array-codec.php 7 months ago class-listener.php 1 month ago class-lock.php 4 years ago class-main.php 2 months ago class-modules.php 1 year ago class-package-version.php 2 days ago class-queue-buffer.php 4 years ago class-queue.php 1 month ago class-replicastore.php 1 month ago class-rest-endpoints.php 4 months ago class-rest-sender.php 1 month ago class-sender.php 1 month ago class-server.php 4 months ago class-settings.php 3 months ago class-simple-codec.php 7 months ago class-users.php 3 months ago class-utils.php 4 years ago interface-codec.php 4 years ago interface-replicastore.php 1 month ago
class-users.php
156 lines
1 <?php
2 /**
3 * Sync for users.
4 *
5 * @package automattic/jetpack-sync
6 */
7
8 namespace Automattic\Jetpack\Sync;
9
10 use Automattic\Jetpack\Connection\Manager as Jetpack_Connection;
11 use Automattic\Jetpack\Connection\XMLRPC_Async_Call;
12 use Automattic\Jetpack\Roles;
13
14 /**
15 * Class Users.
16 *
17 * Responsible for syncing user data changes.
18 */
19 class Users {
20 /**
21 * Roles of all users, indexed by user ID.
22 *
23 * @access public
24 * @static
25 *
26 * @var array
27 */
28 public static $user_roles = array();
29
30 /**
31 * Initialize sync for user data changes.
32 *
33 * @access public
34 * @static
35 * @todo Eventually, connection needs to be instantiated at the top level in the sync package.
36 */
37 public static function init() {
38 add_action( 'jetpack_user_authorized', array( 'Automattic\\Jetpack\\Sync\\Actions', 'do_initial_sync' ), 10, 0 );
39 $connection = new Jetpack_Connection();
40 if ( $connection->has_connected_user() ) {
41 // Kick off synchronization of user role when it changes.
42 add_action( 'set_user_role', array( __CLASS__, 'user_role_change' ) );
43 }
44 }
45
46 /**
47 * Synchronize connected user role changes.
48 *
49 * @access public
50 * @static
51 *
52 * @param int $user_id ID of the user.
53 */
54 public static function user_role_change( $user_id ) {
55 $connection = new Jetpack_Connection();
56 if ( $connection->is_user_connected( $user_id ) ) {
57 self::get_role( $user_id );
58 self::update_role_on_com( $user_id );
59
60 // Try to choose a new master if we're demoting the current one.
61 self::maybe_demote_master_user( $user_id );
62 }
63 }
64
65 /**
66 * Retrieve the role of a user by their ID.
67 *
68 * @access public
69 * @static
70 *
71 * @param int $user_id ID of the user.
72 * @param bool $reload Forces reading the role from the database.
73 * @return string Role of the user.
74 */
75 public static function get_role( $user_id, $reload = false ) {
76 if ( ! $reload && isset( self::$user_roles[ $user_id ] ) ) {
77 return self::$user_roles[ $user_id ];
78 }
79
80 $current_user_id = get_current_user_id();
81 wp_set_current_user( $user_id );
82 $roles = new Roles();
83 $role = $roles->translate_current_user_to_role();
84 wp_set_current_user( $current_user_id );
85 self::$user_roles[ $user_id ] = $role;
86
87 return $role;
88 }
89
90 /**
91 * Retrieve the signed role of a user by their ID.
92 *
93 * @access public
94 * @static
95 *
96 * @param int $user_id ID of the user.
97 * @return string Signed role of the user.
98 */
99 public static function get_signed_role( $user_id ) {
100 $connection = new Jetpack_Connection();
101 return $connection->sign_role( self::get_role( $user_id ), $user_id );
102 }
103
104 /**
105 * Retrieve the signed role and update it in WP.com for that user.
106 *
107 * @access public
108 * @static
109 *
110 * @param int $user_id ID of the user.
111 */
112 public static function update_role_on_com( $user_id ) {
113 $signed_role = self::get_signed_role( $user_id );
114 XMLRPC_Async_Call::add_call( 'jetpack.updateRole', get_current_user_id(), $user_id, $signed_role );
115 }
116
117 /**
118 * Choose a new master user if we're demoting the current one.
119 *
120 * @access public
121 * @static
122 * @todo Disconnect if there is no user with enough capabilities to be the master user.
123 * @uses \WP_User_Query
124 *
125 * @param int $user_id ID of the user.
126 */
127 public static function maybe_demote_master_user( $user_id ) {
128 $master_user_id = (int) \Jetpack_Options::get_option( 'master_user' );
129 $role = self::get_role( $user_id );
130 if ( $user_id === $master_user_id && 'administrator' !== $role ) {
131 $query = new \WP_User_Query(
132 array(
133 'fields' => array( 'ID' ),
134 'role' => 'administrator',
135 'orderby' => 'ID',
136 'exclude' => array( $master_user_id ),
137 )
138 );
139 $new_master = false;
140 $connection = new Jetpack_Connection();
141 foreach ( $query->results as $result ) {
142 $found_user_id = absint( $result->ID );
143 if ( $found_user_id && $connection->is_user_connected( $found_user_id ) ) {
144 $new_master = $found_user_id;
145 break;
146 }
147 }
148
149 if ( $new_master ) {
150 \Jetpack_Options::update_option( 'master_user', $new_master );
151 }
152 // TODO: else disconnect..?
153 }
154 }
155 }
156