BP_Message_Export

BP_Message_Export

描述

文件:bp-core / gdpr / class-bp-message-export.php

最终类BP_MESSAGE_EXPORT扩展了BP_EXPORT {/ ** *获取此类的实例。* * @return controller | null * / public static function instance(){静态$ instance = null;if(null === $ scents){$ instance = new bp_message_export();$ instance-> setup('bp_message',__('私人消息','buddyboss'));} return $ scents;} / ** *出口成员留言。* * @param $ user * @param $ page * @param bool $ mode_address * * * @since buddyboss 1.0.0 * * * @return array * / function process_data($ user,$ page,$ email_address = false){if(!$ user || is_wp_error($ user)){return $ this->响应(array(),true);$ export_items = array();$ data_items = $ this-> get_data($用户,$页面); foreach ( $data_items['items'] as $item ) { $group_id = "bp_messages"; $group_label = __( 'Message Threads & Replies', 'buddyboss' ); $item_id = "{$this->exporter_name}-{$group_id}-{$item->id}"; $permalink = bp_get_message_thread_view_link( $item->thread_id, $user->ID ); // recipients $recipients = array(); if ( ! is_array( $item->recipients ) ) { $item->recipients = array(); } foreach ( $item->recipients as $r_user ) { if ( ! empty( $r_user ) ) { $name = $r_user->display_name; if ( empty( $r_user->display_name ) ) { $name = $r_user->user_login; } $recipients[] = $name; } } $recipients = implode( ", ", $recipients ); $recipients = apply_filters( 'buddyboss_bp_gdpr_bp_message_item_recipients', $recipients, $item, $data_items ); $data = array( array( 'name' => __( 'Message Subject', 'buddyboss' ), 'value' => $item->subject ), array( 'name' => __( 'Message Content', 'buddyboss' ), 'value' => $item->message ), array( 'name' => __( 'Created Date (GMT)', 'buddyboss' ), 'value' => $item->date_sent ), array( 'name' => __( 'Message Recipients', 'buddyboss' ), 'value' => $recipients ), array( 'name' => __( 'Thread URL', 'buddyboss' ), 'value' => $permalink ), ); $data = apply_filters( 'buddyboss_bp_gdpr_message_after_data_prepare', $data, $item, $data_items ); $export_items[] = array( 'group_id' => $group_id, 'group_label' => $group_label, 'item_id' => $item_id, 'data' => $data, ); } $done = $data_items["total"] < $data_items["offset"]; return $this->response( $export_items, $done ); } /** * Delete user messages and change ownership to anonymous. * * @param $user * @param $page * @param bool $email_address * * @since BuddyBoss 1.0.0 * * @return array */ function process_erase( $user, $page, $email_address ) { global $wpdb, $bp; if ( ! $user || is_wp_error( $user ) ) { return $this->response_erase( array(), true ); } $table = "{$bp->messages->global_tables["table_name_messages"]}"; $table_recipients = "{$bp->messages->global_tables["table_name_recipients"]}"; $page = (int) $page; $items_removed = false; $items_retained = false; $get_data = $this->get_data( $user, $page ); foreach ( $get_data["items"] as $item ) { $item->subject = wp_privacy_anonymize_data( 'text', $item->subject ); $item->message = wp_privacy_anonymize_data( 'longtext', $item->subject ); $wpdb->update( $table, array( "subject" => $item->subject, "message" => $item->message, ), array( "id" => $item->id ), array( '%s', '%s', '%d' ), array( '%d' ) ); /** * @todo add title/description * * @since BuddyBoss 1.0.0 */ do_action( 'buddyboss_bp_gdpr_message_after_data_erasers_item', $item, $get_data ); $items_removed = true; } $done = $get_data["total"] < $get_data["offset"]; if ( $done ) { // Anonymous user from all recipients $wpdb->update( $table_recipients, array( "user_id" => 0 ), array( "user_id" => $user->ID ), array( '%d' ), array( "%d" ) ); // Anonymous Sender ID from all messages $wpdb->update( $table, array( "sender_id" => 0 ), array( "sender_id" => $user->ID ), array( '%d' ), array( "%d" ) ); } return $this->response_erase( $items_removed, $done, array(), $items_retained ); } /** * Merge recipients into items. * * @param $items * * @since BuddyBoss 1.0.0 * * @return array */ function messages_recipients( $items ) { global $wpdb, $bp; $table = "{$bp->messages->global_tables["table_name_recipients"]}"; $thread_ids = array(); foreach ( $items as $item ) { $thread_ids[ $item->thread_id ] = $item->thread_id; } if ( empty( $thread_ids ) ) { return array(); } $ids_in = array_fill( 0, count( $thread_ids ), '%s' ); $ids_in = join( ',', $ids_in ); $get_results = $wpdb->get_results( $wpdb->prepare( "SELECT *FROM {$table} WHERE thread_id IN ({$ids_in})", $thread_ids ) ); $thread_recipients = array(); foreach ( $get_results as $result ) { if ( ! isset( $thread_recipients[ $result->thread_id ] ) || ! is_array( $thread_recipients[ $result->thread_id ] ) ) { $thread_recipients[ $result->thread_id ] = array(); } if ( ! isset( $thread_recipients[ $result->thread_id ][ $result->user_id ] ) ) { $thread_recipients[ $result->thread_id ][ $result->user_id ] = get_userdata( $result->user_id ); } } foreach ( $items as $item_key => $item ) { if ( ! isset( $thread_recipients[ $item->thread_id ] ) ) { $thread_recipients[ $item->thread_id ] = array(); } $item->recipients = $thread_recipients[ $item->thread_id ]; } return $items; } /** * Get data & count of messages by page and user. * * @param $user * @param $page * * @since BuddyBoss 1.0.0 * * @return array */ function get_data( $user, $page ) { global $wpdb, $bp; $wpdb->show_errors( false ); $table = "{$bp->messages->global_tables["table_name_messages"]} item"; $query_select = "item.*"; $query_select_count = "COUNT(item.id)"; $query_where = "item.sender_id=%d"; $offset = ( $page - 1 ) * $this->items_per_batch; $limit = "LIMIT {$this->items_per_batch} OFFSET {$offset}"; $query = "SELECT {$query_select} FROM {$table} WHERE {$query_where} {$limit}"; $query = $wpdb->prepare( $query, $user->ID ); $query_count = "SELECT {$query_select_count} FROM {$table} WHERE {$query_where}"; $query_count = $wpdb->prepare( $query_count, $user->ID ); $count = (int) $wpdb->get_var( $query_count ); $items = $wpdb->get_results( $query ); $items = $this->messages_recipients( $items ); return array( "total" => $count, "offset" => $offset, "items" => $items, ); } }

方法

问题吗?

我们总是很乐意帮助您解决代码或其他问题!搜索我们的开发人员文档联络支持,或与我们联系销售团队