mirror of
https://github.com/nihonbuzz/nihonbuzz-academy.git
synced 2026-01-26 05:25:37 +07:00
feat: implement Notion-like LMS (Course Player, Exam, Certificate) with R2 integration
This commit is contained in:
40
app/Http/Controllers/CertificateController.php
Normal file
40
app/Http/Controllers/CertificateController.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Course;
|
||||
use App\Models\UserProgress;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Inertia;
|
||||
use Barryvdh\DomPDF\Facade\Pdf; // Optional if we want PDF download, for now just view
|
||||
|
||||
class CertificateController extends Controller
|
||||
{
|
||||
public function show(Request $request, string $courseSlug)
|
||||
{
|
||||
$user = $request->user();
|
||||
$course = Course::where('slug', $courseSlug)->withCount('lessons')->firstOrFail();
|
||||
|
||||
// Check if course is fully completed
|
||||
// Count completed lessons vs total lessons
|
||||
$completedCount = UserProgress::where('user_id', $user->id)
|
||||
->whereIn('lesson_id', $course->lessons()->pluck('id'))
|
||||
->whereNotNull('completed_at')
|
||||
->count();
|
||||
|
||||
$totalLessons = $course->lessons_count ?? 0;
|
||||
$progress = ($totalLessons > 0) ? ($completedCount / $totalLessons) * 100 : 0;
|
||||
|
||||
// Strict check: Must be 100% complete
|
||||
if ($progress < 100) {
|
||||
return redirect()->route('courses.index')->with('error', 'Selesaikan semua materi untuk klaim sertifikat.');
|
||||
}
|
||||
|
||||
return Inertia::render('Certificates/Show', [
|
||||
'course' => $course,
|
||||
'student' => $user,
|
||||
'date' => now()->translatedFormat('d F Y'),
|
||||
'certificate_id' => 'NB-' . strtoupper(substr($course->slug, 0, 3)) . '-' . $user->id . '-' . date('ymd'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user