Przejdź do głównej zawartości

25. System wniosków i podań

System wniosków i podań

Aplikacja umożliwiająca uczniom składanie wniosków (usprawiedliwienia, zwolnienia z zajęć, podania) oraz nauczycielom lub administratorom ich przeglądanie i rozpatrywanie z adnotacją.

  • Modelowania przepływu pracy (workflow): złożony → w rozpatrzeniu → zatwierdzony/odrzucony
  • Walidacji dat (zakres nieobecności)
  • Filtrowania po typie wniosku i statusie
  • Obsługi sesji PHP (rozdzielenie ról)
  • Historii zmian statusu wniosku
  1. Formularz wniosku — typ (usprawiedliwienie/zwolnienie/podanie), dane ucznia, treść, daty
  2. Lista wniosków — widok ucznia: własne wnioski; widok admin: wszystkie
  3. Rozpatrywanie — zmiana statusu na zatwierdzony/odrzucony z komentarzem
  4. Filtrowanie — po typie, statusie i dacie złożenia
  5. Powiadomienie o decyzji — widoczny komunikat przy zmianie statusu
{
"requests": [
{
"id": 1,
"type": "usprawiedliwienie",
"student_name": "Anna Nowak",
"student_class": "2TI",
"content": "Proszę o usprawiedliwienie nieobecności z powodu choroby.",
"date_from": "2026-02-03",
"date_to": "2026-02-05",
"status": "pending",
"reviewer_note": null,
"submitted_at": "2026-02-06 10:00:00",
"reviewed_at": null
}
]
}

Wymagane funkcje:

  • Formularz złożenia wniosku (typ, dane, treść)
  • Lista wniosków z datą i statusem
  • Oznaczanie wniosku jako zatwierdzony lub odrzucony
  • Walidacja pól wymaganych, zapis do JSON
Ocena: 3.0
  • Folderwnioski/
    • index.php
    • zloz.php
    • lista.php
    • rozpatrz.php
    • statystyki.php
    • Folderincludes/
      • functions.php
      • auth.php
      • validation.php
    • Folderdata/
      • requests.json
    • Foldercss/
      • style.css

Walidacja zakresu dat:

$dateFrom = $_POST['date_from'] ?? '';
$dateTo = $_POST['date_to'] ?? '';
$dtFrom = DateTime::createFromFormat('Y-m-d', $dateFrom);
$dtTo = DateTime::createFromFormat('Y-m-d', $dateTo);
if (!$dtFrom || !$dtTo) {
$errors[] = "Podaj prawidłowy format daty (RRRR-MM-DD)";
} elseif ($dtTo < $dtFrom) {
$errors[] = "Data końca nie może być wcześniejsza niż data początku";
}

Zmiana statusu wniosku:

function reviewRequest(array &$requests, int $id, string $status, string $note): bool {
$allowed = ['approved', 'rejected'];
if (!in_array($status, $allowed)) return false;
foreach ($requests as &$req) {
if ($req['id'] === $id && $req['status'] === 'pending') {
$req['status'] = $status;
$req['reviewer_note'] = htmlspecialchars($note);
$req['reviewed_at'] = date('Y-m-d H:i:s');
return true;
}
}
return false;
}