db = new Devis_Pro_DB(); $this->settings = get_option('devis_pro_settings'); } /** * Exporter en CSV */ public function export_csv($filters = array()) { $args = array( 'status' => isset($filters['status']) && $filters['status'] !== '' ? intval($filters['status']) : null, 'date_from' => isset($filters['date_from']) ? sanitize_text_field($filters['date_from']) : '', 'date_to' => isset($filters['date_to']) ? sanitize_text_field($filters['date_to']) : '', 'per_page' => 10000, 'offset' => 0 ); $devis = $this->db->get_all_devis($args); // Headers CSV $filename = 'devis-export-' . gmdate('Y-m-d-His') . '.csv'; header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=' . $filename); header('Pragma: no-cache'); header('Expires: 0'); $output = fopen('php://output', 'w'); // BOM UTF-8 pour Excel fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF)); // En-têtes $headers = array( 'ID', __('Request date', 'torlann'), __('Civility', 'torlann'), __('Last name', 'torlann'), __('First name', 'torlann'), __('Email', 'torlann'), __('Telephone', 'torlann'), __('Postcode', 'torlann'), __('City', 'torlann'), __('Product', 'torlann'), __('Quantity', 'torlann'), __('Message', 'torlann'), __('Customer budget', 'torlann'), __('Status', 'torlann'), __('Quote amount', 'torlann'), __('Language', 'torlann'), __('Reminders sent', 'torlann'), __('Final reminder', 'torlann'), ); fputcsv($output, $headers, ';'); // Données foreach ($devis as $d) { $status_label = class_exists( 'Torlann_Quote_Statuses' ) ? Torlann_Quote_Statuses::resolve_label( $this->settings['statuses'][ $d->status ] ?? array() ) : __('Unknown', 'torlann'); $product_label = torlann_get_devis_product_label($d); $quantity = torlann_get_devis_quantity($d); $row = array( $d->id, $d->demande, $d->civ, $d->nom, $d->prenom, $d->email, $d->tel, $d->cp, $d->ville, $product_label, $quantity > 0 ? $quantity : '', $d->message, $d->budget, $status_label, $d->montant, $d->langue, $d->reminders_count, $d->last_reminder ); fputcsv($output, $row, ';'); } fclose($output); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_fclose -- binary/local file IO. exit; } /** * Exporter en PDF (via HTML) */ public function export_pdf_single($devis_id) { Torlann_Documents::download_quote_document((int) $devis_id, 'quote'); } /** * Obtenir le titre du voyage */ private function get_voyage_title($voyage_data) { $ids = explode("-;-", $voyage_data); $titles = array(); foreach ($ids as $id) { if (!empty($id) && is_numeric($id)) { $title = get_the_title($id); if ($title) { $titles[] = $title; } } } return !empty($titles) ? implode(', ', $titles) : $voyage_data; } }