fix home page display snd styling
This commit is contained in:
+124
@@ -0,0 +1,124 @@
|
||||
public function submitAbsenceAdmin()
|
||||
{
|
||||
$userId = (int)(session()->get('user_id') ?? 0);
|
||||
if ($userId <= 0) {
|
||||
return redirect()->to('login')->with('error', 'Please log in first.');
|
||||
}
|
||||
|
||||
$semester = (string)($this->semester ?? '');
|
||||
$schoolYear = (string)($this->schoolYear ?? '');
|
||||
if ($schoolYear === '') {
|
||||
return redirect()->to('/administrator/absence')->with('status', 'error')->with('message', 'Semester or school year not configured.');
|
||||
}
|
||||
$semesterResolver = new SemesterRangeService($this->configModel);
|
||||
|
||||
$dates = (array)($this->request->getPost('dates') ?? []);
|
||||
$reasonType = trim((string)($this->request->getPost('reason_type') ?? ''));
|
||||
$reasonText = trim((string)($this->request->getPost('reason') ?? ''));
|
||||
|
||||
if ($reasonText === '') {
|
||||
return redirect()->to('/administrator/absence')
|
||||
->with('status', 'error')
|
||||
->with('message', 'Reason is required.');
|
||||
}
|
||||
|
||||
$reasonBase = ($reasonType !== '') ? strtolower($reasonType) : '';
|
||||
$reason = $reasonBase !== '' ? ($reasonBase . ': ' . $reasonText) : $reasonText;
|
||||
|
||||
$allowedDates = $this->allowedAbsenceDates();
|
||||
$allowedSet = array_fill_keys($allowedDates, true);
|
||||
|
||||
$roleName = $this->userModel->getUserRole($userId) ?: null;
|
||||
|
||||
$saved = 0; $invalid = [];
|
||||
$savedDates = [];
|
||||
$dates = array_values(array_unique(array_map('strval', $dates)));
|
||||
foreach ($dates as $d) {
|
||||
$d = trim((string)$d);
|
||||
if ($d === '') continue;
|
||||
$dt = date_create_from_format('Y-m-d', $d);
|
||||
if (!$dt || $dt->format('Y-m-d') !== $d || empty($allowedSet[$d])) {
|
||||
$invalid[] = $d;
|
||||
continue;
|
||||
}
|
||||
|
||||
$semesterForDate = $semesterResolver->getSemesterForDate($d);
|
||||
if ($semesterForDate === '') {
|
||||
$semesterForDate = $semester;
|
||||
}
|
||||
|
||||
$ok = $this->staffAttendanceModel->upsertOne(
|
||||
userId: $userId,
|
||||
roleName: $roleName,
|
||||
date: $d,
|
||||
semester: $semesterForDate,
|
||||
schoolYear: $schoolYear,
|
||||
status: StaffAttendanceModel::STATUS_ABSENT,
|
||||
reason: $reason,
|
||||
editorId: $userId
|
||||
);
|
||||
if ($ok) { $saved++; $savedDates[] = $d; }
|
||||
}
|
||||
|
||||
if (!empty($invalid)) {
|
||||
return redirect()->to('/administrator/absence')
|
||||
->with('status', 'error')
|
||||
->with('message', 'Invalid dates: ' . implode(', ', $invalid));
|
||||
}
|
||||
|
||||
// Send notification email to principal with request details
|
||||
try {
|
||||
$user = $this->userModel->find($userId) ?: [];
|
||||
$fullName = trim(($user['firstname'] ?? '') . ' ' . ($user['lastname'] ?? '')) ?: 'Administrator';
|
||||
$userEmail = $user['email'] ?? '';
|
||||
$role = $roleName ?: 'admin';
|
||||
$dateList = !empty($savedDates) ? implode(', ', $savedDates) : implode(', ', $dates);
|
||||
|
||||
$subject = sprintf('TimeOff Request: %s (%s) — %s', $fullName, ucfirst((string)$role), $dateList ?: 'No dates');
|
||||
$submittedAt = utc_now();
|
||||
|
||||
$body = '<div style="font-family:Arial,Helvetica,sans-serif;font-size:14px;line-height:1.5;">'
|
||||
. '<h3 style="margin:0 0 8px;">New TimeOff Request</h3>'
|
||||
. '<p style="margin:0 0 12px;">A staff time-off request was submitted from the administrator portal.</p>'
|
||||
. '<table cellpadding="6" cellspacing="0" style="border-collapse:collapse;">'
|
||||
. '<tr><td><strong>Name</strong></td><td>' . esc($fullName) . '</td></tr>'
|
||||
. '<tr><td><strong>Email</strong></td><td>' . esc($userEmail) . '</td></tr>'
|
||||
. '<tr><td><strong>Role</strong></td><td>' . esc((string)$role) . '</td></tr>'
|
||||
. '<tr><td><strong>Semester</strong></td><td>' . esc($semester) . '</td></tr>'
|
||||
. '<tr><td><strong>School Year</strong></td><td>' . esc($schoolYear) . '</td></tr>'
|
||||
. '<tr><td><strong>Reason Type</strong></td><td>' . esc($reasonType ?: '-') . '</td></tr>'
|
||||
. '<tr><td><strong>Reason</strong></td><td>' . esc($reasonText) . '</td></tr>'
|
||||
. '<tr><td><strong>Dates</strong></td><td>' . esc($dateList ?: '-') . '</td></tr>'
|
||||
. '<tr><td><strong>Submitted At</strong></td><td>' . esc($submittedAt) . '</td></tr>'
|
||||
. '</table>'
|
||||
. '</div>';
|
||||
|
||||
$linkService = new StaffTimeOffLinkService();
|
||||
$token = $linkService->createToken([
|
||||
'uid' => $userId,
|
||||
'email' => $userEmail,
|
||||
'name' => $fullName,
|
||||
'role' => $role,
|
||||
'dates' => $dateList ?: '-',
|
||||
'reason' => $reasonText,
|
||||
'reason_type' => $reasonType,
|
||||
'submitted_at' => $submittedAt,
|
||||
'origin' => 'administrator portal',
|
||||
]);
|
||||
$notifyUrl = base_url('timeoff/notify/' . rawurlencode($token));
|
||||
$body .= '<p style="margin-top:16px;">Click <a href="' . esc($notifyUrl) . '">Send confirmation email to '
|
||||
. esc($fullName) . '</a> so the staff member is notified automatically. '
|
||||
. 'This link expires in 14 days.</p>';
|
||||
|
||||
$mailer = \Config\Services::emailService();
|
||||
$principalEmail = env('PRINCIPAL_EMAIL') ?: 'principal@alrahmaisgl.org';
|
||||
$mailer->send($principalEmail, $subject, $body, 'notifications');
|
||||
} catch (\Throwable $e) {
|
||||
log_message('error', 'Failed to send TimeOff email (admin): ' . $e->getMessage());
|
||||
}
|
||||
|
||||
return redirect()->to('/administrator/absence')
|
||||
->with('status', 'success')
|
||||
->with('message', $saved . ' day(s) saved as absent.');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user