PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.2.4
Jetpack – WP Security, Backup, Speed, & Growth v13.2.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 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-bulk-update-comments-endpoint.php
jetpack / json-endpoints Last commit date
jetpack 2 years ago class.wpcom-json-api-add-widget-endpoint.php 2 years ago class.wpcom-json-api-autosave-post-v1-1-endpoint.php 5 years ago class.wpcom-json-api-bulk-delete-post-endpoint.php 4 years ago class.wpcom-json-api-bulk-restore-post-endpoint.php 4 years ago class.wpcom-json-api-bulk-update-comments-endpoint.php 3 years ago class.wpcom-json-api-comment-endpoint.php 2 years ago class.wpcom-json-api-delete-media-endpoint.php 4 years ago class.wpcom-json-api-delete-media-v1-1-endpoint.php 4 years ago class.wpcom-json-api-edit-media-v1-2-endpoint.php 2 years ago class.wpcom-json-api-get-autosave-v1-1-endpoint.php 5 years ago class.wpcom-json-api-get-comment-counts-endpoint.php 4 years ago class.wpcom-json-api-get-comment-endpoint.php 4 years ago class.wpcom-json-api-get-comment-history-endpoint.php 4 years ago class.wpcom-json-api-get-comments-tree-endpoint.php 4 years ago class.wpcom-json-api-get-comments-tree-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-comments-tree-v1-2-endpoint.php 4 years ago class.wpcom-json-api-get-customcss.php 2 years ago class.wpcom-json-api-get-media-endpoint.php 4 years ago class.wpcom-json-api-get-media-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-media-v1-2-endpoint.php 2 years ago class.wpcom-json-api-get-post-counts-v1-1-endpoint.php 4 years ago class.wpcom-json-api-get-post-endpoint.php 2 years ago class.wpcom-json-api-get-post-v1-1-endpoint.php 2 years ago class.wpcom-json-api-get-site-endpoint.php 2 years ago class.wpcom-json-api-get-site-v1-2-endpoint.php 2 years ago class.wpcom-json-api-get-taxonomies-endpoint.php 2 years ago class.wpcom-json-api-get-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-get-term-endpoint.php 4 years ago class.wpcom-json-api-list-comments-endpoint.php 2 years ago class.wpcom-json-api-list-dropdown-pages-endpoint.php 3 years ago class.wpcom-json-api-list-embeds-endpoint.php 4 years ago class.wpcom-json-api-list-media-endpoint.php 2 years ago class.wpcom-json-api-list-media-v1-1-endpoint.php 2 years ago class.wpcom-json-api-list-media-v1-2-endpoint.php 2 years ago class.wpcom-json-api-list-post-type-taxonomies-endpoint.php 4 years ago class.wpcom-json-api-list-post-types-endpoint.php 3 years ago class.wpcom-json-api-list-posts-endpoint.php 3 years ago class.wpcom-json-api-list-posts-v1-1-endpoint.php 3 years ago class.wpcom-json-api-list-posts-v1-2-endpoint.php 3 years ago class.wpcom-json-api-list-roles-endpoint.php 2 years ago class.wpcom-json-api-list-shortcodes-endpoint.php 4 years ago class.wpcom-json-api-list-terms-endpoint.php 2 years ago class.wpcom-json-api-list-users-endpoint.php 2 years ago class.wpcom-json-api-menus-v1-1-endpoint.php 2 years ago class.wpcom-json-api-post-endpoint.php 3 years ago class.wpcom-json-api-post-v1-1-endpoint.php 2 years ago class.wpcom-json-api-render-embed-endpoint.php 2 years ago class.wpcom-json-api-render-embed-reversal-endpoint.php 2 years ago class.wpcom-json-api-render-endpoint.php 3 years ago class.wpcom-json-api-render-shortcode-endpoint.php 3 years ago class.wpcom-json-api-sharing-buttons-endpoint.php 2 years ago class.wpcom-json-api-site-settings-endpoint.php 2 years ago class.wpcom-json-api-site-settings-v1-2-endpoint.php 2 years ago class.wpcom-json-api-site-settings-v1-3-endpoint.php 2 years ago class.wpcom-json-api-site-settings-v1-4-endpoint.php 2 years ago class.wpcom-json-api-site-user-endpoint.php 2 years ago class.wpcom-json-api-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-update-comment-endpoint.php 2 years ago class.wpcom-json-api-update-customcss.php 2 years ago class.wpcom-json-api-update-media-endpoint.php 4 years ago class.wpcom-json-api-update-media-v1-1-endpoint.php 2 years ago class.wpcom-json-api-update-post-endpoint.php 3 years ago class.wpcom-json-api-update-post-v1-1-endpoint.php 3 years ago class.wpcom-json-api-update-post-v1-2-endpoint.php 2 years ago class.wpcom-json-api-update-site-homepage-endpoint.php 4 years ago class.wpcom-json-api-update-site-logo-endpoint.php 2 years ago class.wpcom-json-api-update-taxonomy-endpoint.php 4 years ago class.wpcom-json-api-update-term-endpoint.php 4 years ago class.wpcom-json-api-update-user-endpoint.php 3 years ago class.wpcom-json-api-upload-media-endpoint.php 3 years ago class.wpcom-json-api-upload-media-v1-1-endpoint.php 2 years ago
class.wpcom-json-api-bulk-update-comments-endpoint.php
234 lines
1 <?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2 /**
3 * Endpoints: /sites/%s/comments/status
4 * /sites/%s/comments/delete
5 */
6 new WPCOM_JSON_API_Bulk_Update_Comments_Endpoint(
7 array(
8 'description' => 'Update multiple comment\'s status.',
9 'group' => 'comments',
10 'stat' => 'comments:1:bulk-update-status',
11 'min_version' => '1',
12 'max_version' => '1',
13 'method' => 'POST',
14 'path' => '/sites/%s/comments/status',
15 'path_labels' => array(
16 '$site' => '(int|string) Site ID or domain',
17 ),
18 'request_format' => array(
19 'comment_ids' => '(array|string) An array, or comma-separated list, of Comment IDs to update.',
20 'status' => '(string) The new status value. Allowed values: approved, unapproved, spam, trash',
21 ),
22 'response_format' => array(
23 'results' => '(array) An array of updated Comment IDs.',
24 ),
25 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/status',
26 'example_request_data' => array(
27 'headers' => array(
28 'authorization' => 'Bearer YOUR_API_TOKEN',
29 ),
30 'body' => array(
31 'comment_ids' => array( 881, 882 ),
32 'status' => 'approved',
33 ),
34 ),
35 )
36 );
37
38 new WPCOM_JSON_API_Bulk_Update_Comments_Endpoint(
39 array(
40 'description' => 'Permanently delete multiple comments. Note: this request will send non-trashed comments to the trash. Trashed comments will be permanently deleted.',
41 'group' => 'comments',
42 'stat' => 'comments:1:bulk-delete',
43 'min_version' => '1',
44 'max_version' => '1',
45 'method' => 'POST',
46 'path' => '/sites/%s/comments/delete',
47 'path_labels' => array(
48 '$site' => '(int|string) Site ID or domain',
49 ),
50 'request_format' => array(
51 'comment_ids' => '(array|string) An array, or comma-separated list, of Comment IDs to delete or trash. (optional)',
52 'empty_status' => '(string) Force to permanently delete all spam or trash comments. (optional). Allowed values: spam, trash',
53 ),
54 'response_format' => array(
55 'results' => '(array) An array of deleted or trashed Comment IDs.',
56 ),
57 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/delete',
58 'example_request_data' => array(
59 'headers' => array(
60 'authorization' => 'Bearer YOUR_API_TOKEN',
61 ),
62 'body' => array(
63 'comment_ids' => array( 881, 882 ),
64 ),
65 ),
66 )
67 );
68
69 /**
70 * Bulk update comments endpoint class.
71 */
72 class WPCOM_JSON_API_Bulk_Update_Comments_Endpoint extends WPCOM_JSON_API_Endpoint {
73 /**
74 * API callback.
75 *
76 * @param string $path - the path.
77 * @param int $blog_id - the blog ID.
78 */
79 public function callback( $path = '', $blog_id = 0 ) {
80 $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) );
81 if ( is_wp_error( $blog_id ) ) {
82 return $blog_id;
83 }
84
85 $input = $this->input();
86
87 if ( isset( $input['comment_ids'] ) && is_array( $input['comment_ids'] ) ) {
88 $comment_ids = $input['comment_ids'];
89 } elseif ( isset( $input['comment_ids'] ) && ! empty( $input['comment_ids'] ) ) {
90 $comment_ids = explode( ',', $input['comment_ids'] );
91 } else {
92 $comment_ids = array();
93 }
94
95 $result = array(
96 'results' => array(),
97 );
98
99 wp_defer_comment_counting( true );
100
101 if ( $this->api->ends_with( $path, '/delete' ) ) {
102 if ( isset( $input['empty_status'] ) && $this->validate_empty_status_param( $input['empty_status'] ) ) {
103 $result['results'] = $this->delete_all( $input['empty_status'] );
104 } else {
105 $result['results'] = $this->bulk_delete_comments( $comment_ids );
106 }
107 } else {
108 $status = isset( $input['status'] ) ? $input['status'] : '';
109 $result['results'] = $this->bulk_update_comments_status( $comment_ids, $status );
110 }
111
112 wp_defer_comment_counting( false );
113
114 return $result;
115 }
116
117 /**
118 * Determine if the passed comment status is valid or not.
119 *
120 * @param string $status - status of passed comment.
121 *
122 * @return boolean
123 */
124 public function validate_status_param( $status ) {
125 return in_array( $status, array( 'approved', 'unapproved', 'pending', 'spam', 'trash' ), true );
126 }
127
128 /**
129 * Determine if the passed empty status is valid or not.
130 *
131 * @param string $empty_status - empty_status of comment.
132 *
133 * @return boolean
134 */
135 public function validate_empty_status_param( $empty_status ) {
136 return in_array( $empty_status, array( 'spam', 'trash' ), true );
137 }
138
139 /**
140 * Update the status of multiple comments.
141 *
142 * @param array $comment_ids Comments to update.
143 * @param string $status New status value.
144 *
145 * @return array Updated comments IDs.
146 */
147 public function bulk_update_comments_status( $comment_ids, $status ) {
148 if ( count( $comment_ids ) < 1 ) {
149 return new WP_Error( 'empty_comment_ids', 'The request must include comment_ids', 400 );
150 }
151 if ( ! $this->validate_status_param( $status ) ) {
152 return new WP_Error( 'invalid_status', "Invalid comment status value provided: '$status'.", 400 );
153 }
154 $results = array();
155 foreach ( $comment_ids as $comment_id ) {
156 if ( ! current_user_can( 'edit_comment', $comment_id ) ) {
157 continue;
158 }
159 $result = false;
160 switch ( $status ) {
161 case 'approved':
162 $result = wp_set_comment_status( $comment_id, 'approve' );
163 break;
164 case 'unapproved':
165 case 'pending':
166 $result = wp_set_comment_status( $comment_id, 'hold' );
167 break;
168 case 'spam':
169 $result = wp_spam_comment( $comment_id );
170 break;
171 case 'trash':
172 $result = wp_trash_comment( $comment_id );
173 break;
174 }
175 if ( $result ) {
176 $results[] = $comment_id;
177 }
178 }
179 return $results;
180 }
181
182 /**
183 * Permanenty delete multiple comments.
184 *
185 * Comments are only permanently deleted if trash is disabled or their status is `trash` or `spam`.
186 * Otherwise they are moved to trash.
187 *
188 * @param array $comment_ids Comments to trash or delete.
189 *
190 * @return array Deleted comments IDs.
191 */
192 public function bulk_delete_comments( $comment_ids ) {
193 if ( count( $comment_ids ) < 1 ) {
194 return new WP_Error( 'empty_comment_ids', 'The request must include comment_ids', 400 );
195 }
196 $results = array();
197 foreach ( $comment_ids as $comment_id ) {
198 if ( ! current_user_can( 'edit_comment', $comment_id ) ) {
199 continue;
200 }
201 if ( wp_delete_comment( $comment_id ) ) {
202 $results[] = $comment_id;
203 }
204 }
205 return $results;
206 }
207
208 /**
209 * Delete all spam or trash comments.
210 *
211 * Comments are only permanently deleted if trash is disabled or their status is `trash` or `spam`.
212 * Otherwise they are moved to trash.
213 *
214 * @param string $status Can be `spam` or `trash`.
215 *
216 * @return array Deleted comments IDs.
217 */
218 public function delete_all( $status ) {
219 global $wpdb;
220 // This could potentially take a long time, so we only want to delete comments created
221 // before this operation.
222 // Comments marked `spam` or `trash` after this moment won't be touched.
223 // Core uses the `pagegen_timestamp` hidden field for this same reason.
224 $delete_time = gmdate( 'Y-m-d H:i:s' );
225 $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = %s AND %s > comment_date_gmt", $status, $delete_time ) );
226
227 if ( ! is_countable( $comment_ids ) || array() === $comment_ids ) {
228 return array();
229 }
230
231 return $this->bulk_delete_comments( $comment_ids );
232 }
233 }
234