46 lines
1.4 KiB
Plaintext
46 lines
1.4 KiB
Plaintext
private function allowedAbsenceDates(): array
|
|
{
|
|
$todayStr = local_date(utc_now(), 'Y-m-d');
|
|
try { $today = new \DateTimeImmutable($todayStr); } catch (\Throwable $e) { $today = new \DateTimeImmutable(); }
|
|
|
|
$sy = (string)($this->schoolYear ?? '');
|
|
$startYear = null; $endYear = null;
|
|
if (preg_match('/^(\d{4})\D+(\d{4})$/', $sy, $m)) {
|
|
$startYear = (int)$m[1];
|
|
$endYear = (int)$m[2];
|
|
} else {
|
|
$cy = (int)date('Y');
|
|
$cm = (int)date('n');
|
|
if ($cm >= 9) { // Sep-Dec
|
|
$startYear = $cy;
|
|
$endYear = $cy + 1;
|
|
} else {
|
|
$startYear = $cy - 1;
|
|
$endYear = $cy;
|
|
}
|
|
}
|
|
|
|
try {
|
|
$start = new \DateTimeImmutable(sprintf('%04d-09-01', $startYear));
|
|
$end = new \DateTimeImmutable(sprintf('%04d-05-31', $endYear));
|
|
} catch (\Throwable $e) {
|
|
return [];
|
|
}
|
|
|
|
if ($start < $today) {
|
|
$start = $today;
|
|
}
|
|
|
|
$dates = [];
|
|
for ($cursor = $start; $cursor <= $end; $cursor = $cursor->modify('+1 day')) {
|
|
if ((int)$cursor->format('w') === 0) { // Sunday
|
|
$dates[] = $cursor->format('Y-m-d');
|
|
}
|
|
}
|
|
return $dates;
|
|
}
|
|
|
|
/**
|
|
* Admin self-service absence/vacation page (same features as teacher page)
|
|
*/
|