66 lines
2.1 KiB
PHP
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;
|
|
?>
|