Fix: Картинки в ответах + toggleCorrect иконка
✅ store/update используют $request->file() для загрузки ✅ toggleCorrect работает с icon.classList вместо innerHTML ✅ Исправлено наследование цвета иконки от кнопки Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
eefd5fc5da
commit
be1ba308c9
|
|
@ -53,6 +53,9 @@ class QuestionController extends Controller
|
||||||
'ordering_items' => 'nullable|array',
|
'ordering_items' => 'nullable|array',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Получаем картинки из request напрямую (не через validate)
|
||||||
|
$answersImages = $request->input('answers', []);
|
||||||
|
|
||||||
// Проверка что есть хотя бы текст или картинка в ответах
|
// Проверка что есть хотя бы текст или картинка в ответах
|
||||||
if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) {
|
if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) {
|
||||||
$hasValidAnswer = false;
|
$hasValidAnswer = false;
|
||||||
|
|
@ -79,14 +82,14 @@ class QuestionController extends Controller
|
||||||
|
|
||||||
// Ответы для multiple_choice
|
// Ответы для multiple_choice
|
||||||
if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) {
|
if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) {
|
||||||
foreach ($validated['answers'] as $answer) {
|
foreach ($validated['answers'] as $index => $answer) {
|
||||||
$hasText = !empty($answer['text']);
|
$hasText = !empty($answer['text']);
|
||||||
$hasImage = !empty($answer['image']);
|
$hasImage = $request->hasFile("answers.$index.image");
|
||||||
|
|
||||||
if ($hasText || $hasImage) {
|
if ($hasText || $hasImage) {
|
||||||
$imagePath = null;
|
$imagePath = null;
|
||||||
if ($hasImage) {
|
if ($hasImage) {
|
||||||
$imagePath = $answer['image']->store('questions/answers', 'public');
|
$imagePath = $request->file("answers.$index.image")->store('questions/answers', 'public');
|
||||||
}
|
}
|
||||||
$question->answers()->create([
|
$question->answers()->create([
|
||||||
'answer_text' => $hasText ? $answer['text'] : null,
|
'answer_text' => $hasText ? $answer['text'] : null,
|
||||||
|
|
@ -189,14 +192,14 @@ class QuestionController extends Controller
|
||||||
// Ответы
|
// Ответы
|
||||||
if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) {
|
if ($validated['type'] === 'multiple_choice' && !empty($validated['answers'])) {
|
||||||
$question->answers()->delete();
|
$question->answers()->delete();
|
||||||
foreach ($validated['answers'] as $answer) {
|
foreach ($validated['answers'] as $index => $answer) {
|
||||||
$hasText = !empty($answer['text']);
|
$hasText = !empty($answer['text']);
|
||||||
$hasImage = !empty($answer['image']);
|
$hasImage = $request->hasFile("answers.$index.image");
|
||||||
|
|
||||||
if ($hasText || $hasImage) {
|
if ($hasText || $hasImage) {
|
||||||
$imagePath = null;
|
$imagePath = null;
|
||||||
if ($hasImage) {
|
if ($hasImage) {
|
||||||
$imagePath = $answer['image']->store('questions/answers', 'public');
|
$imagePath = $request->file("answers.$index.image")->store('questions/answers', 'public');
|
||||||
}
|
}
|
||||||
$question->answers()->create([
|
$question->answers()->create([
|
||||||
'answer_text' => $hasText ? $answer['text'] : null,
|
'answer_text' => $hasText ? $answer['text'] : null,
|
||||||
|
|
|
||||||
|
|
@ -150,14 +150,17 @@ function removeAnswer(btn) { btn.parentElement.remove(); }
|
||||||
function toggleCorrect(btn) {
|
function toggleCorrect(btn) {
|
||||||
const inputGroup = btn.parentElement;
|
const inputGroup = btn.parentElement;
|
||||||
const hidden = inputGroup.querySelector('input[type="hidden"][name*="is_correct"]');
|
const hidden = inputGroup.querySelector('input[type="hidden"][name*="is_correct"]');
|
||||||
|
const icon = btn.querySelector('i');
|
||||||
if (hidden.value === '0') {
|
if (hidden.value === '0') {
|
||||||
hidden.value = '1';
|
hidden.value = '1';
|
||||||
btn.innerHTML = '<i class="bi bi-check-circle-fill text-success"></i>';
|
icon.classList.remove('bi-circle');
|
||||||
|
icon.classList.add('bi-check-circle-fill');
|
||||||
btn.classList.remove('btn-outline-success');
|
btn.classList.remove('btn-outline-success');
|
||||||
btn.classList.add('btn-success');
|
btn.classList.add('btn-success');
|
||||||
} else {
|
} else {
|
||||||
hidden.value = '0';
|
hidden.value = '0';
|
||||||
btn.innerHTML = '<i class="bi bi-circle"></i>';
|
icon.classList.remove('bi-check-circle-fill');
|
||||||
|
icon.classList.add('bi-circle');
|
||||||
btn.classList.remove('btn-success');
|
btn.classList.remove('btn-success');
|
||||||
btn.classList.add('btn-outline-success');
|
btn.classList.add('btn-outline-success');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -176,14 +176,17 @@ function removeAnswer(btn) { btn.parentElement.remove(); }
|
||||||
function toggleCorrect(btn) {
|
function toggleCorrect(btn) {
|
||||||
const inputGroup = btn.parentElement;
|
const inputGroup = btn.parentElement;
|
||||||
const hidden = inputGroup.querySelector('input[type="hidden"][name*="is_correct"]');
|
const hidden = inputGroup.querySelector('input[type="hidden"][name*="is_correct"]');
|
||||||
|
const icon = btn.querySelector('i');
|
||||||
if (hidden.value === '0') {
|
if (hidden.value === '0') {
|
||||||
hidden.value = '1';
|
hidden.value = '1';
|
||||||
btn.innerHTML = '<i class="bi bi-check-circle-fill text-success"></i>';
|
icon.classList.remove('bi-circle');
|
||||||
|
icon.classList.add('bi-check-circle-fill');
|
||||||
btn.classList.remove('btn-outline-success');
|
btn.classList.remove('btn-outline-success');
|
||||||
btn.classList.add('btn-success');
|
btn.classList.add('btn-success');
|
||||||
} else {
|
} else {
|
||||||
hidden.value = '0';
|
hidden.value = '0';
|
||||||
btn.innerHTML = '<i class="bi bi-circle"></i>';
|
icon.classList.remove('bi-check-circle-fill');
|
||||||
|
icon.classList.add('bi-circle');
|
||||||
btn.classList.remove('btn-success');
|
btn.classList.remove('btn-success');
|
||||||
btn.classList.add('btn-outline-success');
|
btn.classList.add('btn-outline-success');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue