class-wp-privacy-data-removal-requests-list-table.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. /**
  3. * List Table API: WP_Privacy_Data_Removal_Requests_List_Table class
  4. *
  5. * @package WordPress
  6. * @subpackage Administration
  7. * @since 4.9.6
  8. */
  9. if ( ! class_exists( 'WP_Privacy_Requests_Table' ) ) {
  10. require_once ABSPATH . 'wp-admin/includes/class-wp-privacy-requests-table.php';
  11. }
  12. /**
  13. * WP_Privacy_Data_Removal_Requests_List_Table class.
  14. *
  15. * @since 4.9.6
  16. */
  17. class WP_Privacy_Data_Removal_Requests_List_Table extends WP_Privacy_Requests_Table {
  18. /**
  19. * Action name for the requests this table will work with.
  20. *
  21. * @since 4.9.6
  22. *
  23. * @var string $request_type Name of action.
  24. */
  25. protected $request_type = 'remove_personal_data';
  26. /**
  27. * Post type for the requests.
  28. *
  29. * @since 4.9.6
  30. *
  31. * @var string $post_type The post type.
  32. */
  33. protected $post_type = 'user_request';
  34. /**
  35. * Actions column.
  36. *
  37. * @since 4.9.6
  38. *
  39. * @param WP_User_Request $item Item being shown.
  40. * @return string Email column markup.
  41. */
  42. public function column_email( $item ) {
  43. $row_actions = array();
  44. // Allow the administrator to "force remove" the personal data even if confirmation has not yet been received.
  45. $status = $item->status;
  46. $request_id = $item->ID;
  47. $row_actions = array();
  48. if ( 'request-confirmed' !== $status ) {
  49. /** This filter is documented in wp-admin/includes/ajax-actions.php */
  50. $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() );
  51. $erasers_count = count( $erasers );
  52. $nonce = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
  53. $remove_data_markup = '<span class="remove-personal-data force-remove-personal-data" ' .
  54. 'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
  55. 'data-request-id="' . esc_attr( $request_id ) . '" ' .
  56. 'data-nonce="' . esc_attr( $nonce ) .
  57. '">';
  58. $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>' .
  59. '<span class="remove-personal-data-processing hidden">' . __( 'Erasing data...' ) . ' <span class="erasure-progress"></span></span>' .
  60. '<span class="remove-personal-data-success hidden">' . __( 'Erasure completed.' ) . '</span>' .
  61. '<span class="remove-personal-data-failed hidden">' . __( 'Force erasure has failed.' ) . ' <button type="button" class="button-link remove-personal-data-handle">' . __( 'Retry' ) . '</button></span>';
  62. $remove_data_markup .= '</span>';
  63. $row_actions['remove-data'] = $remove_data_markup;
  64. }
  65. if ( 'request-completed' !== $status ) {
  66. $complete_request_markup = '<span>';
  67. $complete_request_markup .= sprintf(
  68. '<a href="%s" class="complete-request" aria-label="%s">%s</a>',
  69. esc_url(
  70. wp_nonce_url(
  71. add_query_arg(
  72. array(
  73. 'action' => 'complete',
  74. 'request_id' => array( $request_id ),
  75. ),
  76. admin_url( 'erase-personal-data.php' )
  77. ),
  78. 'bulk-privacy_requests'
  79. )
  80. ),
  81. esc_attr(
  82. sprintf(
  83. /* translators: %s: Request email. */
  84. __( 'Mark export request for &#8220;%s&#8221; as completed.' ),
  85. $item->email
  86. )
  87. ),
  88. __( 'Complete request' )
  89. );
  90. $complete_request_markup .= '</span>';
  91. }
  92. if ( ! empty( $complete_request_markup ) ) {
  93. $row_actions['complete-request'] = $complete_request_markup;
  94. }
  95. return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) );
  96. }
  97. /**
  98. * Next steps column.
  99. *
  100. * @since 4.9.6
  101. *
  102. * @param WP_User_Request $item Item being shown.
  103. */
  104. public function column_next_steps( $item ) {
  105. $status = $item->status;
  106. switch ( $status ) {
  107. case 'request-pending':
  108. esc_html_e( 'Waiting for confirmation' );
  109. break;
  110. case 'request-confirmed':
  111. /** This filter is documented in wp-admin/includes/ajax-actions.php */
  112. $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() );
  113. $erasers_count = count( $erasers );
  114. $request_id = $item->ID;
  115. $nonce = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
  116. echo '<div class="remove-personal-data" ' .
  117. 'data-force-erase="1" ' .
  118. 'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
  119. 'data-request-id="' . esc_attr( $request_id ) . '" ' .
  120. 'data-nonce="' . esc_attr( $nonce ) .
  121. '">';
  122. ?>
  123. <span class="remove-personal-data-idle"><button type="button" class="button-link remove-personal-data-handle"><?php _e( 'Erase personal data' ); ?></button></span>
  124. <span class="remove-personal-data-processing hidden"><?php _e( 'Erasing data...' ); ?> <span class="erasure-progress"></span></span>
  125. <span class="remove-personal-data-success success-message hidden" ><?php _e( 'Erasure completed.' ); ?></span>
  126. <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>
  127. <?php
  128. echo '</div>';
  129. break;
  130. case 'request-failed':
  131. echo '<button type="submit" class="button-link" name="privacy_action_email_retry[' . $item->ID . ']" id="privacy_action_email_retry[' . $item->ID . ']">' . __( 'Retry' ) . '</button>';
  132. break;
  133. case 'request-completed':
  134. echo '<a href="' . esc_url(
  135. wp_nonce_url(
  136. add_query_arg(
  137. array(
  138. 'action' => 'delete',
  139. 'request_id' => array( $item->ID ),
  140. ),
  141. admin_url( 'erase-personal-data.php' )
  142. ),
  143. 'bulk-privacy_requests'
  144. )
  145. ) . '">' . esc_html__( 'Remove request' ) . '</a>';
  146. break;
  147. }
  148. }
  149. }