LMS Этап 1 MVP - Laravel 13
✅ Базовая функциональность: - Аутентификация (вход/выход/регистрация) - Роли и разрешения (Administrator, Manager, Curator, Student) - Панель управления (dashboard) для разных ролей ✅ База данных (23 миграции): - users, organizations, groups, user_groups - course_categories, courses, course_modules - tests, questions, answers, question_matching_pairs - test_attempts, test_responses - course_requests, course_request_items, course_assignments - scorm_data, user_course_progress, logs - permission tables ✅ Модели (15 моделей с отношениями): - User, Organization, Group - CourseCategory, Course, CourseModule - Test, Question, Answer, QuestionMatchingPair - TestAttempt, TestResponse - CourseRequest, CourseRequestItem, CourseAssignment - ScormData, UserCourseProgress, Log ✅ Seeders: - RoleSeeder (роли и разрешения) - UserSeeder (тестовые пользователи) ✅ Контроллеры: - LoginController, RegisterController, DashboardController ✅ Blade-шаблоны: - layouts/app.blade.php - auth/login.blade.php, auth/register.blade.php - dashboard/admin.blade.php, dashboard/curator.blade.php, dashboard/student.blade.php 📦 Пакеты: - Laravel 13 (dev-master) - spatie/laravel-permission - laravel/sanctum 🔧 Инфраструктура: - Nginx конфигурация - PHP 8.4-FPM - MariaDB Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Course;
|
||||
use App\Models\CourseAssignment;
|
||||
use App\Models\UserCourseProgress;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
if ($user->hasRole('Administrator') || $user->hasRole('Manager')) {
|
||||
return $this->adminDashboard();
|
||||
}
|
||||
|
||||
if ($user->hasRole('Curator')) {
|
||||
return $this->curatorDashboard();
|
||||
}
|
||||
|
||||
return $this->studentDashboard();
|
||||
}
|
||||
|
||||
private function adminDashboard()
|
||||
{
|
||||
$stats = [
|
||||
'users_count' => \App\Models\User::count(),
|
||||
'courses_count' => Course::count(),
|
||||
'organizations_count' => \App\Models\Organization::count(),
|
||||
'active_assignments' => CourseAssignment::where('is_active', true)->count(),
|
||||
];
|
||||
|
||||
return view('dashboard.admin', compact('stats'));
|
||||
}
|
||||
|
||||
private function curatorDashboard()
|
||||
{
|
||||
$user = Auth::user();
|
||||
$organization = $user->organization;
|
||||
|
||||
$stats = [
|
||||
'users_count' => $organization ? $organization->users()->count() : 0,
|
||||
'courses_count' => Course::count(),
|
||||
'groups_count' => $organization ? $organization->groups()->count() : 0,
|
||||
];
|
||||
|
||||
return view('dashboard.curator', compact('stats', 'organization'));
|
||||
}
|
||||
|
||||
private function studentDashboard()
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
// Получаем назначенные курсы
|
||||
$assignments = CourseAssignment::where('user_id', $user->id)
|
||||
->orWhere('organization_id', $user->organization_id)
|
||||
->orWhereIn('group_id', $user->groups->pluck('id'))
|
||||
->where('is_active', true)
|
||||
->with('course')
|
||||
->get();
|
||||
|
||||
$courses = $assignments->pluck('course')->unique('id');
|
||||
|
||||
// Прогресс по курсам
|
||||
$progress = [];
|
||||
foreach ($courses as $course) {
|
||||
$userProgress = UserCourseProgress::where('user_id', $user->id)
|
||||
->where('course_id', $course->id)
|
||||
->first();
|
||||
$progress[$course->id] = $userProgress ? $userProgress->completion_percentage : 0;
|
||||
}
|
||||
|
||||
return view('dashboard.student', compact('courses', 'progress'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user