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