<?php
class Point
{
var $Question;
var $Options;
var $Answer;
}
class Test
{
var $TestName = 'Test językowy';
var $PageName = 'strona';
var $ResultsName = 'wyniki testu';
var $PrevPageButtonName = '< cofnij';
var $NextPageButtonName = 'dalej >';
var $CheckButtonName = 'sprawdź test';
var $ShowAnswersButtonName = 'zobacz odpowiedzi';
var $CorrectAnswersName = 'dobrze';
var $WrongAnswersName = 'źle';
var $BlankAnswersName = 'brak';
var $CorrectAnswersColor = '#02a629';
var $WrongAnswersColor = '#e51c01';
var $BlankAnswersColor = '#ccc';
var $AnswersPercentLenght = 200;
var $Points;
var $PointsPerPage = 5;
var $PageNr;
var $TmpAnswers;
var $Answers;
var $CorrectAnswers;
var $CorrectAnswersPercent;
var $WrongAnswers;
var $WrongAnswersPercent;
var $BlankAnswers;
var $BlankAnswersPercent;
function CountPages() {
return ceil($this->CountPoints() / $this->PointsPerPage); }
function CountPoints() {
return count($this->Points); }
function NewPoint($Question, $Options, $Answer) {
$Nr = $this->CountPoints() + 1;
$this->Points[$Nr] = new Point;
$this->Points[$Nr]->Question = $Question;
$this->Points[$Nr]->Options = $Options;
$this->Points[$Nr]->Answer = $Answer;
}
function ViewPoint($Nr, $SelectedOption, $SelectRightAnswer) {
if (($Nr <= $this->CountPoints()) && ($Nr > 0)) {
$out = '<li class="point">'.BR;
$out .= $this->Points[$Nr]->Question.BR;
$out .= '<ul>'.BR;
foreach ($this->Points[$Nr]->Options as $Key => $Option) {
$Key = $Key + 1;
$out .= '<li';
if ($SelectRightAnswer > 0) {
$DisabledRadio = 'disabled="disabled" ';
if ($Key == $SelectRightAnswer)
$out .= ' class="right-answer" style="color:'.$this->CorrectAnswersColor.'"';
elseif ($Key == $SelectedOption)
$out .= ' class="wrong-answer" style="color:'.$this->WrongAnswersColor.'"';
}
if ($SelectedOption == $Key)
$CheckedRadio = 'checked="checked" ';
else
$CheckedRadio = '';
$out .= '><input type="radio" '.$DisabledRadio.'id="r'.$Nr.$Key.'" name="'.$Nr.'" value="'.$Key.'" '.$CheckedRadio.'/>';
$out .= '<label for="r'.$Nr.$Key.'">'.$Option.'</label></li>'."\r\n";
}
$out .= '</ul>'.BR;
$out .= '</li>'."\r\n";
return $out;
}
}
function ViewCustomList($FromNr, $NrOfPoints) {
for ($i = $FromNr; $i < $FromNr+$NrOfPoints; $i++)
if ($this->Answers == '')
$out .= $this->ViewPoint($i, $this->TmpAnswers[$i - 1], 0);
else
$out .= $this->ViewPoint($i, $this->TmpAnswers[$i - 1], $this->Points[$i]->Answer);
return $out;
}
function TakePost() {
if (isset($_POST['PageNr'])) { # zbieranie odpowiedzi
if (isset($_POST['TmpAnswers'])) {
$this->TmpAnswers = $_POST['TmpAnswers'];
if (!isset($_POST['Answers'])) {
$FromNr = ($_POST['PageNr'] - 1) * $this->PointsPerPage + 1;
if ($_POST['PageNr'] == $this->CountPages())
$NrOfPoints = $this->CountPoints() - $FromNr + 1;
else
$NrOfPoints = $this->PointsPerPage;
for ($i = $FromNr; $i < $FromNr + $NrOfPoints; $i++) {
if ($_POST[$i] == '')
$this->TmpAnswers[$i - 1] = '0';
else
$this->TmpAnswers[$i - 1] = $_POST[$i];
}
}
}
# naciśnięcie przycisku NextPage
if (isset($_POST['NextPage'])) {
if ($this->CountPages() > $_POST['PageNr'])
$this->PageNr = $_POST['PageNr'] + 1;
else
$this->PageNr = 1;
}
# naciśnięcie przycisku PrevPage
if (isset($_POST['PrevPage'])) {
if ($_POST['PageNr'] > 1)
$this->PageNr = $_POST['PageNr'] - 1;
else
$this->PageNr = $this->CountPages();
}
} else {
# wielkości startowe
$this->PageNr = 1;
if (isset($_POST['TmpAnswers'])) $this->TmpAnswers = $_POST['TmpAnswers'];
else
for ($i = 1; $i <= $this->CountPoints(); $i++)
$this->TmpAnswers .= '0';
}
#pobierz czy jest odpowiedz
if (isset($_POST['Answers'])) {
$this->Answers .= $_POST['Answers'];
}
}
#sprawdź odpowiedzi
function CheckAnswers() {
$this->CorrectAnswers = 0;
$this->BlankAnswers = 0;
for ($i = 1; $i <= $this->CountPoints(); $i++) {
if ($this->TmpAnswers[$i - 1] == $this->Points[$i]->Answer) $this->CorrectAnswers += 1;
if ($this->TmpAnswers[$i - 1] == '0') $this->BlankAnswers += 1;
}
$this->WrongAnswers = $this->CountPoints() - ($this->CorrectAnswers + $this->BlankAnswers);
$CAP = $this->CorrectAnswers/$this->CountPoints()*1000;
$WAP = $this->WrongAnswers/$this->CountPoints()*1000;
$BAP = $this->BlankAnswers/$this->CountPoints()*1000;
$this->CorrectAnswersPercent = round($CAP) / 10; $this->WrongAnswersPercent = round($WAP) / 10; $this->BlankAnswersPercent = round($BAP) / 10; }
function ViewTest() {
$this->TakePost();
if (isset($_POST['Check'])) {
# formularz wyników
$this->CheckAnswers();
$out = '<form id ="test" action="" method="post">'.BR;
$out .= '<fieldset>'.BR;
$out .= '<legend>'.$this->TestName.' ['.$this->ResultsName.']</legend>'.BR;
$out .= '<ul id="results">'.BR;
$CorrectAnswersLenght = round($this->AnswersPercentLenght*$this->CorrectAnswersPercent/100
) + 1; $WrongAnswersLenght = round($this->AnswersPercentLenght*$this->WrongAnswersPercent/100
) + 1; $BlankAnswersLenght = round($this->AnswersPercentLenght*$this->BlankAnswersPercent/100
) + 1;
$out .= '<li id="CorrectAnswers" style="border-left:'.$CorrectAnswersLenght.'px solid '.$this->CorrectAnswersColor.'">'.$this->CorrectAnswers.' '.$this->CorrectAnswersName.' ('.$this->CorrectAnswersPercent.'%)</li>'.BR;
$out .= '<li id="WrongAnswers" style="border-left:'.$WrongAnswersLenght.'px solid '.$this->WrongAnswersColor.'">'.$this->WrongAnswers.' '.$this->WrongAnswersName.' ('.$this->WrongAnswersPercent.'%)</li>'.BR;
$out .= '<li id="BlankAnswers" style="border-left:'.$BlankAnswersLenght.'px solid '.$this->BlankAnswersColor.'">'.$this->BlankAnswers.' '.$this->BlankAnswersName.' ('.$this->BlankAnswersPercent.'%)</li>'.BR;
$out .= '</ul>'.BR;
$out .= '<input type="hidden" name="TmpAnswers" value="'.$this->TmpAnswers.'" />'.BR;
$out .= '<input type="hidden" name="Answers" value="Check" />'.BR;
$out .= '<div id="buttons">'.BR;
$out .= '<input type="submit" id="ShowAnswers" name="ShowAnswers" value="'.$this->ShowAnswersButtonName.'" />'.BR;
$out .= '</div>'.BR;
$out .= '</fieldset>'.BR;
$out .= '</form>'.BR;
} else {
#formularz pytań i odpowiedzi
$out = '<form id ="test" action="" method="post">'.BR;
$out .= '<fieldset>'.BR;
$out .= '<legend>'.$this->TestName.' ['.$this->PageName.' '.$this->PageNr.'/'.$this->CountPages().']</legend>'.BR;
$out .= '<ul>'.BR;
$out .= $this->ViewCustomList(($this->PageNr - 1) * $this->PointsPerPage + 1, $this->PointsPerPage);
$out .= '</ul>'.BR;
$out .= '<input type="hidden" name="TmpAnswers" value="'.$this->TmpAnswers.'" />'.BR;
if ($this->Answers != '') $out .= '<input type="hidden" name="Answers" value="'.$this->Answers.'" />'.BR;
$out .= '<input type="hidden" name="PageNr" value="'.$this->PageNr.'" />'.BR;
$out .= '<div id="buttons">'.BR;
if ($this->PageNr > 1) $out .= '<input type="submit" id="PrevPage" name="PrevPage" value="'.$this->PrevPageButtonName.'" />'.BR;
if ($this->PageNr < $this->CountPages()) $out .= '<input type="submit" id="NextPage" name="NextPage" value="'.$this->NextPageButtonName.'" />'.BR;
if (($this->PageNr == $this->CountPages()) && ($this->Answers == '')) $out .= '<input type="submit" id="Check" name="Check" value="'.$this->CheckButtonName.'" />'.BR;
$out .= '</div>'.BR;
$out .= '</fieldset>'.BR;
$out .= '</form>'.BR;
}
return $out;
}
}
?>