Make WordPress Core

Ticket #43440: 43440.4.diff

File 43440.4.diff, 3.4 KB (added by azaozz, 7 years ago)
  • src/wp-includes/comment.php

     
    32743274
    32753275        return get_comment( $comment_id );
    32763276}
     3277
     3278/**
     3279 * Registers the personal data exporter for comments
     3280 *
     3281 * @param array   $exporters   An array of personal data exporters.
     3282 * @return array  An array of personal data exporters.
     3283 */
     3284function wp_register_comment_personal_data_exporter( $exporters ) {
     3285        $exporters[] = array(
     3286                'exporter_friendly_name' => __( 'WordPress Comments' ),
     3287                'callback'               => 'wp_comments_personal_data_exporter',
     3288        );
     3289
     3290        return $exporters;
     3291}
     3292
     3293/**
     3294 * Finds and exports data which could be used to identify a person from comments assocated with an email address.
     3295 *
     3296 * @param string  $email  The comment author email address.
     3297 * @param int     $page   Comment page, zero based.
     3298 * @return array  An array of personal data in name value pairs
     3299 */
     3300function wp_comments_personal_data_exporter( $email_address, $page = 0 ) {
     3301
     3302        // Technically, strtolower isn't necessary since get_comments will match email insensitive
     3303        // But it is a good example for plugin developers whose targets might not be as generous
     3304        $email_address = trim( strtolower( $email_address ) );
     3305
     3306        // Limit us to 500 comments at a time to avoid timing out
     3307        $number = 500;
     3308        $offset = $number * (int) $page;
     3309
     3310        $comments = get_comments(
     3311                array(
     3312                        'author_email' => $email_address,
     3313                        'number'       => $number,
     3314                        'offset'       => $offset,
     3315                        'order_by'     => 'comment_ID',
     3316                        'order'        => 'ASC',
     3317                )
     3318        );
     3319
     3320        $comment_personal_data_props = array(
     3321                'comment_author'       => __( 'Comment Author' ),
     3322                'comment_author_email' => __( 'Comment Author Email' ),
     3323                'comment_author_url'   => __( 'Comment Author URL' ),
     3324                'comment_author_IP'    => __( 'Comment Author IP' ),
     3325                'comment_agent'        => __( 'Comment Agent' ),
     3326        );
     3327
     3328        $personal_data = $compare = array_fill_keys( array_keys( $comment_personal_data_props ), array() );
     3329
     3330        foreach ( $comment_personal_data_props as $key => $name ) {
     3331                $personal_data[ $key ] = array( 'name' => $name, 'values' => array() );
     3332        }
     3333
     3334        foreach ( (array) $comments as $comment ) {
     3335                foreach ( $comment_personal_data_props as $key => $name ) {
     3336                        $value = $comment->$key;
     3337
     3338                        if ( ! empty( $value ) && ! in_array( $value, $compare[ $key ], true ) ) {
     3339                                // Add the value to the comparison array...
     3340                                $compare[ $key ][] = $value;
     3341                                // and to the data export.
     3342                                $personal_data[ $key ]['values'][] = $value;
     3343                        }
     3344                }
     3345        }
     3346
     3347        $done = count( $comments ) < $number;
     3348
     3349        return array(
     3350                'data' => $personal_data,
     3351                'done' => $done,
     3352        );
     3353}
  • src/wp-includes/default-filters.php

     
    328328add_action( 'do_pings', 'do_all_pings', 10, 1 );
    329329add_action( 'do_robots', 'do_robots' );
    330330add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 3 );
     331add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_comment_personal_data_exporter', 10 );
    331332add_action( 'sanitize_comment_cookies', 'sanitize_comment_cookies' );
    332333add_action( 'admin_print_scripts', 'print_emoji_detection_script' );
    333334add_action( 'admin_print_scripts', 'print_head_scripts', 20 );