✅ CourseAssignmentController (index, create, store)
✅ create.blade.php с тремя tags-input (пользователи/группы/организации)
✅ Разные цвета бейджей (зелёный/голубой/синий)
✅ UserSearchController API
✅ index.blade.php список назначений
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ edit.blade.php — выбор организации через searchable-select
✅ create.blade.php — выбор организации через searchable-select
✅ Контроллер не передаёт $organizations
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Только бейджи с названиями групп
✅ Без поля поиска и удаления
✅ Отображение организации в скобках
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ console.log для всех этапов инициализации
✅ Логирование загрузки существующих тегов
✅ Логирование API запросов и ответов
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ API возвращает группы при пустом запросе с user_id
✅ Фильтрация по названию только если query не пустой
✅ Компонент передаёт user_id при загрузке тегов
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ $user->load('groups') для eager loading
✅ Проверка !empty(trim()) для groups поля
✅ Не очищаем группы если поле пустое
✅ Загрузка существующих тегов при инициализации
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ API не возвращает группы при пустом запросе
✅ onItemAdd вместо onChange для добавления тегов
✅ Очистка поля после добавления тега
✅ Фильтрация по организации пользователя
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ this.options[value] вместо select.options[value]
✅ Проверка data перед addTag
✅ Исправлена группировка whereNull + orWhere в API
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ API groups/search принимает user_id параметр
✅ Фильтр: общие + группы организации ИЛИ только общие
✅ tags-input передаёт user_id в API
✅ Очистка кэша для GroupPolicy
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Новый компонент x-tags-input
✅ Поле ввода + бейджи ниже
✅ Typeahead поиск групп
✅ Крестик для удаления
✅ Синие бейджи как в WordPress
✅ Отдельный компонент (не влияет на searchable-select)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Синие бейджи с названиями групп
✅ Крестик для удаления (краснеет при наведении)
✅ CSS стили для TomSelect
✅ Компонент для мультивыбора
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ TomSelect с мультивыбором (теги как в WordPress)
✅ API /api/groups/search для поиска групп
✅ Обновлён edit.blade.php пользователя
✅ Обновлён show.blade.php пользователя
✅ Компонент поддерживает multiple=true
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ 1. Ссылка 'Все пользователи' в просмотре организации
✅ 2. Кнопка '+' для группы с предустановленной организацией
✅ 3. Упрощён выбор типа группы (по умолчанию организация)
✅ 4. Исправлена ошибка GroupPolicy::update()
✅ 5. Управление группами в редактировании пользователя
✅ Показ всех доступных групп (общие + организации)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ required_if валидация для organization_id
✅ JavaScript убирает required при выборе общей группы
✅ Очищает значение при переключении на общую группу
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ 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>
✅ Modal добавления в группу на странице пользователя
✅ Метод addUser — добавление пользователя в группу
✅ Метод removeUser — удаление пользователя из группы
✅ Фильтр доступных групп (общие + группы организации)
✅ Проверка: нельзя добавить в группу другой организации
✅ Маршруты: POST /users/{user}/groups/add, DELETE /groups/{group}/users/{user}/remove
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ create.blade.php — форма создания с выбором типа группы
✅ store метод — сохранение группы
✅ index.blade.php — кнопка создать, фильтр по пользователю
✅ edit метод — фильтр пользователей по организации
✅ Ссылка Группы в сайдбаре для Admin/Manager
✅ Полные маршруты для groups
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Administrator/Manager: Тесты, Назначения — рабочие ссылки
✅ Curator: Пользователи, Группы, Курсы, Назначения — рабочие ссылки
✅ Student: Мои курсы, Тесты — рабочие ссылки
✅ Active state для всех разделов
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ index.blade.php — список с фильтрами
✅ create.blade.php — форма создания (individual/group/organization)
✅ edit.blade.php — форма редактирования
✅ show.blade.php — просмотр назначения
✅ JavaScript для динамического переключения полей
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ urlencode/decodeURIComponent вместо base64
✅ modal-dialog-scrollable для прокрутки
✅ Обработка null для matching/ordering
✅ aria-hidden='true' для accessibility
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Клик на текст вопроса открывает modal
✅ Отображение текста вопроса с HTML форматированием
✅ multiple_choice: radio/checkbox в зависимости от кол-ва правильных
✅ matching: таблица с парами
✅ ordering: нумерованный список в правильном порядке
✅ Картинки + текст в ответах
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ edit.blade.php передаёт existing_image
✅ update() сохраняет existing_image если новый файл не загружен
✅ update() удаляет старую картинку если загружена новая
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Логирование каждого шага
✅ Валидация картинок вручную
✅ Проверка hasFile для каждого ответа
✅ Логирование сохранения
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Используем $request->input('answers') вместо $validated['answers']
✅ is_correct проверяем как строку '1'
✅ Картинки загружаются через $request->file()
✅ Обновлены store и update методы
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ store/update используют $request->file() для загрузки
✅ toggleCorrect работает с icon.classList вместо innerHTML
✅ Исправлено наследование цвета иконки от кнопки
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Исправлена проверка hasText/hasImage в контроллере
✅ answer_text сохраняется как null если пустой
✅ Картинки отображаются в edit.blade.php в input-group-text
✅ Обновлены store и update методы
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ edit.blade.php полностью переписан под create.blade.php
✅ TinyMCE для текста вопроса и пояснения
✅ Картинки в ответах (просмотр + загрузка новых)
✅ Поддержка matching и ordering
✅ index.blade.php: strip_tags для текста вопроса
✅ tests/show.blade.php: strip_tags для текста вопроса
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Миграция: answer_text теперь nullable
✅ TinyMCE 8.3.2 распакован в public/tinymce/
✅ Русский язык установлен
✅ Используется локальная версия вместо CDN
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>