module set 2

This commit is contained in:
imadhigp 2026-08-25 10:19:12 +05:30
parent 8c953d0e46
commit e474bc5315
2 changed files with 114 additions and 104 deletions

View File

@ -5,25 +5,29 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Collection;
use App\Models\courses;
use App\Models\Module;
use App\Models\StudentDetail;
use App\Models\CourseAssignStudent;
class MyCoursesController extends Controller class MyCoursesController extends Controller
{ {
public function showMyCourses() public function showMyCourses()
{ {
$userId = session('student_portal_log_id') $userId = session('student_portal_log_id')
?? session('student_id') ?? session('student_id')
?? session('id') ?? session('id')
?? Auth::id(); ?? Auth::id();
$student = DB::table('student_details') $student = DB::table('student_details')
->where('student_portal_log_id', $userId) ->where('student_portal_log_id', $userId)
->orWhere('id', $userId) ->orWhere('id', $userId)
->orWhere('student_id', $userId) ->orWhere('student_id', $userId)
->first(); ->first();
if (!$student) { if (!$student) {
return view('mycourse', [ return view('mycourse', [
'courses' => collect([]), 'courses' => collect([]),
@ -31,35 +35,43 @@ class MyCoursesController extends Controller
]); ]);
} }
// DB::table භාවිතයෙන් SQL join එක නිවැරදිව සිදු කිරීම
$courses = DB::table('courses') $courses = DB::table('courses')
->join('course_assign_student', 'courses.id', '=', 'course_assign_student.course_id') ->join('course_assign_student', 'courses.id', '=', 'course_assign_student.course_id')
->whereIn('course_assign_student.student_id', [ ->leftJoin('modules', 'courses.id', '=', 'modules.course_id') // <-- මේ පේළිය එකතු කරන ලදී
$student->id, ->whereIn('course_assign_student.student_id', array_filter([
$student->student_id, $student->id ?? null,
$student->student_portal_log_id $student->student_id ?? null,
]) $student->student_portal_log_id ?? null
->select('courses.*', 'course_assign_student.assigned_at') ]))
->distinct() ->select(
->get(); 'courses.id as course_id',
'courses.title as course_title',
'courses.course_code',
'modules.id as module_id',
'modules.title as module_title',
'modules.description as module_description',
'modules.semester'
)
->get()
->groupBy('course_id');
return view('mycourse', compact('courses', 'student')); return view('mycourse', compact('courses', 'student'));
} }
// public function showModule($course_id)
// {
// $course = DB::table('courses')->where('id', $course_id)->first();
public function showModule($course_id) // if (!$course) {
{ // abort(404, 'Course not found');
$course = DB::table('courses')->where('id', $course_id)->first(); // }
if (!$course) { // $modules = DB::table('modules')
abort(404, 'Course not found'); // ->where('course_id', $course_id)
} // ->get();
$modules = DB::table('modules') // return view('module', compact('course', 'modules'));
->where('course_id', $course_id) // }
->get();
return view('module', compact('course', 'modules'));
}
} }

View File

