Files
alrahma_sunday_school/app/Controllers/TimeOffNotificationController.php
2026-02-10 22:11:06 -05:00

77 lines
3.6 KiB
PHP

<?php
namespace App\Controllers;
use App\Controllers\BaseController;
use App\Libraries\StaffTimeOffLinkService;
class TimeOffNotificationController extends BaseController
{
/**
* Triggered when the principal clicks the confirmation link in the email.
* Sends a courtesy notification to the staff member who submitted the request.
*/
public function notify(string $token = '')
{
$service = new StaffTimeOffLinkService();
$payload = $service->parseToken($token);
if (!$payload) {
return $this->respondHtml('Sorry, this link is invalid or has expired.', 400);
}
$email = trim((string)($payload['email'] ?? ''));
$fullName = trim((string)($payload['name'] ?? ''));
if ($email === '') {
return $this->respondHtml('Unable to notify the requester because their email was not included.', 400);
}
$dates = (string)($payload['dates'] ?? '-');
$role = (string)($payload['role'] ?? 'staff');
$reason = (string)($payload['reason'] ?? '');
$reasonType = (string)($payload['reason_type'] ?? '');
$submittedAt = (string)($payload['submitted_at'] ?? '');
$origin = (string)($payload['origin'] ?? 'staff portal');
try {
$mailer = \Config\Services::emailService();
$subject = 'TimeOff Request - Principal Acknowledgment';
$body = '<div style="font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:1.5;">'
. '<p>Dear ' . esc($fullName ?: 'Staff Member') . ',</p>'
. '<p>This is a courtesy confirmation that your time-off request submitted via the '
. esc($origin) . ' has been reviewed by the principal.</p>'
. '<table cellpadding="6" cellspacing="0" style="border-collapse:collapse;">'
. '<tr><td><strong>Role</strong></td><td>' . esc($role) . '</td></tr>'
. '<tr><td><strong>Dates</strong></td><td>' . esc($dates ?: '-') . '</td></tr>'
. '<tr><td><strong>Reason Type</strong></td><td>' . esc($reasonType ?: '-') . '</td></tr>'
. '<tr><td><strong>Reason</strong></td><td>' . esc($reason ?: '-') . '</td></tr>'
. ($submittedAt !== '' ? '<tr><td><strong>Submitted At</strong></td><td>' . esc($submittedAt) . '</td></tr>' : '')
. '</table>'
. '<p>If you have any follow-up questions, please contact the principal\'s office directly.</p>'
. '<p style="margin-top:16px;">Thank you,<br>Al Rahma School Administration</p>'
. '</div>';
$mailer->send($email, $subject, $body, 'notifications');
} catch (\Throwable $e) {
log_message('error', 'Failed to send TimeOff confirmation to requester: ' . $e->getMessage());
return $this->respondHtml('Something went wrong while sending the confirmation email. Please contact IT for help.', 500);
}
return $this->respondHtml('Confirmation email sent to the requester. You may close this window.');
}
private function respondHtml(string $message, int $statusCode = 200)
{
$html = '<!DOCTYPE html><html><head><meta charset="utf-8"><title>TimeOff</title></head>'
. '<body style="font-family:Arial,Helvetica,sans-serif;padding:24px;">'
. '<p>' . esc($message) . '</p>'
. '</body></html>';
return $this->response
->setStatusCode($statusCode)
->setHeader('Content-Type', 'text/html; charset=UTF-8')
->setBody($html);
}
}