Files
alrahma_sunday_school_api/app/Http/Controllers/View/ClassController.php
T
2026-03-05 12:29:37 -05:00

151 lines
5.6 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\View;
use App\Http\Controllers\Controller;
use App\Models\ClassSection;
use App\Models\Configuration;
use App\Models\Student;
use App\Models\Teacher;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
class ClassController extends Controller
{
protected ClassSection $classSection;
protected Student $student;
protected Teacher $teacher;
protected Configuration $config;
protected ?string $semester;
protected ?string $schoolYear;
public function __construct(
ClassSection $classSection,
Student $student,
Teacher $teacher,
Configuration $config
) {
$this->classSection = $classSection;
$this->student = $student;
$this->teacher = $teacher;
$this->config = $config;
$this->semester = $this->config->getConfig('semester');
$this->schoolYear = $this->config->getConfig('school_year');
}
public function index(): View
{
$classSections = $this->classSection
->newQuery()
->orderBy('class_section_name', 'ASC')
->get();
return view('administrator.class_section', [
'classsection' => $classSections,
]);
}
public function create(): View
{
return view('administrator.create_class');
}
public function store(Request $request): RedirectResponse
{
$data = $request->only(['name', 'description']);
// TODO: persist the payload once the backing model/table columns are finalized.
return redirect()->to('/administrator/classes')->with([
'payload' => $data,
]);
}
public function edit(int $id): View
{
return view('administrator.edit_class', [
'class' => $this->classSection->find($id),
]);
}
public function updateClass(Request $request, int $id): RedirectResponse
{
$data = $request->only(['name', 'description']);
// TODO: persist the payload once the backing model/table columns are finalized.
return redirect()->to('/administrator/classes')->with([
'payload' => $data,
'id' => $id,
]);
}
public function destroyClass(int $id): RedirectResponse
{
// TODO: remove the record once the backing model/table columns are finalized.
return redirect()->to('/administrator/classes')->with([
'deleted_id' => $id,
]);
}
public function addClasses(): RedirectResponse
{
$classes = [
['class_name' => 'Class 1', 'teacher_id' => 1, 'schedule' => 'Monday 9:00 AM - 10:00 AM', 'capacity' => 30],
['class_name' => 'Class 2', 'teacher_id' => 2, 'schedule' => 'Tuesday 9:00 AM - 10:00 AM', 'capacity' => 30],
['class_name' => 'Class 3', 'teacher_id' => 3, 'schedule' => 'Wednesday 9:00 AM - 10:00 AM', 'capacity' => 30],
['class_name' => 'Class 4', 'teacher_id' => 4, 'schedule' => 'Thursday 9:00 AM - 10:00 AM', 'capacity' => 30],
['class_name' => 'Class 5', 'teacher_id' => 5, 'schedule' => 'Friday 9:00 AM - 10:00 AM', 'capacity' => 30],
['class_name' => 'Class 6', 'teacher_id' => 6, 'schedule' => 'Monday 10:00 AM - 11:00 AM', 'capacity' => 30],
['class_name' => 'Class 7', 'teacher_id' => 7, 'schedule' => 'Tuesday 10:00 AM - 11:00 AM', 'capacity' => 30],
['class_name' => 'Class 8', 'teacher_id' => 8, 'schedule' => 'Wednesday 10:00 AM - 11:00 AM', 'capacity' => 30],
['class_name' => 'Class 9', 'teacher_id' => 9, 'schedule' => 'Thursday 10:00 AM - 11:00 AM', 'capacity' => 30],
['class_name' => 'Youth', 'teacher_id' => 10, 'schedule' => 'Friday 10:00 AM - 11:00 AM', 'capacity' => 30],
];
DB::transaction(function () use ($classes) {
foreach ($classes as $class) {
DB::table('classes')->insert($class);
}
});
return redirect()->to('/parent/classes')->with('success', 'Classes added successfully.');
}
public function classAttendance(int $classSectionId): RedirectResponse|View
{
$teacherId = (int) (session()->get('user_id') ?? 0);
if ($teacherId <= 0) {
return redirect()->to('/teacher/classes')->with('error', 'Missing teacher session.');
}
$teacherData = $this->teacher->find($teacherId);
$studentsData = $this->student->newQuery()
->join('student_class', 'students.id', '=', 'student_class.student_id')
->leftJoin('class_sections', 'class_sections.id', '=', 'student_class.class_section_id')
->where('student_class.class_section_id', $classSectionId)
->select('students.*', 'student_class.class_section_id', 'class_sections.class_section_name')
->get()
->toArray();
$className = $studentsData[0]['class_section_name'] ?? 'Class Name Not Available';
if (empty($teacherData) || empty($studentsData)) {
return redirect()->to('/teacher/classes')->with('error', 'No data found for this class.');
}
$teacherFirst = $teacherData['teacher_first'] ?? $teacherData['firstname'] ?? '';
$teacherLast = $teacherData['teacher_last'] ?? $teacherData['lastname'] ?? '';
return view('teacher.classes', [
'teacher_name' => trim($teacherFirst . ' ' . $teacherLast),
'students' => $studentsData,
'class_name' => $className,
'semester' => $this->semester,
'class_section_id' => $classSectionId,
]);
}
}