update controllers logic

This commit is contained in:
root
2026-04-23 00:04:35 -04:00
parent 1977a513df
commit ca4ba272fc
353 changed files with 13402 additions and 1301 deletions
@@ -0,0 +1,83 @@
<?php
namespace App\Http\Controllers\Api\Staff;
use App\Http\Controllers\Controller;
use App\Services\Email\EmailDispatchService;
use App\Services\Staff\StaffTimeOffLinkService;
use Illuminate\Http\Response;
/**
* Public principal acknowledgment link — sends courtesy confirmation to the requester.
*/
class TimeOffNotificationController extends Controller
{
public function __construct(
private StaffTimeOffLinkService $tokens,
private EmailDispatchService $mail,
) {}
public function notify(string $token): Response
{
$payload = $this->tokens->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 {
$subject = 'TimeOff Request - Principal Acknowledgment';
$body = '<div style="font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:1.5;">'
.'<p>Dear '.e($fullName !== '' ? $fullName : 'Staff Member').',</p>'
.'<p>This is a courtesy confirmation that your time-off request submitted via the '
.e($origin).' has been reviewed by the principal.</p>'
.'<table cellpadding="6" cellspacing="0" style="border-collapse:collapse;">'
.'<tr><td><strong>Role</strong></td><td>'.e($role).'</td></tr>'
.'<tr><td><strong>Dates</strong></td><td>'.e($dates !== '' ? $dates : '-').'</td></tr>'
.'<tr><td><strong>Reason Type</strong></td><td>'.e($reasonType !== '' ? $reasonType : '-').'</td></tr>'
.'<tr><td><strong>Reason</strong></td><td>'.e($reason !== '' ? $reason : '-').'</td></tr>'
.($submittedAt !== '' ? '<tr><td><strong>Submitted At</strong></td><td>'.e($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>';
$this->mail->send($email, $subject, $body, 'notifications');
} catch (\Throwable $e) {
logger()->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): Response
{
$html = '<!DOCTYPE html><html><head><meta charset="utf-8"><title>TimeOff</title></head>'
.'<body style="font-family:Arial,Helvetica,sans-serif;padding:24px;">'
.'<p>'.e($message).'</p>'
.'</body></html>';
return response($html, $statusCode, [
'Content-Type' => 'text/html; charset=UTF-8',
]);
}
}