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.
		
		
		
		
		
			
		
			
				
					
					
						
							138 lines
						
					
					
						
							3.5 KiB
						
					
					
				
			
		
		
	
	
							138 lines
						
					
					
						
							3.5 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)) {
 | 
						|
            $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']) {
 | 
						|
            $lines = Import::csvColumnToArray($listFile['tmp_name']);
 | 
						|
        } elseif (!empty($listText)) {
 | 
						|
            $lines = explode("\n", $listText);
 | 
						|
        }
 | 
						|
 | 
						|
        $lines = array_map('trim', $lines);
 | 
						|
        $lines = array_filter($lines);
 | 
						|
 | 
						|
        $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, '', $objAnswer->weighting[$i] ?? 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;
 | 
						|
    }
 | 
						|
}
 | 
						|
 |