Make WordPress Core

Ticket #44266: 44266.6.diff

File 44266.6.diff, 12.0 KB (added by garrett-eclipse, 4 years ago)

After testing found on removal requests we suppress actions. Updated so we only suppress confirm and erasure actions on confirmed requests. Delete and download will always be available.

  • src/wp-admin/css/forms.css

     
    12181218        position: static;
    12191219}
    12201220
     1221.privacy_requests .row-actions .remove-personal-data,
     1222.privacy_requests .row-actions .export-personal-data {
     1223        display: inline-block;
     1224}
     1225
    12211226.privacy_requests tbody .has-request-results th {
    12221227        box-shadow: none;
    12231228}
  • src/wp-admin/erase-personal-data.php

     
    4444        )
    4545);
    4646
     47$requests_table->handle_bulk_messages();
    4748$requests_table->process_bulk_action();
    4849$requests_table->prepare_items();
    4950
  • src/wp-admin/export-personal-data.php

     
    4444        )
    4545);
    4646
     47$requests_table->handle_bulk_messages();
    4748$requests_table->process_bulk_action();
    4849$requests_table->prepare_items();
    4950
  • src/wp-admin/includes/class-wp-privacy-data-export-requests-list-table.php

     
    4949                $exporters_count = count( $exporters );
    5050                $request_id      = $item->ID;
    5151                $nonce           = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
     52                $row_actions     = array();
    5253
    5354                $download_data_markup = '<div class="export-personal-data" ' .
    5455                        'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
     
    5657                        'data-nonce="' . esc_attr( $nonce ) .
    5758                        '">';
    5859
    59                 $download_data_markup .= '<span class="export-personal-data-idle"><button type="button" class="button-link export-personal-data-handle">' . __( 'Download Personal Data' ) . '</button></span>' .
     60                $download_data_markup .= '<span class="export-personal-data-idle"><button type="button" class="button-link export-personal-data-handle">' . __( 'Download Data' ) . '</button></span>' .
    6061                        '<span class="export-personal-data-processing hidden">' . __( 'Downloading Data...' ) . ' <span class="export-progress"></span></span>' .
    6162                        '<span class="export-personal-data-success hidden"><button type="button" class="button-link export-personal-data-handle">' . __( 'Download Personal Data Again' ) . '</button></span>' .
    6263                        '<span class="export-personal-data-failed hidden">' . __( 'Download failed.' ) . ' <button type="button" class="button-link">' . __( 'Retry' ) . '</button></span>';
     
    6364
    6465                $download_data_markup .= '</div>';
    6566
    66                 $row_actions = array(
    67                         'download-data' => $download_data_markup,
     67                $row_actions['download-data'] = $download_data_markup;
     68
     69                // Suppress resend when request is in a confirmed state.
     70                if ( 'request-confirmed' !== $status ) {
     71                        $resend_confirmation_markup  = '<span>';
     72                        $resend_confirmation_markup .= sprintf(
     73                                '<a href="%s" class="resend-confirmation" aria-label="%s">%s</a>',
     74                                esc_url(
     75                                        wp_nonce_url(
     76                                                add_query_arg(
     77                                                        array(
     78                                                                'action'     => 'resend',
     79                                                                'request_id' => array( $request_id ),
     80                                                        ),
     81                                                        admin_url( 'export-personal-data.php' )
     82                                                ),
     83                                                'bulk-privacy_requests'
     84                                        )
     85                                ),
     86                                esc_attr(
     87                                        sprintf(
     88                                                /* translators: %s: Request email. */
     89                                                __( 'Resend export confirmation request to &#8220;%s&#8221;.' ),
     90                                                $item->email
     91                                        )
     92                                ),
     93                                __( 'Resend Confirmation' )
     94                        );
     95                        $resend_confirmation_markup .= '</span>';
     96
     97                        $row_actions['resend-confirmation'] = $resend_confirmation_markup;
     98                }
     99
     100                $delete_request_markup  = '<span class="trash">';
     101                $delete_request_markup .= sprintf(
     102                        '<a href="%s" class="delete-request" aria-label="%s">%s</a>',
     103                        esc_url(
     104                                wp_nonce_url(
     105                                        add_query_arg(
     106                                                array(
     107                                                        'action'     => 'delete',
     108                                                        'request_id' => array( $request_id ),
     109                                                ),
     110                                                admin_url( 'export-personal-data.php' )
     111                                        ),
     112                                        'bulk-privacy_requests'
     113                                )
     114                        ),
     115                        esc_attr(
     116                                sprintf(
     117                                        /* translators: %s: Request email. */
     118                                        __( 'Delete export request for &#8220;%s&#8221;.' ),
     119                                        $item->email
     120                                )
     121                        ),
     122                        __( 'Delete Request' )
    68123                );
     124                $delete_request_markup .= '</span>';
    69125
     126                $row_actions['delete-request'] = $delete_request_markup;
     127
    70128                return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) );
    71129        }
    72130
  • src/wp-admin/includes/class-wp-privacy-data-removal-requests-list-table.php

     
    4747                $row_actions = array();
    4848
    4949                // Allow the administrator to "force remove" the personal data even if confirmation has not yet been received.
    50                 $status = $item->status;
     50                $request_id  = $item->ID;
     51                $status      = $item->status;
     52                $row_actions = array();
    5153                if ( 'request-confirmed' !== $status ) {
    5254                        /** This filter is documented in wp-admin/includes/ajax-actions.php */
    5355                        $erasers       = apply_filters( 'wp_privacy_personal_data_erasers', array() );
    5456                        $erasers_count = count( $erasers );
    55                         $request_id    = $item->ID;
    5657                        $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    5758
    5859                        $remove_data_markup = '<div class="remove-personal-data force-remove-personal-data" ' .
     
    6162                                'data-nonce="' . esc_attr( $nonce ) .
    6263                                '">';
    6364
    64                         $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>' .
     65                        $remove_data_markup .= '<span class="remove-personal-data-idle"><button type="button" class="button-link remove-personal-data-handle">' . __( 'Force Erasure' ) . '</button></span>' .
    6566                                '<span class="remove-personal-data-processing hidden">' . __( 'Erasing Data...' ) . ' <span class="erasure-progress"></span></span>' .
    6667                                '<span class="remove-personal-data-success hidden">' . __( 'Erasure completed.' ) . '</span>' .
    6768                                '<span class="remove-personal-data-failed hidden">' . __( 'Force Erasure has failed.' ) . ' <button type="button" class="button-link remove-personal-data-handle">' . __( 'Retry' ) . '</button></span>';
     
    6869
    6970                        $remove_data_markup .= '</div>';
    7071
    71                         $row_actions = array(
    72                                 'remove-data' => $remove_data_markup,
     72                        $row_actions['remove-data'] = $remove_data_markup;
     73
     74                        $resend_confirmation_markup  = '<span>';
     75                        $resend_confirmation_markup .= sprintf(
     76                                '<a href="%s" class="resend-confirmation" aria-label="%s">%s</a>',
     77                                esc_url(
     78                                        wp_nonce_url(
     79                                                add_query_arg(
     80                                                        array(
     81                                                                'action'     => 'resend',
     82                                                                'request_id' => array( $request_id ),
     83                                                        ),
     84                                                        admin_url( 'erase-personal-data.php' )
     85                                                ),
     86                                                'bulk-privacy_requests'
     87                                        )
     88                                ),
     89                                esc_attr(
     90                                        sprintf(
     91                                                /* translators: %s: Request email. */
     92                                                __( 'Resend erasure confirmation request to &#8220;%s&#8221;.' ),
     93                                                $item->email
     94                                        )
     95                                ),
     96                                __( 'Resend Confirmation' )
    7397                        );
     98                        $resend_confirmation_markup .= '</span>';
     99
     100                        $row_actions['resend-confirmation'] = $resend_confirmation_markup;
    74101                }
    75102
     103                $delete_request_markup  = '<span class="trash">';
     104                $delete_request_markup .= sprintf(
     105                        '<a href="%s" class="delete-request" aria-label="%s">%s</a>',
     106                        esc_url(
     107                                wp_nonce_url(
     108                                        add_query_arg(
     109                                                array(
     110                                                        'action'     => 'delete',
     111                                                        'request_id' => array( $request_id ),
     112                                                ),
     113                                                admin_url( 'erase-personal-data.php' )
     114                                        ),
     115                                        'bulk-privacy_requests'
     116                                )
     117                        ),
     118                        esc_attr(
     119                                sprintf(
     120                                        /* translators: %s: Request email. */
     121                                        __( 'Delete erasure request for &#8220;%s&#8221;.' ),
     122                                        $item->email
     123                                )
     124                        ),
     125                        __( 'Delete Request' )
     126                );
     127                $delete_request_markup .= '</span>';
     128
     129                $row_actions['delete-request'] = $delete_request_markup;
     130
    76131                return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) );
    77132        }
    78133
  • src/wp-admin/includes/class-wp-privacy-requests-table.php

     
    216216        }
    217217
    218218        /**
    219          * Process bulk actions.
     219         * Handle bulk & row action messages.
    220220         *
     221         * @since 5.6.0
     222         */
     223        public function handle_bulk_messages() {
     224        if ( isset( $_REQUEST['resent'] ) || isset( $_REQUEST['deleted'] ) ) {
     225            $resent  = isset( $_REQUEST['resent'] ) ? (int) $_REQUEST['resent'] : 0;
     226            $deleted = isset( $_REQUEST['deleted'] ) ? (int) $_REQUEST['deleted'] : 0;
     227
     228            if ( $resent > 0 ) {
     229                if ( 1 === $resent && isset( $_REQUEST['ids'] ) ) {
     230                        $email = get_the_title( $_REQUEST['ids'][0] );
     231                    /* translators:  %1$s: Request email. */
     232                    $messages[] = sprintf( __( 'Request confirmation has been re-sent to %1$s.' ), esc_attr( $email ) );
     233                } else {
     234                    /* translators: %d: Number of requests. */
     235                    $messages[] = sprintf( _n( 'Re-sent %d request.', 'Re-sent %d requests.', $resent ), $resent );
     236                }
     237            }
     238
     239            if ( $deleted > 0 ) {
     240                /* translators: %d: Number of requests. */
     241                $messages[] = sprintf( _n( 'Deleted %d request.', 'Deleted %d requests.', $deleted ), $deleted );
     242            }
     243        }
     244
     245        if ( ! empty( $messages ) ) {
     246                add_settings_error(
     247                    'bulk_action',
     248                    'bulk_action',
     249                    implode( "<br/>\n", $messages ),
     250                    'success'
     251                );
     252        }
     253    }
     254
     255        /**
     256         * Process bulk & row actions.
     257         *
    221258         * @since 4.9.6
     259         * @since 5.6.0 Handle processing of the row actions.
    222260         */
    223261        public function process_bulk_action() {
    224262                $action      = $this->current_action();
     
    230268                        check_admin_referer( 'bulk-privacy_requests' );
    231269                }
    232270
     271                $sendback = wp_get_referer();
     272                $sendback = remove_query_arg( array( 'resent', 'deleted', 'ids' ), $sendback );
     273
    233274                switch ( $action ) {
    234                         case 'delete':
     275                        case 'resend':
     276                                $sent_ids = array();
    235277                                foreach ( $request_ids as $request_id ) {
    236                                         if ( wp_delete_post( $request_id, true ) ) {
    237                                                 $count ++;
     278                                        $resend = _wp_privacy_resend_request( $request_id );
     279
     280                                        if ( $resend && ! is_wp_error( $resend ) ) {
     281                                                $count++;
     282                                                $sent_ids[] = $request_id;
    238283                                        }
    239284                                }
    240285
    241                                 add_settings_error(
    242                                         'bulk_action',
    243                                         'bulk_action',
    244                                         /* translators: %d: Number of requests. */
    245                                         sprintf( _n( 'Deleted %d request.', 'Deleted %d requests.', $count ), $count ),
    246                                         'success'
     286                                wp_redirect(
     287                                        add_query_arg(
     288                                                array(
     289                                                        'resent' => $count,
     290                                                        'ids'    => $sent_ids,
     291                                                ),
     292                                                $sendback
     293                                        )
    247294                                );
     295                                exit;
    248296                                break;
    249                         case 'resend':
     297                        case 'delete':
    250298                                foreach ( $request_ids as $request_id ) {
    251                                         $resend = _wp_privacy_resend_request( $request_id );
    252 
    253                                         if ( $resend && ! is_wp_error( $resend ) ) {
     299                                        if ( wp_delete_post( $request_id, true ) ) {
    254300                                                $count++;
    255301                                        }
    256302                                }
    257303
    258                                 add_settings_error(
    259                                         'bulk_action',
    260                                         'bulk_action',
    261                                         /* translators: %d: Number of requests. */
    262                                         sprintf( _n( 'Re-sent %d request.', 'Re-sent %d requests.', $count ), $count ),
    263                                         'success'
     304                                wp_redirect(
     305                                        add_query_arg(
     306                                                array(
     307                                                        'deleted' => $count
     308                                                ),
     309                                                $sendback
     310                                        )
    264311                                );
     312                                exit;
    265313                                break;
    266314                }
    267315        }