diff --git a/_bulk_print_attendance_list.php b/_bulk_print_attendance_list.php
new file mode 100644
index 0000000..b9e1966
--- /dev/null
+++ b/_bulk_print_attendance_list.php
@@ -0,0 +1,112 @@
+ ['message' => $error_message], 'correlation_id' => $correlation_id]);
+ exit;
+}
+
+// Input validation
+$person_ids = json_decode($_POST['person_ids'] ?? '[]', true);
+error_log($correlation_id . ': Received ' . count($person_ids) . ' person_ids.');
+
+if (empty($person_ids)) {
+ if (ob_get_length()) ob_end_clean();
+ http_response_code(400);
+ header('Content-Type: application/json');
+ $error_message = 'Nie wybrano żadnych osób.';
+ error_log($correlation_id . ': ' . $error_message);
+ echo json_encode(['error' => ['message' => $error_message], 'correlation_id' => $correlation_id]);
+ exit;
+}
+
+$workflowEngine = new WorkflowEngine();
+$peopleDetails = $workflowEngine->getPeopleDetails($person_ids);
+error_log($correlation_id . ': Fetched ' . count($peopleDetails) . ' rows from database.');
+
+class PDF extends tFPDF
+{
+ function __construct($orientation = 'P', $unit = 'mm', $size = 'A4')
+ {
+ parent::__construct($orientation, $unit, $size);
+ $this->AddFont('DejaVu', '', 'DejaVuSans.ttf', true);
+ $this->AddFont('DejaVu', 'B', 'DejaVuSans-Bold.ttf', true);
+ $this->SetFont('DejaVu', '', 14);
+ }
+
+ function generateAttendanceList($people)
+ {
+ $this->AddPage();
+
+ // Title
+ $this->SetFont('DejaVu', 'B', 20);
+ $this->Cell(0, 10, 'Lista obecności', 0, 1, 'C');
+ $this->Ln(2);
+
+ // Subtitle - Date
+ $this->SetFont('DejaVu', '', 10);
+ $this->Cell(0, 10, date('Y-m-d H:i'), 0, 1, 'C');
+ $this->Ln(10);
+
+ // Table Header
+ $this->SetFont('DejaVu', 'B', 12);
+ $this->SetFillColor(240, 240, 240);
+ $this->Cell($this->GetPageWidth() * 0.7, 10, 'Imię i nazwisko', 1, 0, 'L', true);
+ $this->Cell($this->GetPageWidth() * 0.3 - $this->lMargin - $this->rMargin, 10, 'Podpis', 1, 1, 'L', true);
+
+ // Table Body
+ $this->SetFont('DejaVu', '', 12);
+ foreach ($people as $person) {
+ $name = $person['first_name'] . ' ' . $person['last_name'];
+ $this->Cell($this->GetPageWidth() * 0.7, 15, $name, 1, 0, 'L');
+ $this->Cell($this->GetPageWidth() * 0.3 - $this->lMargin - $this->rMargin, 15, '', 1, 1, 'L');
+ }
+ }
+}
+
+$pdf = new PDF();
+$pdf->generateAttendanceList($peopleDetails);
+
+$pdfData = $pdf->Output('S');
+error_log($correlation_id . ': PDF data generated. Length: ' . strlen($pdfData) . ' bytes.');
+
+if (empty($pdfData)) {
+ if (ob_get_length()) ob_end_clean();
+ http_response_code(500);
+ header('Content-Type: application/json');
+ $error_message = 'Failed to generate PDF data.';
+ error_log($correlation_id . ': ' . $error_message);
+ echo json_encode(['error' => ['message' => $error_message], 'correlation_id' => $correlation_id]);
+ exit;
+}
+
+if (ob_get_length()) {
+ ob_end_clean();
+}
+
+header('Content-Type: application/pdf');
+header('Content-Disposition: attachment; filename="lista-obecnosci.pdf"');
+header('Content-Transfer-Encoding: binary');
+header('Cache-Control: private, max-age=0, must-revalidate');
+header('Pragma: public');
+header('Content-Length: ' . strlen($pdfData));
+
+echo $pdfData;
+exit;
\ No newline at end of file
diff --git a/_bulk_print_badges.php b/_bulk_print_badges.php
index 8822d03..6e52f8d 100644
--- a/_bulk_print_badges.php
+++ b/_bulk_print_badges.php
@@ -1,17 +1,16 @@
getPeopleDetails($person_ids);
error_log($correlation_id . ': Fetched ' . count($peopleDetails) . ' rows from database.');
-class PDF extends FPDF
+class PDF extends tFPDF
{
function __construct($orientation='P', $unit='mm', $size='A4')
{
parent::__construct($orientation, $unit, $size);
- $this->AddFont('DejaVu','','DejaVuSans.php');
- $this->AddFont('DejaVu','B','DejaVuSans-Bold.php');
+ $this->AddFont('DejaVu','','DejaVuSans.ttf',true);
+ $this->AddFont('DejaVu','B','DejaVuSans-Bold.ttf',true);
+ $this->SetFont('DejaVu', '', 14);
}
function generateBadge($person) {
diff --git a/index.php b/index.php
index a2a65fa..2083052 100644
--- a/index.php
+++ b/index.php
@@ -108,6 +108,7 @@ $status_colors = [
Bulk Initialize Instances
Drukuj badge
+ Drukuj listę obecności