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.'}').'&nbsp;'.$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);
	}
Ejemplo n.º 2
0
 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;
}