BP_Bbp_Gdpr_Forums
Class BP_Bbp_Gdpr_Forums
Description
Source
File: bp-core/gdpr/class-bp-bbp-gdpr-forums.php
class BP_Bbp_Gdpr_Forums { /** * @var string */ public $post_type = 'forum'; /** * BBP_GDPR_Forum constructor. */ public function __construct() { add_filter( 'wp_privacy_personal_data_exporters', array( $this, 'register_exporter' ), 10 ); add_filter( 'wp_privacy_personal_data_erasers', array( $this, 'erase_exporter' ), 10 ); } /** * Register forum exporter. * * @param $exporters * * @since BuddyBoss 1.0.0 * * @return mixed */ function register_exporter( $exporters ) { $exporters['bbp-forum'] = array( 'exporter_friendly_name' => __( 'Forums', 'buddyboss' ), 'callback' => array( $this, 'forums_exporter' ), ); return $exporters; } /** * Register Forum data deletion. * * @param $erasers * * @since BuddyBoss 1.0.0 * * @return mixed */ function erase_exporter( $erasers ) { $erasers['bbp-forum'] = array( 'eraser_friendly_name' => __( 'Forums', 'buddyboss' ), 'callback' => array( $this, 'forums_eraser' ), ); return $erasers; } /** * Export member created forum data. * * @param $email_address * @param int $page * * @since BuddyBoss 1.0.0 * * @return array */ function forums_exporter( $email_address, $page = 1 ) { $per_page = 500; // Limit to avoid timeout $page = (int) $page; $export_items = array(); $user = get_user_by( 'email', $email_address ); if ( false === $user ) { return array( 'data' => $export_items, 'done' => true, ); } $forums_details = $this->get_forums( $user, $page, $per_page ); $total = isset( $forums_details['total'] ) ? $forums_details['total'] : 0; $forums = isset( $forums_details['forums'] ) ? $forums_details['forums'] : array(); if ( $total > 0 ) { foreach ( $forums as $forum ) { $item_id = "bbp-forum-{$forum->ID}"; $group_id = 'bbp-forums'; $group_label = __( 'Forums', 'buddyboss' ); $permalink = get_permalink( $forum->ID ); // Plugins can add as many items in the item data array as they want $data = array( array( 'name' => __( 'Forum Author', 'buddyboss' ), 'value' => $user->display_name, ), array( 'name' => __( 'Forum Author Email', 'buddyboss' ), 'value' => $user->user_email, ), array( 'name' => __( 'Forum Title', 'buddyboss' ), 'value' => $forum->post_title, ), array( 'name' => __( 'Forum Content', 'buddyboss' ), 'value' => $forum->post_content, ), array( 'name' => __( 'Forum Date', 'buddyboss' ), 'value' => $forum->post_date, ), array( 'name' => __( 'Forum URL', 'buddyboss' ), 'value' => $permalink, ), ); $export_items[] = array( 'group_id' => $group_id, 'group_label' => $group_label, 'item_id' => $item_id, 'data' => $data, ); } } $offset = ( $page - 1 ) * $per_page; // Tell core if we have more comments to work on still $done = $total < $offset; return array( 'data' => $export_items, 'done' => $done, ); } /** * Fetch all the user forums. * * @param $user * @param $page * @param $per_page * * @since BuddyBoss 1.0.0 * * @return array|bool */ function get_forums( $user, $page, $per_page ) { $pp_args = array( 'post_type' => $this->post_type, 'author' => $user->ID, 'posts_per_page' => $per_page, 'paged' => $page, ); $the_query = new \WP_Query( $pp_args ); if ( $the_query->have_posts() ) { return array( 'forums' => $the_query->posts, 'total' => $the_query->post_count ); } return false; } /** * Delete all forums created by member. * * @param $email_address * @param int $page * * @since BuddyBoss 1.0.0 * * @return array */ function forums_eraser( $email_address, $page = 1 ) { $per_page = 500; // Limit to avoid timeout $page = (int) $page; $user = get_user_by( 'email', $email_address ); if ( false === $user ) { return array( 'items_removed' => false, 'items_retained' => false, 'messages' => array(), 'done' => true, ); } $items_removed = false; $items_retained = false; $messages = array(); $items = $this->get_forums( $user, 1, $per_page ); if ( ! $items ) { return array( 'items_removed' => false, 'items_retained' => false, 'messages' => array(), 'done' => true, ); } $total = isset( $items['total'] ) ? $items['total'] : 0; $forums = ! empty( $items['forums'] ) ? $items['forums'] : array(); if ( $total ) { foreach ( (array) $forums as $forum ) { $attachments = get_posts( array( 'post_type' => 'attachment', 'posts_per_page' => - 1, 'post_parent' => $forum->ID, ) ); if ( $attachments ) { foreach ( $attachments as $attachment ) { wp_delete_post( $attachment->ID, true ); } } wp_delete_post( $forum->ID, true ); $items_removed = true; } } $offset = ( $page - 1 ) * $per_page; // Tell core if we have more comments to work on still $done = $total < $offset; return array( 'items_removed' => $items_removed, 'items_retained' => $items_retained, 'messages' => $messages, 'done' => $done, ); } }
Changelog
Version | Description |
---|---|
BuddyBoss 1.0.0 | Introduced. |
Methods
- __construct — BBP_GDPR_Forum constructor.
- erase_exporter — Register Forum data deletion.
- forums_eraser — Delete all forums created by member.
- forums_exporter — Export member created forum data.
- get_forums — Fetch all the user forums.
- register_exporter — Register forum exporter.
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.