You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
2.2 KiB
PHP

<?php
require_once 'includes/db.php';
require_once 'includes/auth.php';
checkAuth();
function sanitizeCsvCell($value) {
$value = (string)$value;
if ($value !== '' && preg_match('/^[=\+\-@]/', $value) === 1) {
return "'" . $value;
}
return $value;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['order_ids'])) {
requireCsrfToken();
$ids = $_POST['order_ids'];
// Tworzenie znaków zapytania do zapytania SQL (np. ?, ?, ?)
$placeholders = str_repeat('?,', count($ids) - 1) . '?';
// Pobieranie zaznaczonych rekordów
$sql = "SELECT * FROM " . DB_PREFIX . "orders WHERE id IN ($placeholders) ORDER BY id DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute($ids);
$orders = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Ustawienia nagłówków dla przeglądarki, by wymusić pobieranie pliku
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=zamowienia_' . date('Ymd_Hi') . '.csv');
// Wymuszenie BOM (dzięki temu Excel od razu poprawnie przeczyta polskie znaki w UTF-8)
echo "\xEF\xBB\xBF";
$output = fopen('php://output', 'w');
// Zapisanie nagłówków kolumn (zwróć uwagę na średniki, które lubi polski Excel)
fputcsv($output, ['ID', 'Produkt', 'Part Number', 'Ilosc', 'Miejsce zakupu', 'Cena szt.', 'Data dostawy', 'Odbiorca', 'Adres dostawy', 'Status', 'Notatki'], ';');
// Zapisywanie danych
foreach ($orders as $o) {
fputcsv($output, [
$o['id'],
sanitizeCsvCell($o['product_name']),
sanitizeCsvCell($o['part_number']),
$o['quantity'],
sanitizeCsvCell($o['purchase_place']),
number_format($o['price_per_unit'], 2, ',', ''), // Cena z przecinkiem dla Excela
sanitizeCsvCell($o['delivery_date']),
sanitizeCsvCell($o['recipient']),
sanitizeCsvCell($o['delivery_address']),
sanitizeCsvCell($o['status']),
sanitizeCsvCell($o['notes'])
], ';');
}
fclose($output);
exit();
}
// Jeśli ktoś wszedł tu bezpośrednio lub nic nie zaznaczył, wracamy do indexu
header('Location: index.php');
exit();
?>