PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 9.3.5
Jetpack – WP Security, Backup, Speed, & Growth v9.3.5
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 / json-endpoints / class.wpcom-json-api-update-user-endpoint.php
jetpack / json-endpoints Last commit date
jetpack 5 years ago class.wpcom-json-api-add-widget-endpoint.php 8 years ago class.wpcom-json-api-autosave-post-v1-1-endpoint.php 6 years ago class.wpcom-json-api-bulk-delete-post-endpoint.php 8 years ago class.wpcom-json-api-bulk-restore-post-endpoint.php 8 years ago class.wpcom-json-api-bulk-update-comments-endpoint.php 7 years ago class.wpcom-json-api-comment-endpoint.php 7 years ago class.wpcom-json-api-delete-media-endpoint.php 8 years ago class.wpcom-json-api-delete-media-v1-1-endpoint.php 8 years ago class.wpcom-json-api-edit-media-v1-2-endpoint.php 3 years ago class.wpcom-json-api-get-autosave-v1-1-endpoint.php 6 years ago class.wpcom-json-api-get-comment-counts-endpoint.php 5 years ago class.wpcom-json-api-get-comment-endpoint.php 5 years ago class.wpcom-json-api-get-comment-history-endpoint.php 5 years ago class.wpcom-json-api-get-comments-tree-endpoint.php 5 years ago class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php 5 years ago class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php 5 years ago class.wpcom-json-api-get-customcss.php 8 years ago class.wpcom-json-api-get-media-endpoint.php 8 years ago class.wpcom-json-api-get-media-v1-1-endpoint.php 8 years ago class.wpcom-json-api-get-media-v1-2-endpoint.php 8 years ago class.wpcom-json-api-get-post-counts-v1-1-endpoint.php 6 years ago class.wpcom-json-api-get-post-endpoint.php 5 years ago class.wpcom-json-api-get-post-v1-1-endpoint.php 5 years ago class.wpcom-json-api-get-site-endpoint.php 5 years ago class.wpcom-json-api-get-site-v1-2-endpoint.php 5 years ago class.wpcom-json-api-get-taxonomies-endpoint.php 5 years ago class.wpcom-json-api-get-taxonomy-endpoint.php 5 years ago class.wpcom-json-api-get-term-endpoint.php 5 years ago class.wpcom-json-api-list-comments-endpoint.php 5 years ago class.wpcom-json-api-list-embeds-endpoint.php 8 years ago class.wpcom-json-api-list-media-endpoint.php 8 years ago class.wpcom-json-api-list-media-v1-1-endpoint.php 8 years ago class.wpcom-json-api-list-media-v1-2-endpoint.php 8 years ago class.wpcom-json-api-list-post-type-taxonomies-endpoint.php 8 years ago class.wpcom-json-api-list-post-types-endpoint.php 5 years ago class.wpcom-json-api-list-posts-endpoint.php 5 years ago class.wpcom-json-api-list-posts-v1-1-endpoint.php 5 years ago class.wpcom-json-api-list-posts-v1-2-endpoint.php 5 years ago class.wpcom-json-api-list-roles-endpoint.php 5 years ago class.wpcom-json-api-list-shortcodes-endpoint.php 8 years ago class.wpcom-json-api-list-terms-endpoint.php 5 years ago class.wpcom-json-api-list-users-endpoint.php 8 years ago class.wpcom-json-api-menus-v1-1-endpoint.php 8 years ago class.wpcom-json-api-post-endpoint.php 5 years ago class.wpcom-json-api-post-v1-1-endpoint.php 5 years ago class.wpcom-json-api-render-embed-endpoint.php 6 years ago class.wpcom-json-api-render-embed-reversal-endpoint.php 8 years ago class.wpcom-json-api-render-endpoint.php 5 years ago class.wpcom-json-api-render-shortcode-endpoint.php 8 years ago class.wpcom-json-api-sharing-buttons-endpoint.php 8 years ago class.wpcom-json-api-site-settings-endpoint.php 5 years ago class.wpcom-json-api-site-settings-v1-2-endpoint.php 5 years ago class.wpcom-json-api-site-settings-v1-3-endpoint.php 5 years ago class.wpcom-json-api-site-settings-v1-4-endpoint.php 5 years ago class.wpcom-json-api-site-user-endpoint.php 8 years ago class.wpcom-json-api-taxonomy-endpoint.php 7 years ago class.wpcom-json-api-update-comment-endpoint.php 5 years ago class.wpcom-json-api-update-customcss.php 8 years ago class.wpcom-json-api-update-media-endpoint.php 8 years ago class.wpcom-json-api-update-media-v1-1-endpoint.php 8 years ago class.wpcom-json-api-update-post-endpoint.php 5 years ago class.wpcom-json-api-update-post-v1-1-endpoint.php 5 years ago class.wpcom-json-api-update-post-v1-2-endpoint.php 5 years ago class.wpcom-json-api-update-site-homepage-endpoint.php 5 years ago class.wpcom-json-api-update-site-logo-endpoint.php 5 years ago class.wpcom-json-api-update-taxonomy-endpoint.php 8 years ago class.wpcom-json-api-update-term-endpoint.php 7 years ago class.wpcom-json-api-update-user-endpoint.php 5 years ago class.wpcom-json-api-upload-media-endpoint.php 8 years ago class.wpcom-json-api-upload-media-v1-1-endpoint.php 5 years ago
class.wpcom-json-api-update-user-endpoint.php
166 lines
1 <?php
2
3 new WPCOM_JSON_API_Update_User_Endpoint( array(
4 'description' => 'Deletes or removes a user of a site.',
5 'group' => 'users',
6 'stat' => 'users:delete',
7
8 'method' => 'POST',
9 'path' => '/sites/%s/users/%d/delete',
10 'path_labels' => array(
11 '$site' => '(int|string) The site ID or domain.',
12 '$user_ID' => '(int) The user\'s ID'
13 ),
14
15 'request_format' => array(
16 'reassign' => '(int) An optional id of a user to reassign posts to.',
17 ),
18
19 'response_format' => array(
20 'success' => '(bool) Was the deletion of user successful?',
21 ),
22
23 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/users/1/delete',
24 'example_request_data' => array(
25 'headers' => array(
26 'authorization' => 'Bearer YOUR_API_TOKEN'
27 ),
28 ),
29
30 'example_response' => '
31 {
32 "success": true
33 }'
34 ) );
35
36 class WPCOM_JSON_API_Update_User_Endpoint extends WPCOM_JSON_API_Endpoint {
37
38 function callback( $path = '', $blog_id = 0, $user_id = 0 ) {
39 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
40 if ( is_wp_error( $blog_id ) ) {
41 return $blog_id;
42 }
43
44 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
45 if ( wpcom_get_blog_owner( $blog_id ) == $user_id ) {
46 return new WP_Error( 'forbidden', 'A site owner can not be removed through this endpoint.', 403 );
47 }
48 }
49
50 if ( $this->api->ends_with( $path, '/delete' ) ) {
51 return $this->delete_or_remove_user( $user_id );
52 }
53
54 return false;
55 }
56
57 /**
58 * Checks if a user exists by checking to see if a WP_User object exists for a user ID.
59 * @param int $user_id
60 * @return bool
61 */
62 function user_exists( $user_id ) {
63 $user = get_user_by( 'id', $user_id );
64
65 return false != $user && is_a( $user, 'WP_User' );
66 }
67
68 /**
69 * Return the domain name of a subscription
70 *
71 * @param Store_Subscription $subscription
72 * @return string
73 */
74 protected function get_subscription_domain_name( $subscription ) {
75 return $subscription->meta;
76 }
77
78 /**
79 * Get a list of the domains owned by the given user.
80 *
81 * @param int $user_id
82 * @return array
83 */
84 protected function domain_subscriptions_for_site_owned_by_user( $user_id ) {
85 $subscriptions = WPCOM_Store::get_subscriptions( get_current_blog_id(), $user_id, domains::get_domain_products() );
86
87 $domains = array_unique( array_map( array( $this, 'get_subscription_domain_name' ), $subscriptions ) );
88
89 return $domains;
90 }
91
92 /**
93 * Validates user input and then decides whether to remove or delete a user.
94 * @param int $user_id
95 * @return array|WP_Error
96 */
97 function delete_or_remove_user( $user_id ) {
98 if ( 0 == $user_id ) {
99 return new WP_Error( 'invalid_input', 'A valid user ID must be specified.', 400 );
100 }
101
102 if ( defined( 'IS_WPCOM' ) && IS_WPCOM ) {
103 $domains = $this->domain_subscriptions_for_site_owned_by_user( $user_id );
104 if ( ! empty( $domains ) ) {
105 return new WP_Error( 'user_owns_domain_subscription', join( ', ', $domains ) );
106 }
107 }
108
109 if ( get_current_user_id() == $user_id ) {
110 return new WP_Error( 'invalid_input', 'User can not remove or delete self through this endpoint.', 400 );
111 }
112
113 if ( ! $this->user_exists( $user_id ) ) {
114 return new WP_Error( 'invalid_input', 'A user does not exist with that ID.', 400 );
115 }
116
117 return is_multisite() ? $this->remove_user( $user_id ) : $this->delete_user( $user_id );
118 }
119
120 /**
121 * Removes a user from the current site.
122 * @param int $user_id
123 * @return array|WP_Error
124 */
125 function remove_user( $user_id ) {
126 if ( ! current_user_can( 'remove_users' ) ) {
127 return new WP_Error( 'unauthorized', 'User cannot remove users for specified site.', 403 );
128 }
129
130 if ( ! is_user_member_of_blog( $user_id, get_current_blog_id() ) ) {
131 return new WP_Error( 'invalid_input', 'User is not a member of the specified site.', 400 );
132 }
133
134 return array(
135 'success' => remove_user_from_blog( $user_id, get_current_blog_id() )
136 );
137 }
138
139 /**
140 * Deletes a user and optionally reassigns posts to another user.
141 * @param int $user_id
142 * @return array|WP_Error
143 */
144 function delete_user( $user_id ) {
145 if ( ! current_user_can( 'delete_users' ) ) {
146 return new WP_Error( 'unauthorized', 'User cannot delete users for specified site.', 403 );
147 }
148
149 $input = (array) $this->input();
150
151 if ( isset( $input['reassign'] ) ) {
152 if ( $user_id == $input['reassign'] ) {
153 return new WP_Error( 'invalid_input', 'Can not reassign posts to user being deleted.', 400 );
154 }
155
156 if ( ! $this->user_exists( $input['reassign'] ) ) {
157 return new WP_Error( 'invalid_input', 'User specified in reassign argument is not a member of the specified site.', 400 );
158 }
159 }
160
161 return array(
162 'success' => wp_delete_user( $user_id, (int) $input['reassign'] ),
163 );
164 }
165 }
166