' .'' .''.$t.'' .'' .'
' .$bodyInnerHtml .'
'; } /** Late slip PDF body (Dompdf). */ public static function slipPdfHtml(array $entry, array $lines, array $page): string { $name = htmlspecialchars((string) ($entry['student_name'] ?? ''), ENT_QUOTES, 'UTF-8'); $blocks = []; foreach ($lines as $line) { $blocks[] = '
' .htmlspecialchars((string) $line, ENT_QUOTES, 'UTF-8').'
'; } return '' .'' .'
'.$name.'
' .implode('', $blocks) .''; } /** Below-60 / performance alert email body (wrapped in {@see document()} by caller). */ public static function belowSixtyInnerHtml(array $d): string { $scores = $d['scores'] ?? []; $rows = ''; if (is_array($scores)) { foreach ($scores as $row) { if (! is_array($row)) { continue; } $label = htmlspecialchars((string) ($row['label'] ?? $row['name'] ?? ''), ENT_QUOTES, 'UTF-8'); $val = htmlspecialchars((string) ($row['value'] ?? $row['score'] ?? ''), ENT_QUOTES, 'UTF-8'); $rows .= ''.$label.'' .''.$val.''; } } $comment = htmlspecialchars((string) ($d['comment'] ?? ''), ENT_QUOTES, 'UTF-8'); $title = htmlspecialchars((string) ($d['title'] ?? 'Performance alert'), ENT_QUOTES, 'UTF-8'); return '

'.$title.'

' .'

Dear '.htmlspecialchars((string) ($d['parent_name'] ?? 'Parent/Guardian'), ENT_QUOTES, 'UTF-8').',

' .'

Student: '.htmlspecialchars((string) ($d['student_name'] ?? ''), ENT_QUOTES, 'UTF-8').'

' .'

Class: '.htmlspecialchars((string) ($d['class_section_name'] ?? ''), ENT_QUOTES, 'UTF-8').'

' .(($d['semester'] ?? '') !== '' || ($d['school_year'] ?? '') !== '' ? '

'.htmlspecialchars(trim((string) ($d['semester'] ?? '').' '.(string) ($d['school_year'] ?? '')), ENT_QUOTES, 'UTF-8').'

' : '') .($rows !== '' ? ''.$rows.'
' : '') .($comment !== '' ? '

Comment: '.$comment.'

' : ''); } /** Broadcast email outer shell (replaces emails.broadcast_wrapper). */ public static function broadcastCompose( string $subject, string $contentHtml, string $preheader, string $ctaText, string $ctaUrl ): string { $pre = $preheader !== '' ? '

'.htmlspecialchars($preheader, ENT_QUOTES, 'UTF-8').'

' : ''; $cta = ($ctaText !== '' && $ctaUrl !== '') ? '

' .htmlspecialchars($ctaText, ENT_QUOTES, 'UTF-8').'

' : ''; return self::document($subject, $pre.'
'.$contentHtml.'
'.$cta); } }