Make WordPress Core

Ticket #64282: 64282.diff

File 64282.diff, 3.6 KB (added by iflairwebtechnologies, 6 months ago)

Fix Biographical Info Erasure Issue in wp-admin (6.8.3)

  • src/wp-includes/default-filters.php

     
    444444add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_comment_personal_data_exporter' );
    445445add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_media_personal_data_exporter' );
    446446add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_user_personal_data_exporter', 1 );
     447add_filter( 'wp_privacy_personal_data_erasers', 'wp_register_user_personal_data_eraser', 1 );
    447448add_filter( 'wp_privacy_personal_data_erasers', 'wp_register_comment_personal_data_eraser' );
    448449add_action( 'init', 'wp_schedule_delete_old_privacy_export_files' );
    449450add_action( 'wp_privacy_delete_old_export_files', 'wp_privacy_delete_old_export_files' );
  • src/wp-includes/user.php

     
    41664166}
    41674167
    41684168/**
     4169 * Registers the personal data eraser for users.
     4170 *
     4171 * @since 6.7.0
     4172 *
     4173 * @param array $erasers An array of personal data erasers.
     4174 * @return array An array of personal data erasers.
     4175 */
     4176function wp_register_user_personal_data_eraser( $erasers ) {
     4177        $erasers['wordpress-user'] = array(
     4178                'eraser_friendly_name' => __( 'WordPress User' ),
     4179                'callback'             => 'wp_user_personal_data_eraser',
     4180        );
     4181
     4182        return $erasers;
     4183}
     4184
     4185/**
     4186 * Erases core user profile data for a personal data erasure request.
     4187 *
     4188 * @since 6.7.0
     4189 *
     4190 * @param string $email_address The user's email address.
     4191 * @param int    $page          Unused. Part of the eraser signature.
     4192 * @return array {
     4193 *     Data removal results.
     4194 *
     4195 *     @type bool     $items_removed  Whether items were actually removed.
     4196 *     @type bool     $items_retained Whether items were retained.
     4197 *     @type string[] $messages       An array of messages about retained items.
     4198 *     @type bool     $done           Whether the eraser is finished.
     4199 * }
     4200 */
     4201function wp_user_personal_data_eraser( $email_address, $page = 1 ) {
     4202        $response = array(
     4203                'items_removed'  => false,
     4204                'items_retained' => false,
     4205                'messages'       => array(),
     4206                'done'           => true,
     4207        );
     4208
     4209        $email_address = trim( $email_address );
     4210
     4211        if ( empty( $email_address ) ) {
     4212                return $response;
     4213        }
     4214
     4215        $user = get_user_by( 'email', $email_address );
     4216
     4217        if ( ! $user instanceof WP_User ) {
     4218                return $response;
     4219        }
     4220
     4221        $user_id = $user->ID;
     4222
     4223        $meta_keys_to_erase = array( 'description' );
     4224
     4225        /**
     4226         * Filters the list of user meta keys removed during a personal data erasure request.
     4227         *
     4228         * @since 6.7.0
     4229         *
     4230         * @param string[] $meta_keys_to_erase User meta keys slated for deletion.
     4231         * @param WP_User  $user               The user whose data is being erased.
     4232         */
     4233        $meta_keys_to_erase = apply_filters( 'wp_privacy_user_personal_data_eraser_meta_keys', $meta_keys_to_erase, $user );
     4234
     4235        foreach ( $meta_keys_to_erase as $meta_key ) {
     4236                $meta_key = sanitize_key( $meta_key );
     4237
     4238                if ( '' === $meta_key ) {
     4239                        continue;
     4240                }
     4241
     4242                if ( ! metadata_exists( 'user', $user_id, $meta_key ) ) {
     4243                        continue;
     4244                }
     4245
     4246                $deleted = delete_user_meta( $user_id, $meta_key );
     4247
     4248                if ( $deleted ) {
     4249                        $response['items_removed'] = true;
     4250                } else {
     4251                        $response['items_retained'] = true;
     4252                        $response['messages'][]     = sprintf(
     4253                                /* translators: %s: User meta key. */
     4254                                __( 'User meta "%s" could not be erased.' ),
     4255                                $meta_key
     4256                        );
     4257                }
     4258        }
     4259
     4260        return $response;
     4261}
     4262
     4263/**
    41694264 * Updates log when privacy request is confirmed.
    41704265 *
    41714266 * @since 4.9.6