--- a/wp/wp-admin/includes/class-wp-privacy-requests-table.php Tue Dec 15 15:52:01 2020 +0100
+++ b/wp/wp-admin/includes/class-wp-privacy-requests-table.php Wed Sep 21 18:19:35 2022 +0200
@@ -43,7 +43,7 @@
'email' => __( 'Requester' ),
'status' => __( 'Status' ),
'created_timestamp' => __( 'Requested' ),
- 'next_steps' => __( 'Next Steps' ),
+ 'next_steps' => __( 'Next steps' ),
);
return $columns;
}
@@ -206,12 +206,13 @@
*
* @since 4.9.6
*
- * @return string[] Array of bulk action labels keyed by their action.
+ * @return array Array of bulk action labels keyed by their action.
*/
protected function get_bulk_actions() {
return array(
- 'delete' => __( 'Delete Requests' ),
- 'resend' => __( 'Resend Confirmation Requests' ),
+ 'resend' => __( 'Resend confirmation requests' ),
+ 'complete' => __( 'Mark requests as completed' ),
+ 'delete' => __( 'Delete requests' ),
);
}
@@ -219,50 +220,138 @@
* Process bulk actions.
*
* @since 4.9.6
+ * @since 5.6.0 Added support for the `complete` action.
*/
public function process_bulk_action() {
$action = $this->current_action();
$request_ids = isset( $_REQUEST['request_id'] ) ? wp_parse_id_list( wp_unslash( $_REQUEST['request_id'] ) ) : array();
- $count = 0;
+ if ( empty( $request_ids ) ) {
+ return;
+ }
- if ( $request_ids ) {
- check_admin_referer( 'bulk-privacy_requests' );
- }
+ $count = 0;
+ $failures = 0;
+
+ check_admin_referer( 'bulk-privacy_requests' );
switch ( $action ) {
- case 'delete':
- foreach ( $request_ids as $request_id ) {
- if ( wp_delete_post( $request_id, true ) ) {
- $count ++;
- }
- }
-
- add_settings_error(
- 'bulk_action',
- 'bulk_action',
- /* translators: %d: Number of requests. */
- sprintf( _n( 'Deleted %d request', 'Deleted %d requests', $count ), $count ),
- 'success'
- );
- break;
case 'resend':
foreach ( $request_ids as $request_id ) {
$resend = _wp_privacy_resend_request( $request_id );
if ( $resend && ! is_wp_error( $resend ) ) {
$count++;
+ } else {
+ $failures++;
+ }
+ }
+
+ if ( $failures ) {
+ add_settings_error(
+ 'bulk_action',
+ 'bulk_action',
+ sprintf(
+ /* translators: %d: Number of requests. */
+ _n(
+ '%d confirmation request failed to resend.',
+ '%d confirmation requests failed to resend.',
+ $failures
+ ),
+ $failures
+ ),
+ 'error'
+ );
+ }
+
+ if ( $count ) {
+ add_settings_error(
+ 'bulk_action',
+ 'bulk_action',
+ sprintf(
+ /* translators: %d: Number of requests. */
+ _n(
+ '%d confirmation request re-sent successfully.',
+ '%d confirmation requests re-sent successfully.',
+ $count
+ ),
+ $count
+ ),
+ 'success'
+ );
+ }
+
+ break;
+
+ case 'complete':
+ foreach ( $request_ids as $request_id ) {
+ $result = _wp_privacy_completed_request( $request_id );
+
+ if ( $result && ! is_wp_error( $result ) ) {
+ $count++;
}
}
add_settings_error(
'bulk_action',
'bulk_action',
- /* translators: %d: Number of requests. */
- sprintf( _n( 'Re-sent %d request', 'Re-sent %d requests', $count ), $count ),
+ sprintf(
+ /* translators: %d: Number of requests. */
+ _n(
+ '%d request marked as complete.',
+ '%d requests marked as complete.',
+ $count
+ ),
+ $count
+ ),
'success'
);
break;
+
+ case 'delete':
+ foreach ( $request_ids as $request_id ) {
+ if ( wp_delete_post( $request_id, true ) ) {
+ $count++;
+ } else {
+ $failures++;
+ }
+ }
+
+ if ( $failures ) {
+ add_settings_error(
+ 'bulk_action',
+ 'bulk_action',
+ sprintf(
+ /* translators: %d: Number of requests. */
+ _n(
+ '%d request failed to delete.',
+ '%d requests failed to delete.',
+ $failures
+ ),
+ $failures
+ ),
+ 'error'
+ );
+ }
+
+ if ( $count ) {
+ add_settings_error(
+ 'bulk_action',
+ 'bulk_action',
+ sprintf(
+ /* translators: %d: Number of requests. */
+ _n(
+ '%d request deleted successfully.',
+ '%d requests deleted successfully.',
+ $count
+ ),
+ $count
+ ),
+ 'success'
+ );
+ }
+
+ break;
}
}
@@ -395,19 +484,36 @@
* Default column handler.
*
* @since 4.9.6
+ * @since 5.7.0 Added `manage_{$this->screen->id}_custom_column` action.
*
* @param WP_User_Request $item Item being shown.
* @param string $column_name Name of column being shown.
- * @return string Default column output.
*/
public function column_default( $item, $column_name ) {
- $cell_value = $item->$column_name;
+ /**
+ * Fires for each custom column of a specific request type in the Requests list table.
+ *
+ * Custom columns are registered using the {@see 'manage_export-personal-data_columns'}
+ * and the {@see 'manage_erase-personal-data_columns'} filters.
+ *
+ * @since 5.7.0
+ *
+ * @param string $column_name The name of the column to display.
+ * @param WP_User_Request $item The item being shown.
+ */
+ do_action( "manage_{$this->screen->id}_custom_column", $column_name, $item );
+ }
- if ( in_array( $column_name, array( 'created_timestamp' ), true ) ) {
- return $this->get_timestamp_as_date( $cell_value );
- }
-
- return $cell_value;
+ /**
+ * Created timestamp column. Overridden by children.
+ *
+ * @since 5.7.0
+ *
+ * @param WP_User_Request $item Item being shown.
+ * @return string Human readable date.
+ */
+ public function column_created_timestamp( $item ) {
+ return $this->get_timestamp_as_date( $item->created_timestamp );
}
/**