Ejemplo n.º 1
0
 /**
  * Creates the evaluation output for the test
  *
  * @access public
  */
 function outEvaluation()
 {
     /**
      * @var $ilAcccess ilAccessHandler
      * @var $ilToolbar ilToolbarGUI
      */
     global $ilAccess, $ilToolbar;
     if (!$ilAccess->checkAccess("tst_statistics", "", $this->ref_id) && !$ilAccess->checkAccess("write", "", $this->ref_id)) {
         // allow only evaluation access
         ilUtil::sendInfo($this->lng->txt("cannot_edit_test"), true);
         $this->ctrl->redirectByClass("ilobjtestgui", "infoScreen");
     }
     include_once "./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
     $table_gui = new ilEvaluationAllTableGUI($this, 'outEvaluation', $this->object->getAnonymity(), $this->object->isOfferingQuestionHintsEnabled());
     $data = array();
     $arrFilter = array();
     foreach ($table_gui->getFilterItems() as $item) {
         if ($item->getValue() !== false) {
             switch ($item->getPostVar()) {
                 case 'group':
                 case 'name':
                 case 'course':
                     $arrFilter[$item->getPostVar()] = $item->getValue();
                     break;
                 case 'passed_only':
                     $passedonly = $item->getChecked();
                     break;
             }
         }
     }
     include_once "./Modules/Test/classes/class.ilTestEvaluationData.php";
     $eval = new ilTestEvaluationData($this->object);
     $eval->setFilterArray($arrFilter);
     $foundParticipants =& $eval->getParticipants();
     $counter = 1;
     if (count($foundParticipants) > 0) {
         if ($this->object->getECTSOutput()) {
             $passed_array =& $this->object->getTotalPointsPassedArray();
         }
         foreach ($foundParticipants as $active_id => $userdata) {
             /* @var $userdata ilTestEvaluationUserData */
             $remove = FALSE;
             if ($passedonly) {
                 $mark_obj = $this->object->getMarkSchema()->getMatchingMark($userdata->getReachedPointsInPercent());
                 if ($mark_obj->getPassed() == FALSE || !$userdata->areObligationsAnswered()) {
                     $remove = TRUE;
                 }
             }
             if (!$remove) {
                 // build the evaluation row
                 $evaluationrow = array();
                 if ($this->object->getAnonymity()) {
                     $evaluationrow['name'] = $counter;
                     $evaluationrow['login'] = '';
                 } else {
                     $evaluationrow['name'] = $userdata->getName();
                     if (strlen($userdata->getLogin())) {
                         $evaluationrow['login'] = "******" . $userdata->getLogin() . "]";
                     } else {
                         $evaluationrow['login'] = '';
                     }
                 }
                 $evaluationrow['reached'] = $userdata->getReached();
                 $evaluationrow['max'] = $userdata->getMaxpoints();
                 $evaluationrow['hint_count'] = $userdata->getRequestedHintsCountFromScoredPass();
                 $percentage = $userdata->getReachedPointsInPercent();
                 $mark = $this->object->getMarkSchema()->getMatchingMark($percentage);
                 if (is_object($mark)) {
                     $evaluationrow['mark'] = $mark->getShortName();
                 }
                 if ($this->object->getECTSOutput()) {
                     $ects_mark = $this->object->getECTSGrade($passed_array, $userdata->getReached(), $userdata->getMaxPoints());
                     $evaluationrow['ects_grade'] = $ects_mark;
                 }
                 $evaluationrow['answered'] = $userdata->getQuestionsWorkedThroughInPercent();
                 $evaluationrow['questions_worked_through'] = $userdata->getQuestionsWorkedThrough();
                 $evaluationrow['number_of_questions'] = $userdata->getNumberOfQuestions();
                 $time_seconds = $userdata->getTimeOfWork();
                 $time_hours = floor($time_seconds / 3600);
                 $time_seconds -= $time_hours * 3600;
                 $time_minutes = floor($time_seconds / 60);
                 $time_seconds -= $time_minutes * 60;
                 $evaluationrow['working_time'] = sprintf("%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds);
                 $this->ctrl->setParameter($this, "active_id", $active_id);
                 $href = $this->ctrl->getLinkTarget($this, "detailedEvaluation");
                 $detailed_evaluation = $this->lng->txt("detailed_evaluation_show");
                 $evaluationrow['details'] = "<a class=\"il_ContainerItemCommand\" href=\"{$href}\">{$detailed_evaluation}</a>";
                 $userfields = ilObjUser::_lookupFields($userdata->getUserID());
                 $evaluationrow['gender'] = $userfields['gender'];
                 $evaluationrow['email'] = $userfields['email'];
                 $evaluationrow['institution'] = $userfields['institution'];
                 $evaluationrow['street'] = $userfields['street'];
                 $evaluationrow['city'] = $userfields['city'];
                 $evaluationrow['zipcode'] = $userfields['zipcode'];
                 $evaluationrow['country'] = $userfields['country'];
                 $evaluationrow['sel_country'] = $userfields['sel_country'];
                 $evaluationrow['department'] = $userfields['department'];
                 $evaluationrow['matriculation'] = $userfields['matriculation'];
                 $counter++;
                 $data[] = $evaluationrow;
             }
         }
     }
     $table_gui->setData($data);
     if (count($foundParticipants) > 0) {
         $ilToolbar->setFormName('form_output_eval');
         $ilToolbar->setFormAction($this->ctrl->getFormAction($this, 'exportEvaluation'));
         require_once 'Services/Form/classes/class.ilSelectInputGUI.php';
         $export_type = new ilSelectInputGUI($this->lng->txt('exp_eval_data'), 'export_type');
         $options = array('excel' => $this->lng->txt('exp_type_excel'), 'csv' => $this->lng->txt('exp_type_spss'));
         if (!$this->object->getAnonymity()) {
             include_once 'Services/Certificate/classes/class.ilCertificate.php';
             include_once 'Modules/Test/classes/class.ilTestCertificateAdapter.php';
             if (ilCertificate::_isComplete(new ilTestCertificateAdapter($this->object))) {
                 $options['certificate'] = $this->lng->txt('exp_type_certificate');
             }
         }
         $export_type->setOptions($options);
         $ilToolbar->addInputItem($export_type, true);
         require_once 'Services/UIComponent/Button/classes/class.ilSubmitButton.php';
         $button = ilSubmitButton::getInstance();
         $button->setCommand('exportEvaluation');
         $button->setCaption('export');
         $button->getOmitPreventDoubleSubmission();
         $ilToolbar->addButtonInstance($button);
     }
     $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print.css", "Modules/Test"), "print");
     if ($this->object->getShowSolutionAnswersOnly()) {
         $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print_hide_content.css", "Modules/Test"), "print");
     }
     $this->tpl->setContent($table_gui->getHTML());
 }
Ejemplo n.º 2
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;
 }
 /**
  * Creates the evaluation output for the test
  *
  * @access public
  */
 function outEvaluation()
 {
     global $ilAccess;
     if (!$ilAccess->checkAccess("tst_statistics", "", $this->ref_id) && !$ilAccess->checkAccess("write", "", $this->ref_id)) {
         // allow only evaluation access
         ilUtil::sendInfo($this->lng->txt("cannot_edit_test"), true);
         $this->ctrl->redirectByClass("ilobjtestgui", "infoScreen");
     }
     include_once "./Modules/Test/classes/tables/class.ilEvaluationAllTableGUI.php";
     $table_gui = new ilEvaluationAllTableGUI($this, 'outEvaluation', $this->object->getAnonymity(), $this->object->isOfferingQuestionHintsEnabled());
     $data = array();
     $arrFilter = array();
     foreach ($table_gui->getFilterItems() as $item) {
         if ($item->getValue() !== false) {
             switch ($item->getPostVar()) {
                 case 'group':
                 case 'name':
                 case 'course':
                     $arrFilter[$item->getPostVar()] = $item->getValue();
                     break;
                 case 'passed_only':
                     $passedonly = $item->getChecked();
                     break;
             }
         }
     }
     include_once "./Modules/Test/classes/class.ilTestEvaluationData.php";
     $eval = new ilTestEvaluationData($this->object);
     $eval->setFilterArray($arrFilter);
     $foundParticipants =& $eval->getParticipants();
     $counter = 1;
     if (count($foundParticipants) > 0) {
         if ($this->object->ects_output) {
             $passed_array =& $this->object->getTotalPointsPassedArray();
         }
         foreach ($foundParticipants as $active_id => $userdata) {
             /* @var $userdata ilTestEvaluationUserData */
             $remove = FALSE;
             if ($passedonly) {
                 $mark_obj = $this->object->getMarkSchema()->getMatchingMark($userdata->getReachedPointsInPercent());
                 if ($mark_obj->getPassed() == FALSE || !$userdata->areObligationsAnswered()) {
                     $remove = TRUE;
                 }
             }
             if (!$remove) {
                 // build the evaluation row
                 $userfields = ilObjUser::_lookupFields($userdata->getUserID());
                 foreach ($userfields as $key => $value) {
                     $evaluationrow[$key] = strlen($value) ? $value : ' ';
                 }
                 $evaluationrow = array();
                 $fullname = "";
                 if ($this->object->getAnonymity()) {
                     $fullname = $counter;
                     $evaluationrow['name'] = $fullname;
                     $evaluationrow['login'] = '';
                 } else {
                     $evaluationrow['name'] = $userdata->getName();
                     if (strlen($userdata->getLogin())) {
                         $evaluationrow['login'] = "******" . $userdata->getLogin() . "]";
                     } else {
                         $evaluationrow['login'] = '';
                     }
                 }
                 $evaluationrow['reached'] = $userdata->getReached();
                 $evaluationrow['max'] = $userdata->getMaxpoints();
                 $evaluationrow['hint_count'] = $userdata->getRequestedHintsCountFromScoredPass();
                 $percentage = $userdata->getReachedPointsInPercent();
                 $mark = $this->object->getMarkSchema()->getMatchingMark($percentage);
                 if (is_object($mark)) {
                     $evaluationrow['mark'] = $mark->getShortName();
                 }
                 if ($this->object->ects_output) {
                     $ects_mark = $this->object->getECTSGrade($passed_array, $userdata->getReached(), $userdata->getMaxPoints());
                     $evaluationrow['ects_grade'] = $ects_mark;
                 }
                 $evaluationrow['answered'] = $userdata->getQuestionsWorkedThrough() . " " . strtolower($this->lng->txt("of")) . " " . $userdata->getNumberOfQuestions() . " (" . sprintf("%2.2f", $userdata->getQuestionsWorkedThroughInPercent()) . " %" . ")";
                 $time_seconds = $userdata->getTimeOfWork();
                 $time_hours = floor($time_seconds / 3600);
                 $time_seconds -= $time_hours * 3600;
                 $time_minutes = floor($time_seconds / 60);
                 $time_seconds -= $time_minutes * 60;
                 $evaluationrow['working_time'] = sprintf("%02d:%02d:%02d", $time_hours, $time_minutes, $time_seconds);
                 $this->ctrl->setParameter($this, "active_id", $active_id);
                 $href = $this->ctrl->getLinkTarget($this, "detailedEvaluation");
                 $detailed_evaluation = $this->lng->txt("detailed_evaluation_show");
                 $evaluationrow['details'] = "<a class=\"il_ContainerItemCommand\" href=\"{$href}\">{$detailed_evaluation}</a>";
                 $userfields = ilObjUser::_lookupFields($userdata->getUserID());
                 $evaluationrow['gender'] = $userfields['gender'];
                 $evaluationrow['email'] = $userfields['email'];
                 $evaluationrow['institution'] = $userfields['institution'];
                 $evaluationrow['street'] = $userfields['street'];
                 $evaluationrow['city'] = $userfields['city'];
                 $evaluationrow['zipcode'] = $userfields['zipcode'];
                 $evaluationrow['country'] = $userfields['country'];
                 $evaluationrow['departement'] = $userfields['departement'];
                 $evaluationrow['matriculation'] = $userfields['matriculation'];
                 $counter++;
                 array_push($data, $evaluationrow);
             }
         }
     }
     $table_gui->setData($data);
     $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.il_as_tst_evaluation.html", "Modules/Test");
     $this->tpl->setVariable('EVALUATION_DATA', $table_gui->getHTML());
     if (count($foundParticipants) > 0) {
         $template = new ilTemplate("tpl.il_as_tst_evaluation_export.html", TRUE, TRUE, "Modules/Test");
         $template->setVariable("EXPORT_DATA", $this->lng->txt("exp_eval_data"));
         if (!$this->object->getAnonymity()) {
             include_once "./Services/Certificate/classes/class.ilCertificate.php";
             include_once "./Modules/Test/classes/class.ilTestCertificateAdapter.php";
             if (ilCertificate::_isComplete(new ilTestCertificateAdapter($this->object))) {
                 $template->setVariable("TEXT_CERTIFICATE", $this->lng->txt("exp_type_certificate"));
             }
         }
         $template->setVariable("TEXT_EXCEL", $this->lng->txt("exp_type_excel"));
         $template->setVariable("TEXT_CSV", $this->lng->txt("exp_type_spss"));
         $template->setVariable("CMD_EXPORT", "exportEvaluation");
         $template->setVariable("BTN_EXPORT", $this->lng->txt("export"));
         $template->setVariable("BTN_PRINT", $this->lng->txt("print"));
         $template->setVariable("BTN_COMMAND", $this->ctrl->getCmd());
         $template->setVariable("FORM_ACTION", $this->ctrl->getFormAction($this, "exportEvaluation"));
         $exportoutput = $template->get();
         $this->tpl->setVariable("EVALUATION_EXPORT", $exportoutput);
     }
     $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print.css", "Modules/Test"), "print");
     if ($this->object->getShowSolutionAnswersOnly()) {
         $this->tpl->addCss(ilUtil::getStyleSheetLocation("output", "test_print_hide_content.css", "Modules/Test"), "print");
     }
 }