Commit Graph

43 Commits (df8172070a8d44d21170709c939802795ba59506)

Author SHA1 Message Date
mirivlad c5a5280f56 Fix: Tags Input - полное исправление
 API не возвращает группы при пустом запросе
 onItemAdd вместо onChange для добавления тегов
 Очистка поля после добавления тега
 Фильтрация по организации пользователя

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 13:14:53 +08:00
mirivlad 5689604004 Fix: onChange + фильтрация групп
 this.options[value] вместо select.options[value]
 Проверка data перед addTag
 Исправлена группировка whereNull + orWhere в API

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 13:08:11 +08:00
mirivlad be44d09169 Fix: Фильтрация групп + исправление GroupPolicy
 API groups/search принимает user_id параметр
 Фильтр: общие + группы организации ИЛИ только общие
 tags-input передаёт user_id в API
 Очистка кэша для GroupPolicy

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 12:44:47 +08:00
mirivlad 11c5dcaf48 Feat: Tags Input компонент для групп (WordPress style)
 Новый компонент x-tags-input
 Поле ввода + бейджи ниже
 Typeahead поиск групп
 Крестик для удаления
 Синие бейджи как в WordPress
 Отдельный компонент (не влияет на searchable-select)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 12:23:05 +08:00
mirivlad 1f99664d19 Feat: Searchable Select для групп пользователя
 TomSelect с мультивыбором (теги как в WordPress)
 API /api/groups/search для поиска групп
 Обновлён edit.blade.php пользователя
 Обновлён show.blade.php пользователя
 Компонент поддерживает multiple=true

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 12:07:07 +08:00
mirivlad 7782c59f5b Fix: UX улучшения по замечаниям
 1. Ссылка 'Все пользователи' в просмотре организации
 2. Кнопка '+' для группы с предустановленной организацией
 3. Упрощён выбор типа группы (по умолчанию организация)
 4. Исправлена ошибка GroupPolicy::update()
 5. Управление группами в редактировании пользователя
 Показ всех доступных групп (общие + организации)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 11:28:03 +08:00
