PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
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 / json-endpoints / class.wpcom-json-api-list-roles-endpoint.php
jetpack / json-endpoints Last commit date
jetpack 1 week ago class.wpcom-json-api-add-widget-endpoint.php 7 months ago class.wpcom-json-api-autosave-post-v1-1-endpoint.php 7 months ago class.wpcom-json-api-bulk-delete-post-endpoint.php 7 months ago class.wpcom-json-api-bulk-restore-post-endpoint.php 7 months ago class.wpcom-json-api-bulk-update-comments-endpoint.php 1 month ago class.wpcom-json-api-comment-endpoint.php 7 months ago class.wpcom-json-api-delete-media-endpoint.php 7 months ago class.wpcom-json-api-delete-media-v1-1-endpoint.php 7 months ago class.wpcom-json-api-edit-media-v1-2-endpoint.php 1 month ago class.wpcom-json-api-get-autosave-v1-1-endpoint.php 7 months ago class.wpcom-json-api-get-comment-counts-endpoint.php 7 months ago class.wpcom-json-api-get-comment-endpoint.php 7 months ago class.wpcom-json-api-get-comment-history-endpoint.php 7 months ago class.wpcom-json-api-get-comments-tree-endpoint.php 7 months ago class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php 7 months ago class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php 7 months ago class.wpcom-json-api-get-customcss.php 7 months ago class.wpcom-json-api-get-media-endpoint.php 7 months ago class.wpcom-json-api-get-media-v1-1-endpoint.php 7 months ago class.wpcom-json-api-get-media-v1-2-endpoint.php 7 months ago class.wpcom-json-api-get-post-counts-v1-1-endpoint.php 1 week ago class.wpcom-json-api-get-post-endpoint.php 7 months ago class.wpcom-json-api-get-post-v1-1-endpoint.php 7 months ago class.wpcom-json-api-get-site-endpoint.php 1 week ago class.wpcom-json-api-get-site-v1-2-endpoint.php 1 week ago class.wpcom-json-api-get-taxonomies-endpoint.php 2 months ago class.wpcom-json-api-get-taxonomy-endpoint.php 7 months ago class.wpcom-json-api-get-term-endpoint.php 7 months ago class.wpcom-json-api-list-comments-endpoint.php 1 week ago class.wpcom-json-api-list-dropdown-pages-endpoint.php 7 months ago class.wpcom-json-api-list-embeds-endpoint.php 7 months ago class.wpcom-json-api-list-media-endpoint.php 7 months ago class.wpcom-json-api-list-media-v1-1-endpoint.php 1 month ago class.wpcom-json-api-list-media-v1-2-endpoint.php 7 months ago class.wpcom-json-api-list-post-type-taxonomies-endpoint.php 7 months ago class.wpcom-json-api-list-post-types-endpoint.php 7 months ago class.wpcom-json-api-list-posts-endpoint.php 1 week ago class.wpcom-json-api-list-posts-v1-1-endpoint.php 1 week ago class.wpcom-json-api-list-posts-v1-2-endpoint.php 1 week ago class.wpcom-json-api-list-roles-endpoint.php 7 months ago class.wpcom-json-api-list-shortcodes-endpoint.php 7 months ago class.wpcom-json-api-list-terms-endpoint.php 7 months ago class.wpcom-json-api-list-users-endpoint.php 1 week ago class.wpcom-json-api-menus-v1-1-endpoint.php 1 month ago class.wpcom-json-api-post-endpoint.php 7 months ago class.wpcom-json-api-post-v1-1-endpoint.php 2 months ago class.wpcom-json-api-render-embed-endpoint.php 7 months ago class.wpcom-json-api-render-embed-reversal-endpoint.php 7 months ago class.wpcom-json-api-render-endpoint.php 1 month ago class.wpcom-json-api-render-shortcode-endpoint.php 7 months ago class.wpcom-json-api-sharing-buttons-endpoint.php 1 month ago class.wpcom-json-api-site-settings-endpoint.php 1 week ago class.wpcom-json-api-site-settings-v1-2-endpoint.php 7 months ago class.wpcom-json-api-site-settings-v1-3-endpoint.php 7 months ago class.wpcom-json-api-site-settings-v1-4-endpoint.php 1 week ago class.wpcom-json-api-site-user-endpoint.php 7 months ago class.wpcom-json-api-taxonomy-endpoint.php 7 months ago class.wpcom-json-api-update-comment-endpoint.php 5 months ago class.wpcom-json-api-update-customcss.php 7 months ago class.wpcom-json-api-update-media-endpoint.php 7 months ago class.wpcom-json-api-update-media-v1-1-endpoint.php 1 month ago class.wpcom-json-api-update-post-endpoint.php 1 month ago class.wpcom-json-api-update-post-v1-1-endpoint.php 1 month ago class.wpcom-json-api-update-post-v1-2-endpoint.php 1 month ago class.wpcom-json-api-update-site-homepage-endpoint.php 7 months ago class.wpcom-json-api-update-site-logo-endpoint.php 7 months ago class.wpcom-json-api-update-taxonomy-endpoint.php 6 months ago class.wpcom-json-api-update-term-endpoint.php 7 months ago class.wpcom-json-api-update-user-endpoint.php 7 months ago class.wpcom-json-api-upload-media-endpoint.php 7 months ago class.wpcom-json-api-upload-media-v1-1-endpoint.php 7 months ago
class.wpcom-json-api-list-roles-endpoint.php
170 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit( 0 );
5 }
6
7 /**
8 * List roles endpoint.
9 */
10 new WPCOM_JSON_API_List_Roles_Endpoint(
11 array(
12 'description' => 'List the user roles of a site.',
13 'group' => '__do_not_document',
14 'stat' => 'roles:list',
15 'max_version' => '1.1',
16 'method' => 'GET',
17 'path' => '/sites/%s/roles',
18 'path_labels' => array(
19 '$site' => '(int|string) Site ID or domain',
20 ),
21
22 'query_parameters' => array(),
23
24 'response_format' => array(
25 'roles' => '(array:role) Array of role objects.',
26 ),
27
28 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/roles',
29 'example_request_data' => array(
30 'headers' => array(
31 'authorization' => 'Bearer YOUR_API_TOKEN',
32 ),
33 ),
34 )
35 );
36
37 new WPCOM_JSON_API_List_Roles_Endpoint(
38 array(
39 'description' => 'List the user roles of a site.',
40 'group' => '__do_not_document',
41 'stat' => 'roles:list',
42 'min_version' => '1.2',
43 'force' => 'wpcom',
44 'method' => 'GET',
45 'path' => '/sites/%s/roles',
46 'path_labels' => array(
47 '$site' => '(int|string) Site ID or domain',
48 ),
49
50 'query_parameters' => array(),
51
52 'response_format' => array(
53 'roles' => '(array:role) Array of role objects.',
54 ),
55
56 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/roles',
57 'example_request_data' => array(
58 'headers' => array(
59 'authorization' => 'Bearer YOUR_API_TOKEN',
60 ),
61 ),
62 )
63 );
64
65 /**
66 * List Roles endpoint class.
67 *
68 * /sites/%s/roles/ -> $blog_id
69 *
70 * @phan-constructor-used-for-side-effects
71 */
72 class WPCOM_JSON_API_List_Roles_Endpoint extends WPCOM_JSON_API_Endpoint {
73
74 /**
75 * Response format.
76 *
77 * @var array
78 */
79 public $response_format = array(
80 'roles' => '(array:role) Array of role objects',
81 );
82
83 /**
84 * Sort so roles with the most number of capabilities comes first, then the next role, and so on.
85 *
86 * @param object $a - the first object we're comparing.
87 * @param object $b - the second object we're comparing.
88 */
89 public static function role_sort( $a, $b ) {
90 $core_role_names = array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' );
91 $a_is_core_role = in_array( $a->name, $core_role_names, true );
92 $b_is_core_role = in_array( $b->name, $core_role_names, true );
93
94 // Core roles always come before non-core roles.
95 if ( $a_is_core_role !== $b_is_core_role ) {
96 return $b_is_core_role <=> $a_is_core_role;
97 }
98
99 // otherwise the one with the > number of capabilities comes first.
100 $a_cap_count = is_countable( $a->capabilities ) ? count( $a->capabilities ) : 0;
101 $b_cap_count = is_countable( $b->capabilities ) ? count( $b->capabilities ) : 0;
102
103 return $b_cap_count <=> $a_cap_count;
104 }
105
106 /**
107 * API callback.
108 *
109 * @param string $path - the path.
110 * @param string $blog_id - the blog ID.
111 */
112 public function callback( $path = '', $blog_id = 0 ) {
113 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
114 if ( is_wp_error( $blog_id ) ) {
115 return $blog_id;
116 }
117
118 $roles = array();
119
120 $sal_site = $this->get_platform()->get_site( $blog_id );
121 $wp_roles = $sal_site->get_roles();
122
123 // Check if the site is connected and talks to us on a regular basis.
124 $is_connected = $sal_site->is_connected_site();
125 if ( is_wp_error( $is_connected ) ) {
126 return $is_connected;
127 }
128
129 if ( ! $sal_site->current_user_can( 'list_users' ) ) {
130 return new WP_Error( 'unauthorized', 'User cannot view roles for specified site', 403 );
131 }
132
133 if ( $wp_roles instanceof WP_Roles ) {
134 $role_names = $wp_roles->get_names();
135
136 $role_keys = array_keys( $role_names );
137
138 foreach ( (array) $role_keys as $role_key ) {
139 $role_details = get_role( $role_key );
140 $role_details->display_name = translate_user_role( $role_names[ $role_key ] );
141 $roles[] = $role_details;
142 }
143 } elseif ( is_array( $wp_roles ) ) {
144 // Jetpack Shadow Site side of things.
145 foreach ( $wp_roles as $role_key => $role ) {
146 $roles[] = (object) array(
147 'name' => $role_key,
148 'display_name' => $role['name'],
149 'capabilities' => (object) $role['capabilities'],
150 );
151 }
152 }
153
154 usort( $roles, array( 'self', 'role_sort' ) );
155
156 /**
157 * Filter for curating the list of roles available for a wpcom site.
158 *
159 * @module json-api
160 *
161 * @since 8.7.0
162 *
163 * @param array $roles List of role objects available to the site.
164 */
165 $roles = apply_filters( 'wpcom_api_site_roles', $roles );
166
167 return array( 'roles' => $roles );
168 }
169 }
170