PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 15.3.2
Jetpack – WP Security, Backup, Speed, & Growth v15.3.2
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 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 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 / json-endpoints / class.wpcom-json-api-get-post-counts-v1-1-endpoint.php
jetpack / json-endpoints Last commit date
jetpack 9 months ago class.wpcom-json-api-add-widget-endpoint.php 9 months ago class.wpcom-json-api-autosave-post-v1-1-endpoint.php 9 months ago class.wpcom-json-api-bulk-delete-post-endpoint.php 9 months ago class.wpcom-json-api-bulk-restore-post-endpoint.php 9 months ago class.wpcom-json-api-bulk-update-comments-endpoint.php 9 months ago class.wpcom-json-api-comment-endpoint.php 9 months ago class.wpcom-json-api-delete-media-endpoint.php 9 months ago class.wpcom-json-api-delete-media-v1-1-endpoint.php 9 months ago class.wpcom-json-api-edit-media-v1-2-endpoint.php 9 months ago class.wpcom-json-api-get-autosave-v1-1-endpoint.php 9 months ago class.wpcom-json-api-get-comment-counts-endpoint.php 9 months ago class.wpcom-json-api-get-comment-endpoint.php 9 months ago class.wpcom-json-api-get-comment-history-endpoint.php 9 months ago class.wpcom-json-api-get-comments-tree-endpoint.php 9 months ago class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php 9 months ago class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php 9 months ago class.wpcom-json-api-get-customcss.php 9 months ago class.wpcom-json-api-get-media-endpoint.php 9 months ago class.wpcom-json-api-get-media-v1-1-endpoint.php 9 months ago class.wpcom-json-api-get-media-v1-2-endpoint.php 9 months ago class.wpcom-json-api-get-post-counts-v1-1-endpoint.php 9 months ago class.wpcom-json-api-get-post-endpoint.php 9 months ago class.wpcom-json-api-get-post-v1-1-endpoint.php 9 months ago class.wpcom-json-api-get-site-endpoint.php 9 months ago class.wpcom-json-api-get-site-v1-2-endpoint.php 9 months ago class.wpcom-json-api-get-taxonomies-endpoint.php 9 months ago class.wpcom-json-api-get-taxonomy-endpoint.php 9 months ago class.wpcom-json-api-get-term-endpoint.php 9 months ago class.wpcom-json-api-list-comments-endpoint.php 9 months ago class.wpcom-json-api-list-dropdown-pages-endpoint.php 9 months ago class.wpcom-json-api-list-embeds-endpoint.php 9 months ago class.wpcom-json-api-list-media-endpoint.php 9 months ago class.wpcom-json-api-list-media-v1-1-endpoint.php 9 months ago class.wpcom-json-api-list-media-v1-2-endpoint.php 9 months ago class.wpcom-json-api-list-post-type-taxonomies-endpoint.php 9 months ago class.wpcom-json-api-list-post-types-endpoint.php 9 months ago class.wpcom-json-api-list-posts-endpoint.php 9 months ago class.wpcom-json-api-list-posts-v1-1-endpoint.php 9 months ago class.wpcom-json-api-list-posts-v1-2-endpoint.php 9 months ago class.wpcom-json-api-list-roles-endpoint.php 9 months ago class.wpcom-json-api-list-shortcodes-endpoint.php 9 months ago class.wpcom-json-api-list-terms-endpoint.php 9 months ago class.wpcom-json-api-list-users-endpoint.php 9 months ago class.wpcom-json-api-menus-v1-1-endpoint.php 9 months ago class.wpcom-json-api-post-endpoint.php 9 months ago class.wpcom-json-api-post-v1-1-endpoint.php 9 months ago class.wpcom-json-api-render-embed-endpoint.php 9 months ago class.wpcom-json-api-render-embed-reversal-endpoint.php 9 months ago class.wpcom-json-api-render-endpoint.php 9 months ago class.wpcom-json-api-render-shortcode-endpoint.php 9 months ago class.wpcom-json-api-sharing-buttons-endpoint.php 9 months ago class.wpcom-json-api-site-settings-endpoint.php 9 months ago class.wpcom-json-api-site-settings-v1-2-endpoint.php 9 months ago class.wpcom-json-api-site-settings-v1-3-endpoint.php 9 months ago class.wpcom-json-api-site-settings-v1-4-endpoint.php 9 months ago class.wpcom-json-api-site-user-endpoint.php 9 months ago class.wpcom-json-api-taxonomy-endpoint.php 9 months ago class.wpcom-json-api-update-comment-endpoint.php 9 months ago class.wpcom-json-api-update-customcss.php 9 months ago class.wpcom-json-api-update-media-endpoint.php 9 months ago class.wpcom-json-api-update-media-v1-1-endpoint.php 9 months ago class.wpcom-json-api-update-post-endpoint.php 9 months ago class.wpcom-json-api-update-post-v1-1-endpoint.php 9 months ago class.wpcom-json-api-update-post-v1-2-endpoint.php 9 months ago class.wpcom-json-api-update-site-homepage-endpoint.php 9 months ago class.wpcom-json-api-update-site-logo-endpoint.php 9 months ago class.wpcom-json-api-update-taxonomy-endpoint.php 9 months ago class.wpcom-json-api-update-term-endpoint.php 9 months ago class.wpcom-json-api-update-user-endpoint.php 9 months ago class.wpcom-json-api-upload-media-endpoint.php 9 months ago class.wpcom-json-api-upload-media-v1-1-endpoint.php 9 months ago
class.wpcom-json-api-get-post-counts-v1-1-endpoint.php
178 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 if ( ! defined( 'ABSPATH' ) ) {
4 exit( 0 );
5 }
6
7 new WPCOM_JSON_API_GET_Post_Counts_V1_1_Endpoint(
8 array(
9 'description' => 'Get number of posts in the post type groups by post status',
10 'group' => 'sites',
11 'stat' => 'sites:X:post-counts:X',
12 'force' => 'wpcom',
13 'method' => 'GET',
14 'min_version' => '1.1',
15 'max_version' => '1.2',
16 'path' => '/sites/%s/post-counts/%s',
17 'path_labels' => array(
18 '$site' => '(int|string) Site ID or domain',
19 '$post_type' => '(string) Post Type',
20 ),
21
22 'query_parameters' => array(
23 'context' => false,
24 'author' => '(int) author ID',
25 ),
26
27 'example_request' => 'https://public-api.wordpress.com/rest/v1.2/sites/en.blog.wordpress.com/post-counts/page',
28
29 'response_format' => array(
30 'counts' => array(
31 'all' => '(array) Number of posts by any author in the post type grouped by post status',
32 'mine' => '(array) Number of posts by the current user in the post type grouped by post status',
33 ),
34 ),
35 )
36 );
37
38 /**
39 * GET Post Counts v1_1 endpoint class.
40 *
41 * @phan-constructor-used-for-side-effects
42 */
43 class WPCOM_JSON_API_GET_Post_Counts_V1_1_Endpoint extends WPCOM_JSON_API_Endpoint {
44
45 /**
46 * Whitelist array.
47 *
48 * @var string[]
49 */
50 private $allowlist = array( 'publish' );
51
52 /**
53 * Build SQL query
54 *
55 * This function must `$wpdb->prepare` the query. The return is expected to be prepared by consuming functions.
56 *
57 * @param string $post_type - post type.
58 * @param int $user_id - the user ID.
59 * @return string SQL query
60 */
61 private function buildCountsQuery( $post_type = 'post', $user_id = null ) {
62 global $wpdb;
63
64 $query = 'SELECT post_status as status, count(*) as count ';
65 $query .= "FROM {$wpdb->posts} ";
66 $query .= 'WHERE post_type = %s ';
67 if ( isset( $user_id ) ) {
68 $query .= 'AND post_author = %d ';
69 }
70
71 $query .= 'GROUP BY status';
72
73 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- This is properly prepared, except the query is constructed in the variable, throwing the PHPCS error.
74 return $wpdb->prepare( $query, $post_type, $user_id );
75 }
76
77 /**
78 * Retrive counts using wp_cache
79 *
80 * @param string $post_type - thge post type.
81 * @param int $id - the ID.
82 */
83 private function retrieveCounts( $post_type, $id = null ) {
84 if ( ! isset( $id ) ) {
85 $counts = array();
86 foreach ( (array) wp_count_posts( $post_type ) as $status => $count ) {
87 if ( in_array( $status, $this->allowlist, true ) && $count > 0 ) {
88 $counts[ $status ] = (int) $count;
89 }
90 }
91
92 return $counts;
93 }
94
95 global $wpdb;
96 $key = 'rest-api-' . $id . '-' . _count_posts_cache_key( $post_type );
97 $counts = wp_cache_get( $key, 'counts' );
98
99 if ( false === $counts ) {
100 // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- buildCountsQuery prepares the query.
101 $results = $wpdb->get_results( $this->buildCountsQuery( $post_type, $id ) );
102 $counts = $this->filterStatusesByWhiteslist( $results );
103 wp_cache_set( $key, $counts, 'counts' );
104 }
105
106 return $counts;
107 }
108
109 /**
110 * Filter statuses by whiteslist.
111 *
112 * @param array $in - the post we're checking.
113 */
114 private function filterStatusesByWhiteslist( $in ) {
115 $return = array();
116 foreach ( $in as $result ) {
117 if ( in_array( $result->status, $this->allowlist, true ) ) {
118 $return[ $result->status ] = (int) $result->count;
119 }
120 }
121 return $return;
122 }
123
124 /**
125 *
126 * API callback.
127 *
128 * /sites/%s/post-counts/%s
129 *
130 * @param string $path - the path.
131 * @param int $blog_id - the blog ID.
132 * @param string $post_type - the post type.
133 */
134 public function callback( $path = '', $blog_id = 0, $post_type = 'post' ) {
135 if ( ! get_current_user_id() ) {
136 return new WP_Error( 'authorization_required', __( 'An active access token must be used to retrieve post counts.', 'jetpack' ), 403 );
137 }
138
139 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ), false );
140
141 if ( is_wp_error( $blog_id ) ) {
142 return $blog_id;
143 }
144
145 // @todo see if we can use a strict comparison here.
146 // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
147 if ( ! in_array( $post_type, array( 'post', 'revision', 'page', 'any' ), true ) && defined( 'IS_WPCOM' ) && IS_WPCOM ) {
148 $this->load_theme_functions();
149 }
150
151 if ( ! post_type_exists( $post_type ) ) {
152 return new WP_Error( 'unknown_post_type', __( 'Unknown post type requested.', 'jetpack' ), 404 );
153 }
154
155 $args = $this->query_args();
156 $mine_ID = get_current_user_id(); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
157
158 if ( current_user_can( 'edit_posts' ) ) {
159 array_push( $this->allowlist, 'draft', 'future', 'pending', 'private', 'trash' );
160 }
161
162 $return = array(
163 'counts' => array(
164 'all' => (object) $this->retrieveCounts( $post_type ),
165 'mine' => (object) $this->retrieveCounts( $post_type, $mine_ID ), // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
166 ),
167 );
168
169 // Author.
170 if ( isset( $args['author'] ) ) {
171 $author_ID = $args['author']; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
172 $return['counts']['author'] = (object) $this->retrieveCounts( $post_type, $author_ID ); // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
173 }
174
175 return (object) $return;
176 }
177 }
178