function definition_inner(&$mform) { //parent::definition_inner($mform);s global $QTYPES; //unpatched version of question_type_menu() $question_type_names = array(); foreach($QTYPES as $name => $qtype){ $menuname = $qtype->menu_name(); if ($menuname) { $question_type_names[$name] = $menuname; } } $mform->addRule('questiontext', null, 'required', null, 'client'); // Remove meaningless defaultgrade field. $mform->removeElement('defaultgrade'); // display the questions from questiontext; if ( "" != optional_param('questiontext','', PARAM_RAW)) { $form = new stdClass; $form->questiontext = optional_param('questiontext','', PARAM_RAW); $form->hiddenCASValue = optional_param('hiddenCASValue','',PARAM_RAW); $this->questiondisplay = fullclone(wrsqz_qtype_multianswer_extract_question($form)) ; }else { $this->questiondisplay = ""; } if ( isset($this->questiondisplay->options->questions) && is_array($this->questiondisplay->options->questions) ) { $countsubquestions =0; foreach($this->questiondisplay->options->questions as $subquestion){ if (!empty($subquestion)){ $countsubquestions++; } } } else { $countsubquestions =0; } $mform->addElement('submit', 'analyzequestion', get_string('decodeverifyquestiontext','qtype_multianswer')); $mform->registerNoSubmitButton('analyzequestion'); for ($sub =1;$sub <=$countsubquestions ;$sub++) { $this->editas[$sub] = 'unknown type'; if (isset( $this->questiondisplay->options->questions[$sub]->qtype) ) { $this->editas[$sub] = $this->questiondisplay->options->questions[$sub]->qtype ; } else if (optional_param('sub_'.$sub."_".'qtype', '', PARAM_RAW) != '') { $this->editas[$sub] = optional_param('sub_'.$sub."_".'qtype', '', PARAM_RAW); } $mform->addElement('header', 'subhdr', get_string('questionno', 'quiz', '{#'.$sub.'}').' '.$question_type_names[$this->questiondisplay->options->questions[$sub]->qtype]); $mform->addElement('static', 'sub_'.$sub."_".'questiontext', get_string('questiondefinition','qtype_multianswer'),array('cols'=>60, 'rows'=>3)); if (isset ( $this->questiondisplay->options->questions[$sub]->questiontext)) { $mform->setDefault('sub_'.$sub."_".'questiontext', $this->questiondisplay->options->questions[$sub]->questiontext); } $mform->addElement('static', 'sub_'.$sub."_".'defaultgrade', get_string('defaultgrade', 'quiz')); $mform->setDefault('sub_'.$sub."_".'defaultgrade',$this->questiondisplay->options->questions[$sub]->defaultgrade); if ($this->questiondisplay->options->questions[$sub]->qtype =='shortanswer' ) { $mform->addElement('static', 'sub_'.$sub."_".'usecase', get_string('casesensitive', 'quiz')); } if ($this->questiondisplay->options->questions[$sub]->qtype =='multichoice' ) { $mform->addElement('static', 'sub_'.$sub."_".'layout', get_string('layout', 'qtype_multianswer'),array('cols'=>60, 'rows'=>1)) ;//, $gradeoptions); } foreach ($this->questiondisplay->options->questions[$sub]->answer as $key =>$ans) { $mform->addElement('static', 'sub_'.$sub."_".'answer['.$key.']', get_string('answer', 'quiz'), array('cols'=>60, 'rows'=>1)); if ($this->questiondisplay->options->questions[$sub]->qtype =='numerical' && $key == 0 ) { $mform->addElement('static', 'sub_'.$sub."_".'tolerance['.$key.']', get_string('acceptederror', 'quiz')) ;//, $gradeoptions); } $mform->addElement('static', 'sub_'.$sub."_".'fraction['.$key.']', get_string('grade')) ;//, $gradeoptions); $mform->addElement('static', 'sub_'.$sub."_".'feedback['.$key.']', get_string('feedback', 'quiz')); } } wrsqz_definition_inner('multianswer', 'wmansprom', $mform); }
function save_question($authorizedquestion, $form, $course) { wrsqz_presave_question('multianswer', 'wmansprom', $authorizedquestion, $form, $course); global $CFG; require_once $CFG->dirroot . '/wiris-quizzes/lib/libquestiontype.php'; $question = wrsqz_qtype_multianswer_extract_question($form); if (isset($authorizedquestion->id)) { $question->id = $authorizedquestion->id; } $question->category = $authorizedquestion->category; $form->course = $course; // To pass the course object to // save_question_options, where it is // needed to call type specific // save_question methods. $form->defaultgrade = $question->defaultgrade; $form->questiontext = $question->questiontext; // We do not force MOODLE_FORMAT: it is incoherent with default // multianswer behavior, but MOODLE_FORMAT will introduce links, // smileys and other undesired features, and it is coherent with // default questiontype behavior. // $form->questiontextformat = 0; $form->options = clone $question->options; unset($question->options); return default_questiontype::save_question($question, $form, $course); }
function wrsqz_import_from_xml($questionType, $dbType, &$data, &$question, &$format, &$extra) { if (isset($data['@']['type']) && $data['@']['type'] == $questionType . 'wiris') { $qfxml = new qformat_xml(); if ($questionType == 'essay') { $question = $qfxml->import_essay($data); }else if ($questionType == 'match') { $question = $qfxml->import_matching($data); }else if ($questionType == 'multichoice') { $question = $qfxml->import_multichoice($data); }else if ($questionType == 'truefalse') { $question = $qfxml->import_truefalse($data); }else if ($questionType == 'shortanswer') { $question = $qfxml->import_shortanswer($data); }else if ($questionType == 'multianswer') { $questiontext = $data['#']['wirisquestiontext'][0]['#']['text']; $container = new stdClass; $container->questiontext = $qfxml->import_text($questiontext); $question = wrsqz_qtype_multianswer_extract_question($container); $question->course = $qfxml->course; $question->generalfeedback = $qfxml->getpath($data, array('#','generalfeedback',0,'#','text',0,'#'), '', true ); $question->name = $qfxml->import_text( $data['#']['name'][0]['#']['text'] ); } unset($qfxml); $question->qtype = $questionType . 'wiris'; $program = wrsqz_mathmlDecode($format->getpath($data, array('#', 'wirisquestion', 0, '#'), 0)); $imported = wrsqz_importCASSession($program); if($imported===false) return false; $question->hiddenCASValue = $imported[0]; $translation = $imported[1]; if ($questionType == 'shortanswer') { mb_parse_str($format->getpath($data, array('#', 'wiriseditor', 0, '#'), 0), $eqoptionArray); $question->wirisEditor = (isset($eqoptionArray['editor']) && $eqoptionArray['editor'] == 'true') ? 'editor=true' : ''; $question->multipleAnswers = (isset($eqoptionArray['multipleAnswers']) && $eqoptionArray['multipleAnswers'] == 'true') ? 'multipleAnswers=true' : ''; $question->wirisCASForComputations = (isset($eqoptionArray['wirisCASForComputations']) && $eqoptionArray['wirisCASForComputations'] == 'true') ? 'wirisCASForComputations=true' : ''; if(isset($eqoptionArray['testFunctionName'])){ foreach ($eqoptionArray['testFunctionName'] as $index => $functionName){ if(!empty($functionName)){ $question->testFunctionName[$index]=$functionName; } } } }else if ($questionType == 'multichoice') { $question->gradeOverride = explode(';', $format->getpath($data, array('#', 'wirisoverrideanswer', 0, '#'), 0)); }else if ($questionType == 'truefalse') { $question->wirisAnswer = $format->getpath($data, array('#', 'wirisoverrideanswer', 0, '#'), 0); }else if ($questionType == 'multianswer'){ //mb_parse_str($format->getpath($data, array('#', 'wiriseditor', 0, '#'), 0), $eqoptionArray); //$question->wirisEditor = (isset($eqoptionArray['editor']) && $eqoptionArray['editor'] == 'true') ? 'editor=true' : ''; } $options = $format->getpath($data, array('#', 'wirisoptions',0,'#'), array()); $question->wirisCASForComputations = $format->getpath($options, array('wirisCASForComputations',0,'#'),0); //TODO: translate cas if needed. $question->hiddenInitialCASValue = wrsqz_mathmlDecode($format->getpath($options, array('hiddenInitialCASValue',0,'#'),0)); if(!empty($translation)){ wrsqz_replaceVarReferencesInFlatQuestion($questionType, $question, $translation); } return $question; } return false; }