Make WordPress Core

Ticket #43443: 43443.6.patch

File 43443.6.patch, 23.7 KB (added by mikejolley, 6 years ago)
  • wp-admin/includes/user.php

     
    626626        }
    627627
    628628        update_post_meta( $request_id, '_wp_user_request_confirmed_timestamp', time() );
     629
    629630        $request = wp_update_post( array(
    630                 'ID'          => $request_data['request_id'],
     631                'ID'          => $request_id,
    631632                'post_status' => 'request-confirmed',
    632633        ) );
     634
    633635        return $request;
    634636}
    635637
     
    772774}
    773775
    774776/**
     777 * Cleans up failed and expired requests before displaying the list table.
     778 *
     779 * @since 4.9.6
     780 * @access private
     781 */
     782function _wp_personal_data_cleanup_requests() {
     783        $expires        = (int) apply_filters( 'user_request_key_expiration', DAY_IN_SECONDS );
     784        $requests_query = new WP_Query( array(
     785                'post_type'      => 'user_request',
     786                'posts_per_page' => -1,
     787                'post_status'    => 'request-pending',
     788                'fields'         => 'ids',
     789                'date_query' => array(
     790                        array(
     791                                'column' => 'post_modified_gmt',
     792                                'before' => $expires . ' seconds ago',
     793                        ),
     794                ),
     795        ) );
     796
     797        $request_ids = $requests_query->posts;
     798
     799        foreach ( $request_ids as $request_id ) {
     800                wp_update_post( array(
     801                        'ID'            => $request_id,
     802                        'post_status'   => 'request-failed',
     803                        'post_password' => '',
     804                ) );
     805        }
     806}
     807
     808/**
    775809 * Personal data export.
    776810 *
    777811 * @since 4.9.6
     
    783817        }
    784818
    785819        _wp_personal_data_handle_actions();
     820        _wp_personal_data_cleanup_requests();
    786821
    787822        $requests_table = new WP_Privacy_Data_Export_Requests_Table( array(
    788823                'plural'   => 'privacy_requests',
     
    844879        }
    845880
    846881        _wp_personal_data_handle_actions();
     882        _wp_personal_data_cleanup_requests();
    847883
    848884        // "Borrow" xfn.js for now so we don't have to create new files.
    849885        wp_enqueue_script( 'xfn' );
     
    882918
    883919                <form class="search-form wp-clearfix">
    884920                        <?php $requests_table->search_box( __( 'Search Requests' ), 'requests' ); ?>
    885                         <input type="hidden" name="page" value="export_personal_data" />
     921                        <input type="hidden" name="page" value="remove_personal_data" />
    886922                        <input type="hidden" name="filter-status" value="<?php echo isset( $_REQUEST['filter-status'] ) ? esc_attr( sanitize_text_field( $_REQUEST['filter-status'] ) ) : ''; ?>" />
    887923                        <input type="hidden" name="orderby" value="<?php echo isset( $_REQUEST['orderby'] ) ? esc_attr( sanitize_text_field( $_REQUEST['orderby'] ) ) : ''; ?>" />
    888924                        <input type="hidden" name="order" value="<?php echo isset( $_REQUEST['order'] ) ? esc_attr( sanitize_text_field( $_REQUEST['order'] ) ) : ''; ?>" />
     
    948984         */
    949985        public function get_columns() {
    950986                $columns = array(
    951                         'cb'                  => '<input type="checkbox" />',
    952                         'email'               => __( 'Requester' ),
    953                         'status'              => __( 'Status' ),
    954                         'requested_timestamp' => __( 'Requested' ),
    955                         'next_steps'          => __( 'Next Steps' ),
     987                        'cb'                => '<input type="checkbox" />',
     988                        'email'             => __( 'Requester' ),
     989                        'status'            => __( 'Status' ),
     990                        'created_timestamp' => __( 'Requested' ),
     991                        'next_steps'        => __( 'Next Steps' ),
    956992                );
    957993                return $columns;
    958994        }
     
    10001036                        SELECT post_status, COUNT( * ) AS num_posts
    10011037                        FROM {$wpdb->posts}
    10021038                        WHERE post_type = %s
    1003                         AND post_title = %s
     1039                        AND post_name = %s
    10041040                        GROUP BY post_status";
    10051041
    10061042                $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $this->post_type, $this->request_type ), ARRAY_A );
     
    10881124                        case 'resend':
    10891125                                foreach ( $request_ids as $request_id ) {
    10901126                                        $resend = _wp_privacy_resend_request( $request_id );
    1091                                        
     1127
    10921128                                        if ( $resend && ! is_wp_error( $resend ) ) {
    10931129                                                $count++;
    10941130                                        }
     
    11241160                $posts_per_page = 20;
    11251161                $args           = array(
    11261162                        'post_type'      => $this->post_type,
    1127                         'title'          => $this->request_type,
     1163                        'post_name__in'  => array( $this->request_type ),
    11281164                        'posts_per_page' => $posts_per_page,
    11291165                        'offset'         => isset( $_REQUEST['paged'] ) ? max( 0, absint( $_REQUEST['paged'] ) - 1 ) * $posts_per_page: 0,
    11301166                        'post_status'    => 'any',
     1167                        's'              => isset( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ) : '',
    11311168                );
    11321169
    11331170                if ( ! empty( $_REQUEST['filter-status'] ) ) {
     
    11351172                        $args['post_status'] = $filter_status;
    11361173                }
    11371174
    1138                 if ( ! empty( $_REQUEST['s'] ) ) {
    1139                         $args['meta_query'] = array(
    1140                                 $name_query,
    1141                                 'relation'  => 'AND',
    1142                                 array(
    1143                                         'key'     => '_wp_user_request_user_email',
    1144                                         'value'   => isset( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ): '',
    1145                                         'compare' => 'LIKE',
    1146                                 ),
    1147                         );
    1148                 }
    1149 
    11501175                $requests_query = new WP_Query( $args );
    11511176                $requests       = $requests_query->posts;
    11521177
     
    11541179                        $this->items[] = wp_get_user_request_data( $request->ID );
    11551180                }
    11561181
     1182                $this->items = array_filter( $this->items );
     1183
    11571184                $this->set_pagination_args(
    11581185                        array(
    11591186                                'total_items' => $requests_query->found_posts,
     
    11671194         *
    11681195         * @since 4.9.6
    11691196         *
    1170          * @param array $item Item being shown.
     1197         * @param WP_User_Request $item Item being shown.
    11711198         * @return string
    11721199         */
    11731200        public function column_cb( $item ) {
    1174                 return sprintf( '<input type="checkbox" name="request_id[]" value="%1$s" /><span class="spinner"></span>', esc_attr( $item['request_id'] ) );
     1201                return sprintf( '<input type="checkbox" name="request_id[]" value="%1$s" /><span class="spinner"></span>', esc_attr( $item->ID ) );
    11751202        }
    11761203
    11771204        /**
     
    11791206         *
    11801207         * @since 4.9.6
    11811208         *
    1182          * @param array $item Item being shown.
     1209         * @param WP_User_Request $item Item being shown.
    11831210         * @return string
    11841211         */
    11851212        public function column_status( $item ) {
    1186                 $status        = get_post_status( $item['request_id'] );
     1213                $status        = get_post_status( $item->ID );
    11871214                $status_object = get_post_status_object( $status );
    11881215
    11891216                if ( ! $status_object || empty( $status_object->label ) ) {
     
    11941221
    11951222                switch ( $status ) {
    11961223                        case 'request-confirmed':
    1197                                 $timestamp = $item['confirmed_timestamp'];
     1224                                $timestamp = $item->confirmed_timestamp;
    11981225                                break;
    11991226                        case 'request-completed':
    1200                                 $timestamp = $item['completed_timestamp'];
     1227                                $timestamp = $item->completed_timestamp;
    12011228                                break;
    12021229                }
    12031230
     
    12381265         *
    12391266         * @since 4.9.6
    12401267         *
    1241          * @param array $item         Item being shown.
    1242          * @param string $column_name Name of column being shown.
     1268         * @param WP_User_Request $item         Item being shown.
     1269         * @param string          $column_name Name of column being shown.
    12431270         * @return string
    12441271         */
    12451272        public function column_default( $item, $column_name ) {
    1246                 $cell_value = $item[ $column_name ];
     1273                $cell_value = $item->$column_name;
    12471274
    1248                 if ( in_array( $column_name, array( 'requested_timestamp' ), true ) ) {
     1275                if ( in_array( $column_name, array( 'created_timestamp' ), true ) ) {
    12491276                        return $this->get_timestamp_as_date( $cell_value );
    12501277                }
    12511278
     
    12571284         *
    12581285         * @since 4.9.6
    12591286         *
    1260          * @param array $item Item being shown.
     1287         * @param WP_User_Request $item Item being shown.
    12611288         * @return string
    12621289         */
    12631290        public function column_email( $item ) {
    1264                 return sprintf( '%1$s %2$s', $item['email'], $this->row_actions( array() ) );
     1291                return sprintf( '%1$s %2$s', $item->email, $this->row_actions( array() ) );
    12651292        }
    12661293
    12671294        /**
     
    12691296         *
    12701297         * @since 4.9.6
    12711298         *
    1272          * @param array $item Item being shown.
     1299         * @param WP_User_Request $item Item being shown.
    12731300         */
    12741301        public function column_next_steps( $item ) {}
    12751302
     
    12781305         *
    12791306         * @since 4.9.6
    12801307         *
    1281          * @param object $item The current item
     1308         * @param WP_User_Request $item The current item
    12821309         */
    12831310        public function single_row( $item ) {
    1284                 $status = get_post_status( $item['request_id'] );
     1311                $status = $item->status;
    12851312
    12861313                echo '<tr class="status-' . esc_attr( $status ) . '">';
    12871314                $this->single_row_columns( $item );
     
    13251352         *
    13261353         * @since 4.9.6
    13271354         *
    1328          * @param array $item Item being shown.
     1355         * @param WP_User_Request $item Item being shown.
    13291356         * @return string
    13301357         */
    13311358        public function column_email( $item ) {
    13321359                $exporters       = apply_filters( 'wp_privacy_personal_data_exporters', array() );
    13331360                $exporters_count = count( $exporters );
    1334                 $request_id      = $item['request_id'];
     1361                $request_id      = $item->ID;
    13351362                $nonce           = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
    13361363
    13371364                $download_data_markup = '<div class="download_personal_data" ' .
     
    13481375                        'download_data' => $download_data_markup,
    13491376                );
    13501377
    1351                 return sprintf( '%1$s %2$s', $item['email'], $this->row_actions( $row_actions ) );
     1378                return sprintf( '%1$s %2$s', $item->email, $this->row_actions( $row_actions ) );
    13521379        }
    13531380
    13541381        /**
     
    13561383         *
    13571384         * @since 4.9.6
    13581385         *
    1359          * @param array $item Item being shown.
     1386         * @param WP_User_Request $item Item being shown.
    13601387         */
    13611388        public function column_next_steps( $item ) {
    1362                 $status = get_post_status( $item['request_id'] );
     1389                $status = $item->status;
    13631390
    13641391                switch ( $status ) {
    13651392                        case 'request-pending':
     
    13691396                                // TODO Complete in follow on patch.
    13701397                                break;
    13711398                        case 'request-failed':
    1372                                 submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item['request_id'] . ']', false );
     1399                                submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item->ID . ']', false );
    13731400                                break;
    13741401                        case 'request-completed':
    13751402                                echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
    13761403                                        'action' => 'delete',
    1377                                         'request_id' => array( $item['request_id'] )
     1404                                        'request_id' => array( $item->ID )
    13781405                                ), admin_url( 'tools.php?page=export_personal_data' ) ), 'bulk-privacy_requests' ) ) . '">' . esc_html__( 'Remove request' ) . '</a>';
    13791406                                break;
    13801407                }
     
    14101437         *
    14111438         * @since 4.9.6
    14121439         *
    1413          * @param array $item Item being shown.
     1440         * @param WP_User_Request $item Item being shown.
    14141441         * @return string
    14151442         */
    14161443        public function column_email( $item ) {
    14171444                $row_actions = array();
    14181445
    1419                 // Allow the administrator to "force remove" the personal data even if confirmation has not yet been received
    1420                 $status = get_post_status( $item['request_id'] );
     1446                // Allow the administrator to "force remove" the personal data even if confirmation has not yet been received.
     1447                $status = $item->status;
    14211448                if ( 'request-confirmed' !== $status ) {
    14221449                        $erasers       = apply_filters( 'wp_privacy_personal_data_erasers', array() );
    14231450                        $erasers_count = count( $erasers );
    1424                         $request_id    = $item['request_id'];
     1451                        $request_id    = $item->ID;
    14251452                        $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    14261453
    14271454                        $remove_data_markup = '<div class="remove_personal_data force_remove_personal_data" ' .
     
    14391466                        );
    14401467                }
    14411468
    1442                 return sprintf( '%1$s %2$s', $item['email'], $this->row_actions( $row_actions ) );
     1469                return sprintf( '%1$s %2$s', $item->email, $this->row_actions( $row_actions ) );
    14431470        }
    14441471
    14451472        /**
     
    14471474         *
    14481475         * @since 4.9.6
    14491476         *
    1450          * @param array $item Item being shown.
     1477         * @param WP_User_Request $item Item being shown.
    14511478         */
    14521479        public function column_next_steps( $item ) {
    1453                 $status = get_post_status( $item['request_id'] );
     1480                $status = $item->status;
    14541481
    14551482                switch ( $status ) {
    14561483                        case 'request-pending':
     
    14591486                        case 'request-confirmed':
    14601487                                $erasers       = apply_filters( 'wp_privacy_personal_data_erasers', array() );
    14611488                                $erasers_count = count( $erasers );
    1462                                 $request_id    = $item['request_id'];
     1489                                $request_id    = $item->ID;
    14631490                                $nonce         = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
    14641491
    14651492                                echo '<div class="remove_personal_data" ' .
     
    14771504
    14781505                                break;
    14791506                        case 'request-failed':
    1480                                 submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item['request_id'] . ']', false );
     1507                                submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item->ID . ']', false );
    14811508                                break;
    14821509                        case 'request-completed':
    14831510                                echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
    14841511                                        'action' => 'delete',
    1485                                         'request_id' => array( $item['request_id'] ),
     1512                                        'request_id' => array( $item->ID ),
    14861513                                ), admin_url( 'tools.php?page=remove_personal_data' ) ), 'bulk-privacy_requests' ) ) . '">' . esc_html__( 'Remove request' ) . '</a>';
    14871514                                break;
    14881515                }
  • wp-content/plugins

  • wp-content

    Property changes on: wp-content/plugins
    ___________________________________________________________________
    Added: svn:ignore
    ## -0,0 +1,6 ##
    +order-simulator-woocommerce-master
    +query-monitor
    +woocommerce
    +wp-cron-control
    +woocommerce-product-type-column
    +wp-mail-smtp
  • wp-includes/post.php

    Property changes on: wp-content
    ___________________________________________________________________
    Added: svn:ignore
    ## -0,0 +1,4 ##
    +uploads
    +upgrade
    +debug.log
    +db.php
     
    39803980 * @return string Unique slug for the post, based on $post_name (with a -1, -2, etc. suffix)
    39813981 */
    39823982function wp_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $post_parent ) {
    3983         if ( in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) || ( 'inherit' == $post_status && 'revision' == $post_type ) ) {
     3983        if ( in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) || ( 'inherit' == $post_status && 'revision' == $post_type ) || 'user_request' === $post_type ) {
    39843984                return $slug;
    39853985        }
    39863986
  • wp-includes/user.php

     
    28402840                return;
    28412841        }
    28422842
    2843         if ( ! in_array( $request_data['status'], array( 'request-pending', 'request-failed' ), true ) ) {
     2843        if ( ! in_array( $request_data->status, array( 'request-pending', 'request-failed' ), true ) ) {
    28442844                return;
    28452845        }
    28462846
    28472847        update_post_meta( $request_id, '_wp_user_request_confirmed_timestamp', time() );
    28482848        wp_update_post( array(
    2849                 'ID'          => $request_data['request_id'],
     2849                'ID'          => $request_id,
    28502850                'post_status' => 'request-confirmed',
    28512851        ) );
    28522852}
     
    28622862function _wp_privacy_account_request_confirmed_message( $message, $request_id ) {
    28632863        $request = wp_get_user_request_data( $request_id );
    28642864
    2865         if ( $request && in_array( $request['action'], _wp_privacy_action_request_types(), true ) ) {
     2865        if ( $request && in_array( $request->action_name, _wp_privacy_action_request_types(), true ) ) {
    28662866                $message = '<p class="message">' . __( 'Action has been confirmed.' ) . '</p>';
    28672867                $message .= __( 'The site administrator has been notified and will fulfill your request as soon as possible.' );
    28682868        }
     
    29002900
    29012901        // Check for duplicates.
    29022902        $requests_query = new WP_Query( array(
    2903                 'post_type'   => 'user_request',
    2904                 'title'       => $action_name,
    2905                 'post_status' => 'any',
    2906                 'fields'      => 'ids',
    2907                 'meta_query'  => array(
    2908                         array(
    2909                                 'key'     => '_wp_user_request_user_email',
    2910                                 'value'   => $email_address,
    2911                         ),
    2912                 ),
     2903                'post_type'     => 'user_request',
     2904                'post_name__in' => array( $action_name ),  // Action name stored in post_name column.
     2905                'title'         => $email_address, // Email address stored in post_title column.
     2906                'post_status'   => 'any',
     2907                'fields'        => 'ids',
    29132908        ) );
    29142909
    29152910        if ( $requests_query->found_posts ) {
     
    29182913
    29192914        $request_id = wp_insert_post( array(
    29202915                'post_author'   => $user_id,
    2921                 'post_title'    => $action_name,
     2916                'post_name'     => $action_name,
     2917                'post_title'    => $email_address,
    29222918                'post_content'  => wp_json_encode( $request_data ),
    29232919                'post_status'   => 'request-pending',
    29242920                'post_type'     => 'user_request',
     
    29262922                'post_date_gmt' => current_time( 'mysql', true ),
    29272923        ), true );
    29282924
    2929         if ( is_wp_error( $request_id ) ) {
    2930                 return $request_id;
    2931         }
    2932 
    2933         update_post_meta( $request_id, '_wp_user_request_user_email', $email_address );
    2934         update_post_meta( $request_id, '_wp_user_request_confirmed_timestamp', false );
    2935 
    29362925        return $request_id;
    29372926}
    29382927
     
    29632952         *
    29642953         * @param string $description The default description.
    29652954         * @param string $action_name The name of the request.
    2966          */                             
     2955         */
    29672956        return apply_filters( 'user_request_action_description', $description, $action_name );
    29682957}
    29692958
     
    29792968 */
    29802969function wp_send_user_request( $request_id ) {
    29812970        $request_id = absint( $request_id );
    2982         $request    = get_post( $request_id );
     2971        $request    = wp_get_user_request_data( $request_id );
    29832972
    2984         if ( ! $request || 'user_request' !== $request->post_type ) {
     2973        if ( ! $request ) {
    29852974                return new WP_Error( 'user_request_error', __( 'Invalid request.' ) );
    29862975        }
    29872976
    2988         if ( 'request-pending' !== $request->post_status ) {
    2989                 wp_update_post( array(
    2990                         'ID'            => $request_id,
    2991                         'post_status'   => 'request-pending',
    2992                         'post_date'     => current_time( 'mysql', false ),
    2993                         'post_date_gmt' => current_time( 'mysql', true ),
    2994                 ) );
    2995         }
    2996 
    29972977        $email_data = array(
    2998                 'action_name' => $request->post_title,
    2999                 'email'       => get_post_meta( $request->ID, '_wp_user_request_user_email', true ),
    3000                 'description' => wp_user_request_action_description( $request->post_title ),
     2978                'email'       => $request->email,
     2979                'description' => wp_user_request_action_description( $request->action_name ),
    30012980                'confirm_url' => add_query_arg( array(
    30022981                        'action'      => 'confirmaction',
    30032982                        'request_id'  => $request_id,
     
    30453024         * @param array  $email_data {
    30463025         *     Data relating to the account action email.
    30473026         *
    3048          *     @type string $action_name Name of the action being performed.
    3049          *     @type string $email       The email address this is being sent to.
    3050          *     @type string $description Description of the action being performed so the user knows what the email is for.
    3051          *     @type string $confirm_url The link to click on to confirm the account action.
    3052          *     @type string $sitename    The site name sending the mail.
    3053          *     @type string $siteurl     The site URL sending the mail.
     3027         *     @type WP_User_Request $request User request object.
     3028         *     @type string          $email       The email address this is being sent to.
     3029         *     @type string          $description Description of the action being performed so the user knows what the email is for.
     3030         *     @type string          $confirm_url The link to click on to confirm the account action.
     3031         *     @type string          $sitename    The site name sending the mail.
     3032         *     @type string          $siteurl     The site URL sending the mail.
    30543033         * }
    30553034         */
    30563035        $content = apply_filters( 'user_request_action_email_content', $email_text, $email_data );
     
    30663045}
    30673046
    30683047/**
    3069  * Returns a confirmation key for a user action and stores the hashed version.
     3048 * Returns a confirmation key for a user action and stores the hashed version for future comparison.
    30703049 *
    30713050 * @since 4.9.6
    30723051 *
     
    30853064                $wp_hasher = new PasswordHash( 8, true );
    30863065        }
    30873066
    3088         update_post_meta( $request_id, '_wp_user_request_confirm_key', $wp_hasher->HashPassword( $key ) );
    3089         update_post_meta( $request_id, '_wp_user_request_confirm_key_timestamp', time() );
     3067        wp_update_post( array(
     3068                'ID'                => $request_id,
     3069                'post_status'       => 'request-pending',
     3070                'post_password'     => $wp_hasher->HashPassword( $key ),
     3071                'post_modified'     => current_time( 'mysql', false ),
     3072                'post_modified_gmt' => current_time( 'mysql', true ),
     3073        ) );
    30903074
    30913075        return $key;
    30923076}
     
    31103094                return new WP_Error( 'user_request_error', __( 'Invalid request.' ) );
    31113095        }
    31123096
    3113         if ( ! in_array( $request['status'], array( 'request-pending', 'request-failed' ), true ) ) {
     3097        if ( ! in_array( $request->status, array( 'request-pending', 'request-failed' ), true ) ) {
    31143098                return __( 'This link has expired.' );
    31153099        }
    31163100
     
    31233107                $wp_hasher = new PasswordHash( 8, true );
    31243108        }
    31253109
    3126         $key_request_time = $request['confirm_key_timestamp'];
    3127         $saved_key        = $request['confirm_key'];
     3110        $key_request_time = $request->modified_timestamp;
     3111        $saved_key        = $request->confirm_key;
    31283112
    31293113        if ( ! $saved_key ) {
    31303114                return new WP_Error( 'invalid_key', __( 'Invalid key' ) );
     
    31653149 */
    31663150function wp_get_user_request_data( $request_id ) {
    31673151        $request_id = absint( $request_id );
    3168         $request    = get_post( $request_id );
     3152        $post       = get_post( $request_id );
    31693153
    3170         if ( ! $request || 'user_request' !== $request->post_type ) {
     3154        if ( ! $post || 'user_request' !== $post->post_type ) {
    31713155                return false;
    31723156        }
    31733157
    3174         return array(
    3175                 'request_id'            => $request->ID,
    3176                 'user_id'               => $request->post_author,
    3177                 'email'                 => get_post_meta( $request->ID, '_wp_user_request_user_email', true ),
    3178                 'action'                => $request->post_title,
    3179                 'requested_timestamp'   => strtotime( $request->post_date_gmt ),
    3180                 'confirmed_timestamp'   => get_post_meta( $request->ID, '_wp_user_request_confirmed_timestamp', true ),
    3181                 'completed_timestamp'   => get_post_meta( $request->ID, '_wp_user_request_completed_timestamp', true ),
    3182                 'request_data'          => json_decode( $request->post_content, true ),
    3183                 'status'                => $request->post_status,
    3184                 'confirm_key'           => get_post_meta( $request_id, '_wp_user_request_confirm_key', true ),
    3185                 'confirm_key_timestamp' => get_post_meta( $request_id, '_wp_user_request_confirm_key_timestamp', true ),
    3186         );
     3158        return new WP_User_Request( $post );
    31873159}
     3160
     3161/**
     3162 * WP_User_Request class.
     3163 *
     3164 * Represents user request data loaded from a WP_Post object.
     3165 *
     3166 * @since 4.9.6
     3167 */
     3168class WP_User_Request {
     3169        /**
     3170         * Request ID.
     3171         *
     3172         * @var int
     3173         */
     3174        public $ID = 0;
     3175
     3176        /**
     3177         * User ID.
     3178         *
     3179         * @var int
     3180         */
     3181
     3182        public $user_id = 0;
     3183
     3184        /**
     3185         * User email.
     3186         *
     3187         * @var int
     3188         */
     3189        public $email = '';
     3190
     3191        /**
     3192         * Action name.
     3193         *
     3194         * @var string
     3195         */
     3196        public $action_name = '';
     3197
     3198        /**
     3199         * Current status.
     3200         *
     3201         * @var string
     3202         */
     3203        public $status = '';
     3204
     3205        /**
     3206         * Timestamp this request was created.
     3207         *
     3208         * @var int|null
     3209         */
     3210        public $created_timestamp = null;
     3211
     3212        /**
     3213         * Timestamp this request was last modified.
     3214         *
     3215         * @var int|null
     3216         */
     3217        public $modified_timestamp = null;
     3218
     3219        /**
     3220         * Timestamp this request was confirmed.
     3221         *
     3222         * @var int
     3223         */
     3224        public $confirmed_timestamp = null;
     3225
     3226        /**
     3227         * Timestamp this request was completed.
     3228         *
     3229         * @var int
     3230         */
     3231        public $completed_timestamp = null;
     3232
     3233        /**
     3234         * Misc data assigned to this request.
     3235         *
     3236         * @var array
     3237         */
     3238        public $request_data = array();
     3239
     3240        /**
     3241         * Key used to confirm this request.
     3242         *
     3243         * @var string
     3244         */
     3245        public $confirm_key = '';
     3246
     3247        /**
     3248         * Constructor.
     3249         *
     3250         * @since 3.5.0
     3251         *
     3252         * @param WP_Post|object $post Post object.
     3253         */
     3254        public function __construct( $post ) {
     3255                $this->ID                  = $post->ID;
     3256                $this->user_id             = $post->post_author;
     3257                $this->email               = $post->post_title;
     3258                $this->action_name         = $post->post_name;
     3259                $this->status              = $post->post_status;
     3260                $this->created_timestamp   = strtotime( $post->post_date_gmt );
     3261                $this->modified_timestamp  = strtotime( $post->post_modified_gmt );
     3262                $this->confirmed_timestamp = (int) get_post_meta( $post->ID, '_wp_user_request_confirmed_timestamp', true );
     3263                $this->completed_timestamp = (int) get_post_meta( $post->ID, '_wp_user_request_completed_timestamp', true );
     3264                $this->request_data        = json_decode( $post->post_content, true );
     3265                $this->confirm_key         = $post->post_password;
     3266        }
     3267}
     3268 No newline at end of file
  • .