mirivlad c3ed5a0edb Fix: Общая группа теперь создаётся
 required_if валидация для organization_id
 JavaScript убирает required при выборе общей группы
 Очищает значение при переключении на общую группу

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 11:12:50 +08:00
mirivlad 4503c217eb Feat: Универсальный компонент Searchable Select
 TomSelect библиотека (15KB vs 100KB у Select2)
 Blade компонент x-searchable-select
 API endpoint /api/organizations/search
 Поиск по названию и ИНН
 AJAX загрузка данных
 Используется в create.blade.php для групп
 Модульная архитектура - можно использовать для других полей

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 10:36:02 +08:00
mirivlad f198afd8a0 Feat: Управление группами пользователей
 Modal добавления в группу на странице пользователя
 Метод addUser — добавление пользователя в группу
 Метод removeUser — удаление пользователя из группы
 Фильтр доступных групп (общие + группы организации)
 Проверка: нельзя добавить в группу другой организации
 Маршруты: POST /users/{user}/groups/add, DELETE /groups/{group}/users/{user}/remove

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 10:25:10 +08:00
mirivlad 6599b8d5b6 Feat: CRUD групп с типами (организация/общие)
 create.blade.php — форма создания с выбором типа группы
 store метод — сохранение группы
 index.blade.php — кнопка создать, фильтр по пользователю
 edit метод — фильтр пользователей по организации
 Ссылка Группы в сайдбаре для Admin/Manager
 Полные маршруты для groups

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 10:21:17 +08:00
mirivlad d27b631c8f Feat: CRUD групп пользователей
 GroupUserController (index, show, edit, update, destroy)
 Маршруты: /admin/groups
 Blade шаблоны: index, show, edit
 Управление пользователями в группах
 Исправлена подсветка сайдбара (Курсы/Тесты)
 Ссылка на Группы в сайдбаре для Curator

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 09:28:53 +08:00
mirivlad 0fd33076ab Feat: Назначения курсов — Controller + Policy + Routes
 CourseAssignmentController (resource)
 CourseAssignmentPolicy
 Маршруты: /admin/course-assignments
 Регистрация в AuthServiceProvider

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-30 08:47:02 +08:00
mirivlad d1d7eecb69 Fix: Сохранение существующих картинок при редактировании
 edit.blade.php передаёт existing_image
 update() сохраняет existing_image если новый файл не загружен
 update() удаляет старую картинку если загружена новая

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 16:33:14 +08:00
mirivlad 523e8912af Fix: Добавлен 'image' в $fillable модели Answer
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 16:22:06 +08:00
mirivlad 95850ca342 Fix: Полный дебаг QuestionController
 Логирование каждого шага
 Валидация картинок вручную
 Проверка hasFile для каждого ответа
 Логирование сохранения

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 13:34:31 +08:00
mirivlad 71cb31f784 Fix: Сохранение is_correct и картинок
 Используем $request->input('answers') вместо $validated['answers']
 is_correct проверяем как строку '1'
 Картинки загружаются через $request->file()
 Обновлены store и update методы

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 12:40:11 +08:00
mirivlad 729e39bd78 Fix: Добавлен $request в use() closure
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 12:27:49 +08:00
mirivlad be1ba308c9 Fix: Картинки в ответах + toggleCorrect иконка
 store/update используют $request->file() для загрузки
 toggleCorrect работает с icon.classList вместо innerHTML
 Исправлено наследование цвета иконки от кнопки

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 11:54:48 +08:00
mirivlad eefd5fc5da Fix: Сохранение картинок в ответах
 Исправлена проверка hasText/hasImage в контроллере
 answer_text сохраняется как null если пустой
 Картинки отображаются в edit.blade.php в input-group-text
 Обновлены store и update методы

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 11:48:59 +08:00
mirivlad ffcdd86712 Fix: Исправления для вопросов
 Ответы с картинками без текста теперь сохраняются
 TinyMCE инициализируется после DOMContentLoaded
 Валидация: хотя бы текст ИЛИ картинка в ответе
 Обновлены store и update методы

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 10:41:14 +08:00
mirivlad 1c94812f7d Feat: Обновлён create.blade.php для вопросов
 TinyMCE WYSIWYG редактор (HTML + картинки)
 Поддержка ordering типа (сортировка)
 Картинки в ответах (загрузка файлов)
 Обновлён QuestionController (store/update)
 Валидация изображений (max 2MB)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 09:58:35 +08:00
