From ffcdd86712eb5014eeb1d56b4330a67cba3e05e4 Mon Sep 17 00:00:00 2001 From: mirivlad Date: Fri, 27 Mar 2026 10:41:14 +0800 Subject: [PATCH] =?UTF-8?q?Fix:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✅ Ответы с картинками без текста теперь сохраняются ✅ TinyMCE инициализируется после DOMContentLoaded ✅ Валидация: хотя бы текст ИЛИ картинка в ответе ✅ Обновлены store и update методы Co-authored-by: Qwen-Coder --- .../Controllers/Admin/QuestionController.php | 32 ++++++++++- .../views/admin/questions/create.blade.php | 56 ++++++++++--------- 2 files changed, 59 insertions(+), 29 deletions(-) diff --git a/app/Http/Controllers/Admin/QuestionController.php b/app/Http/Controllers/Admin/QuestionController.php index 14c1de7..ba2a0e7 100755 --- a/app/Http/Controllers/Admin/QuestionController.php +++ b/app/Http/Controllers/Admin/QuestionController.php @@ -53,6 +53,20 @@ class QuestionController extends Controller 'ordering_items' => 'nullable|array', ]); + // Проверка что есть хотя бы текст или картинка в ответах + if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) { + $hasValidAnswer = false; + foreach ($validated['answers'] as $answer) { + if (!empty($answer['text']) || !empty($answer['image'])) { + $hasValidAnswer = true; + break; + } + } + if (!$hasValidAnswer) { + return back()->withErrors(['answers' => 'Добавьте хотя бы один ответ (текст или картинку)'])->withInput(); + } + } + DB::transaction(function () use ($test, $validated) { $question = $test->questions()->create([ 'type' => $validated['type'], @@ -66,7 +80,7 @@ class QuestionController extends Controller // Ответы для multiple_choice if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) { foreach ($validated['answers'] as $answer) { - if (!empty($answer['text'])) { + if (!empty($answer['text']) || !empty($answer['image'])) { $imagePath = null; if (!empty($answer['image'])) { $imagePath = $answer['image']->store('questions/answers', 'public'); @@ -145,6 +159,20 @@ class QuestionController extends Controller 'ordering_items' => 'nullable|array', ]); + // Проверка что есть хотя бы текст или картинка в ответах + if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) { + $hasValidAnswer = false; + foreach ($validated['answers'] as $answer) { + if (!empty($answer['text']) || !empty($answer['image'])) { + $hasValidAnswer = true; + break; + } + } + if (!$hasValidAnswer) { + return back()->withErrors(['answers' => 'Добавьте хотя бы один ответ (текст или картинку)'])->withInput(); + } + } + DB::transaction(function () use ($question, $validated) { $question->update([ 'type' => $validated['type'], @@ -159,7 +187,7 @@ class QuestionController extends Controller if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) { $question->answers()->delete(); foreach ($validated['answers'] as $answer) { - if (!empty($answer['text'])) { + if (!empty($answer['text']) || !empty($answer['image'])) { $imagePath = null; if (!empty($answer['image'])) { $imagePath = $answer['image']->store('questions/answers', 'public'); diff --git a/resources/views/admin/questions/create.blade.php b/resources/views/admin/questions/create.blade.php index d435c43..68481a6 100644 --- a/resources/views/admin/questions/create.blade.php +++ b/resources/views/admin/questions/create.blade.php @@ -94,34 +94,36 @@