wp/wp-admin/includes/class-wp-privacy-data-removal-requests-list-table.php
changeset 16 a86126ab1dd4
child 18 be944660c56a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wp/wp-admin/includes/class-wp-privacy-data-removal-requests-list-table.php	Tue Dec 15 13:49:49 2020 +0100
@@ -0,0 +1,137 @@
+<?php
+/**
+ * List Table API: WP_Privacy_Data_Removal_Requests_List_Table class
+ *
+ * @package WordPress
+ * @subpackage Administration
+ * @since 4.9.6
+ */
+
+if ( ! class_exists( 'WP_Privacy_Requests_Table' ) ) {
+	require_once ABSPATH . 'wp-admin/includes/class-wp-privacy-requests-table.php';
+}
+
+/**
+ * WP_Privacy_Data_Removal_Requests_List_Table class.
+ *
+ * @since 4.9.6
+ */
+class WP_Privacy_Data_Removal_Requests_List_Table extends WP_Privacy_Requests_Table {
+	/**
+	 * Action name for the requests this table will work with.
+	 *
+	 * @since 4.9.6
+	 *
+	 * @var string $request_type Name of action.
+	 */
+	protected $request_type = 'remove_personal_data';
+
+	/**
+	 * Post type for the requests.
+	 *
+	 * @since 4.9.6
+	 *
+	 * @var string $post_type The post type.
+	 */
+	protected $post_type = 'user_request';
+
+	/**
+	 * Actions column.
+	 *
+	 * @since 4.9.6
+	 *
+	 * @param WP_User_Request $item Item being shown.
+	 * @return string Email column markup.
+	 */
+	public function column_email( $item ) {
+		$row_actions = array();
+
+		// Allow the administrator to "force remove" the personal data even if confirmation has not yet been received.
+		$status = $item->status;
+		if ( 'request-confirmed' !== $status ) {
+			/** This filter is documented in wp-admin/includes/ajax-actions.php */
+			$erasers       = apply_filters( 'wp_privacy_personal_data_erasers', array() );
+			$erasers_count = count( $erasers );
+			$request_id    = $item->ID;
+			$nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
+
+			$remove_data_markup = '<div class="remove-personal-data force-remove-personal-data" ' .
+				'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
+				'data-request-id="' . esc_attr( $request_id ) . '" ' .
+				'data-nonce="' . esc_attr( $nonce ) .
+				'">';
+
+			$remove_data_markup .= '<span class="remove-personal-data-idle"><button type="button" class="button-link remove-personal-data-handle">' . __( 'Force Erase Personal Data' ) . '</button></span>' .
+				'<span class="remove-personal-data-processing hidden">' . __( 'Erasing Data...' ) . ' <span class="erasure-progress"></span></span>' .
+				'<span class="remove-personal-data-success hidden">' . __( 'Erasure completed.' ) . '</span>' .
+				'<span class="remove-personal-data-failed hidden">' . __( 'Force Erasure has failed.' ) . ' <button type="button" class="button-link remove-personal-data-handle">' . __( 'Retry' ) . '</button></span>';
+
+			$remove_data_markup .= '</div>';
+
+			$row_actions = array(
+				'remove-data' => $remove_data_markup,
+			);
+		}
+
+		return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) );
+	}
+
+	/**
+	 * Next steps column.
+	 *
+	 * @since 4.9.6
+	 *
+	 * @param WP_User_Request $item Item being shown.
+	 */
+	public function column_next_steps( $item ) {
+		$status = $item->status;
+
+		switch ( $status ) {
+			case 'request-pending':
+				esc_html_e( 'Waiting for confirmation' );
+				break;
+			case 'request-confirmed':
+				/** This filter is documented in wp-admin/includes/ajax-actions.php */
+				$erasers       = apply_filters( 'wp_privacy_personal_data_erasers', array() );
+				$erasers_count = count( $erasers );
+				$request_id    = $item->ID;
+				$nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
+
+				echo '<div class="remove-personal-data" ' .
+					'data-force-erase="1" ' .
+					'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
+					'data-request-id="' . esc_attr( $request_id ) . '" ' .
+					'data-nonce="' . esc_attr( $nonce ) .
+					'">';
+
+				?>
+				<span class="remove-personal-data-idle"><button type="button" class="button-link remove-personal-data-handle"><?php _e( 'Erase Personal Data' ); ?></button></span>
+				<span class="remove-personal-data-processing hidden"><?php _e( 'Erasing Data...' ); ?> <span class="erasure-progress"></span></span>
+				<span class="remove-personal-data-success success-message hidden" ><?php _e( 'Erasure completed.' ); ?></span>
+				<span class="remove-personal-data-failed hidden"><?php _e( 'Data Erasure has failed.' ); ?> <button type="button" class="button-link remove-personal-data-handle"><?php _e( 'Retry' ); ?></button></span>
+				<?php
+
+				echo '</div>';
+
+				break;
+			case 'request-failed':
+				echo '<button type="submit" class="button-link" name="privacy_action_email_retry[' . $item->ID . ']" id="privacy_action_email_retry[' . $item->ID . ']">' . __( 'Retry' ) . '</button>';
+				break;
+			case 'request-completed':
+				echo '<a href="' . esc_url(
+					wp_nonce_url(
+						add_query_arg(
+							array(
+								'action'     => 'delete',
+								'request_id' => array( $item->ID ),
+							),
+							admin_url( 'erase-personal-data.php' )
+						),
+						'bulk-privacy_requests'
+					)
+				) . '">' . esc_html__( 'Remove request' ) . '</a>';
+				break;
+		}
+	}
+
+}