mirivlad acf616fc08 Feat: Обновление вопросов
 Удалён input тип (не имеет смысла без автопроверки)
 Добавлен ordering тип (сортировка элементов)
 Добавлено поле image для ответов
 Миграции применены
 QuestionOrderingItem модель

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-27 09:51:17 +08:00
mirivlad 6ed7654773 Fix: QuestionPolicy возвращал false - исправлен на проверку ролей
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 16:50:27 +08:00
mirivlad 1ac09e6889 Fix: QuestionController не был обновлён - перезаписан полный контроллер
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 16:47:31 +08:00
mirivlad a34c2e2812 Feat: CRUD вопросов (начало)
 QuestionController (resource)
 QuestionPolicy
 Маршруты: /admin/tests/{test}/questions
 Blade-шаблоны: index, create (с JS для динамических ответов)
 Поддержка типов: single_choice, multiple_choice, input, matching
 Интеграция в show теста

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 15:45:14 +08:00
mirivlad 8f02084d3a Fix: Исправлен TestPolicy - возвращать true для ролей
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 13:54:02 +08:00
mirivlad eeb0628e51 Feat: TestPolicy для управления правами доступа к тестам
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 13:48:42 +08:00
mirivlad 32c9df5453 Feat: CRUD тестов (начало)
 TestController (resource controller)
 Маршруты: /admin/courses/{course}/tests
 Blade-шаблоны: index, create
 Интеграция в show курса

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 13:17:44 +08:00
mirivlad 68439932a8 Fix: Убрано ограничение на максимальные размеры обложки
 Оставлен только мин. размер 400x300px
 Макс. размеры сняты (поддержка 4K, 8K)
 Обновлены сообщения об ошибках
 Обновлены подсказки в формах

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 12:57:56 +08:00
mirivlad f48c22f75a Fix: Исправлен путь к файлу в generateThumbnail()
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 12:41:06 +08:00
mirivlad b3d1daeea6 Feat: Генерация thumbnail для обложек курсов
 Intervention Image установлен
 generateThumbnail() - создаёт копию 400x300px с crop по центру
 deleteThumbnails() - удаляет оригинал и thumb
 Обновлены store, update, destroy методы
 View используют оригиналы для show, thumb для списка

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 12:39:10 +08:00
mirivlad 65cb891658 Feat: Увеличены лимиты для обложек курсов
 Мин. размеры: 400x300px
 Макс. размеры: 3000x2000px
 Макс. размер файла: 10MB
 Обновлены подсказки в формах

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 12:34:25 +08:00
mirivlad 5ee549fbd1 Feat: Добавлена валидация обложки курса
 Минимальные размеры: 400x300px
 Максимальный размер: 2MB
 Форматы: JPEG, PNG, WebP
 Подсказки в формах
 Кастомные сообщения об ошибках

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 12:24:28 +08:00
mirivlad 731eb48537 Feat: CRUD курсов
 CourseController (resource)
 CoursePolicy
 Маршруты: /admin/courses
 Blade-шаблоны:
  - index.blade.php (список с карточками)
  - create.blade.php (форма создания)
  - edit.blade.php (форма редактирования)
  - show.blade.php (просмотр)
 Ссылка в сайдбаре
 Загрузка изображений (thumbnail)
 Типы курсов: standard, scorm, h5p

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 11:31:40 +08:00
mirivlad ca95621856 Fix: Изменено $category на $courseCategory для соответствия route model binding
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 11:23:26 +08:00
mirivlad 5c1306d6e5 Fix: Указан правильный foreign key в CourseCategory::courses()
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 10:50:16 +08:00
mirivlad dacff2dd1c Feat: CRUD категорий курсов
 CourseCategoryController (resource)
 CourseCategoryPolicy
 Маршруты: /admin/course-categories
 Blade-шаблоны:
  - index.blade.php (древовидный список)
  - create.blade.php
  - _row.blade.php (partial для дерева)
 Ссылка в сайдбаре
 Вложенность категорий (parent/children)
 Scope tree() для древовидной структуры

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 10:39:14 +08:00
mirivlad 3bec82a991 Feat: CRUD пользователей
 UserController (resource controller)
 UserPolicy
 Маршруты: /admin/users (resource)
 Blade-шаблоны:
  - admin/users/index.blade.php (с фильтрами)
  - admin/users/create.blade.php
  - admin/users/edit.blade.php (с группами)
  - admin/users/show.blade.php
 Ссылка в сайдбаре
 Привязка к организациям
 Распределение по группам
 Управление ролями

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 10:29:24 +08:00
mirivlad 2561807e3b Feat: Добавлен просмотр группы (show)
 GroupController@show метод
 admin/groups/show.blade.php шаблон
 Исправлена ссылка на просмотр в admin/organizations/show.blade.php
 Загрузка пользователей группы через load('users')

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 09:56:50 +08:00
mirivlad 4f5a615860 CRUD групп - Этап 2
 GroupController (index, create, store, edit, update, destroy)
 GroupPolicy (viewAny, view, create, update, delete)
 Маршруты: /admin/organizations/{organization}/groups (shallow resource)
 Blade-шаблоны:
  - admin/groups/index.blade.php (список групп организации)
  - admin/groups/create.blade.php (форма создания)
  - admin/groups/edit.blade.php (форма редактирования)
 Обновлён admin/organizations/show.blade.php (управление группами)
 Обновлён AuthServiceProvider (регистрация GroupPolicy)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 08:53:48 +08:00
mirivlad 32fed5d4b6 Fix: Добавлен метод courses() в Organization model
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 08:51:27 +08:00
mirivlad 2271abf732 CRUD организаций - Этап 2
 OrganizationController (index, create, store, show, edit, update, destroy)
 OrganizationPolicy (viewAny, view, create, update, delete)
 Маршруты: /admin/organizations (resource)
 Blade-шаблоны:
  - admin/organizations/index.blade.php (список с пагинацией)
  - admin/organizations/create.blade.php (форма создания)
  - admin/organizations/show.blade.php (просмотр + статистика)
  - admin/organizations/edit.blade.php (форма редактирования)
 Обновлённое меню в dashboard/admin.blade.php

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-26 08:41:45 +08:00
mirivlad 244c56df39 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>
2026-03-25 17:30:37 +08:00