BP_Group_Export
Class BP_Group_Export
Description
Source
File: bp-core/gdpr/class-bp-group-export.php
final class BP_Group_Export extends BP_Export { /** * Get the instance of this class. * * @return Controller|null */ public static function instance() { static $instance = null; if ( null === $instance ) { $instance = new BP_Group_Export(); $instance->setup( "bp_groups", __( "Groups", 'buddyboss' ) ); } return $instance; } /** * Export member created groups. * * @param $user * @param $page * @param bool $email_address * * @since BuddyBoss 1.0.0 * * @return array */ function process_data( $user, $page, $email_address = false ) { if ( ! $user || is_wp_error( $user ) ) { return $this->response( array(), true ); } $export_items = array(); $data_items = $this->get_data( $user, $page ); foreach ( $data_items['items'] as $item ) { $group_id = "bp_groups"; $group_label = __( "Groups", 'buddyboss' ); $item_id = "{$this->exporter_name}-{$group_id}-{$item->id}"; $avatar = false; $cover_photo = false; if ( function_exists( 'bp_core_fetch_avatar' ) ) { $avatar = bp_core_fetch_avatar( array( 'item_id' => $item->id, 'object' => 'group', 'type' => 'full', 'html' => false, ) ); } if ( function_exists( 'bp_attachments_get_attachment' ) ) { $cover_photo = bp_attachments_get_attachment( 'url', array( 'item_id' => $item->id, 'type' => 'cover-image', 'object_dir' => 'groups', ) ); } if ( empty( $avatar ) || ! $avatar ) { $avatar = __( 'N/A', 'buddyboss' ); } if ( empty( $cover_photo ) || ! $cover_photo ) { $cover_photo = __( 'N/A', 'buddyboss' ); } $group_permalink = bp_get_group_permalink( $item ); $data = array( array( 'name' => __( 'Group Name', 'buddyboss' ), 'value' => $item->name, ), array( 'name' => __( 'Group Description', 'buddyboss' ), 'value' => $item->description, ), array( 'name' => __( 'Group slug', 'buddyboss' ), 'value' => $item->slug, ), array( 'name' => __( 'Created Date (GMT)', 'buddyboss' ), 'value' => $item->date_created, ), array( 'name' => __( 'Group Status', 'buddyboss' ), 'value' => ucfirst( $item->status ), ), array( 'name' => __( 'Group Avatar', 'buddyboss' ), 'value' => $avatar, ), array( 'name' => __( 'Group Cover Photo', 'buddyboss' ), 'value' => $cover_photo, ), array( 'name' => __( 'Group URL', 'buddyboss' ), 'value' => $group_permalink, ), ); $metas2export = array(); $metas2export['total_member_count'] = __( 'Total Members', 'buddyboss' ); $metas2export['last_activity'] = __( 'ast Activity', 'buddyboss' ); /** * Filter allow to add additional metas without issues. */ $metas2export = apply_filters( 'buddyboss_bp_gdpr_group_export_metas', $metas2export, $data_items ); /** * Process the metas. */ foreach ( $item->metas as $meta ) { if ( isset( $metas2export[ $meta->meta_key ] ) ) { $value = $this->easy_readable( $meta->meta_value ); // converting it to user friendly. $value = apply_filters( 'buddyboss_bp_gdpr_group_meta_value_format', $value, $meta ); $data[] = array( 'name' => $metas2export[ $meta->meta_key ], 'value' => $value, ); } } $data = apply_filters( 'buddyboss_bp_gdpr_group_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 member created groups. * * @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 ); } $number = $this->items_per_batch; $page = (int) $page; $items_removed = true; $items_retained = false; add_action( 'groups_delete_group', array( $this, 'additional_group_items_delete' ) ); // Remove Group Data for User. groups_remove_data_for_user( $user->ID ); $group_table = $bp->groups->table_name_members; // Delete Invites. $wpdb->query( $wpdb->prepare( "DELETE FROM {$group_table} WHERE inviter_id=%d", $user->ID ) ); $done = true; return $this->response_erase( $items_removed, $done, array(), $items_retained ); } /** * Delete group avatar and cover photo. * * @param $group_id * * @since BuddyBoss 1.0.0 */ function additional_group_items_delete( $group_id ) { /** * @todo add title/description * * @since BuddyBoss 1.0.0 */ do_action( 'buddyboss_bp_gdpr_group_additional_group_items_delete', $group_id ); // delete cover photo bp_attachments_delete_file( array( 'item_id' => $group_id, 'object_dir' => 'groups', 'type' => 'cover-image', ) ); // delete group avatar bp_core_delete_existing_avatar( array( 'item_id' => $group_id, 'object' => "group" ) ); } /** * 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 ); $group_table = $bp->groups->global_tables["table_name"]; $group_members_table = $bp->groups->table_name_members; $table = "{$group_table} item, {$group_members_table} item2"; $query_select = "*"; $query_select_count = "COUNT(item.id)"; $query_where = "item2.user_id=%d AND item2.group_id=item.id AND item2.is_admin=1"; $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 ); // Merge the metas. $items = $this->merge_metas( $items ); return array( "total" => $count, "offset" => $offset, "items" => $items, ); } /** * Fetch all metas and merge into items. * * @param $items * * @since BuddyBoss 1.0.0 * * @return array */ function merge_metas( $items ) { global $wpdb, $bp; $group_meta_table = $bp->groups->global_tables["table_name_groupmeta"]; // get all ids $group_ids = array(); foreach ( $items as $item ) { $group_ids[] = $item->id; } if ( empty( $group_ids ) ) { return array(); } $ids_in = array_fill( 0, count( $group_ids ), '%s' ); $ids_in = join( ',', $ids_in ); $query = $wpdb->prepare( "SELECT *FROM {$group_meta_table} WHERE group_id in ({$ids_in})", $group_ids ); $results = $wpdb->get_results( $query ); $metas_by_group = array(); foreach ( $results as $result ) { $metas_by_group[ $result->group_id ][] = $result; } // merge into items foreach ( $items as $item_key => $item ) { $items[ $item_key ]->metas = ( isset( $metas_by_group[ $item->id ] ) ) ? $metas_by_group[ $item->id ] : array(); } return $items; } }
Methods
- additional_group_items_delete — Delete group avatar and cover photo.
- get_data — Get data & count of messages by page and user.
- instance — Get the instance of this class.
- merge_metas — Fetch all metas and merge into items.
- process_data — Export member created groups.
- process_erase — Delete member created groups.
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.