protected function form_dependencies(\MoodleQuickForm $mform, $questionnaire) { // Dependence fields. if ($questionnaire->navigate) { $position = $this->position !== 0 ? $this->position : count($questionnaire->questions) + 1; $dependencies = questionnaire_get_dependencies($questionnaire->questions, $position); $canchangeparent = true; if (count($dependencies) > 1) { if (isset($this->qid)) { $haschildren = questionnaire_get_descendants($questionnaire->questions, $this->qid); if (count($haschildren) !== 0) { $canchangeparent = false; $parent = questionnaire_get_parent($this); $fixeddependency = $parent[$this->id]['parent']; } } if ($canchangeparent) { $this->dependquestion = isset($this->dependquestion) ? $this->dependquestion . ',' . $this->dependchoice : '0,0'; $group = array($mform->createElement('selectgroups', 'dependquestion', '', $dependencies)); $mform->addGroup($group, 'selectdependency', get_string('dependquestion', 'questionnaire'), '', false); $mform->addHelpButton('selectdependency', 'dependquestion', 'questionnaire'); } else { $mform->addElement('static', 'selectdependency', get_string('dependquestion', 'questionnaire'), '<div class="dimmed_text">' . $fixeddependency . '</div>'); } $mform->addHelpButton('selectdependency', 'dependquestion', 'questionnaire'); } } }
public function definition() { global $CFG, $COURSE, $questionnaire, $question, $questionnairerealms, $SESSION; global $DB; // The 'sticky' required response value for further new questions. if (isset($SESSION->questionnaire->required) && !isset($question->qid)) { $question->required = $SESSION->questionnaire->required; } if (!isset($question->type_id)) { print_error('undefinedquestiontype', 'questionnaire'); } // Initialize question type defaults. switch ($question->type_id) { case QUESTEXT: $deflength = 20; $defprecise = 25; $lhelpname = 'fieldlength'; $phelpname = 'maxtextlength'; break; case QUESESSAY: $deflength = ''; $defprecise = ''; $lhelpname = 'textareacolumns'; $phelpname = 'textarearows'; break; case QUESCHECK: $deflength = 0; $defprecise = 0; $lhelpname = 'minforcedresponses'; $phelpname = 'maxforcedresponses'; $olabelname = 'possibleanswers'; $ohelpname = 'checkboxes'; break; case QUESRADIO: $deflength = 0; $defprecise = 0; $lhelpname = 'alignment'; $olabelname = 'possibleanswers'; $ohelpname = 'radiobuttons'; break; case QUESRATE: $deflength = 5; $defprecise = 0; $lhelpname = 'numberscaleitems'; $phelpname = 'kindofratescale'; $olabelname = 'possibleanswers'; $ohelpname = 'ratescale'; break; case QUESNUMERIC: $deflength = 10; $defprecise = 0; $lhelpname = 'maxdigitsallowed'; $phelpname = 'numberofdecimaldigits'; break; case QUESDROP: $deflength = 0; $defprecise = 0; $olabelname = 'possibleanswers'; $ohelpname = 'dropdown'; break; default: $deflength = 0; $defprecise = 0; } $defdependquestion = 0; $defdependchoice = 0; $dlabelname = 'dependquestion'; $mform =& $this->_form; // Display different messages for new question creation and existing question modification. if (isset($question->qid)) { $streditquestion = get_string('editquestion', 'questionnaire', questionnaire_get_type($question->type_id)); } else { $streditquestion = get_string('addnewquestion', 'questionnaire', questionnaire_get_type($question->type_id)); } switch ($question->type_id) { case QUESYESNO: $qtype = 'yesno'; break; case QUESTEXT: $qtype = 'textbox'; break; case QUESESSAY: $qtype = 'essaybox'; break; case QUESRADIO: $qtype = 'radiobuttons'; break; case QUESCHECK: $qtype = 'checkboxes'; break; case QUESDROP: $qtype = 'dropdown'; break; case QUESRATE: $qtype = 'ratescale'; break; case QUESDATE: $qtype = 'date'; break; case QUESNUMERIC: $qtype = 'numeric'; break; case QUESSECTIONTEXT: $qtype = 'sectiontext'; break; case QUESPAGEBREAK: $qtype = 'sectionbreak'; } $mform->addElement('header', 'questionhdredit', $streditquestion); $mform->addHelpButton('questionhdredit', $qtype, 'questionnaire'); // Name and required fields. if ($question->type_id != QUESSECTIONTEXT && $question->type_id != '') { $stryes = get_string('yes'); $strno = get_string('no'); $mform->addElement('text', 'name', get_string('optionalname', 'questionnaire'), array('size' => '30', 'maxlength' => '30')); $mform->setType('name', PARAM_TEXT); $mform->addHelpButton('name', 'optionalname', 'questionnaire'); $reqgroup = array(); $reqgroup[] =& $mform->createElement('radio', 'required', '', $stryes, 'y'); $reqgroup[] =& $mform->createElement('radio', 'required', '', $strno, 'n'); $mform->addGroup($reqgroup, 'reqgroup', get_string('required', 'questionnaire'), ' ', false); $mform->addHelpButton('reqgroup', 'required', 'questionnaire'); } // Length field. if ($question->type_id == QUESYESNO || $question->type_id == QUESDROP || $question->type_id == QUESDATE || $question->type_id == QUESSECTIONTEXT) { $mform->addElement('hidden', 'length', $deflength); } else { if ($question->type_id == QUESRADIO) { $lengroup = array(); $lengroup[] =& $mform->createElement('radio', 'length', '', get_string('vertical', 'questionnaire'), '0'); $lengroup[] =& $mform->createElement('radio', 'length', '', get_string('horizontal', 'questionnaire'), '1'); $mform->addGroup($lengroup, 'lengroup', get_string($lhelpname, 'questionnaire'), ' ', false); $mform->addHelpButton('lengroup', $lhelpname, 'questionnaire'); } else { if ($question->type_id == QUESTEXT || $question->type_id == QUESRATE) { $question->length = isset($question->length) ? $question->length : $deflength; $mform->addElement('text', 'length', get_string($lhelpname, 'questionnaire'), array('size' => '1')); $mform->setType('length', PARAM_TEXT); $mform->addHelpButton('length', $lhelpname, 'questionnaire'); } else { if ($question->type_id == QUESESSAY) { $responseformats = array("0" => get_string('formateditor', 'questionnaire'), "1" => get_string('formatplain', 'questionnaire')); $mform->addElement('select', 'precise', get_string('responseformat', 'questionnaire'), $responseformats); } else { if ($question->type_id == QUESCHECK || $question->type_id == QUESNUMERIC) { $question->length = isset($question->length) ? $question->length : $deflength; $mform->addElement('text', 'length', get_string($lhelpname, 'questionnaire'), array('size' => '1')); } } } } } $mform->setType('length', PARAM_INT); // Precision field. if ($question->type_id == QUESYESNO || $question->type_id == QUESDROP || $question->type_id == QUESDATE || $question->type_id == QUESSECTIONTEXT || $question->type_id == QUESRADIO) { $mform->addElement('hidden', 'precise', $defprecise); } else { if ($question->type_id == QUESRATE) { $precoptions = array("0" => get_string('normal', 'questionnaire'), "1" => get_string('notapplicablecolumn', 'questionnaire'), "2" => get_string('noduplicates', 'questionnaire'), "3" => get_string('osgood', 'questionnaire')); $mform->addElement('select', 'precise', get_string($phelpname, 'questionnaire'), $precoptions); $mform->addHelpButton('precise', $phelpname, 'questionnaire'); } else { if ($question->type_id == QUESESSAY) { $choices = array(); for ($lines = 5; $lines <= 40; $lines += 5) { $choices[$lines] = get_string('nlines', 'questionnaire', $lines); } $mform->addElement('select', 'length', get_string('responsefieldlines', 'questionnaire'), $choices); } else { if ($question->type_id == QUESCHECK || $question->type_id == QUESNUMERIC) { $question->precise = isset($question->precise) ? $question->precise : $defprecise; $mform->addElement('text', 'precise', get_string($phelpname, 'questionnaire'), array('size' => '1')); } } } } $mform->setType('precise', PARAM_INT); // Dependence fields. if ($questionnaire->navigate) { $position = isset($question->position) ? $question->position : count($questionnaire->questions) + 1; $dependencies = questionnaire_get_dependencies($questionnaire->questions, $position); $canchangeparent = true; if (count($dependencies) > 1) { if (isset($question->qid)) { $haschildren = questionnaire_get_descendants($questionnaire->questions, $question->qid); if (count($haschildren) !== 0) { $canchangeparent = false; $parent = questionnaire_get_parent($question); $fixeddependency = $parent[$question->id]['parent']; } } if ($canchangeparent) { $question->dependquestion = isset($question->dependquestion) ? $question->dependquestion . ',' . $question->dependchoice : '0,0'; $group = array($mform->createElement('selectgroups', 'dependquestion', '', $dependencies)); $mform->addGroup($group, 'selectdependency', get_string('dependquestion', 'questionnaire'), '', false); $mform->addHelpButton('selectdependency', 'dependquestion', 'questionnaire'); } else { $mform->addElement('static', 'selectdependency', get_string('dependquestion', 'questionnaire'), '<div class="dimmed_text">' . $fixeddependency . '</div>'); } $mform->addHelpButton('selectdependency', 'dependquestion', 'questionnaire'); } } // Content field. $modcontext = $this->_customdata['modcontext']; $editoroptions = array('maxfiles' => EDITOR_UNLIMITED_FILES, 'trusttext' => true, 'context' => $modcontext); $mform->addElement('editor', 'content', get_string('text', 'questionnaire'), null, $editoroptions); $mform->setType('content', PARAM_RAW); $mform->addRule('content', null, 'required', null, 'client'); // Options section: // has answer options ... so show that part of the form. if ($DB->get_field('questionnaire_question_type', 'has_choices', array('typeid' => $question->type_id)) == 'y') { if (!empty($question->choices)) { $numchoices = count($question->choices); } else { $numchoices = 0; } if (!empty($question->choices)) { foreach ($question->choices as $choiceid => $choice) { if (!empty($question->allchoices)) { $question->allchoices .= "\n"; } $question->allchoices .= $choice->content; } } else { $question->allchoices = ''; } $mform->addElement('html', '<div class="qoptcontainer">'); $options = array('wrap' => 'virtual', 'class' => 'qopts'); $mform->addElement('textarea', 'allchoices', get_string('possibleanswers', 'questionnaire'), $options); $mform->setType('allchoices', PARAM_RAW); $mform->addRule('allchoices', null, 'required', null, 'client'); $mform->addHelpButton('allchoices', $ohelpname, 'questionnaire'); $mform->addElement('html', '</div>'); $mform->addElement('hidden', 'num_choices', $numchoices); $mform->setType('num_choices', PARAM_INT); } // Hidden fields. $mform->addElement('hidden', 'id', 0); $mform->setType('id', PARAM_INT); $mform->addElement('hidden', 'qid', 0); $mform->setType('qid', PARAM_INT); $mform->addElement('hidden', 'sid', 0); $mform->setType('sid', PARAM_INT); $mform->addElement('hidden', 'type_id', $question->type_id); $mform->setType('type_id', PARAM_INT); $mform->addElement('hidden', 'action', 'question'); $mform->setType('action', PARAM_RAW); // Buttons. $buttonarray[] =& $mform->createElement('submit', 'submitbutton', get_string('savechanges')); if (isset($question->qid)) { $buttonarray[] =& $mform->createElement('submit', 'makecopy', get_string('saveasnew', 'questionnaire')); } $buttonarray[] =& $mform->createElement('cancel'); $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); }