Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
chamilo-lms/main/exercise/MultipleAnswerDropdown.php

155 lines
4.0 KiB

<?php
/* For licensing terms, see /license.txt */
class MultipleAnswerDropdown extends Question
{
public $typePicture = 'mcma_dropdown.png';
public $explanationLangVar = 'MultipleAnswerDropdown';
public function __construct()
{
parent::__construct();
$this->type = MULTIPLE_ANSWER_DROPDOWN;
}
public function createForm(&$form, $exercise)
{
global $text;
parent::createForm($form, $exercise);
$objExe = ChamiloSession::read('objExercise');
$form->addTextarea(
'list_text',
[get_lang('AnswerList'), get_lang('EnterListOfAnswersOneAnswerByLine)')],
['rows' => 8]
);
$form->addFile(
'list_file',
['', get_lang('OrSelectCsvFileWithListOfAnswers')],
['accept' => 'text/csv']
);
$buttonGroup = [];
if ($objExe->edit_exercise_in_lp == true ||
(empty($this->exerciseList) && empty($objExe->iid))
) {
$buttonGroup[] = $form->addButton(
'submitQuestion',
$text,
'check',
'primary',
'default',
null,
['id' => 'submit-question'],
true
);
}
$form->addGroup($buttonGroup);
if (!empty($this->iid) && !$form->isSubmitted()) {
$objAnswer = new Answer($this->iid, 0, $exercise, false);
$optionData = array_column(
$objAnswer->getAnswers(),
'answer'
);
$form->setDefaults(
['list_text' => implode(PHP_EOL, $optionData)]
);
}
}
public function createAnswersForm($form)
{
}
public function processCreation($form, $exercise)
{
$listFile = $form->getSubmitValue('list_file');
$listText = $form->getSubmitValue('list_text');
parent::processCreation($form, $exercise);
$lines = [];
if (UPLOAD_ERR_OK === (int) $listFile['error']) {
$csvData = Import::csvToArray($listFile['tmp_name']);
$lines = array_map(
function (array $row) {
return array_values($row)[0];
},
$csvData
);
} elseif (!empty($listText)) {
$lines = array_map(
function ($line) {
return trim($line);
},
explode("\n", $listText)
);
}
$lines = array_filter(
$lines,
function (string $line): bool {
$line = trim($line);
return !empty($line);
}
);
$objAnswer = new Answer($this->iid);
$i = 1;
foreach ($lines as $line) {
$isCorrect = 0;
if (isset($objAnswer->correct[$i])) {
$isCorrect = (int) $objAnswer->correct[$i];
}
$objAnswer->createAnswer($line, $isCorrect, '', 0, $i++);
}
$objAnswer->save();
}
/**
* @param FormValidator $form
* @param Exercise $exercise
*
* @return void
*/
public function processAnswersCreation($form, $exercise)
{
}
public function return_header(Exercise $exercise, $counter = null, $score = [])
{
$header = parent::return_header($exercise, $counter, $score);
$header .= '<table class="'.$this->question_table_class.'"><thead><tr>';
$header .= '<th class="text-center">'.get_lang('Choice').'</th>';
if ($exercise->showExpectedChoiceColumn()) {
$header .= '<th class="text-center">'.get_lang('ExpectedChoice').'</th>';
}
$header .= '<th>'.get_lang('Answer').'</th>';
if ($exercise->showExpectedChoice()) {
$header .= '<th class="text-center">'.get_lang('Status').'</th>';
}
$header .= '</tr></thead>';
return $header;
}
}