Add ordinary set ordering and random frontend questions
This commit is contained in:
@@ -8,6 +8,7 @@ use Joomla\CMS\Router\Route;
|
||||
HTMLHelper::_('behavior.formvalidator');
|
||||
?>
|
||||
<form action="<?php echo Route::_('index.php?option=com_testquestions&view=set&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate">
|
||||
<?php $canOrderQuestions = !$this->isVariant && (string) $this->item->set_type === 'ordinary'; ?>
|
||||
<fieldset class="adminform">
|
||||
<?php echo $this->form->renderField('parent_id'); ?>
|
||||
<?php if ($this->isVariant) : ?>
|
||||
@@ -51,10 +52,14 @@ HTMLHelper::_('behavior.formvalidator');
|
||||
<?php if (!((string) $this->item->set_type === 'multi' && (int) $this->item->parent_id === 0)) : ?>
|
||||
<fieldset class="mb-3">
|
||||
<legend><?php echo \Joomla\CMS\Language\Text::_('COM_TESTQUESTIONS_SET_SELECTED_QUESTIONS'); ?></legend>
|
||||
<div id="set-selected-question-list" class="border rounded p-3">
|
||||
<?php foreach ($this->questions as $question) : ?>
|
||||
<?php if (!in_array((int) $question->id, array_map('intval', (array) $this->item->question_ids), true)) continue; ?>
|
||||
<div class="form-check set-question-row">
|
||||
<?php if ($canOrderQuestions) : ?>
|
||||
<div class="form-text mb-2"><?php echo \Joomla\CMS\Language\Text::_('COM_TESTQUESTIONS_SET_REORDER_INFO'); ?></div>
|
||||
<?php endif; ?>
|
||||
<div id="set-selected-question-list" class="border rounded p-3" data-sortable="<?php echo $canOrderQuestions ? '1' : '0'; ?>">
|
||||
<?php $questionsById = []; foreach ($this->questions as $availableQuestion) : $questionsById[(int) $availableQuestion->id] = $availableQuestion; endforeach; ?>
|
||||
<?php foreach ((array) $this->item->question_ids as $selectedQuestionId) : ?>
|
||||
<?php $question = $questionsById[(int) $selectedQuestionId] ?? null; if (!$question) continue; ?>
|
||||
<div class="form-check set-question-row"<?php echo $canOrderQuestions ? ' draggable="true"' : ''; ?>>
|
||||
<input class="form-check-input" type="checkbox" name="jform[question_ids][]" value="<?php echo (int) $question->id; ?>" id="set-question-<?php echo (int) $question->id; ?>" checked>
|
||||
<label class="form-check-label" for="set-question-<?php echo (int) $question->id; ?>">
|
||||
<span class="badge bg-secondary"><?php echo $this->escape($question->category_title ?: \Joomla\CMS\Language\Text::_('COM_TESTQUESTIONS_UNCATEGORIZED')); ?></span>
|
||||
@@ -124,6 +129,47 @@ HTMLHelper::_('behavior.formvalidator');
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</form>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const list = document.getElementById('set-selected-question-list');
|
||||
|
||||
if (!list || list.dataset.sortable !== '1') {
|
||||
return;
|
||||
}
|
||||
|
||||
let dragged = null;
|
||||
|
||||
list.querySelectorAll('.set-question-row[draggable="true"]').forEach(function (row) {
|
||||
row.addEventListener('dragstart', function (event) {
|
||||
dragged = row;
|
||||
row.classList.add('opacity-50');
|
||||
event.dataTransfer.effectAllowed = 'move';
|
||||
});
|
||||
|
||||
row.addEventListener('dragend', function () {
|
||||
row.classList.remove('opacity-50');
|
||||
dragged = null;
|
||||
});
|
||||
|
||||
row.addEventListener('dragover', function (event) {
|
||||
event.preventDefault();
|
||||
event.dataTransfer.dropEffect = 'move';
|
||||
});
|
||||
|
||||
row.addEventListener('drop', function (event) {
|
||||
event.preventDefault();
|
||||
|
||||
if (!dragged || dragged === row) {
|
||||
return;
|
||||
}
|
||||
|
||||
const rect = row.getBoundingClientRect();
|
||||
const insertAfter = event.clientY > rect.top + rect.height / 2;
|
||||
list.insertBefore(dragged, insertAfter ? row.nextSibling : row);
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const filter = document.getElementById('set-question-category');
|
||||
const rows = document.querySelectorAll('.set-available-question-row');
|
||||
|
||||
Reference in New Issue
Block a user