Compare commits

...

2 Commits

Author SHA1 Message Date
root c294d7bed7 fix logo 2026-05-26 23:14:55 -04:00
root 5ed65a867c report cadr and trophy 2026-05-26 05:11:10 -04:00
40 changed files with 278 additions and 160 deletions
+160 -75
View File
@@ -1076,7 +1076,8 @@ class GradingController extends Controller
$requestedSemester = trim((string)($this->request->getGet('semester') ?? '')); $requestedSemester = trim((string)($this->request->getGet('semester') ?? ''));
$requestedYear = trim((string)($this->request->getGet('school_year') ?? '')); $requestedYear = trim((string)($this->request->getGet('school_year') ?? ''));
$semester = $requestedSemester !== '' ? $requestedSemester : ($configuredSemester !== '' ? $configuredSemester : 'Fall'); $isYearMode = (strtolower($requestedSemester) === 'year');
$semester = $isYearMode ? 'year' : ($requestedSemester !== '' ? $requestedSemester : ($configuredSemester !== '' ? $configuredSemester : 'Fall'));
$schoolYear = $requestedYear !== '' ? $requestedYear : $configuredYear; $schoolYear = $requestedYear !== '' ? $requestedYear : $configuredYear;
$schoolYears = $this->getSchoolYearsForScores($schoolYear); $schoolYears = $this->getSchoolYearsForScores($schoolYear);
@@ -1090,6 +1091,8 @@ class GradingController extends Controller
'schoolYear' => $schoolYear, 'schoolYear' => $schoolYear,
'schoolYears' => $schoolYears, 'schoolYears' => $schoolYears,
'canViewGrading' => $canViewGrading, 'canViewGrading' => $canViewGrading,
'isYearMode' => $isYearMode,
'showAllSemesterOption' => true,
]); ]);
} }
@@ -1762,14 +1765,16 @@ class GradingController extends Controller
private function fetchBelowSixtyRows(string $schoolYear, string $semester): array private function fetchBelowSixtyRows(string $schoolYear, string $semester): array
{ {
$semesterKey = strtolower(trim($semester)); $isYearMode = strtolower(trim($semester)) === 'year';
$rows = $this->db->table('semester_scores ss') $semesterKey = $isYearMode ? '' : strtolower(trim($semester));
$builder = $this->db->table('semester_scores ss')
->select([ ->select([
's.id AS student_id', 's.id AS student_id',
's.school_id', 's.school_id',
's.firstname', 's.firstname',
's.lastname', 's.lastname',
'cs.class_section_name', 'cs.class_section_name',
'ss.semester',
'ss.homework_avg', 'ss.homework_avg',
'ss.project_avg', 'ss.project_avg',
'ss.participation_score', 'ss.participation_score',
@@ -1784,11 +1789,17 @@ class GradingController extends Controller
->join('classSection cs', 'cs.class_section_id = ss.class_section_id', 'left') ->join('classSection cs', 'cs.class_section_id = ss.class_section_id', 'left')
->where('s.is_active', 1) ->where('s.is_active', 1)
->where('ss.school_year', $schoolYear) ->where('ss.school_year', $schoolYear)
->where("LOWER(TRIM(ss.semester))", $semesterKey)
->where('ss.semester_score IS NOT NULL', null, false) ->where('ss.semester_score IS NOT NULL', null, false)
->where('ss.semester_score <', 60) ->where('ss.semester_score <', 60);
if (!$isYearMode) {
$builder->where("LOWER(TRIM(ss.semester))", $semesterKey);
}
$rows = $builder
->orderBy('s.lastname', 'ASC') ->orderBy('s.lastname', 'ASC')
->orderBy('s.firstname', 'ASC') ->orderBy('s.firstname', 'ASC')
->orderBy('ss.semester', 'ASC')
->get() ->get()
->getResultArray(); ->getResultArray();
@@ -1804,19 +1815,22 @@ class GradingController extends Controller
$commentMap = []; $commentMap = [];
if (!empty($studentIds)) { if (!empty($studentIds)) {
$commentRows = $this->db->table('score_comments') $commentBuilder = $this->db->table('score_comments')
->select('student_id, comment, created_at') ->select('student_id, semester, comment, created_at')
->where('score_type', 'general') ->where('score_type', 'general')
->where('school_year', $schoolYear) ->where('school_year', $schoolYear)
->where("LOWER(TRIM(semester))", $semesterKey)
->whereIn('student_id', $studentIds) ->whereIn('student_id', $studentIds)
->orderBy('created_at', 'DESC') ->orderBy('created_at', 'DESC');
->get() if (!$isYearMode) {
->getResultArray(); $commentBuilder->where("LOWER(TRIM(semester))", $semesterKey);
}
$commentRows = $commentBuilder->get()->getResultArray();
foreach ($commentRows as $row) { foreach ($commentRows as $row) {
$sid = (int)($row['student_id'] ?? 0); $sid = (int)($row['student_id'] ?? 0);
if ($sid > 0 && !isset($commentMap[$sid])) { $sem = strtolower(trim((string)($row['semester'] ?? '')));
$commentMap[$sid] = (string)($row['comment'] ?? ''); $key = $sid . '_' . $sem;
if ($sid > 0 && !isset($commentMap[$key])) {
$commentMap[$key] = (string)($row['comment'] ?? '');
} }
} }
} }
@@ -1824,21 +1838,24 @@ class GradingController extends Controller
$statusMap = []; $statusMap = [];
$noteMap = []; $noteMap = [];
if (!empty($studentIds)) { if (!empty($studentIds)) {
$flagRows = $this->db->table('current_flag') $flagBuilder = $this->db->table('current_flag')
->select('student_id, flag_state, open_description, close_description') ->select('student_id, semester, flag_state, open_description, close_description')
->where('flag', 'grade') ->where('flag', 'grade')
->where('school_year', $schoolYear) ->where('school_year', $schoolYear)
->where("LOWER(TRIM(semester))", $semesterKey) ->whereIn('student_id', $studentIds);
->whereIn('student_id', $studentIds) if (!$isYearMode) {
->get() $flagBuilder->where("LOWER(TRIM(semester))", $semesterKey);
->getResultArray(); }
$flagRows = $flagBuilder->get()->getResultArray();
foreach ($flagRows as $row) { foreach ($flagRows as $row) {
$sid = (int)($row['student_id'] ?? 0); $sid = (int)($row['student_id'] ?? 0);
if ($sid <= 0) continue; if ($sid <= 0) continue;
$statusMap[$sid] = (string)($row['flag_state'] ?? ''); $sem = strtolower(trim((string)($row['semester'] ?? '')));
$key = $sid . '_' . $sem;
$statusMap[$key] = (string)($row['flag_state'] ?? '');
$openNote = trim((string)($row['open_description'] ?? '')); $openNote = trim((string)($row['open_description'] ?? ''));
$closeNote = trim((string)($row['close_description'] ?? '')); $closeNote = trim((string)($row['close_description'] ?? ''));
$noteMap[$sid] = [ $noteMap[$key] = [
'open' => $openNote, 'open' => $openNote,
'closed' => $closeNote, 'closed' => $closeNote,
]; ];
@@ -1847,10 +1864,12 @@ class GradingController extends Controller
foreach ($rows as &$row) { foreach ($rows as &$row) {
$sid = (int)($row['student_id'] ?? 0); $sid = (int)($row['student_id'] ?? 0);
$row['comment'] = $commentMap[$sid] ?? ''; $sem = strtolower(trim((string)($row['semester'] ?? '')));
$flagState = strtolower(trim((string)($statusMap[$sid] ?? ''))); $key = $sid . '_' . $sem;
$row['comment'] = $commentMap[$key] ?? '';
$flagState = strtolower(trim((string)($statusMap[$key] ?? '')));
$row['status'] = ($flagState === 'closed' || $flagState === 'canceled') ? 'Closed' : 'Open'; $row['status'] = ($flagState === 'closed' || $flagState === 'canceled') ? 'Closed' : 'Open';
$noteBag = $noteMap[$sid] ?? ['open' => '', 'closed' => '']; $noteBag = $noteMap[$key] ?? ['open' => '', 'closed' => ''];
$rawNote = $row['status'] === 'Closed' ? (string)$noteBag['closed'] : (string)$noteBag['open']; $rawNote = $row['status'] === 'Closed' ? (string)$noteBag['closed'] : (string)$noteBag['open'];
if ($rawNote !== '') { if ($rawNote !== '') {
$lines = preg_split('/\R/', $rawNote); $lines = preg_split('/\R/', $rawNote);
@@ -2539,20 +2558,17 @@ class GradingController extends Controller
public function allDecisions() public function allDecisions()
{ {
$configuredSemester = (string)$this->semester;
$configuredYear = (string)$this->schoolYear; $configuredYear = (string)$this->schoolYear;
$semester = trim((string)($this->request->getGet('semester') ?? ''));
$schoolYear = trim((string)($this->request->getGet('school_year') ?? '')); $schoolYear = trim((string)($this->request->getGet('school_year') ?? ''));
if ($semester === '') $semester = $configuredSemester !== '' ? $configuredSemester : 'Fall';
if ($schoolYear === '') $schoolYear = $configuredYear; if ($schoolYear === '') $schoolYear = $configuredYear;
$schoolYears = $this->getSchoolYearsForScores($schoolYear); $schoolYears = $this->getSchoolYearsForScores($schoolYear);
// Load saved decisions for this term // Load saved year decisions (semester='year') for this school year
$decModel = new StudentDecisionModel(); $decModel = new StudentDecisionModel();
$saved = $decModel $saved = $decModel
->where('semester', $semester) ->where('semester', 'year')
->where('school_year', $schoolYear) ->where('school_year', $schoolYear)
->findAll(); ->findAll();
$savedMap = []; $savedMap = [];
@@ -2560,70 +2576,109 @@ class GradingController extends Controller
$savedMap[(int)$s['student_id']] = $s; $savedMap[(int)$s['student_id']] = $s;
} }
// All semester_scores rows for this term (one per student) // Fetch Fall and Spring semester_scores per student for this school year
$semKey = strtolower(trim($semester)); $allScoreRows = $this->db->table('semester_scores ss')
$scoreRows = $this->db->table('semester_scores ss')
->select([ ->select([
's.id AS student_id', 's.id AS student_id',
's.school_id', 's.school_id',
's.firstname', 's.firstname',
's.lastname', 's.lastname',
'cs.class_section_name', 'cs.class_section_name',
'LOWER(TRIM(ss.semester)) AS sem_key',
'ss.semester_score', 'ss.semester_score',
]) ])
->join('students s', 's.id = ss.student_id', 'inner') ->join('students s', 's.id = ss.student_id', 'inner')
->join('classSection cs', 'cs.class_section_id = ss.class_section_id', 'left') ->join('classSection cs', 'cs.class_section_id = ss.class_section_id', 'left')
->where('s.is_active', 1) ->where('s.is_active', 1)
->where('ss.school_year', $schoolYear) ->where('ss.school_year', $schoolYear)
->where("LOWER(TRIM(ss.semester))", $semKey) ->whereIn('LOWER(TRIM(ss.semester))', ['fall', 'spring'])
->where('ss.semester_score IS NOT NULL', null, false) ->where('ss.semester_score IS NOT NULL', null, false)
->orderBy('cs.class_section_name', 'ASC') ->orderBy('cs.class_section_name', 'ASC')
->orderBy('s.lastname', 'ASC') ->orderBy('s.lastname', 'ASC')
->orderBy('s.firstname', 'ASC') ->orderBy('s.firstname', 'ASC')
->get()->getResultArray(); ->get()->getResultArray();
// Pull below-60 decisions // Group by student: keep one base info row + fall/spring scores
$studentMap = [];
foreach ($allScoreRows as $sr) {
$sid = (int)$sr['student_id'];
if (!isset($studentMap[$sid])) {
$studentMap[$sid] = [
'student_id' => $sid,
'school_id' => $sr['school_id'] ?? '',
'firstname' => $sr['firstname'] ?? '',
'lastname' => $sr['lastname'] ?? '',
'class_section_name' => $sr['class_section_name'] ?? '',
'fall_score' => null,
'spring_score' => null,
];
}
$semKey = strtolower(trim((string)($sr['sem_key'] ?? '')));
$val = is_numeric($sr['semester_score']) ? (float)$sr['semester_score'] : null;
if ($semKey === 'fall') {
$studentMap[$sid]['fall_score'] = $val;
} elseif ($semKey === 'spring') {
$studentMap[$sid]['spring_score'] = $val;
}
}
// Pull below-60 decisions for either semester (use worst available)
$belowDecModel = new BelowSixtyDecisionModel(); $belowDecModel = new BelowSixtyDecisionModel();
$belowRows = $belowDecModel $belowRows = $belowDecModel
->where('semester', $semester)
->where('school_year', $schoolYear) ->where('school_year', $schoolYear)
->findAll(); ->findAll();
$belowMap = []; $belowMap = [];
foreach ($belowRows as $b) { foreach ($belowRows as $b) {
$belowMap[(int)$b['student_id']] = $b; $sid = (int)$b['student_id'];
// prefer a non-empty decision over empty
if (!isset($belowMap[$sid]) || (string)($belowMap[$sid]['decision'] ?? '') === '') {
$belowMap[$sid] = $b;
}
} }
// Build rows combining live scores with saved/computed decisions // Build final rows with year_score = (fall + spring) / 2
$rows = []; $rows = [];
foreach ($scoreRows as $sr) { foreach ($studentMap as $sid => $info) {
$sid = (int)$sr['student_id']; $fall = $info['fall_score'];
$score = is_numeric($sr['semester_score']) ? (float)$sr['semester_score'] : null; $spring = $info['spring_score'];
if ($fall !== null && $spring !== null) {
$yearScore = round(($fall + $spring) / 2, 2);
} elseif ($fall !== null) {
$yearScore = $fall;
} elseif ($spring !== null) {
$yearScore = $spring;
} else {
$yearScore = null;
}
if (isset($savedMap[$sid])) { if (isset($savedMap[$sid])) {
$decision = (string)($savedMap[$sid]['decision'] ?? ''); $decision = (string)($savedMap[$sid]['decision'] ?? '');
$source = (string)($savedMap[$sid]['source'] ?? 'auto'); $source = (string)($savedMap[$sid]['source'] ?? 'auto');
$notes = (string)($savedMap[$sid]['notes'] ?? ''); $notes = (string)($savedMap[$sid]['notes'] ?? '');
} elseif ($score !== null && $score >= 60) { } elseif ($yearScore !== null && $yearScore >= 60) {
$decision = 'Pass'; $decision = 'Pass';
$source = 'auto'; $source = 'auto';
$notes = ''; $notes = '';
} elseif ($score !== null && isset($belowMap[$sid])) { } elseif ($yearScore !== null && isset($belowMap[$sid])) {
$decision = (string)($belowMap[$sid]['decision'] ?? ''); $decision = (string)($belowMap[$sid]['decision'] ?? '');
$source = $decision !== '' ? 'manual' : 'pending'; $source = $decision !== '' ? 'manual' : 'pending';
$notes = (string)($belowMap[$sid]['notes'] ?? ''); $notes = (string)($belowMap[$sid]['notes'] ?? '');
} else { } else {
$decision = $score !== null ? '' : ''; $decision = '';
$source = 'pending'; $source = 'pending';
$notes = ''; $notes = '';
} }
$rows[] = [ $rows[] = [
'student_id' => $sid, 'student_id' => $sid,
'school_id' => $sr['school_id'] ?? '', 'school_id' => $info['school_id'],
'firstname' => $sr['firstname'] ?? '', 'firstname' => $info['firstname'],
'lastname' => $sr['lastname'] ?? '', 'lastname' => $info['lastname'],
'class_section_name' => $sr['class_section_name'] ?? '', 'class_section_name' => $info['class_section_name'],
'semester_score' => $score, 'fall_score' => $fall,
'spring_score' => $spring,
'year_score' => $yearScore,
'decision' => $decision, 'decision' => $decision,
'source' => $source, 'source' => $source,
'notes' => $notes, 'notes' => $notes,
@@ -2635,7 +2690,6 @@ class GradingController extends Controller
return view('grading/all_decisions', [ return view('grading/all_decisions', [
'rows' => $rows, 'rows' => $rows,
'semester' => $semester,
'schoolYear' => $schoolYear, 'schoolYear' => $schoolYear,
'schoolYears' => $schoolYears, 'schoolYears' => $schoolYears,
'generated' => $generated, 'generated' => $generated,
@@ -2644,49 +2698,73 @@ class GradingController extends Controller
public function generateAllDecisions() public function generateAllDecisions()
{ {
$semester = trim((string)$this->request->getPost('semester'));
$schoolYear = trim((string)$this->request->getPost('school_year')); $schoolYear = trim((string)$this->request->getPost('school_year'));
if ($semester === '' || $schoolYear === '') { if ($schoolYear === '') {
return redirect()->back()->with('error', 'Missing semester or school year.'); return redirect()->back()->with('error', 'Missing school year.');
} }
$semKey = strtolower(trim($semester)); // Fetch Fall and Spring scores per student
$scoreRows = $this->db->table('semester_scores ss') $allScoreRows = $this->db->table('semester_scores ss')
->select([ ->select([
's.id AS student_id', 's.id AS student_id',
's.firstname', 's.firstname',
's.lastname', 's.lastname',
'cs.class_section_name', 'cs.class_section_name',
'LOWER(TRIM(ss.semester)) AS sem_key',
'ss.semester_score', 'ss.semester_score',
]) ])
->join('students s', 's.id = ss.student_id', 'inner') ->join('students s', 's.id = ss.student_id', 'inner')
->join('classSection cs', 'cs.class_section_id = ss.class_section_id', 'left') ->join('classSection cs', 'cs.class_section_id = ss.class_section_id', 'left')
->where('s.is_active', 1) ->where('s.is_active', 1)
->where('ss.school_year', $schoolYear) ->where('ss.school_year', $schoolYear)
->where("LOWER(TRIM(ss.semester))", $semKey) ->whereIn('LOWER(TRIM(ss.semester))', ['fall', 'spring'])
->where('ss.semester_score IS NOT NULL', null, false) ->where('ss.semester_score IS NOT NULL', null, false)
->get()->getResultArray(); ->get()->getResultArray();
if (empty($scoreRows)) { if (empty($allScoreRows)) {
return redirect()->back()->with('error', 'No semester scores found for this selection.'); return redirect()->back()->with('error', 'No semester scores found for this school year.');
} }
// Pull all below-60 decisions for this term // Group by student
$studentMap = [];
foreach ($allScoreRows as $sr) {
$sid = (int)$sr['student_id'];
if (!isset($studentMap[$sid])) {
$studentMap[$sid] = [
'firstname' => $sr['firstname'] ?? '',
'lastname' => $sr['lastname'] ?? '',
'class_section_name' => $sr['class_section_name'] ?? '',
'fall_score' => null,
'spring_score' => null,
];
}
$semKey = strtolower(trim((string)($sr['sem_key'] ?? '')));
$val = is_numeric($sr['semester_score']) ? (float)$sr['semester_score'] : null;
if ($semKey === 'fall') {
$studentMap[$sid]['fall_score'] = $val;
} elseif ($semKey === 'spring') {
$studentMap[$sid]['spring_score'] = $val;
}
}
// Pull below-60 decisions for any semester of this year
$belowDecModel = new BelowSixtyDecisionModel(); $belowDecModel = new BelowSixtyDecisionModel();
$belowRows = $belowDecModel $belowRows = $belowDecModel
->where('semester', $semester)
->where('school_year', $schoolYear) ->where('school_year', $schoolYear)
->findAll(); ->findAll();
$belowMap = []; $belowMap = [];
foreach ($belowRows as $b) { foreach ($belowRows as $b) {
$belowMap[(int)$b['student_id']] = $b; $sid = (int)$b['student_id'];
if (!isset($belowMap[$sid]) || (string)($belowMap[$sid]['decision'] ?? '') === '') {
$belowMap[$sid] = $b;
}
} }
// Load existing saved decisions to upsert // Load existing year decisions to upsert
$decModel = new StudentDecisionModel(); $decModel = new StudentDecisionModel();
$existing = $decModel $existing = $decModel
->where('semester', $semester) ->where('semester', 'year')
->where('school_year', $schoolYear) ->where('school_year', $schoolYear)
->findAll(); ->findAll();
$existingMap = []; $existingMap = [];
@@ -2695,16 +2773,23 @@ class GradingController extends Controller
} }
$userId = (int)(session()->get('user_id') ?? 0) ?: null; $userId = (int)(session()->get('user_id') ?? 0) ?: null;
$now = utc_now(); $savedCount = 0;
$saved = 0;
foreach ($scoreRows as $sr) { foreach ($studentMap as $sid => $info) {
$sid = (int)$sr['student_id']; $fall = $info['fall_score'];
$score = is_numeric($sr['semester_score']) ? (float)$sr['semester_score'] : null; $spring = $info['spring_score'];
if ($score === null) continue; if ($fall !== null && $spring !== null) {
$yearScore = round(($fall + $spring) / 2, 2);
} elseif ($fall !== null) {
$yearScore = $fall;
} elseif ($spring !== null) {
$yearScore = $spring;
} else {
continue;
}
if ($score >= 60) { if ($yearScore >= 60) {
$decision = 'Pass'; $decision = 'Pass';
$source = 'auto'; $source = 'auto';
$notes = null; $notes = null;
@@ -2720,10 +2805,10 @@ class GradingController extends Controller
$payload = [ $payload = [
'student_id' => $sid, 'student_id' => $sid,
'semester' => $semester, 'semester' => 'year',
'school_year' => $schoolYear, 'school_year' => $schoolYear,
'class_section_name' => $sr['class_section_name'] ?? null, 'class_section_name' => $info['class_section_name'] ?? null,
'semester_score' => $score, 'semester_score' => $yearScore,
'decision' => $decision, 'decision' => $decision,
'source' => $source, 'source' => $source,
'notes' => $notes, 'notes' => $notes,
@@ -2735,12 +2820,12 @@ class GradingController extends Controller
} else { } else {
$decModel->insert($payload); $decModel->insert($payload);
} }
$saved++; $savedCount++;
} }
$query = http_build_query(['semester' => $semester, 'school_year' => $schoolYear]); $query = http_build_query(['school_year' => $schoolYear]);
return redirect()->to(base_url('grading/decisions') . '?' . $query) return redirect()->to(base_url('grading/decisions') . '?' . $query)
->with('status', "Decisions generated for {$saved} students."); ->with('status', "Decisions generated for {$savedCount} students.");
} }
public function getScoreComment() public function getScoreComment()
@@ -73,19 +73,6 @@ class ReportCardsController extends PrintablesBaseController
$semesters = array_values(array_filter(array_map(static fn($r) => (string)($r['semester'] ?? ''), $rs))); $semesters = array_values(array_filter(array_map(static fn($r) => (string)($r['semester'] ?? ''), $rs)));
} catch (\Throwable $e) { } catch (\Throwable $e) {
} }
try {
$rs2 = $this->db->table('student_class')
->select('DISTINCT semester', false)
->where('school_year', $year)
->where('semester IS NOT NULL', null, false)
->orderBy('semester', 'ASC')
->get()->getResultArray();
foreach ($rs2 as $r) {
$val = (string)($r['semester'] ?? '');
if ($val !== '' && !in_array($val, $semesters, true)) $semesters[] = $val;
}
} catch (\Throwable $e) {
}
// Ensure standard options are present even if data is missing (so Spring can be selected) // Ensure standard options are present even if data is missing (so Spring can be selected)
$defaults = array_values(array_filter([(string)($this->semester ?? ''), 'Fall', 'Spring'], static fn($v) => $v !== '')); $defaults = array_values(array_filter([(string)($this->semester ?? ''), 'Fall', 'Spring'], static fn($v) => $v !== ''));
foreach ($defaults as $d) { foreach ($defaults as $d) {
+1 -1
View File
@@ -44,7 +44,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -362,7 +362,7 @@ $overallAccuracy = $totalPredicted > 0 ? round($totalConfirmed / $totalPredicted
$rank = 0; $rank = 0;
foreach ($classResults as $cls): foreach ($classResults as $cls):
foreach ($cls['students'] as $s): foreach ($cls['students'] as $s):
if ($s['status'] === 'none') continue; if (!in_array($s['status'], ['confirmed', 'surprise'], true)) continue;
$rank++; $rank++;
$isMale = strtolower($s['gender'] ?? '') === 'male'; $isMale = strtolower($s['gender'] ?? '') === 'male';
$statusLabel = match ($s['status']) { $statusLabel = match ($s['status']) {
+1 -1
View File
@@ -48,7 +48,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -14,7 +14,7 @@
<?= csrf_field() ?> <?= csrf_field() ?>
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 180px; height: 120px;"> <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
+1 -1
View File
@@ -48,7 +48,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -11,7 +11,7 @@
.verify-card { max-width: 520px; margin: 60px auto; } .verify-card { max-width: 520px; margin: 60px auto; }
.badge-valid { background: #198754; } .badge-valid { background: #198754; }
.badge-invalid { background: #dc3545; } .badge-invalid { background: #dc3545; }
.cert-logo { max-height: 70px; } .cert-logo { width: 70px; height: 70px; border-radius: 50%; object-fit: cover; }
.field-label { font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; color: #6c757d; } .field-label { font-size: .8rem; text-transform: uppercase; letter-spacing: .05em; color: #6c757d; }
.field-value { font-size: 1.05rem; font-weight: 500; } .field-value { font-size: 1.05rem; font-weight: 500; }
</style> </style>
+1 -1
View File
@@ -45,7 +45,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -44,7 +44,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -4,7 +4,7 @@
<div class="modal-content rounded-4 shadow border-0" style="max-width: 600px; margin: auto;"> <div class="modal-content rounded-4 shadow border-0" style="max-width: 600px; margin: auto;">
<div class="modal-body text-center p-5"> <div class="modal-body text-center p-5">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="Logo" <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="Logo"
style="width: 180px; height: 120px;" class="mb-4"> style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;" class="mb-4">
<h5 class="modal-title text-danger mb-3" id="blockedLabel">Access Blocked</h5> <h5 class="modal-title text-danger mb-3" id="blockedLabel">Access Blocked</h5>
<p class="lead mb-3">Too many password reset attempts have been made.</p> <p class="lead mb-3">Too many password reset attempts have been made.</p>
<p>Please try again after 24 hours or contact support if you need urgent assistance.</p> <p>Please try again after 24 hours or contact support if you need urgent assistance.</p>
+1 -1
View File
@@ -5,7 +5,7 @@
<div class="bg-white p-5 rounded-5 shadow registration-form container" style="max-width: 600px; width: 100%;"> <div class="bg-white p-5 rounded-5 shadow registration-form container" style="max-width: 600px; width: 100%;">
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 180px; height: 120px;"> <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
+1 -1
View File
@@ -44,7 +44,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+36 -21
View File
@@ -5,11 +5,30 @@
<div class="wrapper"> <div class="wrapper">
<h2 class="text-center mt-4 mb-4">Student Decisions — All Students</h2> <h2 class="text-center mt-4 mb-4">Student Decisions — All Students</h2>
<?= $this->include('partials/academic_filter') ?> <!-- School Year filter only -->
<form method="get" class="row g-2 align-items-center justify-content-center mb-3">
<div class="col-auto"><label class="form-label mb-0">School year</label></div>
<div class="col-auto">
<select name="school_year" class="form-select form-select-sm" style="min-width: 180px;">
<?php $years = isset($schoolYears) && is_array($schoolYears) ? $schoolYears : []; ?>
<?php foreach ($years as $y):
$val = is_array($y) && isset($y['school_year']) ? (string)$y['school_year'] : (string)$y; ?>
<option value="<?= esc($val) ?>" <?= ($schoolYear === $val ? 'selected' : '') ?>><?= esc($val) ?></option>
<?php endforeach; ?>
<?php if (empty($years) && $schoolYear !== ''): ?>
<option value="<?= esc($schoolYear) ?>" selected><?= esc($schoolYear) ?></option>
<?php endif; ?>
</select>
</div>
<div class="col-auto">
<button type="submit" class="btn btn-secondary btn-sm">Apply</button>
<a class="btn btn-outline-secondary btn-sm" href="?">Reset</a>
</div>
</form>
<div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2"> <div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2">
<div class="text-muted"> <div class="text-muted">
<?= esc(ucfirst($semester ?? '')) ?> • <?= esc($schoolYear ?? '') ?> <?= esc($schoolYear ?? '') ?>
<?php if ($generated): ?> <?php if ($generated): ?>
<span class="badge bg-success ms-2">Saved</span> <span class="badge bg-success ms-2">Saved</span>
<?php else: ?> <?php else: ?>
@@ -17,10 +36,6 @@
<?php endif; ?> <?php endif; ?>
</div> </div>
<div class="d-flex gap-2 flex-wrap"> <div class="d-flex gap-2 flex-wrap">
<a class="btn btn-outline-secondary btn-sm"
href="<?= site_url('grading/below-60/decisions?' . http_build_query(['semester' => $semester, 'school_year' => $schoolYear])) ?>">
Below-60 Decisions
</a>
<a class="btn btn-outline-secondary btn-sm" href="<?= base_url('grading') ?>"> <a class="btn btn-outline-secondary btn-sm" href="<?= base_url('grading') ?>">
Grading Grading
</a> </a>
@@ -43,22 +58,18 @@
<!-- Generate / Regenerate button --> <!-- Generate / Regenerate button -->
<form method="post" action="<?= site_url('grading/decisions/generate') ?>" class="mb-3"> <form method="post" action="<?= site_url('grading/decisions/generate') ?>" class="mb-3">
<?= csrf_field() ?> <?= csrf_field() ?>
<input type="hidden" name="semester" value="<?= esc($semester ?? '') ?>">
<input type="hidden" name="school_year" value="<?= esc($schoolYear ?? '') ?>"> <input type="hidden" name="school_year" value="<?= esc($schoolYear ?? '') ?>">
<button type="submit" class="btn btn-primary"> <button type="submit" class="btn btn-primary">
<?= $generated ? 'Regenerate Decisions' : 'Generate Decisions' ?> <?= $generated ? 'Regenerate Decisions' : 'Generate Decisions' ?>
</button> </button>
<span class="text-muted small ms-2"> <span class="text-muted small ms-2">
Scores ≥ 60 → <strong>Pass</strong> (auto) &nbsp;|&nbsp; Year score ≥ 60 → <strong>Pass</strong> (auto) &nbsp;|&nbsp;
Scores &lt; 60 → pulled from Year score &lt; 60 → pulled from below-60 decisions
<a href="<?= site_url('grading/below-60/decisions?' . http_build_query(['semester' => $semester, 'school_year' => $schoolYear])) ?>">
Below-60 Decisions
</a>
</span> </span>
</form> </form>
<?php if (empty($rows)): ?> <?php if (empty($rows)): ?>
<div class="alert alert-info">No semester scores found for this selection.</div> <div class="alert alert-info">No semester scores found for this school year.</div>
<?php else: ?> <?php else: ?>
<?php <?php
@@ -76,7 +87,6 @@
'pending' => ['bg-warning-subtle text-warning-emphasis', 'Pending'], 'pending' => ['bg-warning-subtle text-warning-emphasis', 'Pending'],
]; ];
// Stats
$stats = ['Pass' => 0, 'Other' => 0, 'Pending' => 0]; $stats = ['Pass' => 0, 'Other' => 0, 'Pending' => 0];
foreach ($rows as $r) { foreach ($rows as $r) {
if ($r['decision'] === 'Pass') $stats['Pass']++; if ($r['decision'] === 'Pass') $stats['Pass']++;
@@ -112,7 +122,9 @@
<tr> <tr>
<th>Student Name</th> <th>Student Name</th>
<th>Section</th> <th>Section</th>
<th class="text-center">Score</th> <th class="text-center">Fall Score</th>
<th class="text-center">Spring Score</th>
<th class="text-center">Year Score</th>
<th class="text-center">Decision</th> <th class="text-center">Decision</th>
<th class="text-center">Source</th> <th class="text-center">Source</th>
<th>Notes</th> <th>Notes</th>
@@ -121,23 +133,26 @@
<tbody> <tbody>
<?php foreach ($rows as $row): ?> <?php foreach ($rows as $row): ?>
<?php <?php
$score = $row['semester_score']; $yearScore = $row['year_score'];
$decision = (string)($row['decision'] ?? ''); $decision = (string)($row['decision'] ?? '');
$source = (string)($row['source'] ?? 'pending'); $source = (string)($row['source'] ?? 'pending');
$scoreVal = is_numeric($score) ? (float)$score : null; $yearVal = is_numeric($yearScore) ? (float)$yearScore : null;
$rowClass = ''; $rowClass = '';
if ($scoreVal !== null && $scoreVal < 60) { if ($yearVal !== null && $yearVal < 60) {
$rowClass = $scoreVal < 50 ? 'grade-red' : 'grade-orange'; $rowClass = $yearVal < 50 ? 'grade-red' : 'grade-orange';
} }
$badge = $decisionBadge[$decision] ?? null; $badge = $decisionBadge[$decision] ?? null;
[$srcCls, $srcLabel] = $sourceBadge[$source] ?? ['bg-light text-muted', $source]; [$srcCls, $srcLabel] = $sourceBadge[$source] ?? ['bg-light text-muted', $source];
$studentName = trim((string)($row['firstname'] ?? '') . ' ' . (string)($row['lastname'] ?? '')); $studentName = trim((string)($row['firstname'] ?? '') . ' ' . (string)($row['lastname'] ?? ''));
$fmt = fn($v) => is_numeric($v) ? number_format((float)$v, 2) : '—';
?> ?>
<tr class="<?= esc($rowClass) ?>"> <tr class="<?= esc($rowClass) ?>">
<td><?= esc($studentName ?: 'N/A') ?></td> <td><?= esc($studentName ?: 'N/A') ?></td>
<td><?= esc($row['class_section_name'] ?? '—') ?></td> <td><?= esc($row['class_section_name'] ?? '—') ?></td>
<td class="text-center"><?= esc($fmt($row['fall_score'] ?? null)) ?></td>
<td class="text-center"><?= esc($fmt($row['spring_score'] ?? null)) ?></td>
<td class="text-center fw-semibold"> <td class="text-center fw-semibold">
<?= $scoreVal !== null ? esc(number_format($scoreVal, 2)) : '—' ?> <?= esc($fmt($yearVal)) ?>
</td> </td>
<td class="text-center"> <td class="text-center">
<?php if ($decision !== '' && $badge): ?> <?php if ($decision !== '' && $badge): ?>
@@ -188,7 +203,7 @@
order: [[1, 'asc'], [0, 'asc']], order: [[1, 'asc'], [0, 'asc']],
pageLength: 100, pageLength: 100,
lengthMenu: [25, 50, 100, 200], lengthMenu: [25, 50, 100, 200],
columnDefs: [{ orderable: false, targets: [5] }] columnDefs: [{ orderable: false, targets: [7] }]
}); });
} catch (_) {} } catch (_) {}
}); });
+15 -3
View File
@@ -9,13 +9,15 @@
<div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2"> <div class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-2">
<div class="text-muted"> <div class="text-muted">
<?= esc(ucfirst($semester ?? '')) ?> • <?= esc($schoolYear ?? '') ?> <?= !empty($isYearMode) ? 'Whole Year' : esc(ucfirst($semester ?? '')) ?> • <?= esc($schoolYear ?? '') ?>
</div> </div>
<div class="d-flex gap-2"> <div class="d-flex gap-2">
<?php if (empty($isYearMode)): ?>
<a class="btn btn-outline-primary btn-sm" <a class="btn btn-outline-primary btn-sm"
href="<?= site_url('grading/below-60/decisions?' . http_build_query(['semester' => $semester ?? '', 'school_year' => $schoolYear ?? ''])) ?>"> href="<?= site_url('grading/below-60/decisions?' . http_build_query(['semester' => $semester ?? '', 'school_year' => $schoolYear ?? ''])) ?>">
Decisions Decisions
</a> </a>
<?php endif; ?>
<?php if (!empty($canViewGrading)): ?> <?php if (!empty($canViewGrading)): ?>
<a class="btn btn-outline-secondary btn-sm" href="<?= base_url('grading') ?>"> <a class="btn btn-outline-secondary btn-sm" href="<?= base_url('grading') ?>">
Back to Grading Back to Grading
@@ -47,6 +49,7 @@
<tr> <tr>
<th>Student Name</th> <th>Student Name</th>
<th>Section</th> <th>Section</th>
<?php if (!empty($isYearMode)): ?><th>Semester</th><?php endif; ?>
<th>Hwk Avg</th> <th>Hwk Avg</th>
<th>Project Avg</th> <th>Project Avg</th>
<th>Participation</th> <th>Participation</th>
@@ -54,10 +57,12 @@
<th>PTAP Score</th> <th>PTAP Score</th>
<th>Attendance</th> <th>Attendance</th>
<th>Midterm Score</th> <th>Midterm Score</th>
<th><?= strcasecmp($semester ?? '', 'fall') === 0 ? '1st Semester Score' : 'Semester Score' ?></th> <th><?= !empty($isYearMode) ? 'Semester Score' : (strcasecmp($semester ?? '', 'fall') === 0 ? '1st Semester Score' : 'Semester Score') ?></th>
<?php if (empty($isYearMode)): ?>
<th>Status</th> <th>Status</th>
<th>Email Parent</th> <th>Email Parent</th>
<th>Schedule Meeting</th> <th>Schedule Meeting</th>
<?php endif; ?>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -76,9 +81,13 @@
$studentName = trim((string)($row['firstname'] ?? '') . ' ' . (string)($row['lastname'] ?? '')); $studentName = trim((string)($row['firstname'] ?? '') . ' ' . (string)($row['lastname'] ?? ''));
?> ?>
<?php $isClosed = ($row['status'] ?? 'Open') === 'Closed'; ?> <?php $isClosed = ($row['status'] ?? 'Open') === 'Closed'; ?>
<?php $rowSemester = ucfirst(strtolower(trim((string)($row['semester'] ?? ($semester ?? ''))))); ?>
<tr class="<?= esc($scoreClass) ?>"> <tr class="<?= esc($scoreClass) ?>">
<td><?= esc($studentName !== '' ? $studentName : 'N/A') ?></td> <td><?= esc($studentName !== '' ? $studentName : 'N/A') ?></td>
<td><?= esc($row['class_section_name'] ?? '—') ?></td> <td><?= esc($row['class_section_name'] ?? '—') ?></td>
<?php if (!empty($isYearMode)): ?>
<td class="text-center"><?= esc($rowSemester) ?></td>
<?php endif; ?>
<td class="text-center"><?= $displayScore($row['homework_avg'] ?? null) ?></td> <td class="text-center"><?= $displayScore($row['homework_avg'] ?? null) ?></td>
<td class="text-center"><?= $displayScore($row['project_avg'] ?? null) ?></td> <td class="text-center"><?= $displayScore($row['project_avg'] ?? null) ?></td>
<td class="text-center"><?= $displayScore($row['participation_score'] ?? null) ?></td> <td class="text-center"><?= $displayScore($row['participation_score'] ?? null) ?></td>
@@ -87,6 +96,7 @@
<td class="text-center"><?= $displayScore($row['attendance_score'] ?? null) ?></td> <td class="text-center"><?= $displayScore($row['attendance_score'] ?? null) ?></td>
<td class="text-center"><?= $displayScore($row['midterm_exam_score'] ?? null) ?></td> <td class="text-center"><?= $displayScore($row['midterm_exam_score'] ?? null) ?></td>
<td class="text-center"><?= $displayScore($row['semester_score'] ?? null) ?></td> <td class="text-center"><?= $displayScore($row['semester_score'] ?? null) ?></td>
<?php if (empty($isYearMode)): ?>
<td class="text-center"> <td class="text-center">
<form method="post" action="<?= site_url('grading/below-60/status') ?>" class="d-flex align-items-center gap-2 justify-content-center"> <form method="post" action="<?= site_url('grading/below-60/status') ?>" class="d-flex align-items-center gap-2 justify-content-center">
<?= csrf_field() ?> <?= csrf_field() ?>
@@ -121,6 +131,7 @@
</a> </a>
<?php endif; ?> <?php endif; ?>
</td> </td>
<?php endif; ?>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</tbody> </tbody>
@@ -147,8 +158,9 @@
const table = $('.below-sixty-dt'); const table = $('.below-sixty-dt');
if (!table.length) return; if (!table.length) return;
try { try {
const semesterOffset = <?= !empty($isYearMode) ? '1' : '0' ?>;
table.DataTable({ table.DataTable({
order: [[8, 'asc']], order: [[8 + semesterOffset, 'asc']],
pageLength: 100, pageLength: 100,
lengthMenu: [10, 25, 50, 100, 200] lengthMenu: [10, 25, 50, 100, 200]
}); });
+1 -1
View File
@@ -412,7 +412,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 60px; width: 80px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 60px; width: 60px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title"></h1> <h1 class="m-0 ms-2 green-title"></h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -57,7 +57,7 @@
<body> <body>
<div class="email-container"> <div class="email-container">
<div class="email-nopicture"> <div class="email-nopicture">
<img src="https://alrahmaisgl.org/assets/images/alrahma_logo.png" alt="" style="width: 150px; height: 110px"> <img src="https://alrahmaisgl.org/assets/images/alrahma_logo.png" alt="" style="width: 110px; height: 110px; border-radius: 50%; object-fit: cover;">
</div> </div>
<div class="email-body"> <div class="email-body">
+1
View File
@@ -172,6 +172,7 @@
#navbarManagement[data-mgmt-menu-mode="dark"] .navbar-toggler-icon { filter: invert(1) brightness(2); } #navbarManagement[data-mgmt-menu-mode="dark"] .navbar-toggler-icon { filter: invert(1) brightness(2); }
.logout-btn { border-color: var(--mgmt-primary) !important; color: var(--mgmt-primary) !important; } .logout-btn { border-color: var(--mgmt-primary) !important; color: var(--mgmt-primary) !important; }
.logout-btn:hover { background-color: var(--mgmt-primary) !important; color: #fff !important; } .logout-btn:hover { background-color: var(--mgmt-primary) !important; color: #fff !important; }
.school-logo-circle { border-radius: 50%; object-fit: cover; }
/* Sidebar (hover to reveal) */ /* Sidebar (hover to reveal) */
#navbarManagement.mgmt-sidebar { #navbarManagement.mgmt-sidebar {
+1 -1
View File
@@ -1,7 +1,7 @@
<!-- navbar.php --> <!-- navbar.php -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" class="school-logo-circle" style="height: 40px; width: 40px; object-fit: cover; border-radius: 50%;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+3
View File
@@ -54,6 +54,9 @@ $classSectionVal = (string)($classSectionId ?? ($_GET['class_section_id'] ?? '')
<div class="col-auto"> <div class="col-auto">
<select name="semester" class="form-select form-select-sm" style="min-width: 140px;"> <select name="semester" class="form-select form-select-sm" style="min-width: 140px;">
<option value="">—</option> <option value="">—</option>
<?php if (!empty($showAllSemesterOption)): ?>
<option value="year" <?= (strcasecmp($semVal, 'year') === 0 ? 'selected' : '') ?>>Whole Year</option>
<?php endif; ?>
<option value="Fall" <?= (strcasecmp($semVal, 'Fall') === 0 ? 'selected' : '') ?>>Fall</option> <option value="Fall" <?= (strcasecmp($semVal, 'Fall') === 0 ? 'selected' : '') ?>>Fall</option>
<option value="Spring" <?= (strcasecmp($semVal, 'Spring') === 0 ? 'selected' : '') ?>>Spring</option> <option value="Spring" <?= (strcasecmp($semVal, 'Spring') === 0 ? 'selected' : '') ?>>Spring</option>
</select> </select>
+1 -1
View File
@@ -56,7 +56,7 @@
<div class="d-flex align-items-center w-100"> <div class="d-flex align-items-center w-100">
<!-- Brand (left) --> <!-- Brand (left) -->
<a class="navbar-brand col-md-3 col-lg-2 mr-0 px-1" href="/administrator/administratordashboard"> <a class="navbar-brand col-md-3 col-lg-2 mr-0 px-1" href="/administrator/administratordashboard">
<img src="<?= base_url('assets/images/logo.png') ?>" alt="School Icon" style="width: 50px; height: 40px; margin-right: 8px;"> <img src="<?= base_url('assets/images/logo.png') ?>" alt="School Icon" style="width: 40px; height: 40px; border-radius: 50%; object-fit: cover; margin-right: 8px;">
<strong>School Management Dashboard</strong> <strong>School Management Dashboard</strong>
</a> </a>
+1 -1
View File
@@ -15,7 +15,7 @@ Test PASSWORD: 9JC?].qM
<div class="mb-4"> <div class="mb-4">
<a href="<?= base_url('/parent_dashboard') ?>"> <a href="<?= base_url('/parent_dashboard') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="Alrahma Logo" <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="Alrahma Logo"
style="width: 180px; height: 120px;"> style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
+1 -1
View File
@@ -5,7 +5,7 @@
<div class="bg-white p-5 rounded-5 shadow registration-form container" style="max-width: 600px; width: 100%;"> <div class="bg-white p-5 rounded-5 shadow registration-form container" style="max-width: 600px; width: 100%;">
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 180px; height: 120px;"> <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
+1 -1
View File
@@ -43,7 +43,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -48,7 +48,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -48,7 +48,7 @@
<!-- Navbar Start --> <!-- Navbar Start -->
<nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0"> <nav class="navbar navbar-expand-lg bg-white navbar-light sticky-top px-4 px-lg-5 py-lg-0">
<a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center"> <a href="<?= base_url('/') ?>" class="navbar-brand d-flex align-items-center">
<img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px;"> <img src="<?= base_url('images/logo.png') ?>" alt="Al Rahma Sunday School" style="height: 40px; width: 40px; border-radius: 50%; object-fit: cover;">
<h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1> <h1 class="m-0 ms-2 green-title">Al Rahma Sunday School</h1>
</a> </a>
<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse"> <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarCollapse">
+1 -1
View File
@@ -14,7 +14,7 @@
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt=""
style="width: 180px; height: 120px;"> style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
+1 -1
View File
@@ -8,7 +8,7 @@
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt=""
style="width: 180px; height: 120px;"> style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
@@ -4,7 +4,7 @@
<div class="modal-content rounded-4 shadow border-0" style="max-width: 600px; margin: auto;"> <div class="modal-content rounded-4 shadow border-0" style="max-width: 600px; margin: auto;">
<div class="modal-body text-center"> <div class="modal-body text-center">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="Logo" style="width: 180px; height: 120px;"> <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="Logo" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
<h5 class="modal-title text-success" id="emailConfirmLabel">Check Your Email</h5> <h5 class="modal-title text-success" id="emailConfirmLabel">Check Your Email</h5>
<p class="lead mt-3"> <p class="lead mt-3">
A link to reset the password has been sent to this email:<br> A link to reset the password has been sent to this email:<br>
+1 -1
View File
@@ -9,7 +9,7 @@
<div class="modal fade" id="successModal" tabindex="-1" aria-labelledby="successModalLabel" aria-hidden="true"> <div class="modal fade" id="successModal" tabindex="-1" aria-labelledby="successModalLabel" aria-hidden="true">
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 180px; height: 120px;"> <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
<div class="modal-dialog modal-dialog-centered"> <div class="modal-dialog modal-dialog-centered">
<div class="modal-content border-success shadow"> <div class="modal-content border-success shadow">
+1 -1
View File
@@ -20,7 +20,7 @@
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt=""
style="width: 180px; height: 120px;"> style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
+1 -1
View File
@@ -11,7 +11,7 @@
<?= csrf_field() ?> <?= csrf_field() ?>
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 180px; height: 120px;"></a> <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;"></a>
</div> </div>
<h3 class="text-center text-success" style="font-family: Arial, sans-serif;">Reset Your Password</h3> <h3 class="text-center text-success" style="font-family: Arial, sans-serif;">Reset Your Password</h3>
<br> <br>
@@ -6,7 +6,7 @@
<?= csrf_field(); ?> <?= csrf_field(); ?>
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 180px; height: 120px;"> <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
+1 -1
View File
@@ -8,7 +8,7 @@
<?= csrf_field(); ?> <?= csrf_field(); ?>
<div class="text-center mb-4"> <div class="text-center mb-4">
<a href="<?= base_url('/') ?>"> <a href="<?= base_url('/') ?>">
<img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 180px; height: 120px;"> <img src="<?= base_url('assets/images/alrahma_logo.png') ?>" alt="" style="width: 120px; height: 120px; border-radius: 50%; object-fit: cover;">
</a> </a>
</div> </div>
+9 -3
View File
@@ -321,12 +321,18 @@ color: #080808;
.navbar-logo { .navbar-logo {
height: 80px !important; height: 50px !important;
width: auto !important; width: 50px !important;
object-fit: contain; object-fit: cover;
border-radius: 50%;
margin-right: 1rem; margin-right: 1rem;
} }
.school-logo-circle {
border-radius: 50%;
object-fit: cover;
}
.logout-btn { .logout-btn {
font-weight: bold; font-weight: bold;
+3
View File
@@ -22,6 +22,9 @@ html {
.logo { .logo {
width: 100px; width: 100px;
height: 100px;
border-radius: 50%;
object-fit: cover;
margin-bottom: 20px; margin-bottom: 20px;
} }
@@ -22,9 +22,10 @@ body {
} }
.modal-header .logo { .modal-header .logo {
width: 100%; width: 100px;
max-width: 200px; height: 100px;
height: auto; border-radius: 50%;
object-fit: cover;
margin-bottom: 10px; margin-bottom: 10px;
} }
+4 -1
View File
@@ -125,7 +125,10 @@ body.centered {
} }
.logo { .logo {
width: 200px; width: 120px;
height: 120px;
border-radius: 50%;
object-fit: cover;
margin-bottom: 20px; margin-bottom: 20px;
} }
+4 -2
View File
@@ -31,8 +31,10 @@ body {
} }
.left-side .logo { .left-side .logo {
max-width: 100%; width: 120px;
height: auto; height: 120px;
border-radius: 50%;
object-fit: cover;
margin-top: 10px; margin-top: 10px;
} }
+8 -8
View File
@@ -1,22 +1,22 @@
.left-side .logo { .left-side .logo {
width: 100%; width: 120px;
max-width: 300px; height: 120px;
/* Adjustable maximum size */ border-radius: 50%;
height: auto; object-fit: cover;
} }
/* Responsive adjustments for smaller screens */ /* Responsive adjustments for smaller screens */
@media (max-width: 768px) { @media (max-width: 768px) {
.left-side .logo { .left-side .logo {
max-width: 300px; width: 90px;
/* Reduce size on smaller screens */ height: 90px;
} }
} }
@media (max-width: 480px) { @media (max-width: 480px) {
.left-side .logo { .left-side .logo {
max-width: 150px; width: 70px;
/* Further reduce size for very small screens */ height: 70px;
} }
} }