module set 2
This commit is contained in:
parent
8c953d0e46
commit
e474bc5315
|
|
@ -5,61 +5,73 @@ 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')
|
||||||
|
?? session('student_id')
|
||||||
|
?? session('id')
|
||||||
|
?? Auth::id();
|
||||||
|
|
||||||
$userId = session('student_portal_log_id')
|
$student = DB::table('student_details')
|
||||||
?? session('student_id')
|
->where('student_portal_log_id', $userId)
|
||||||
?? session('id')
|
->orWhere('id', $userId)
|
||||||
?? Auth::id();
|
->orWhere('student_id', $userId)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if (!$student) {
|
||||||
$student = DB::table('student_details')
|
return view('mycourse', [
|
||||||
->where('student_portal_log_id', $userId)
|
'courses' => collect([]),
|
||||||
->orWhere('id', $userId)
|
'student' => null
|
||||||
->orWhere('student_id', $userId)
|
]);
|
||||||
->first();
|
|
||||||
|
|
||||||
|
|
||||||
if (!$student) {
|
|
||||||
return view('mycourse', [
|
|
||||||
'courses' => collect([]),
|
|
||||||
'student' => null
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$courses = DB::table('courses')
|
|
||||||
->join('course_assign_student', 'courses.id', '=', 'course_assign_student.course_id')
|
|
||||||
->whereIn('course_assign_student.student_id', [
|
|
||||||
$student->id,
|
|
||||||
$student->student_id,
|
|
||||||
$student->student_portal_log_id
|
|
||||||
])
|
|
||||||
->select('courses.*', 'course_assign_student.assigned_at')
|
|
||||||
->distinct()
|
|
||||||
->get();
|
|
||||||
|
|
||||||
return view('mycourse', compact('courses', 'student'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DB::table භාවිතයෙන් SQL join එක නිවැරදිව සිදු කිරීම
|
||||||
|
$courses = DB::table('courses')
|
||||||
|
->join('course_assign_student', 'courses.id', '=', 'course_assign_student.course_id')
|
||||||
|
->leftJoin('modules', 'courses.id', '=', 'modules.course_id') // <-- මේ පේළිය එකතු කරන ලදී
|
||||||
|
->whereIn('course_assign_student.student_id', array_filter([
|
||||||
|
$student->id ?? null,
|
||||||
|
$student->student_id ?? null,
|
||||||
|
$student->student_portal_log_id ?? null
|
||||||
|
]))
|
||||||
|
->select(
|
||||||
|
'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');
|
||||||
|
|
||||||
public function showModule($course_id)
|
return view('mycourse', compact('courses', 'student'));
|
||||||
{
|
}
|
||||||
$course = DB::table('courses')->where('id', $course_id)->first();
|
|
||||||
|
|
||||||
if (!$course) {
|
// public function showModule($course_id)
|
||||||
abort(404, 'Course not found');
|
// {
|
||||||
}
|
// $course = DB::table('courses')->where('id', $course_id)->first();
|
||||||
|
|
||||||
$modules = DB::table('modules')
|
// if (!$course) {
|
||||||
->where('course_id', $course_id)
|
// abort(404, 'Course not found');
|
||||||
->get();
|
// }
|
||||||
|
|
||||||
return view('module', compact('course', 'modules'));
|
// $modules = DB::table('modules')
|
||||||
}
|
// ->where('course_id', $course_id)
|
||||||
|
// ->get();
|
||||||
|
|
||||||
|
// return view('module', compact('course', 'modules'));
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -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,56 +38,65 @@ 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();
|
||||||
</div>
|
@endphp
|
||||||
|
|
||||||
<h4 class="fw-bold mb-4" style="color: var(--theme-navy);">Modules List</h4>
|
<!-- 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>
|
||||||
|
|
||||||
@if(isset($modules) && count($modules) > 0)
|
<!-- Modules List under this Course -->
|
||||||
<div class="row g-3">
|
<h5 class="fw-bold mb-3 ms-2" style="color: var(--theme-navy);">Modules</h5>
|
||||||
@foreach($modules as $index => $module)
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="card module-card p-4">
|
|
||||||
<div class="d-flex justify-content-between align-items-start flex-wrap gap-2">
|
|
||||||
<div>
|
|
||||||
@if(!empty($module->semester))
|
|
||||||
<span class="semester-badge mb-2 d-inline-block">
|
|
||||||
Semester {{ $module->semester }}
|
|
||||||
</span>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
<h5 class="fw-bold text-dark mb-2">
|
<div class="row g-3">
|
||||||
Module {{ $index + 1 }}: {{ $module->title }}
|
@foreach($courseItems as $index => $module)
|
||||||
</h5>
|
@if($module->module_id)
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="card module-card p-3 shadow-sm">
|
||||||
|
<div class="d-flex justify-content-between align-items-start flex-wrap gap-2">
|
||||||
|
<div>
|
||||||
|
@if(!empty($module->semester))
|
||||||
|
<span class="semester-badge mb-2 d-inline-block">
|
||||||
|
Semester {{ $module->semester }}
|
||||||
|
</span>
|
||||||
|
@endif
|
||||||
|
|
||||||
<p class="text-muted small mb-0">
|
<h6 class="fw-bold text-dark mb-1">
|
||||||
{{ $module->description ?? 'No description provided.' }}
|
Module {{ $index + 1 }}: {{ $module->module_title }}
|
||||||
</p>
|
</h6>
|
||||||
</div>
|
|
||||||
<div>
|
<p class="text-muted small mb-0">
|
||||||
<a href="#" class="btn btn-sm text-white px-3 py-2" style="background-color: var(--theme-red); border-radius: 6px;">
|
{{ $module->module_description ?? 'No description provided.' }}
|
||||||
View Content <i class="fa fa-chevron-right ms-1"></i>
|
</p>
|
||||||
</a>
|
</div>
|
||||||
|
<div>
|
||||||
|
<a href="#" class="btn btn-sm text-white px-3 py-2" style="background-color: var(--theme-red); border-radius: 6px;">
|
||||||
|
View Content <i class="fa fa-chevron-right ms-1"></i>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
@else
|
||||||
</div>
|
<div class="col-12">
|
||||||
@endforeach
|
<div class="alert alert-light border">No modules found for this course.</div>
|
||||||
</div>
|
</div>
|
||||||
|
@endif
|
||||||
|
@endforeach
|
||||||
|
</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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue