Ejemplo n.º 1
0
function wrsqz_multipleAnswersTable($answer, $variables, $names) {
	$openmath = '<math xmlns="http://www.w3.org/1998/Math/MathML">';
	$closemath = '</math>';
	
	// x=v1;y=v2
    if(!isset($names)) $names = $answer;
    //clean $names array
    $names = explode(' ',$names);
    $cleanNames=array();
    foreach ($names as $name){
        if ($name[0]!='(') { //skip parameters
            if($name[0]=='#'){
                $name = mb_substr($name,1);
            }
            $cleanNames[]=$name;
        }
    }
    //make values array
	$vars = explode(' ',$answer);
    $values=array();
    foreach ($vars as $var){
        if ($var[0]!='(') { // skip parameters
            if($var[0]!='#') $var = '#'.$var;
            $value = wrsqz_assemble(wrsqz_textToVariables($var), $variables);
		//remove <math...> and </math>
		    $value = mb_substr($value,mb_strlen($openmath),-mb_strlen($closemath));
            $values[] = $value;
        }
    }

    //Write mathml
    $r = $openmath .'<mtable columnalign="left" rowspacing="0">';
	foreach ($cleanNames as $index => $name) {
		if ($var[0]!='(') { // skip parameters
			$r .= '<mtr><mtd>';
			$r .= '<mi>' . $name . '</mi>';
			$r .= '<mo>=</mo>';
			$r .= $values[$index];
			$r .= '</mtd></mtr>';
		}
	}
	$r .= '</mtable>'. $closemath;
	return $r;
}
function wrsqz_get_correct_responses($questionType, $dbType, $response, &$question, &$state, $mode = 'M') {
//mode='M' => MathML <math xmlns=".......
//mode='W' => encoded MathML for filtering  �math xmlns=�...
//mode='T' => Plain Text 2^(1/2)...

	if ($questionType == 'shortanswer') {
            if (!is_array($response)){
                $response = array();
            }
            
            mb_parse_str($question->options->wiris->eqoption, $eqoptionArray);
            $editor = isset($eqoptionArray['editor']) && $eqoptionArray['editor'] == 'true';
            $multipleAnswers = $editor && isset($eqoptionArray['multipleAnswers']) && $eqoptionArray['multipleAnswers'] == 'true';
            
            //get the first maximum graded answer and, in the multipleanswer case,
            //the names of the variables to be used (depending on if we use test
            //functions or not).
            if($question->options->answers){
            	foreach ($question->options->answers as $answer) {
                    if (((int) $answer->fraction) === 1) {
                        $correctanswer = $answer->answer;
                        if($multipleAnswers){
                            if (isset($eqoptionArray['testFunction']) && isset($eqoptionArray['testFunction'][$answer->id])){
                                $index = $eqoptionArray['testFunction'][$answer->id];
                                $names = $eqoptionArray['testFunctionName'][$index];
                            }else{
                                $names = $answer->answer;
                            }
                        }
                    }
                }
	    }else{
                $correctanswer=null;
            }
		//$correctanswer=#p
		//encode it depending on the use of wiris editor and the desired mode

		if ($editor) {
			if ($multipleAnswers) {
				if ($mode == 'T'){
					//plain text for directly display (space separated)
					$response['']=wrsqz_assemble(wrsqz_variablesToText($correctanswer), $state->vars);
				}else if($mode == 'M'){
					//mathml for an applet
					$response['']=wrsqz_multipleAnswersTable($correctanswer,$state->vars,$names);
				}else if($mode == 'W'){
					//encoded mathml for filtering
					$response['']=wrsqz_multipleAnswersTable($correctanswer,$state->vars, $names);
					$response['']=wrsqz_mathmlEncode($response['']);
				}
			} else {
				if ($mode == 'T'){
					$response[''] = wrsqz_assemble(wrsqz_variablesToText($correctanswer), $state->vars);
				}else if ($mode == 'M'){
					$response[''] = wrsqz_assemble(wrsqz_textToVariables($correctanswer), $state->vars);
				}else if ($mode == 'W'){
					$response[''] = wrsqz_assemble($correctanswer, $state->vars);
				}
			}
		} else {
			//if editor is not used, we use text mode (T) always.
			$response[''] = wrsqz_assemble(wrsqz_variablesToText($correctanswer), $state->vars);
		}
	}
	return $response;
}