* @version $Id: exercise.lib.php 19407 2009-03-29 19:37:05Z herodoto $
*/
/**
* @param int question id
* @param boolean only answers
* @param boolean origin i.e = learnpath
* @param int current item from the list of questions
* @param int number of total questions
* */
require("../inc/lib/fckeditor/fckeditor.php") ;
function showQuestion($questionId, $onlyAnswers=false, $origin=false,$current_item, $total_item)
{
echo '';
echo '';
// reads question informations
if(!$objQuestionTmp = Question::read($questionId))
{
// question not found
return false;
}
$answerType=$objQuestionTmp->selectType();
$pictureName=$objQuestionTmp->selectPicture();
if ($answerType != HOT_SPOT) // Question is not of type hotspot
{
if(!$onlyAnswers) {
$questionName=$objQuestionTmp->selectTitle();
$questionDescription=$objQuestionTmp->selectDescription();
$questionName=api_parse_tex($questionName);
$s="
".get_lang('Question').' ';
$s.=$current_item;
//@todo I need the get the feedback type
//if($answerType != 1)
//$s.=' / '.$total_item;
echo $s;
echo ' : ';
$s =$questionName.'
";
// construction of the Answer object
$objAnswerTmp=new Answer($questionId);
$nbrAnswers=$objAnswerTmp->selectNbrAnswers();
// only used for the answer type "Matching"
if($answerType == MATCHING)
{
$cpt1='A';
$cpt2=1;
$Select=array();
}
elseif($answerType == FREE_ANSWER)
{
#$comment = $objAnswerTmp->selectComment(1);
//
$oFCKeditor = new FCKeditor("choice[".$questionId."]") ;
$oFCKeditor->ToolbarSet = "FreeAnswer";
$oFCKeditor->Width = '100%';
$oFCKeditor->Height = '300';
$oFCKeditor->Value = '' ;
$s .= "
".$oFCKeditor->CreateHtml()."
";
//$s.="
";
}
for($answerId=1;$answerId <= $nbrAnswers;$answerId++)
{
$answer=$objAnswerTmp->selectAnswer($answerId);
$answerCorrect=$objAnswerTmp->isCorrect($answerId);
if($answerType == FILL_IN_BLANKS)
{
// splits text and weightings that are joined with the character '::'
list($answer)=explode('::',$answer);
// because [] is parsed here we follow this procedure:
// 1. find everything between the [tex] and [/tex] tags
$startlocations=strpos($answer,'[tex]');
$endlocations=strpos($answer,'[/tex]');
if($startlocations !== false && $endlocations !== false)
{
$texstring=substr($answer,$startlocations,$endlocations-$startlocations+6);
// 2. replace this by {texcode}
$answer=str_replace($texstring,'{texcode}',$answer);
}
// 3. do the normal matching parsing
// replaces [blank] by an input field
$answer=ereg_replace('\[[^]]+\]','',nl2br($answer));
// 4. replace the {texcode by the api_pare_tex parsed code}
$texstring = api_parse_tex($texstring);
$answer=str_replace("{texcode}",$texstring,$answer);
}
// unique answer
if($answerType == UNIQUE_ANSWER)
{
$s.="
";
}
// fill in blanks
elseif($answerType == FILL_IN_BLANKS)
{
$s.="
$answer
";
}
// free answer
// matching
else {
if(!$answerCorrect) {
// options (A, B, C, ...) that will be put into the list-box
$Select[$answerId]['Lettre']=$cpt1++;
// answers that will be shown at the right side
$answer = api_parse_tex($answer);
$Select[$answerId]['Reponse']=$answer;
} else {
$s.="
";
$cpt2++;
// if the left side of the "matching" has been completely shown
if($answerId == $nbrAnswers)
{
// if it remains answers to shown at the right side
while(isset($Select[$cpt2])) {
$s.="
";
$cpt2++;
} // end while()
} // end if()
}
}
} // end for()
$s .= '
';
// destruction of the Answer object
unset($objAnswerTmp);
// destruction of the Question object
unset($objQuestionTmp);
if ($origin != 'export')
{
echo $s;
}
else
{
return($s);
}
}
elseif ($answerType == HOT_SPOT) // Question is of type HOT_SPOT
{
$questionName=$objQuestionTmp->selectTitle();
$questionDescription=$objQuestionTmp->selectDescription();
// Get the answers, make a list
$objAnswerTmp=new Answer($questionId);
$nbrAnswers=$objAnswerTmp->selectNbrAnswers();
$answer_list = '
".get_lang('Question').' ';
$s.=$current_item;
//@todo I need to the get the feedback type
//if($answerType == 2)
// $s.=' / '.$total_item;
echo $s;
echo ': ';
$s =$questionName.'