recreate project

This commit is contained in:
root
2026-02-10 22:11:06 -05:00
commit 663c0cdbda
10149 changed files with 1379710 additions and 0 deletions
+164
View File
@@ -0,0 +1,164 @@
<?= $this->extend('layout/main_layout') ?>
<?= $this->section('content') ?>
<?php
function format_score($val): string
{
if ($val === null || $val === '') return 'N/A';
if (is_numeric($val)) {
$out = number_format((float)$val, 1, '.', '');
if (substr($out, -2) === '.0') $out = substr($out, 0, -2);
return $out;
}
return (string)$val;
}
function label_from_type(string $type): string
{
$map = [
'midterm' => 'Midterm',
'final' => 'Final',
'ptap' => 'PTAP',
'attendance' => 'Attendance',
'general' => 'General',
];
$key = strtolower(trim($type));
return $map[$key] ?? ucfirst($key);
}
$yearCounts = [];
if (!empty($rows)) {
foreach ($rows as $r) {
$yearKey = (string)($r['school_year'] ?? '');
if (!isset($yearCounts[$yearKey])) $yearCounts[$yearKey] = 0;
$yearCounts[$yearKey]++;
}
}
$yearRendered = [];
?>
<div class="w-100 py-3 px-3">
<style>
.score-card-table { margin-top: 4px; }
.score-card-table thead th { position: static; }
.score-card-table tbody tr.score-year-alt-0 > * { background-color: #fff1e6 !important; }
.score-card-table tbody tr.score-year-alt-1 > * { background-color: #e8f1ff !important; }
.score-card-table th, .score-card-table td { white-space: nowrap; }
</style>
<div class="d-flex align-items-center justify-content-between flex-wrap gap-2 mb-3">
<div>
<h2 class="mb-0">Student Score Card</h2>
<div class="text-muted small">
<?= esc(($student['firstname'] ?? '') . ' ' . ($student['lastname'] ?? '')) ?>
<?php if (!empty($student['school_id'])): ?>
- ID: <?= esc($student['school_id']) ?>
<?php endif; ?>
</div>
</div>
<a href="<?= site_url('student/score-card/list') ?>" class="btn btn-outline-secondary">Back</a>
</div>
<?php if (empty($rows)): ?>
<div class="alert alert-warning">No semester scores found for this student.</div>
<?php else: ?>
<div class="card shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">
<strong>Scores By Year and Semester</strong>
</div>
<div class="card-body table-responsive pt-2">
<table class="table table-striped table-hover align-middle score-card-table no-mgmt-sticky" data-no-mgmt-sticky="1">
<thead class="table-light">
<tr>
<th>School Year</th>
<th>Year Score</th>
<th>Grade</th>
<th>Semester</th>
<th>Homework Avg</th>
<th>Project Avg</th>
<th>Participation</th>
<th>Test/Quiz Avg</th>
<th>Attendance</th>
<th>PTAP</th>
<th>Midterm</th>
<th>Semester Score</th>
<th>Comments</th>
</tr>
</thead>
<tbody>
<?php
$yearIndex = [];
$yearOrder = 0;
?>
<?php foreach ($rows as $row): ?>
<?php
$sem = strtolower(trim((string)($row['semester'] ?? '')));
$semLabel = $sem !== '' ? ucfirst($sem) : 'N/A';
$semParam = $semLabel !== 'N/A' ? $semLabel : '';
$testQuiz = $row['quiz_avg'] ?? $row['test_avg'] ?? null;
$comments = $row['comments'] ?? [];
$yearKey = (string)($row['school_year'] ?? '');
if ($yearKey !== '' && !isset($yearIndex[$yearKey])) {
$yearIndex[$yearKey] = $yearOrder % 2;
$yearOrder++;
}
$rowAlt = $yearIndex[$yearKey] ?? 0;
?>
<tr class="score-year-alt-<?= (int)$rowAlt ?>">
<?php if (empty($yearRendered[$yearKey])): ?>
<?php $yearRendered[$yearKey] = true; ?>
<td rowspan="<?= (int)($yearCounts[$yearKey] ?? 1) ?>">
<?= esc($row['school_year'] ?? 'N/A') ?>
</td>
<td rowspan="<?= (int)($yearCounts[$yearKey] ?? 1) ?>">
<?= esc(format_score($row['year_score'] ?? null)) ?>
</td>
<td rowspan="<?= (int)($yearCounts[$yearKey] ?? 1) ?>">
<?= esc($row['class_section_name'] ?? '—') ?>
</td>
<?php endif; ?>
<td>
<?php if (!empty($semParam) && !empty($yearKey)): ?>
<?php
$reportUrl = site_url('report-card/student/' . (int)($student['id'] ?? 0))
. '?school_year=' . urlencode($yearKey)
. '&semester=' . urlencode($semParam)
. '&download=1';
?>
<a href="<?= esc($reportUrl) ?>" target="_blank" rel="noopener" class="d-inline-flex align-items-center gap-1">
<i class="bi bi-file-earmark-pdf"></i>
<span><?= esc($semLabel) ?></span>
</a>
<?php else: ?>
<?= esc($semLabel) ?>
<?php endif; ?>
</td>
<td><?= esc(format_score($row['homework_avg'] ?? null)) ?></td>
<td><?= esc(format_score($row['project_avg'] ?? null)) ?></td>
<td><?= esc(format_score($row['participation_score'] ?? null)) ?></td>
<td><?= esc(format_score($testQuiz)) ?></td>
<td><?= esc(format_score($row['attendance_score'] ?? null)) ?></td>
<td><?= esc(format_score($row['ptap_score'] ?? null)) ?></td>
<td><?= esc(format_score($row['midterm_exam_score'] ?? null)) ?></td>
<td><?= esc(format_score($row['semester_score'] ?? null)) ?></td>
<td style="min-width: 240px;">
<?php if (empty($comments)): ?>
<span class="text-muted">N/A</span>
<?php else: ?>
<?php foreach ($comments as $type => $comment): ?>
<details class="mb-1">
<summary class="small fw-semibold"><?= esc(label_from_type($type)) ?></summary>
<div class="small text-muted mt-1"><?= esc($comment) ?></div>
</details>
<?php endforeach; ?>
<?php endif; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<?php endif; ?>
</div>
<?= $this->endSection() ?>
+66
View File
@@ -0,0 +1,66 @@
<?= $this->extend('layout/main_layout') ?>
<?= $this->section('content') ?>
<div class="container-xxl py-4">
<div class="d-flex align-items-center justify-content-between flex-wrap gap-2 mb-3">
<div>
<h2 class="mb-0">Student Score Card</h2>
<div class="text-muted small">Select a student to open their score card.</div>
</div>
<?php
$roleRaw = session()->get('role');
if (is_array($roleRaw)) {
$roleRaw = $roleRaw[0] ?? 'guest';
}
$role = strtolower((string)($roleRaw ?? 'guest'));
if (in_array($role, ['parent', 'parent_dashboard'], true)) {
$backUrl = base_url('/parent_dashboard');
} elseif (in_array($role, ['teacher', 'teacher_assistant', 'teacher_dashboard'], true)) {
$backUrl = base_url('/teacher_dashboard');
} else {
$backUrl = base_url('/');
}
?>
<a href="<?= $backUrl ?>" class="btn btn-outline-secondary">Back</a>
</div>
<?php if (empty($students)): ?>
<div class="alert alert-warning">No students available for your account.</div>
<?php else: ?>
<div class="card shadow-sm">
<div class="card-body table-responsive">
<table class="table table-striped align-middle mb-0">
<thead class="table-light">
<tr>
<th>School ID</th>
<th>Student</th>
<th class="text-end">Action</th>
</tr>
</thead>
<tbody>
<?php foreach ($students as $stu): ?>
<?php
$sid = (int)($stu['id'] ?? 0);
$schoolId = trim((string)($stu['school_id'] ?? ''));
$label = trim(($stu['firstname'] ?? '') . ' ' . ($stu['lastname'] ?? ''));
?>
<tr>
<td><?= esc($schoolId) ?></td>
<td><?= esc($label) ?></td>
<td class="text-end">
<form method="post" action="<?= site_url('student/score-card') ?>" class="d-inline">
<?= csrf_field() ?>
<input type="hidden" name="student_id" value="<?= $sid ?>">
<button type="submit" class="btn btn-sm btn-primary">Open</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<?php endif; ?>
</div>
<?= $this->endSection() ?>