34760-vm/export.php
Flatlogic Bot d47e350516 v1
2025-10-07 16:17:37 +00:00

66 lines
2.1 KiB
PHP

<?php
session_start();
require_once 'db/config.php';
// Ensure admin is logged in
if (!isset($_SESSION['user_id']) || !in_array('Admin', $_SESSION['user_roles'])) {
header('Location: login.php');
exit;
}
// Fetch all submissions with their answers
$stmt = db()->query("SELECT
s.id as submission_id,
s.name as submitter_name,
s.email as submitter_email,
s.created_at as submission_date,
sv.title as survey_title,
q.question_text,
a.answer_text
FROM feedback_submissions s
JOIN surveys sv ON s.survey_id = sv.id
LEFT JOIN survey_answers a ON s.id = a.submission_id
LEFT JOIN survey_questions q ON a.question_id = q.id
ORDER BY s.created_at DESC, q.created_at ASC");
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Set headers for CSV download
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=feedback_submissions_' . date('Y-m-d') . '.csv');
$output = fopen('php://output', 'w');
// Get all unique questions in order
$questions_stmt = db()->query("SELECT DISTINCT question_text FROM survey_questions ORDER BY created_at ASC");
$question_headers = $questions_stmt->fetchAll(PDO::FETCH_COLUMN);
// Output the column headings
$headers = array_merge(['Submission ID', 'Submitter', 'Email', 'Date', 'Survey'], $question_headers);
fputcsv($output, $headers);
// Process the results
$submissions = [];
foreach ($results as $row) {
$submissions[$row['submission_id']]['details'] = [
'submission_id' => $row['submission_id'],
'submitter_name' => $row['submitter_name'],
'submitter_email' => $row['submitter_email'],
'submission_date' => $row['submission_date'],
'survey_title' => $row['survey_title']
];
$submissions[$row['submission_id']]['answers'][$row['question_text']] = $row['answer_text'];
}
// Write rows to CSV
foreach ($submissions as $submission_id => $data) {
$row = $data['details'];
foreach ($question_headers as $question) {
$row[] = $data['answers'][$question] ?? '';
}
fputcsv($output, $row);
}
fclose($output);
exit;
?>