diff --git a/classes/Quiz.class.php b/classes/Quiz.class.php index 0848c91..be3ddef 100755 --- a/classes/Quiz.class.php +++ b/classes/Quiz.class.php @@ -1,6 +1,6 @@ topicID=0; $this->questionLimit=0; $this->questionList= array(); @@ -28,498 +29,508 @@ class Quiz $this->rawToPass; $this->question=new Question(); $this->percentTest=0; - } - - function getQuestionLimit() { - return $this->questionLimit; - } - - function setQuestionLimit($numOfQu){ - $this->questionLimit= $numOfQu; - } - - function setTopicID($id) { + } + + function getQuestionLimit() { + return $this->questionLimit; + } + + function setQuestionLimit($numOfQu){ + $this->questionLimit= $numOfQu; + } + + function setTopicID($id) { $this->topicID=$id; - } - - function getTopicID(){ + } + + function getTopicID(){ return $this->topicID; - } - - - function getAnswerList () { - return $this->answerList; - } - - function setRawToPass($percentage){ - $this->rawToPass=$percentage; - } - - function generateQuestions(){ // Fragen werden random aus DB gelesen - $sqlGetQu=" SELECT q_id,qt_id,t_id,question,description FROM questions WHERE t_id =".intval($this->topicID)." AND active=".intval(1)." ORDER BY RAND()LIMIT ".intval($this->questionLimit).""; - $queryGetQu = mysql_query($sqlGetQu); - $number=mysql_num_rows($queryGetQu); - if($number== $this->questionLimit){ - $i=1; // zähler - while($questions =mysql_fetch_array($queryGetQu ,MYSQL_BOTH )) - { - - $this->questionList[$i]['q_id']=$questions['q_id']; // in arra speichern - $this->questionList[$i]['qt_id']=$questions['qt_id']; - $this->questionList[$i]['t_id']=$questions['t_id']; - $this->questionList[$i]['question']=stripslashes($questions['question']); - $this->questionList[$i]['description']=$questions['description']; - $sqlGetNumber="SELECT count(a_id)as number FROM answers WHERE q_id=".intval($questions['q_id'])." GROUP BY q_id"; - $queryGetNumber = mysql_query($sqlGetNumber); - while($number =mysql_fetch_array( $queryGetNumber ,MYSQL_BOTH )) - { - $this->questionList[$i]['numberOfAnswers']=$number['number']; - } - if($this->questionList[$i]['description']==1) { - // beschreibung in Session speichern falls vorhanden - $sql_desc="SELECT description FROM question_description WHERE q_id=".intval($questions['q_id']).""; - $query_desc=mysql_query($sql_desc); - $desc = mysql_fetch_assoc($query_desc); - $this->questionList[$i]['description_text']=stripslashes($desc['description']); - } - $i++; - } - $_SESSION['values']['questionList']=$this->questionList; - } - else{ - echo "
".Class_Quiz_01."
"; - $value ="notEnoughQuestions"; - return $value; - } - } - - - - function getQuestionList() { - return $this->questionList; - } - - - function setQuestions() { - $this->questionList=$_SESSION['values']['questionList']; - } - - - function getDBAnswers() { // Antworten zu den Frage aus DB holen - for($i=1;$i<=$this->questionLimit;$i++){ - $value= $this->questionList[$i]['q_id']; - $sqlGetAns="SELECT a_id,answer,correct FROM answers WHERE q_id=".intval($value)." ORDER BY RAND()"; - $queryGetAns = mysql_query($sqlGetAns); - $j=1; // Zähler - while($answers =mysql_fetch_array($queryGetAns ,MYSQL_BOTH )) { - $this->answerList[$value][$j]['q_id']= $value; - $this->answerList[$value][$j]['a_id']=$answers['a_id']; // in arra speichern - $this->answerList[$value][$j]['answer']=stripslashes($answers['answer']); - $this->answerList[$value][$j]['correct']=$answers['correct']; - $j++; - } - } - $_SESSION ['values'] ['answerList']= $this->answerList; - } - - function setAnswers(){ - $this->answerList=$_SESSION ['values']['answerList']; - } - + } + + + function getAnswerList () { + return $this->answerList; + } + + function setRawToPass($percentage){ + $this->rawToPass=$percentage; + } + + function generateQuestions(){ // Fragen werden random aus DB gelesen + $sqlGetQu=" SELECT q_id,qt_id,t_id,question,description FROM questions WHERE t_id =".intval($this->topicID)." AND active=".intval(1)." ORDER BY RAND()LIMIT ".intval($this->questionLimit).""; + $queryGetQu = mysql_query($sqlGetQu); + $number=mysql_num_rows($queryGetQu); + if($number== $this->questionLimit){ + $i=1; // zähler + while($questions =mysql_fetch_array($queryGetQu ,MYSQL_BOTH )) + { + + $this->questionList[$i]['q_id']=$questions['q_id']; // in arra speichern + $this->questionList[$i]['qt_id']=$questions['qt_id']; + $this->questionList[$i]['t_id']=$questions['t_id']; + $this->questionList[$i]['question']=stripslashes($questions['question']); + $this->questionList[$i]['description']=$questions['description']; + $sqlGetNumber="SELECT count(a_id)as number FROM answers WHERE q_id=".intval($questions['q_id'])." GROUP BY q_id"; + $queryGetNumber = mysql_query($sqlGetNumber); + while($number =mysql_fetch_array( $queryGetNumber ,MYSQL_BOTH )) + { + $this->questionList[$i]['numberOfAnswers']=$number['number']; + } + if($this->questionList[$i]['description']==1) { + // beschreibung in Session speichern falls vorhanden + $sql_desc="SELECT description FROM question_description WHERE q_id=".intval($questions['q_id']).""; + $query_desc=mysql_query($sql_desc); + $desc = mysql_fetch_assoc($query_desc); + $this->questionList[$i]['description_text']=stripslashes($desc['description']); + } + $i++; + } + $_SESSION['values']['questionList']=$this->questionList; + } else { + echo "
".Class_Quiz_01."
"; + $value ="notEnoughQuestions"; + return $value; + } + } + + + + function getQuestionList() { + return $this->questionList; + } + + + function setQuestions() { + $this->questionList=$_SESSION['values']['questionList']; + } + + + function getDBAnswers() { // Antworten zu den Frage aus DB holen + for($i=1;$i<=$this->questionLimit;$i++){ + $value= $this->questionList[$i]['q_id']; + $sqlGetAns="SELECT a_id,answer,correct FROM answers WHERE q_id=".intval($value)." ORDER BY RAND()"; + $queryGetAns = mysql_query($sqlGetAns); + $j=1; // Zähler + while($answers =mysql_fetch_array($queryGetAns ,MYSQL_BOTH )) { + $this->answerList[$value][$j]['q_id']= $value; + $this->answerList[$value][$j]['a_id']=$answers['a_id']; // in arra speichern + $this->answerList[$value][$j]['answer']=stripslashes($answers['answer']); + $this->answerList[$value][$j]['correct']=$answers['correct']; + $j++; + } + } + $_SESSION ['values'] ['answerList']= $this->answerList; + } + + function setAnswers(){ + $this->answerList=$_SESSION ['values']['answerList']; + } + function setSelectedAnswers (){ - $this->selectedAnswers=$_SESSION ['values']['selectedAnswers']; - } - + $this->selectedAnswers=$_SESSION ['values']['selectedAnswers']; + } + function showQuiz() { - echo "
"; - echo "
"; - echo " ".Class_Quiz_02.""; - echo ""; - for($i=1;$i<=$this->questionLimit;$i++) { - $value= $this->questionList[$i]['q_id']; // Value den Wert der q_id geben - $question=str_replace("\n", "
", $this->questionList[$i]['question']); - echo ""; - echo""; - - if($this->questionList[$i]['qt_id']!=4) { - echo" "; - echo""; + echo ""; + echo "
"; + echo " ".Class_Quiz_02.""; + echo "
".Global_08." $i: $question
"; + for($i=1;$i<=$this->questionLimit;$i++) { + $value= $this->questionList[$i]['q_id']; // Value den Wert der q_id geben + $question=str_replace("\n", "
", $this->questionList[$i]['question']); + echo ""; + echo""; + + if($this->questionList[$i]['qt_id']!=4) { + echo" "; + echo""; } // wenn der Typ nicht 4 ist anzeigen - + if($this->questionList[$i]['qt_id']==1) $this->SingleSelection($i,$value); if($this->questionList[$i]['qt_id']==2) $this->MultipleChoice($i,$value); if($this->questionList[$i]['qt_id']==3) $this->SingleSelection($i,$value); // Kann die selbe Maske verwendet werden if($this->questionList[$i]['qt_id']==4) $this->FillInTheBlanks($i,$value,$question); - } - echo ""; - echo ""; - echo ""; - echo "
".Global_08." $i: $question
"; - echo""; - //echo""; - //echo""; - echo" "; - echo "
"; - echo "
"; - echo"
"; - } - - function SingleSelection($i,$value){ - for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++){ // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist - $answer=$this->answerList[$value][$j]['answer']; - $answerNumber=$this->answerList[$value][$j]['a_id']; - if($answer!=null) { // Wenn es eine Antwort gibt soll diese angezeigt werden - echo ""; - echo ""; - echo""; - if ($answer=='true') echo" ".Class_Answer_09.""; - else if ($answer=='false') echo" ".Class_Answer_10.""; - else echo" $answer"; - echo ""; - echo ""; - } - } - echo ""; - } - - function MultipleChoice($i,$value){ - for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++){ // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist - $answer=$this->answerList[$value][$j]['answer']; - $answerNumber=$this->answerList[$value][$j]['a_id']; - if($answer!=null){ // Wenn es eine Antwort gibt soll diese angezeigt werden - echo ""; - echo ""; - echo ""; - echo " $answer "; - echo ""; - echo ""; - } - } - echo ""; - } - - function randomizeArray($answerList,$value) { - $max=count($answerList[$value]); // setze Maximum - $index=range(1,$max); // Kreiire Array - shuffle($index); // würfle array - $copy= $answerList; // kopie erstellen - for($i=0;$i<$max;$i++){ - $k=$index[$i]; - $answerList[$value][$i+1]=$copy[$value][$k]; // zuweisen - } - $_SESSION ['values'] ['answerList']= $answerList; - return $answerList; - } - - function FillInTheBlanks($i,$value,$question) { - - echo ''; - $correctAns=$this->question->getCorrectAnswerFillInTheBlanks($question); // korrekte Antworen ermitteln - $numberOfAnswers=$this->questionList[$i]['numberOfAnswers']; - for ($l=0;$l $value, 'a_id' => $correctAns[$l+1]['answer'],'answer' =>$correctAns[$l+1]['answer'],'correct'=>1,'blank'=>$correctAns[$l+1]['blank']); - $numberOfAnswers=$numberOfAnswers+1; // Anzahl der Antworten erhöhen - $this->answerList[$value][$numberOfAnswers]= $addCorrect ; // an richtiger Stelle einfügen - } - $this->answerList=$this->randomizeArray($this->answerList,$value); - - $addSlashes= preg_quote($question, '[^]'); // Slash hinzufügen wenn KLammer gefunden wird - $array=explode('\\',$addSlashes); // String teilen - for($k=0;$k "; - for ($j=1;$j<=$numberOfAnswers;$j++){ // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist - $answer=$this->answerList[$value][$j]['answer']; - $answerNumber=$this->answerList[$value][$j]['a_id']; - //echo $this->answerList[$value][$j]['a_id']; - echo""; - } - echo""; - } - - else if((strstr($array[$k],']'))){ - $array[$k]=str_replace("]",'', $array[$k]); // Klammer entfernen - echo $array[$k]; - } - else echo $array[$k]; - } + } + echo ""; + echo ""; + echo""; + //echo""; + //echo""; + echo" "; echo ""; - echo ""; echo ""; - echo ""; - } - - - - function evaluateQuiz() { - - echo"
"; - echo "
"; - - echo "".Class_Quiz_03."\n"; - echo ""; - for($i=1;$i<=count($this->questionList);$i++){ - $value= $this->questionList[$i]['q_id']; // Value den Wert der q_id geben - $question=str_replace("\n", "
", $this->questionList[$i]['question']); - echo "\n"; - echo""; - echo" "; - echo ""; - } - $this->topicID=$this->questionList[$i]['t_id']; - switch($this->questionList[$i]['qt_id']){ - case 1: {$this->evaluateSingleSelection($i,$value); - - break;} - case 2: {$this->evaluateMultipleChoice($i,$value); - - break;} - case 3: { $this->evaluateSingleSelection($i,$value); // Kann die selbe Maske verwendet werden - - break;} - case 4:{ //$this->getDBAnswers(); - $this->evaluateFillInTheBlanks($i,$value,$question); - - break;} + echo "
".Global_08." $i : "; - if($this->questionList[$i]['qt_id']!=4){ - echo" $question
"; + echo "
"; + echo""; + } + + function SingleSelection($i,$value){ + for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++){ // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist + $answer=$this->answerList[$value][$j]['answer']; + $answerNumber=$this->answerList[$value][$j]['a_id']; + if($answer!=null) { // Wenn es eine Antwort gibt soll diese angezeigt werden + echo ""; + echo ""; + echo""; + if ($answer=='true') echo" ".Class_Answer_09.""; + else if ($answer=='false') echo" ".Class_Answer_10.""; + else echo" $answer"; + echo ""; + echo ""; + } + } + echo ""; + } + + function MultipleChoice($i,$value){ + for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++){ // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist + $answer=$this->answerList[$value][$j]['answer']; + $answerNumber=$this->answerList[$value][$j]['a_id']; + if($answer!=null){ // Wenn es eine Antwort gibt soll diese angezeigt werden + echo ""; + echo ""; + echo ""; + echo " $answer "; + echo ""; + echo ""; + } + } + echo ""; + } + + function randomizeArray($answerList,$value) { + $max=count($answerList[$value]); // setze Maximum + $index=range(1,$max); // Kreiire Array + shuffle($index); // würfle array + $copy= $answerList; // kopie erstellen + for($i=0;$i<$max;$i++){ + $k=$index[$i]; + $answerList[$value][$i+1]=$copy[$value][$k]; // zuweisen + } + $_SESSION ['values'] ['answerList']= $answerList; + return $answerList; + } + + function FillInTheBlanks($i,$value,$question) { + echo ''; + $correctAns=$this->question->getCorrectAnswerFillInTheBlanks($question); // korrekte Antworen ermitteln + $numberOfAnswers=$this->questionList[$i]['numberOfAnswers']; + for ($l=0;$l $value, 'a_id' => $correctAns[$l+1]['answer'],'answer' =>$correctAns[$l+1]['answer'],'correct'=>1,'blank'=>$correctAns[$l+1]['blank']); + $numberOfAnswers=$numberOfAnswers+1; // Anzahl der Antworten erhöhen + $this->answerList[$value][$numberOfAnswers]= $addCorrect ; // an richtiger Stelle einfügen + } + $this->answerList=$this->randomizeArray($this->answerList,$value); + + $addSlashes= preg_quote($question, '[^]'); // Slash hinzufügen wenn KLammer gefunden wird + $array=explode('\\',$addSlashes); // String teilen + for($k=0;$k "; + for ($j=1;$j<=$numberOfAnswers;$j++){ // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist + $answer=$this->answerList[$value][$j]['answer']; + $answerNumber=$this->answerList[$value][$j]['a_id']; + //echo $this->answerList[$value][$j]['a_id']; + echo""; + } + echo""; + } + else if((strstr($array[$k],']'))){ + $array[$k]=str_replace("]",'', $array[$k]); // Klammer entfernen + echo $array[$k]; + } + else echo $array[$k]; + } + echo ""; + echo ""; + echo ""; + echo ""; + } + + + function evaluateQuiz() { + echo"
"; + echo "
"; + + echo "".Class_Quiz_03."\n"; + echo ""; + for($i=1;$i<=count($this->questionList);$i++){ + $value= $this->questionList[$i]['q_id']; // Value den Wert der q_id geben + $question=str_replace("\n", "
", $this->questionList[$i]['question']); + echo "\n"; + echo""; + echo" "; + echo ""; + } + $this->topicID=$this->questionList[$i]['t_id']; + switch($this->questionList[$i]['qt_id']){ + case 1: { + $this->evaluateSingleSelection($i,$value); + + break; + } + case 2: { + $this->evaluateMultipleChoice($i,$value); + break; + } + case 3: { + $this->evaluateSingleSelection($i,$value); // Kann die selbe Maske verwendet werden + break; + } + case 4:{ + //$this->getDBAnswers(); + $this->evaluateFillInTheBlanks($i,$value,$question); + break; + } } } - + echo "
".Global_08." $i : "; + if($this->questionList[$i]['qt_id']!=4){ + echo" $question
"; echo "
"; echo "
"; - + $this->updateStatistic(); - $this->getTestResult(); - $this->createLearnProgress(); - - } - - function evaluateSingleSelection($i,$value){ - for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++) { // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist - $answer=$this->answerList[$value][$j]['answer']; - $answerNumber=$this->answerList[$value][$j]['a_id']; - if($answer!=null) { // Wenn es eine Antwort gibt soll diese angezeigt werden - echo "\n"; - echo ""; - echo ""; - // Auswahl des Benutzers - if(isset($this->selectedAnswers[$value]) && $this->selectedAnswers[$value]==$this->answerList[$value][$j]['a_id']) { - echo""; - } else { - echo""; - } - echo ""; - //richtige Antworten - echo ""; - if($this->answerList[$value][$j]['correct']==1) { - echo""; - $show_class="answer correct"; - } else { - echo""; - $show_class="answer false"; - } - echo ""; - if ($answer=='true') echo" ".Class_Answer_09.""; - else if ($answer=='false') echo" ".Class_Answer_10.""; - else echo"$answer"; - - echo ""; - echo""; - } - - if(isset($this->selectedAnswers[$value]) && isset($this->answerList[$value][$j]['correct']) && + $this->getTestResult(); + $this->createLearnProgress(); + + } + + function evaluateSingleSelection($i,$value){ + for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++) { // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist + $answer=$this->answerList[$value][$j]['answer']; + $answerNumber=$this->answerList[$value][$j]['a_id']; + if($answer!=null) { // Wenn es eine Antwort gibt soll diese angezeigt werden + echo "\n"; + echo ""; + echo ""; + // Auswahl des Benutzers + if(isset($this->selectedAnswers[$value]) && $this->selectedAnswers[$value]==$this->answerList[$value][$j]['a_id']) { + echo""; + } else { + echo""; + } + echo ""; + //richtige Antworten + echo ""; + if($this->answerList[$value][$j]['correct']==1) { + echo""; + $show_class="answer correct"; + } else { + echo""; + $show_class="answer false"; + } + echo ""; + if ($answer=='true') echo" ".Class_Answer_09.""; + else if ($answer=='false') echo" ".Class_Answer_10.""; + else echo"$answer"; + + echo ""; + echo""; + } + + if (isset($this->selectedAnswers[$value]) && isset($this->answerList[$value][$j]['correct']) && $this->selectedAnswers[$value]==$this->answerList[$value][$j]['a_id'] && $this->answerList[$value][$j]['correct']==1) { - $correct[]=1; - } - } - $this->showDescription($i); - - if(!isset($correct)) $correct[]=0; - $this->checkAnswers($correct,$value); - } - - function evaluateMultipleChoice($i,$value) { - for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++){ // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist - for($k=0;$k<$this->questionList[$i]['numberOfAnswers'];$k++){ // markieren welche Antworten der Benutzer ausgewählt hat - if(isset($this->selectedAnswers [$value][$k]) && $this->selectedAnswers [$value][$k]!=null){ // wenn die Antwort nicht null ist - if($this->selectedAnswers [$value][$k]==$this->answerList[$value][$j]['a_id'])$checked [$j]=1; - else if(!isset($checked[$j]) || !$checked [$j]) $checked [$j]=0; - } - } - } - for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++){ // antworten die der Benutzer ausewählt hat ausgeben - echo "\n"; - echo ""; - echo ""; - $answer=$this->answerList[$value][$j]['answer']; - $answerNumber=$this->answerList[$value][$j]['a_id']; - if (!isset($checked[$j])) $checked[$j] = 0; - if($checked[$j]==1) echo""; - else if ($checked[$j]==0) echo""; - echo ""; - //richtige Antworten ausgeben - echo ""; - if($this->answerList[$value][$j]['correct']==1) { - echo""; - $show_class = "answer correct"; - } else { - echo""; - $show_class = "answer false"; - } - echo ""; - echo" $answer "; - echo ""; - echo""; - if(($this->answerList[$value][$j]['correct']==1) && ($checked [$j]==1)){ //Prüfung auf Richtigkeit - $correct[$j]=1; - unset($this->answerList[$value][$j]); - } else if(($this->answerList[$value][$j]['correct']==1)&& ($checked [$j]==0))$correct[$j]=0; - else if(($this->answerList[$value][$j]['correct']==0) && ($checked [$j]==1))$correct[$j]=0; - } - $this->showDescription($i); - $this->checkAnswers($correct,$value); - - } - + $correct[]=1; + } + } + $this->showDescription($i); + + if(!isset($correct)) $correct[]=0; + $this->checkAnswers($correct,$value); + } + + function evaluateMultipleChoice($i,$value) { + for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++){ // Solange Schleife durchlaufen wie die maximale Anzahl der Antworten ist + for($k=0;$k<$this->questionList[$i]['numberOfAnswers'];$k++){ // markieren welche Antworten der Benutzer ausgewählt hat + if(isset($this->selectedAnswers [$value][$k]) && $this->selectedAnswers [$value][$k]!=null){ // wenn die Antwort nicht null ist + if($this->selectedAnswers [$value][$k]==$this->answerList[$value][$j]['a_id'])$checked [$j]=1; + else if(!isset($checked[$j]) || !$checked [$j]) $checked [$j]=0; + } + } + } + for ($j=1;$j<=$this->questionList[$i]['numberOfAnswers'];$j++){ // antworten die der Benutzer ausewählt hat ausgeben + echo "\n"; + echo ""; + echo ""; + $answer=$this->answerList[$value][$j]['answer']; + $answerNumber=$this->answerList[$value][$j]['a_id']; + if (!isset($checked[$j])) $checked[$j] = 0; + if($checked[$j]==1) echo""; + else if ($checked[$j]==0) echo""; + echo ""; + //richtige Antworten ausgeben + echo ""; + if($this->answerList[$value][$j]['correct']==1) { + echo""; + $show_class = "answer correct"; + } else { + echo""; + $show_class = "answer false"; + } + echo ""; + echo" $answer "; + echo ""; + echo""; + if(($this->answerList[$value][$j]['correct']==1) && ($checked [$j]==1)){ //Prüfung auf Richtigkeit + $correct[$j]=1; + unset($this->answerList[$value][$j]); + } else if(($this->answerList[$value][$j]['correct']==1)&& ($checked [$j]==0))$correct[$j]=0; + else if(($this->answerList[$value][$j]['correct']==0) && ($checked [$j]==1))$correct[$j]=0; + } + $this->showDescription($i); + $this->checkAnswers($correct,$value); + + } + function evaluateFillInTheBlanks($i,$value,$question){ - - - $addSlashes= preg_quote($question, '[^]'); // Slash hinzufügen wenn KLammer gefunden wird - $array=explode('\\',$addSlashes); // String teilen - // Was Benutzer markiert hat - for($k=0;$kanswerList[$value]);$j++){ // antworten die der Benutzer ausewählt hat ausgeben - $answer=$this->answerList[$value][$j]['answer']; // Amtwort wird zugewiesen - if($this->selectedAnswers[$value][$k]==$this->answerList[$value][$j]['a_id']){ - echo " "; - if(isset($this->answerList[$value][$j]['blank']) && $this->answerList[$value][$j]['blank']==$k) $correct[]=1; - else $correct[]=0; - break; - } - } - } else if((strstr($array[$k],']'))){ - $array[$k]=str_replace("]",'', $array[$k]); // Klammer entfernen + $addSlashes= preg_quote($question, '[^]'); // Slash hinzufügen wenn KLammer gefunden wird + $array=explode('\\',$addSlashes); // String teilen + // Was Benutzer markiert hat + for($k=0;$kanswerList[$value]);$j++){ // antworten die der Benutzer ausewählt hat ausgeben + $answer=$this->answerList[$value][$j]['answer']; // Amtwort wird zugewiesen + if($this->selectedAnswers[$value][$k]==$this->answerList[$value][$j]['a_id']){ + echo " "; + if(isset($this->answerList[$value][$j]['blank']) && $this->answerList[$value][$j]['blank']==$k) $correct[]=1; + else $correct[]=0; + break; + } + } + } else if((strstr($array[$k],']'))){ + $array[$k]=str_replace("]",'', $array[$k]); // Klammer entfernen + echo $array[$k]; + } else echo $array[$k]; + } + echo ""; + echo ""; + + echo "\n"; + echo ""; + echo ""; + + // Was richtig ist + $addSlashes= preg_quote($question, '[^]'); // Slash hinzufügen wenn KLammer gefunden wird + $array=explode('\\',$addSlashes); // String teilen + //echo"
"; + + for($k=0;$k"; + } else if((strstr($array[$k],']'))) { + $array[$k]=str_replace("]",'', $array[$k]); // Klammer entfernen echo $array[$k]; - } else echo $array[$k]; - } - echo ""; - echo ""; - - echo "\n"; - echo ""; - echo ""; - - // Was richtig ist - $addSlashes= preg_quote($question, '[^]'); // Slash hinzufügen wenn KLammer gefunden wird - $array=explode('\\',$addSlashes); // String teilen - //echo"
"; - - for($k=0;$k"; - } else if((strstr($array[$k],']'))) { - $array[$k]=str_replace("]",'', $array[$k]); // Klammer entfernen - echo $array[$k]; - } else echo $array[$k]; - } - echo ""; - echo ""; - - $this->showDescription($i); - $this->checkAnswers($correct,$value); - } - -function checkAnswers($correct,$value) { - $check = in_array(0, $correct); // Prüfen ob im Array der Wert 0 ist, denn dann wurde mindestens eine Antwort falsch beantwortet - echo "\n"; - if(!$check)echo""; - else { - $this->wrongQuestions[]=$value; - echo""; - } - echo ""; -} - - function updateStatistic() { - for($i=1;$i<=$this->questionLimit;$i++) { - $sql="SELECT count FROM statistics WHERE q_id=".intval($this->questionList[$i]['q_id']).""; - $query = mysql_query($sql); - while($count=mysql_fetch_array($query ,MYSQL_BOTH )){ - $count=$count['count']; - $count=$count+1; - $sql_update="UPDATE statistics SET count=".intval($count)." WHERE q_id=".intval($this->questionList[$i]['q_id']).""; - $query_update = mysql_query($sql_update); - } - } - } - + } else echo $array[$k]; + } + echo ""; + echo ""; + + $this->showDescription($i); + $this->checkAnswers($correct,$value); + } + + function checkAnswers($correct,$value) { + $check = in_array(0, $correct); // Prüfen ob im Array der Wert 0 ist, denn dann wurde mindestens eine Antwort falsch beantwortet + echo "\n"; + if(!$check)echo""; + else { + $this->wrongQuestions[]=$value; + echo""; + } + echo ""; + } + + function updateStatistic() { + for($i=1;$i<=$this->questionLimit;$i++) { + $sql="SELECT count FROM statistics WHERE q_id=".intval($this->questionList[$i]['q_id']).""; + $query = mysql_query($sql); + while($count=mysql_fetch_array($query ,MYSQL_BOTH )){ + $count=$count['count']; + $count=$count+1; + $sql_update="UPDATE statistics SET count=".intval($count)." WHERE q_id=".intval($this->questionList[$i]['q_id']).""; + $query_update = mysql_query($sql_update); + } + } + } + function createLearnProgress() { // Lernprogress erstellen - $timestamp = time(); - $date= date("Y-m-d H:i:s" ,$timestamp); // aktuelles Datum und Uhrzeit berechnen - $correctAnswers=$this->questionLimit-count($this->wrongQuestions); - $wrongAnswers=count($this->wrongQuestions); - $sql="INSERT INTO learnprogress (user_id,root,date,t_id,number,correct,wrong,percentage) VALUES ('".mysql_real_escape_string($_SESSION['profile']['id'])."','".mysql_real_escape_string($_SESSION['profile']['root'])."','$date',".intval($this->topicID).",".intval($this->questionLimit).",".intval($correctAnswers).",".intval($wrongAnswers).",".mysql_real_escape_string($this->percentTest).")"; - $query = mysql_query($sql); - $this->lp_id = mysql_insert_id(); - $this->insertAnswersIncorrect(); - } - - function insertAnswersIncorrect(){ - foreach($this->wrongQuestions as $value){ - $sql="INSERT INTO answers_incorrect (lp_id,q_id) VALUES ( ".intval($this->lp_id).",".intval($value).")"; - $query = mysql_query($sql); - } - } - - function getTestResult(){ - $wrong=count($this->wrongQuestions); - $correct=$this->questionLimit-$wrong; - if($wrong==0)$percentTest=100; - else if(($wrong>=$this->questionLimit) || ($this->questionLimit < 1))$percentTest=0; - else $percentTest=($correct/$this->questionLimit)*100; - - $percentTest=round($percentTest, 2); - $this->percentTest=$percentTest; - if($this->rawToPass > 0 && $this->rawToPass <= $percentTest)$value="".Class_Quiz_08.""; - else $value="".Class_Quiz_09.""; - - echo'

'.Global_05." :
"; - global $questionlimit; - $questionlimit =$this->questionLimit; - echo" ".Class_Quiz_04." $correct / $this->questionLimit
"; - echo" ".Class_Quiz_05." $this->rawToPass % "; - echo "
".Class_Quiz_06." ".$this->percentTest." % ".Class_Quiz_07." $value

"; - //createLearnProgress(); - - if($this->rawToPass > 0 && $this->rawToPass <= $percentTest) { - // Test has been passed, maybe a paper/PDF-certificate can be requested - if ($_SERVER['SSL_CLIENT_S_DN_CN']=="CAcert WoT User") { - // Sorry, we cannot issue certificates for anonymous users - echo '

'.Class_Quiz_10_AnonymousCert."

"; - } else { - echo "
"; - echo ""; - echo ""; - echo "
"; - } - } - } - - function showDescription($i){ - if(isset($_SESSION['values']['questionList'][$i]['description_text'])){ - // Ausgabe der Beschreibung - echo "\n"; - echo ""; - echo"".$_SESSION['values']['questionList'][$i]['description_text'].""; - echo ""; - echo ""; - } - } + $timestamp = time(); + $date= date("Y-m-d H:i:s" ,$timestamp); // aktuelles Datum und Uhrzeit berechnen + $correctAnswers=$this->questionLimit-count($this->wrongQuestions); + $wrongAnswers=count($this->wrongQuestions); + $passed=$this->testPassed; + $sql="INSERT INTO learnprogress (user_id,root,date,t_id,number,correct,wrong,percentage,passed) + VALUES ('".mysql_real_escape_string($_SESSION['profile']['id'])."', + '".mysql_real_escape_string($_SESSION['profile']['root'])."', + '$date', + ".intval($this->topicID).", + ".intval($this->questionLimit).", + ".intval($correctAnswers).", + ".intval($wrongAnswers).", + ".mysql_real_escape_string($this->percentTest).", + ".intval($passed).")"; + $query = mysql_query($sql); + $this->lp_id = mysql_insert_id(); + $this->insertAnswersIncorrect(); + } + + function insertAnswersIncorrect(){ + foreach($this->wrongQuestions as $value){ + $sql="INSERT INTO answers_incorrect (lp_id,q_id) VALUES ( ".intval($this->lp_id).",".intval($value).")"; + $query = mysql_query($sql); + } + } + + function getTestResult(){ + $wrong=count($this->wrongQuestions); + $correct=$this->questionLimit-$wrong; + if($wrong==0)$percentTest=100; + else if(($wrong>=$this->questionLimit) || ($this->questionLimit < 1))$percentTest=0; + else $percentTest=($correct/$this->questionLimit)*100; + + $percentTest=round($percentTest, 2); + $this->percentTest=$percentTest; + $this->testPassed=0; + if($this->rawToPass > 0 && $this->rawToPass <= $percentTest)$value="".Class_Quiz_08.""; + else $value="".Class_Quiz_09.""; + + echo'

'.Global_05." :
"; + global $questionlimit; + $questionlimit =$this->questionLimit; + echo" ".Class_Quiz_04." $correct / $this->questionLimit
"; + echo" ".Class_Quiz_05." $this->rawToPass % "; + echo "
".Class_Quiz_06." ".$this->percentTest." % ".Class_Quiz_07." $value

"; + //createLearnProgress(); + + if($this->rawToPass > 0 && $this->rawToPass <= $percentTest) { + $this->testPassed=1; + // Test has been passed, maybe a paper/PDF-certificate can be requested + if ($_SERVER['SSL_CLIENT_S_DN_CN']=="CAcert WoT User") { + // Sorry, we cannot issue certificates for anonymous users + echo '

'.Class_Quiz_10_AnonymousCert."

"; + } else { + echo "
"; + echo ""; + echo ""; + echo "
"; + } + } + } + + function showDescription($i){ + if(isset($_SESSION['values']['questionList'][$i]['description_text'])){ + // Ausgabe der Beschreibung + echo "\n"; + echo ""; + echo"".$_SESSION['values']['questionList'][$i]['description_text'].""; + echo ""; + echo ""; + } + } } ?> diff --git a/classes/progress.class.php b/classes/progress.class.php index 72cf0b5..d4707af 100755 --- a/classes/progress.class.php +++ b/classes/progress.class.php @@ -7,6 +7,8 @@ class Progress var $incorrect_answers; var $percentArray; var $maximum; + var $passed; + var $totalresult=array(); function Progress() { $this->progress=array(); @@ -15,54 +17,62 @@ class Progress $this->topic=0; $this->lp_id=0; $this->percentArray=array(); + $this->passed=0; } - + function setTopic($t_id){ $this->topic=$t_id; } - + function setLp_id($lp_id){ - $this->lp_id=$lp_id; + $this->lp_id=$lp_id; + } + + function setData($value){ + $this->progress=$value; } - - function setData($value){ - $this->progress=$value; - } function getProgress(){ - $sql= "SELECT lp_id,date,number,correct,wrong FROM learnprogress WHERE user_id='".mysql_real_escape_string($_SESSION['profile']['id'])."' AND t_id='".mysql_real_escape_string($this->topic)."' AND root ='".mysql_real_escape_string($_SESSION['profile']['root'])."' order by date"; - $query = mysql_query($sql) OR die(mysql_error()); - $i=1; - while($progress =mysql_fetch_array($query,MYSQL_BOTH )){ + $sql= "SELECT lp_id,date,number,correct,wrong, passed FROM learnprogress WHERE user_id='".mysql_real_escape_string($_SESSION['profile']['id'])."' AND t_id='".mysql_real_escape_string($this->topic)."' AND root ='".mysql_real_escape_string($_SESSION['profile']['root'])."' order by date"; + $query = mysql_query($sql) OR die(mysql_error()); + $i=1; + while($progress =mysql_fetch_array($query,MYSQL_BOTH )){ $this->progress[$i]['lp_id']=$progress['lp_id']; $this->progress[$i]['date']=$progress['date']; $this->progress[$i]['number']=$progress['number']; // in arra speichern $this->progress[$i]['correct']=$progress['correct']; $this->progress[$i]['wrong']=$progress['wrong']; + $this->progress[$i]['passed']=$progress['passed']; $i++; } - + } - + function count() { - $numberOfTests=count($this->progress); - return $numberOfTests; + $numberOfTests=count($this->progress); + return $numberOfTests; } - + function showTable() { + $this->totalresult['count']=0; + $this->totalresult['passed']=0; if(count($this->progress)==0) echo "
".Global_07."
"; else { echo"

"; - echo""; + echo"
"; echo ""; echo""; echo""; echo""; echo""; + echo""; echo ""; echo""; - for ($i=1;$i<=count($this->progress);$i++){ + for ($i=1;$i<=count($this->progress);$i++){ + if (1==$this->progress[$i]['passed']) { + $this->totalresult['passed']+=1; + } echo ""; - echo""; + echo""; echo""; echo""; if ($this->progress[$i]['number'] > 0) { @@ -71,50 +81,62 @@ class Progress $percent = 0; } $percent=round ($percent,2); - echo""; - echo""; - echo ""; - } - echo"
".Global_10."".Global_04."".Class_Progress_01."".Global_03."".Statistic_04."
$i$i".$this->progress[$i]['date']."".$this->progress[$i]['number']."$percent % topic'>
"; + echo "$percent %"; + echo "".$this->getPassedImage($this->progress[$i]['passed']).""; + echo " topic'>"; + echo ""; } + $this->totalresult['count']=$i-1; + echo ""; + echo "".Statistic_04.' '.$this->totalresult['passed'].'/'.$this->totalresult['count'].""; + echo "\n"; + echo""; + if ($this->totalresult['passed'] > 0) { + echo "
"; + echo ""; + echo ""; + echo "
"; + } + } } - - function checkProgressData(){ + + function checkProgressData(){ if(count($this->progress)==0) echo "
".Global_07."
"; else { $percentArray=array(); $limit=count($this->progress); - if($limit>$this->maximum){ - $k=($limit-$this->maximum)+1; - $limit=($k+$this->maximum)-1; - echo '
'.Class_Progress_02." ".Class_Progress_03." $this->maximum ".Class_Progress_04.".
"; - } else $k=1; - $j=0; - - for ($i=$k;$i<=$limit;$i++){ - if ($this->progress[$i]['number'] > 0) { - $percent=($this->progress[$i]['correct']/$this->progress[$i]['number'])*100; - } else { - $percent=0; + if($limit>$this->maximum){ + $k=($limit-$this->maximum)+1; + $limit=($k+$this->maximum)-1; + echo '
'.Class_Progress_02." ".Class_Progress_03." $this->maximum ".Class_Progress_04.".
"; + } else $k=1; + $j=0; + + for ($i=$k;$i<=$limit;$i++){ + if ($this->progress[$i]['number'] > 0) { + $percent=($this->progress[$i]['correct']/$this->progress[$i]['number'])*100; + } else { + $percent=0; + } + $this->percentArray[$j][]=$this->progress[$i]['date']; + $this->percentArray[$j][]=$percent; + $j++; } - $this->percentArray[$j][]=$this->progress[$i]['date']; - $this->percentArray[$j][]=$percent; - $j++; - } } } - + function showBalken(){ - + $this->checkProgressData(); $this->percentArray= serialize($this->percentArray); $this->percentArray=base64_encode ($this->percentArray); $titley=Global_15; $titlex=Global_04; - echo "
\n"; + echo "
\n"; echo ""; - echo "
\n"; - + echo "
\n"; + } function showGraph(){ $this->checkProgressData(); @@ -122,91 +144,101 @@ class Progress $this->percentArray=base64_encode ($this->percentArray); $titley=Global_15; $titlex=Global_04; - echo "
\n"; + echo "
\n"; echo ""; - echo "
\n"; - + echo "
\n"; + } - + function showPie(){ - echo "
\n"; + echo "
\n"; echo ""; echo "
\n"; } - - + + function getIncorrectAnswers() { $sql="SELECT q_id FROM answers_incorrect WHERE lp_id=".intval($this->lp_id).""; $query = mysql_query($sql); $i=1; - while($incorrect_answers =mysql_fetch_array($query,MYSQL_BOTH )) - { - $this->incorrect_answers[$i]['q_id']=$incorrect_answers['q_id']; - $i++; - } + while($incorrect_answers =mysql_fetch_array($query,MYSQL_BOTH )) + { + $this->incorrect_answers[$i]['q_id']=$incorrect_answers['q_id']; + $i++; + } $this->showIncorrectAnswers(); } - - function showIncorrectAnswers(){ - echo "
"; + + function showIncorrectAnswers(){ + echo ""; echo "
"; echo " ".Class_Progress_08." "; echo ""; - - - for ($i=1;$i<=count($this->incorrect_answers);$i++){ + + + for ($i=1;$i<=count($this->incorrect_answers);$i++){ echo""; - echo ""; - $sql="SELECT question,qt_id FROM questions WHERE q_id=".intval($this->incorrect_answers[$i]['q_id']).""; - $query = mysql_query($sql); - while($question =mysql_fetch_array($query,MYSQL_BOTH )) { + echo ""; + $sql="SELECT question,qt_id FROM questions WHERE q_id=".intval($this->incorrect_answers[$i]['q_id']).""; + $query = mysql_query($sql); + while($question =mysql_fetch_array($query,MYSQL_BOTH )) { if( $question['qt_id']==4){ - $questionText=$this->getFIBQuestion( $question['question']); - - echo""; - - } - else{ + $questionText=$this->getFIBQuestion( $question['question']); + + echo""; + + } else { echo ""; - } - } - echo""; - } - if($this->progress [$this->lp_id]['wrong']>count($this->incorrect_answers)) { - $number=$this->progress [$this->lp_id]['wrong']-count($this->incorrect_answers); - echo""; - echo ""; - echo""; - echo""; + } } + echo""; + } + if($this->progress [$this->lp_id]['wrong']>count($this->incorrect_answers)) { + $number=$this->progress [$this->lp_id]['wrong']-count($this->incorrect_answers); + echo""; + echo ""; + echo""; + echo""; + } echo""; echo ""; echo" "; echo""; echo"
$i.) $i.) ".$questionText."".$questionText."". $question['question']."
".Class_Progress_06." $number ".Class_Progress_07."
".Class_Progress_06." $number ".Class_Progress_07."
"; echo "
"; - echo "
"; - } - - function getFIBQuestion($question){ - $addSlashes= preg_quote( $question, '[^]'); // Slash hinzufügen wenn KLammer gefunden wird - $array=explode('\\',$addSlashes); // String teilen - $questionText= $question; - if(substr_count($question,"[")==substr_count($question,"]")) { // gleiche anzahl von Klammer auf und zu - for($i=1;$i<=substr_count($question,"[");$i++){ // Wird solange durchlaufne wie Klammern vorhanden sind - $beginPos = strpos($questionText, "["); // Anfangspunkt festlegen - $endPos=strpos($questionText, "]"); // Endpunkt festlegen - $length=(($endPos+1)-$beginPos) ; // Länge der Strings ermitteln - $answer=substr ($questionText,$beginPos,$length );// den String zwischen den Klammern suchen - $questionText=str_replace($answer,'(xxx)', $questionText); // gespeicherten Wert aus string löschen - $answer=str_replace("]",'', $answer); // Klammer entfernen - $key = array_search($answer, $array); - $answer=str_replace("[",'', $answer); // Klammer entfernen - - } - } - return $questionText; + echo ""; } - } + + function getFIBQuestion($question){ + $addSlashes= preg_quote( $question, '[^]'); // Slash hinzufügen wenn KLammer gefunden wird + $array=explode('\\',$addSlashes); // String teilen + $questionText= $question; + if(substr_count($question,"[")==substr_count($question,"]")) { // gleiche anzahl von Klammer auf und zu + for($i=1;$i<=substr_count($question,"[");$i++){ // Wird solange durchlaufne wie Klammern vorhanden sind + $beginPos = strpos($questionText, "["); // Anfangspunkt festlegen + $endPos=strpos($questionText, "]"); // Endpunkt festlegen + $length=(($endPos+1)-$beginPos) ; // Länge der Strings ermitteln + $answer=substr ($questionText,$beginPos,$length );// den String zwischen den Klammern suchen + $questionText=str_replace($answer,'(xxx)', $questionText); // gespeicherten Wert aus string löschen + $answer=str_replace("]",'', $answer); // Klammer entfernen + $key = array_search($answer, $array); + $answer=str_replace("[",'', $answer); // Klammer entfernen + } + } + return $questionText; + } + + function getPassedImage($passed){ + // returns the image depending on the status of a test result + $img=""; + if (0==$passed) { + $img=""; + } + if (1==$passed) { + $img=""; + } + return $img; + } + } ?>