__('Fluent Support Tickets Exporter', 'fluent-support'), 'callback' => [$this, 'exportTickets'], ); $exporters['fluent-support-conversations'] = array( 'exporter_friendly_name' => __('Fluent Support Conversations Exporter', 'fluent-support'), 'callback' => [$this, 'exportConversations'], ); $exporters['fluent-support-customer'] = array( 'exporter_friendly_name' => __('Fluent Support Customer Exporter', 'fluent-support'), 'callback' => [$this, 'exportCustomerData'], ); return $exporters; } // Registering erasers to erase data public function registerEraser($erasers) { $erasers['fluent-support'] = array( 'eraser_friendly_name' => __('Fluent Support Personal Data Eraser', 'fluent-support'), 'callback' => [$this, 'erasePersonalData'], ); return $erasers; } // Method to handle tickets data exporter public function exportTickets($user_email, $page = 1) { $customer = Customer::where('email', $user_email)->select(['id'])->first(); if (!$customer) { return [ 'data' => [], 'done' => true ]; } $tickets = Ticket::with(['customer', 'agent', 'product', 'mailbox', 'tags', 'attachments']) ->where('customer_id', $customer->id) ->get(); $data = []; foreach ($tickets as $ticket) { $data[] = [ 'group_id' => 'fluent-support-tickets', 'group_label' => __('Fluent Support Tickets', 'fluent-support'), 'item_id' => 'ticket-' . $ticket->id, 'data' => [ [ 'name' => __('Ticket ID', 'fluent-support'), 'value' => $ticket->id, ], [ 'name' => __('Ticket Title', 'fluent-support'), 'value' => $ticket->title, ], [ 'name' => __('Ticket Content', 'fluent-support'), 'value' => $ticket->content, ], [ 'name' => __('Ticket Attachments', 'fluent-support'), 'value' => $this->ticketAttachments($ticket->attachments), ], [ 'name' => __('Ticket Product', 'fluent-support'), 'value' => isset($ticket->product) ? $ticket->product->title : '', ], [ 'name' => __('Ticket Tags', 'fluent-support'), 'value' => $this->ticketTags($ticket->tags), ], [ 'name' => __('Ticket Status', 'fluent-support'), 'value' => $ticket->status, ], [ 'name' => __('Ticket Priority', 'fluent-support'), 'value' => $ticket->priority, ], [ 'name' => __('Ticket Created At', 'fluent-support'), 'value' => $ticket->created_at, ] ], ]; } /** * Filter to modify tickets exportable data * @param array $data * @param object $tickets * @return array Exportable data * @since v1.5.5 */ $exportableData = apply_filters('fluent_support/exportable_tickets_data', $data, $tickets); return [ 'data' => $exportableData, 'done' => true, ]; } // Method to handle conversations data exporter public function exportConversations($user_email, $page = 1) { $customer = Customer::where('email', $user_email)->select(['id'])->first(); if (!$customer) { return [ 'data' => [], 'done' => true ]; } $conversations = Conversation::with(['attachments']) ->where('person_id', $customer->id) ->where('conversation_type', 'response') ->get(); $data = []; foreach ($conversations as $conversation) { $data[] = [ 'group_id' => 'fluent-support-conversations', 'group_label' => __('Fluent Support Conversations', 'fluent-support'), 'item_id' => 'conversation-' . $conversation->id, 'data' => [ [ 'name' => __('Conversation ID', 'fluent-support'), 'value' => $conversation->id, ], [ 'name' => __('Ticket ID', 'fluent-support'), 'value' => $conversation->ticket_id, ], [ 'name' => __('Conversation Content', 'fluent-support'), 'value' => $conversation->content, ], [ 'name' => __('Conversation Attachments', 'fluent-support'), 'value' => $this->convAttachments($conversation->attachments), ], [ 'name' => __('Conversation Created At', 'fluent-support'), 'value' => $conversation->created_at, ] ], ]; } /** * Filter to modify conversations exportable data * @param array $data * @param object $conversations * @return array Exportable data * @since v1.5.5 */ $exportableData = apply_filters('fluent_support/exportable_conversations_data', $data, $conversations); return [ 'data' => $exportableData, 'done' => true, ]; } // Method to handle customers data exporter public function exportCustomerData($user_email, $page = 1) { $customer = Customer::where('email', $user_email)->first(); if (!$customer) { return [ 'data' => [], 'done' => true ]; } $data[] = [ 'group_id' => 'fluent-support-customer', 'group_label' => __('Fluent Support Customer', 'fluent-support'), 'item_id' => 'customer-' . $customer->id, 'data' => [ [ 'name' => __('Customer ID', 'fluent-support'), 'value' => $customer->id, ], [ 'name' => __('First Name', 'fluent-support'), 'value' => $customer->first_name, ], [ 'name' => __('Last Name', 'fluent-support'), 'value' => $customer->last_name, ], [ 'name' => __('Email', 'fluent-support'), 'value' => $customer->email, ], [ 'name' => __('Status', 'fluent-support'), 'value' => $customer->status, ], [ 'name' => __('IP Address', 'fluent-support'), 'value' => $customer->ip_address, ], [ 'name' => __('Last IP Address', 'fluent-support'), 'value' => $customer->last_ip_address, ], [ 'name' => __('Address Line One', 'fluent-support'), 'value' => $customer->address_line_1 ], [ 'name' => __('Address Line Two', 'fluent-support'), 'value' => $customer->address_line_2 ], [ 'name' => __('City', 'fluent-support'), 'value' => $customer->city ], [ 'name' => __('Zip', 'fluent-support'), 'value' => $customer->zip ], [ 'name' => __('State', 'fluent-support'), 'value' => $customer->state ], [ 'name' => __('Country', 'fluent-support'), 'value' => $customer->country ], [ 'name' => __('Created At', 'fluent-support'), 'value' => $customer->created_at ], ], ]; /** * Filter to modify customer exportable data * @param array $data * @param object $customer * @return array Exportable data * @since v1.5.5 */ $exportableData = apply_filters('fluent_support/exportable_customer_data', $data, $customer); return [ 'data' => $exportableData, 'done' => true, ]; } public function ticketAttachments($attachments) { $text = ''; foreach ($attachments as $attachment) { $text .= '' . esc_html($attachment->title) . ',
'; } return $text; } public function convAttachments($attachments) { $text = ''; foreach ($attachments as $attachment) { $text .= '' . esc_html($attachment->title) . ',
'; } return $text; } public function ticketTags($tags) { $ticketTags = ''; foreach ($tags as $tag) { $ticketTags .= $tag->title . ', '; } return $ticketTags; } // Method to handle data eraser public function erasePersonalData($user_email, $page = 1) { $customer = Customer::where('email', $user_email)->select(['id'])->first(); if (!$customer) { return [ 'items_removed' => true, 'items_retained' => false, 'messages' => [], 'done' => true ]; } $tickets = Ticket::where('customer_id', $customer->id)->get(); foreach ($tickets as $ticket) { $ticket->deleteTicket(); } $customer->delete(); return [ 'items_removed' => true, 'items_retained' => false, 'messages' => [], 'done' => true, ]; } }