@ -1,6 +1,6 @@
@extends('layouts.studentportalnav') @extends('layouts.studentportalnav')
@section('title', 'Course Modules') @section('title', 'My Courses & Modules')
@section('content') @section('content')
@ -8,40 +8,29 @@
:root { :root {
--theme-navy: #2D355B; --theme-navy: #2D355B;
--theme-red: #822424; --theme-red: #822424;
--theme-red-hover: #df2c3e;
--bg-light: #F6F6F6; --bg-light: #F6F6F6;
--white: #ffffff; --white: #ffffff;
} }
body { background: var(--bg-light); font-family: 'Segoe UI', sans-serif; } body { background: var(--bg-light); font-family: 'Segoe UI', sans-serif; }
.course-header {
.module-header {
background: linear-gradient(135deg, #2B293F 0%, #94A6F959 100%); background: linear-gradient(135deg, #2B293F 0%, #94A6F959 100%);
color: var(--white); color: var(--white);
border-radius: 16px; border-radius: 12px;
padding: 30px; padding: 20px;
margin-bottom: 25px; margin-bottom: 15px;
border-left: 5px solid var(--theme-red); border-left: 5px solid var(--theme-red);
} }
.module-card { .module-card {
border: 1px solid #e2e8f0; border: 1px solid #e2e8f0;
border-radius: 12px; border-radius: 10px;
background: var(--white); background: var(--white);
box-shadow: 0 4px 10px rgba(0,0,0,0.04);
transition: all 0.3s ease; transition: all 0.3s ease;
} }
.module-card:hover {
transform: translateY(-2px);
border-color: var(--theme-navy);
}
.semester-badge { .semester-badge {
background-color: var(--theme-navy); background-color: var(--theme-navy);
color: #fff; color: #fff;
font-size: 12px; font-size: 11px;
padding: 5px 12px; padding: 4px 10px;
border-radius: 20px; border-radius: 20px;
} }
</style> </style>
@ -49,24 +38,28 @@ body { background: var(--bg-light); font-family: 'Segoe UI', sans-serif; }
<div class="main-portal-content p-3"> <div class="main-portal-content p-3">
<div class="container-fluid"> <div class="container-fluid">
<!-- Back Button --> <h3 class="fw-bold mb-4" style="color: var(--theme-navy);">My Assigned Courses</h3>
<a href="{{ route('mycourse') }}" class="btn btn-outline-secondary btn-sm mb-3">
<i class="fa fa-arrow-left me-1"></i> Back to My Courses
</a>
<!-- Course Header --> @if(count($courses) > 0)
<div class="module-header"> @foreach($courses as $courseId => $courseItems)
<h2 class="fw-bold mb-1">{{ $course->title ?? $course->name ?? 'Course Modules' }}</h2> @php
<p class="mb-0 opacity-75">{{ $course->course_code ?? '' }} {{ isset($course->desc) ? '| '.$course->desc : '' }}</p> $firstItem = $courseItems->first();
@endphp
<!-- Course Title Block -->
<div class="course-header mt-4">
<h3 class="fw-bold mb-1">{{ $firstItem->course_title }}</h3>
<p class="mb-0 opacity-75">{{ $firstItem->course_code }}</p>
</div> </div>
<h4 class="fw-bold mb-4" style="color: var(--theme-navy);">Modules List</h4> <!-- Modules List under this Course -->
<h5 class="fw-bold mb-3 ms-2" style="color: var(--theme-navy);">Modules</h5>
@if(isset($modules) && count($modules) > 0)
<div class="row g-3"> <div class="row g-3">
@foreach($modules as $index => $module) @foreach($courseItems as $index => $module)
@if($module->module_id)
<div class="col-12"> <div class="col-12">
<div class="card module-card p-4"> <div class="card module-card p-3 shadow-sm">
<div class="d-flex justify-content-between align-items-start flex-wrap gap-2"> <div class="d-flex justify-content-between align-items-start flex-wrap gap-2">
<div> <div>
@if(!empty($module->semester)) @if(!empty($module->semester))
@ -75,12 +68,12 @@ body { background: var(--bg-light); font-family: 'Segoe UI', sans-serif; }
</span> </span>
@endif @endif
<h5 class="fw-bold text-dark mb-2"> <h6 class="fw-bold text-dark mb-1">
Module {{ $index + 1 }}: {{ $module->title }} Module {{ $index + 1 }}: {{ $module->module_title }}
</h5> </h6>
<p class="text-muted small mb-0"> <p class="text-muted small mb-0">
{{ $module->description ?? 'No description provided.' }} {{ $module->module_description ?? 'No description provided.' }}
</p> </p>
</div> </div>
<div> <div>
@ -91,14 +84,19 @@ body { background: var(--bg-light); font-family: 'Segoe UI', sans-serif; }
</div> </div>
</div> </div>
</div> </div>
@else
<div class="col-12">
<div class="alert alert-light border">No modules found for this course.</div>
</div>
@endif
@endforeach @endforeach
</div> </div>
@endforeach
@else @else
<!-- Empty State -->
<div class="bg-white p-5 text-center rounded-3 border"> <div class="bg-white p-5 text-center rounded-3 border">
<i class="fas fa-book-open fa-3x text-muted mb-3"></i> <i class="fas fa-book-open fa-3x text-muted mb-3"></i>
<h5 class="fw-bold">No Modules Found</h5> <h5 class="fw-bold">No Courses Assigned</h5>
<p class="text-muted mb-0">There are no modules found for this course.</p> <p class="text-muted mb-0">There are no courses currently assigned to your profile.</p>
</div> </div>
@endif @endif