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;
}
예제 #2
0
    }
    $variableString = implode(',', $variables);
    // ##Ma,##Mb
    //call servlet in order to evaluate the program & get variables
    $message = callServlet($variableString, $problem);
    //clean undefined variables from servlet response
    $definedNames = array();
    foreach ($message['vars'] as $variable => $value) {
        if ($value != 'undefined' && $value != 'no_definido' && $value != 'indefinit' && $value != 'indéfini' && $value != 'indefinito') {
            $definedNames[] = mb_substr($variable, 3);
        }
    }
    if (!empty($definedNames)) {
        $definedNamesString = implode(' ', $definedNames);
        // Generate the MathML output
        $editorMathML = wrsqz_multipleAnswersTable($definedNamesString, $message['vars'], $definedNamesString);
        echo $editorMathML;
    } else {
        echo '<math></math>';
    }
} else {
    //If multipleAnswers is not et, we copy the last WIRIS CAS output
    //Get the last output inside WIRIS CAS mathML.
    $start = strlastpos($problem, '<output>') + strlen('<output>');
    $end = strlastpos($problem, '</output>');
    $math = mb_substr($problem, $start, $end - $start);
    //remove the <math> tag
    $start = mb_strpos($math, '>') + 1;
    $end = mb_strrpos($math, '<');
    $math = mb_substr($math, $start, $end - $start);
    //We have the WIRIS CAS MathML, but we want the Editor MathML. We use the service with a convenient program