Automattic /
jetpack
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | new WPCOM_JSON_API_Bulk_Update_Comments_Endpoint( array( |
||
| 4 | 'description' => 'Update multiple comment\'s status.', |
||
| 5 | 'group' => 'comments', |
||
| 6 | 'stat' => 'comments:1:bulk-update-status', |
||
| 7 | 'min_version' => '1', |
||
| 8 | 'max_version' => '1', |
||
| 9 | 'method' => 'POST', |
||
| 10 | 'path' => '/sites/%s/comments/status', |
||
| 11 | 'path_labels' => array( |
||
| 12 | '$site' => '(int|string) Site ID or domain', |
||
| 13 | ), |
||
| 14 | 'request_format' => array( |
||
| 15 | 'comment_ids' => '(array|string) An array, or comma-separated list, of Comment IDs to update.', |
||
| 16 | 'status' => '(string) The new status value. Allowed values: approved, unapproved, spam, trash', |
||
| 17 | ), |
||
| 18 | 'response_format' => array( |
||
| 19 | 'results' => '(array) An array of updated Comment IDs.' |
||
| 20 | ), |
||
| 21 | 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/status', |
||
| 22 | 'example_request_data' => array( |
||
| 23 | 'headers' => array( |
||
| 24 | 'authorization' => 'Bearer YOUR_API_TOKEN' |
||
| 25 | ), |
||
| 26 | 'body' => array( |
||
| 27 | 'comment_ids' => array( 881, 882 ), |
||
| 28 | 'status' => 'approved', |
||
| 29 | ), |
||
| 30 | ) |
||
| 31 | ) ); |
||
| 32 | |||
| 33 | new WPCOM_JSON_API_Bulk_Update_Comments_Endpoint( array( |
||
| 34 | 'description' => 'Permanently delete multiple comments. Note: this request will send non-trashed comments to the trash. Trashed comments will be permanently deleted.', |
||
| 35 | 'group' => 'comments', |
||
| 36 | 'stat' => 'comments:1:bulk-delete', |
||
| 37 | 'min_version' => '1', |
||
| 38 | 'max_version' => '1', |
||
| 39 | 'method' => 'POST', |
||
| 40 | 'path' => '/sites/%s/comments/delete', |
||
| 41 | 'path_labels' => array( |
||
| 42 | '$site' => '(int|string) Site ID or domain', |
||
| 43 | ), |
||
| 44 | 'request_format' => array( |
||
| 45 | 'comment_ids' => '(array|string) An array, or comma-separated list, of Comment IDs to delete or trash. (optional)', |
||
| 46 | 'empty_status' => '(string) Force to permanently delete all spam or trash comments. (optional). Allowed values: spam, trash', |
||
| 47 | ), |
||
| 48 | 'response_format' => array( |
||
| 49 | 'results' => '(array) An array of deleted or trashed Comment IDs.' |
||
| 50 | ), |
||
| 51 | 'example_request' => 'https://public-api.wordpress.com/rest/v1/sites/82974409/comments/delete', |
||
| 52 | 'example_request_data' => array( |
||
| 53 | 'headers' => array( |
||
| 54 | 'authorization' => 'Bearer YOUR_API_TOKEN' |
||
| 55 | ), |
||
| 56 | 'body' => array( |
||
| 57 | 'comment_ids' => array( 881, 882 ), |
||
| 58 | ), |
||
| 59 | ) |
||
| 60 | ) ); |
||
| 61 | |||
| 62 | class WPCOM_JSON_API_Bulk_Update_Comments_Endpoint extends WPCOM_JSON_API_Endpoint { |
||
| 63 | // /sites/%s/comments/status |
||
| 64 | // /sites/%s/comments/delete |
||
| 65 | function callback( $path = '', $blog_id = 0 ) { |
||
| 66 | $blog_id = $this->api->switch_to_blog_and_validate_user( $this->api->get_blog_id( $blog_id ) ); |
||
| 67 | if ( is_wp_error( $blog_id ) ) { |
||
| 68 | return $blog_id; |
||
| 69 | } |
||
| 70 | |||
| 71 | $input = $this->input(); |
||
| 72 | |||
| 73 | if ( isset( $input['comment_ids'] ) && is_array( $input['comment_ids'] ) ) { |
||
| 74 | $comment_ids = $input['comment_ids']; |
||
| 75 | } else if ( isset( $input['comment_ids'] ) && ! empty( $input['comment_ids'] ) ) { |
||
| 76 | $comment_ids = explode( ',', $input['comment_ids'] ); |
||
| 77 | } else { |
||
| 78 | $comment_ids = array(); |
||
| 79 | } |
||
| 80 | |||
| 81 | $result = array( |
||
| 82 | 'results' => array(), |
||
| 83 | ); |
||
| 84 | |||
| 85 | wp_defer_comment_counting( true ); |
||
| 86 | |||
| 87 | if ( $this->api->ends_with( $path, '/delete' ) ) { |
||
| 88 | if ( isset( $input['empty_status'] ) && $this->validate_empty_status_param( $input['empty_status'] ) ) { |
||
| 89 | $result['results'] = $this->delete_all( $input['empty_status'] ); |
||
| 90 | } else { |
||
| 91 | $result['results'] = $this->bulk_delete_comments( $comment_ids ); |
||
| 92 | } |
||
| 93 | } else { |
||
| 94 | $status = isset( $input['status'] ) ? $input['status'] : ''; |
||
| 95 | $result['results'] = $this->bulk_update_comments_status( $comment_ids, $status ); |
||
| 96 | } |
||
| 97 | |||
| 98 | wp_defer_comment_counting( false ); |
||
| 99 | |||
| 100 | return $result; |
||
| 101 | } |
||
| 102 | |||
| 103 | /** |
||
| 104 | * Determine if the passed comment status is valid or not. |
||
| 105 | * |
||
| 106 | * @param string $status |
||
| 107 | * |
||
| 108 | * @return boolean |
||
| 109 | */ |
||
| 110 | function validate_status_param( $status ) { |
||
| 111 | return in_array( $status, array( 'approved', 'unapproved', 'pending', 'spam', 'trash' ), true ); |
||
| 112 | } |
||
| 113 | |||
| 114 | /** |
||
| 115 | * Determine if the passed empty status is valid or not. |
||
| 116 | * |
||
| 117 | * @param string $empty_status |
||
| 118 | * |
||
| 119 | * @return boolean |
||
| 120 | */ |
||
| 121 | function validate_empty_status_param( $empty_status ) { |
||
| 122 | return in_array( $empty_status, array( 'spam', 'trash' ), true ); |
||
| 123 | } |
||
| 124 | |||
| 125 | /** |
||
| 126 | * Update the status of multiple comments. |
||
| 127 | * |
||
| 128 | * @param array $comment_ids Comments to update. |
||
| 129 | * @param string $status New status value. |
||
| 130 | * |
||
| 131 | * @return array Updated comments IDs. |
||
| 132 | */ |
||
| 133 | function bulk_update_comments_status( $comment_ids, $status ) { |
||
| 134 | if ( count( $comment_ids ) < 1 ) { |
||
| 135 | return new WP_Error( 'empty_comment_ids', 'The request must include comment_ids', 400 ); |
||
|
0 ignored issues
–
show
|
|||
| 136 | } |
||
| 137 | if ( ! $this->validate_status_param( $status ) ) { |
||
| 138 | return new WP_Error( 'invalid_status', "Invalid comment status value provided: '$status'.", 400 ); |
||
|
0 ignored issues
–
show
The call to
WP_Error::__construct() has too many arguments starting with 'invalid_status'.
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. In this case you can add the Loading history...
|
|||
| 139 | } |
||
| 140 | $results = array(); |
||
| 141 | foreach( $comment_ids as $comment_id ) { |
||
| 142 | if ( ! current_user_can( 'edit_comment', $comment_id ) ) { |
||
| 143 | continue; |
||
| 144 | } |
||
| 145 | $result = false; |
||
| 146 | switch( $status ) { |
||
| 147 | case 'approved': |
||
| 148 | $result = wp_set_comment_status( $comment_id, 'approve' ); |
||
| 149 | break; |
||
| 150 | case 'unapproved': |
||
| 151 | case 'pending': |
||
| 152 | $result = wp_set_comment_status( $comment_id, 'hold' ); |
||
| 153 | break; |
||
| 154 | case 'spam': |
||
| 155 | $result = wp_spam_comment( $comment_id ); |
||
| 156 | break; |
||
| 157 | case 'trash': |
||
| 158 | $result = wp_trash_comment( $comment_id ); |
||
| 159 | break; |
||
| 160 | } |
||
| 161 | if ( $result ) { |
||
| 162 | $results[] = $comment_id; |
||
| 163 | } |
||
| 164 | } |
||
| 165 | return $results; |
||
| 166 | } |
||
| 167 | |||
| 168 | /** |
||
| 169 | * Permanenty delete multiple comments. |
||
| 170 | * |
||
| 171 | * Comments are only permanently deleted if trash is disabled or their status is `trash` or `spam`. |
||
| 172 | * Otherwise they are moved to trash. |
||
| 173 | * |
||
| 174 | * @param array $comment_ids Comments to trash or delete. |
||
| 175 | * |
||
| 176 | * @return array Deleted comments IDs. |
||
| 177 | */ |
||
| 178 | function bulk_delete_comments( $comment_ids ) { |
||
| 179 | if ( count( $comment_ids ) < 1 ) { |
||
| 180 | return new WP_Error( 'empty_comment_ids', 'The request must include comment_ids', 400 ); |
||
|
0 ignored issues
–
show
The call to
WP_Error::__construct() has too many arguments starting with 'empty_comment_ids'.
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue. If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. In this case you can add the Loading history...
|
|||
| 181 | } |
||
| 182 | $results = array(); |
||
| 183 | foreach( $comment_ids as $comment_id ) { |
||
| 184 | if ( ! current_user_can( 'edit_comment', $comment_id ) ) { |
||
| 185 | continue; |
||
| 186 | } |
||
| 187 | if ( wp_delete_comment( $comment_id ) ) { |
||
| 188 | $results[] = $comment_id; |
||
| 189 | } |
||
| 190 | } |
||
| 191 | return $results; |
||
| 192 | } |
||
| 193 | |||
| 194 | /** |
||
| 195 | * Delete all spam or trash comments. |
||
| 196 | * |
||
| 197 | * Comments are only permanently deleted if trash is disabled or their status is `trash` or `spam`. |
||
| 198 | * Otherwise they are moved to trash. |
||
| 199 | * |
||
| 200 | * @param string $status Can be `spam` or `trash`. |
||
| 201 | * |
||
| 202 | * @return array Deleted comments IDs. |
||
| 203 | */ |
||
| 204 | function delete_all( $status ) { |
||
| 205 | global $wpdb; |
||
| 206 | // This could potentially take a long time, so we only want to delete comments created |
||
| 207 | // before this operation. |
||
| 208 | // Comments marked `spam` or `trash` after this moment won't be touched. |
||
| 209 | // Core uses the `pagegen_timestamp` hidden field for this same reason. |
||
| 210 | $delete_time = gmdate('Y-m-d H:i:s'); |
||
| 211 | $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 ) ); |
||
| 212 | |||
| 213 | if ( count( $comment_ids ) < 1 ) { |
||
| 214 | return array(); |
||
| 215 | } |
||
| 216 | |||
| 217 | return $this->bulk_delete_comments( $comment_ids ); |
||
| 218 | } |
||
| 219 | } |
||
| 220 |
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.
If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.
In this case you can add the
@ignorePhpDoc annotation to the duplicate definition and it will be ignored.