Exemple #1
0
 function getUnfilteredEvaluationData()
 {
     global $ilDB;
     include_once "./Modules/Test/classes/class.ilTestEvaluationPassData.php";
     include_once "./Modules/Test/classes/class.ilTestEvaluationUserData.php";
     include_once "./Modules/Test/classes/class.ilTestEvaluationData.php";
     $data = new ilTestEvaluationData($this);
     $query = "\n\t\t\tSELECT\t\ttst_test_result.*,\n\t\t\t\t\t\tqpl_questions.original_id,\n\t\t\t\t\t\tqpl_questions.title questiontitle,\n\t\t\t\t\t\tqpl_questions.points maxpoints\n\t\t\t\n\t\t\tFROM\t\ttst_test_result, qpl_questions, tst_active\n\t\t\t\n\t\t\tWHERE\t\ttst_active.active_id = tst_test_result.active_fi\n\t\t\tAND\t\t\tqpl_questions.question_id = tst_test_result.question_fi\n\t\t\tAND\t\t\ttst_active.test_fi = %s\n\t\t\t\n\t\t\tORDER BY\ttst_active.active_id ASC, tst_test_result.pass ASC, tst_test_result.tstamp DESC\n\t\t";
     $result = $ilDB->queryF($query, array('integer'), array($this->getTestId()));
     $pass = NULL;
     $checked = array();
     $datasets = 0;
     while ($row = $ilDB->fetchAssoc($result)) {
         $participantObject = $data->getParticipant($row["active_fi"]);
         if (!$participantObject instanceof ilTestEvaluationUserData) {
             continue;
         }
         $passObject = $participantObject->getPass($row["pass"]);
         if (!$passObject instanceof ilTestEvaluationPassData) {
             continue;
         }
         $passObject->addAnsweredQuestion($row["question_fi"], $row["maxpoints"], $row["points"], $row['answered'], null, $row['manual']);
     }
     foreach (array_keys($data->getParticipants()) as $active_id) {
         if ($this->isRandomTest()) {
             for ($testpass = 0; $testpass <= $data->getParticipant($active_id)->getLastPass(); $testpass++) {
                 $ilDB->setLimit($this->getQuestionCount(), 0);
                 $result = $ilDB->queryF("SELECT tst_test_rnd_qst.sequence, tst_test_rnd_qst.question_fi, qpl_questions.original_id, " . "tst_test_rnd_qst.pass, qpl_questions.points, qpl_questions.title " . "FROM tst_test_rnd_qst, qpl_questions " . "WHERE tst_test_rnd_qst.question_fi = qpl_questions.question_id " . "AND tst_test_rnd_qst.pass = %s " . "AND tst_test_rnd_qst.active_fi = %s ORDER BY tst_test_rnd_qst.sequence", array('integer', 'integer'), array($testpass, $active_id));
                 if ($result->numRows()) {
                     while ($row = $ilDB->fetchAssoc($result)) {
                         $tpass = array_key_exists("pass", $row) ? $row["pass"] : 0;
                         $data->getParticipant($active_id)->addQuestion($row["original_id"], $row["question_fi"], $row["points"], $row["sequence"], $tpass);
                         $data->addQuestionTitle($row["question_fi"], $row["title"]);
                     }
                 }
             }
         } else {
             $result = $ilDB->queryF("SELECT tst_test_question.sequence, tst_test_question.question_fi, " . "qpl_questions.points, qpl_questions.title, qpl_questions.original_id " . "FROM tst_test_question, tst_active, qpl_questions " . "WHERE tst_test_question.question_fi = qpl_questions.question_id " . "AND tst_active.active_id = %s AND tst_active.test_fi = tst_test_question.test_fi ORDER BY tst_test_question.sequence", array('integer'), array($active_id));
             if ($result->numRows()) {
                 $questionsbysequence = array();
                 while ($row = $ilDB->fetchAssoc($result)) {
                     $questionsbysequence[$row["sequence"]] = $row;
                 }
                 $seqresult = $ilDB->queryF("SELECT * FROM tst_sequence WHERE active_fi = %s", array('integer'), array($active_id));
                 while ($seqrow = $ilDB->fetchAssoc($seqresult)) {
                     $questionsequence = unserialize($seqrow["sequence"]);
                     foreach ($questionsequence as $sidx => $seq) {
                         $data->getParticipant($active_id)->addQuestion($questionsbysequence[$seq]["original_id"], $questionsbysequence[$seq]["question_fi"], $questionsbysequence[$seq]["points"], $sidx + 1, $seqrow["pass"]);
                         $data->addQuestionTitle($questionsbysequence[$seq]["question_fi"], $questionsbysequence[$seq]["title"]);
                     }
                 }
             }
         }
     }
     if ($this->getECTSOutput()) {
         $passed_array =& $this->getTotalPointsPassedArray();
     }
     foreach (array_keys($data->getParticipants()) as $active_id) {
         $tstUserData = $data->getParticipant($active_id);
         $percentage = $tstUserData->getReachedPointsInPercent();
         $obligationsAnswered = $tstUserData->areObligationsAnswered();
         $mark = $this->mark_schema->getMatchingMark($percentage);
         if (is_object($mark)) {
             $tstUserData->setMark($mark->getShortName());
             $tstUserData->setMarkOfficial($mark->getOfficialName());
             $tstUserData->setPassed($mark->getPassed() && $tstUserData->areObligationsAnswered());
         }
         if ($this->getECTSOutput()) {
             $ects_mark = $this->getECTSGrade($passed_array, $tstUserData->getReached(), $tstUserData->getMaxPoints());
             $tstUserData->setECTSMark($ects_mark);
         }
         $visitingTime =& $this->getVisitTimeOfParticipant($active_id);
         $tstUserData->setFirstVisit($visitingTime["firstvisit"]);
         $tstUserData->setLastVisit($visitingTime["lastvisit"]);
     }
     return $data;
 }