/** * Save question answer * * @param * @return */ function saveQuestionAnswer($a_type, $a_id, $a_answer) { global $ilUser, $ilLog, $ilDB; //$a_type = "assOrderingQuestion"; //$a_id = 74; //$a_answer = '{"tries":1,"wrong":2,"passed":false,"answer":[true,true,false,true,false],"interactionId":null,"choice":["1","2","5","4","3"]}'; $ilLog->write($a_type); $ilLog->write($a_id); $ilLog->write($a_answer); include_once "./Services/JSON/classes/class.ilJsonUtil.php"; $answer = ilJsonUtil::decode($a_answer); $tries = $answer->tries; $passed = $answer->passed; $choice = $answer->choice; $points = ilPageQuestionProcessor::calculatePoints($a_type, $a_id, $choice); $ilLog->write("Points: " . $points); $set = $ilDB->query("SELECT * FROM page_qst_answer WHERE " . " qst_id = " . $ilDB->quote($a_id, "integer") . " AND " . " user_id = " . $ilDB->quote($ilUser->getId(), "integer")); if ($rec = $ilDB->fetchAssoc($set)) { $ilDB->manipulate("UPDATE page_qst_answer SET " . " try = try + 1," . " passed = " . $ilDB->quote($passed, "integer") . "," . " points = " . $ilDB->quote($points, "float") . " WHERE qst_id = " . $ilDB->quote($a_id, "integer") . " AND user_id = " . $ilDB->quote($ilUser->getId(), "integer")); } else { $ilDB->manipulate("INSERT INTO page_qst_answer " . "(qst_id, user_id, try, passed, points) VALUES (" . $ilDB->quote($a_id, "integer") . "," . $ilDB->quote($ilUser->getId(), "integer") . "," . $ilDB->quote(1, "integer") . "," . $ilDB->quote($passed, "integer") . "," . $ilDB->quote($points, "float") . ")"); } //$ilLog->write("tries: ".$tries); //$ilLog->write("passed: ".$passed); //$ilLog->write("points: ".$points); exit; }
/** * Fill table row */ protected function fillRow($a_set) { global $ilCtrl, $lng; $this->tpl->setVariable("PAGE_TITLE", ilLMObject::_lookupTitle($a_set["page_id"])); $this->tpl->setVariable("QUESTION", assQuestion::_getQuestionText($a_set["question_id"])); include_once "./Services/COPage/classes/class.ilPageQuestionProcessor.php"; $stats = ilPageQuestionProcessor::getQuestionStatistics($a_set["question_id"]); $this->tpl->setVariable("VAL_ANSWERED", (int) $stats["all"]); if ($stats["all"] == 0) { $this->tpl->setVariable("VAL_CORRECT_FIRST", 0); $this->tpl->setVariable("VAL_CORRECT_SECOND", 0); $this->tpl->setVariable("VAL_CORRECT_THIRD_OR_MORE", 0); $this->tpl->setVariable("VAL_NEVER", 0); } else { $this->tpl->setVariable("VAL_CORRECT_FIRST", $stats["first"] . " (" . 100 / $stats["all"] * $stats["first"] . " %)"); $this->tpl->setVariable("VAL_CORRECT_SECOND", $stats["second"] . " (" . 100 / $stats["all"] * $stats["second"] . " %)"); $this->tpl->setVariable("VAL_CORRECT_THIRD_AND_MORE", $stats["third_or_more"] . " (" . 100 / $stats["all"] * $stats["third_or_more"] . " %)"); $nev = $stats["all"] - $stats["first"] - $stats["second"] - $stats["third_or_more"]; $this->tpl->setVariable("VAL_NEVER", $nev . " (" . 100 / $stats["all"] * $nev . " %)"); } }
/** * Process answer */ function processAnswer() { global $ilUser, $ilDB, $lng, $ilPluginAdmin, $ilLog; parent::processAnswer(); // // Send notifications to authors that want to be informed on blocked users // $parent_id = ilPageObject::lookupParentId((int) $_GET["page_id"], "lm"); // is restriction mode set? include_once "./Modules/LearningModule/classes/class.ilObjContentObject.php"; if (ilObjContentObject::_lookupRestrictForwardNavigation($parent_id)) { // check if user is blocked $id = ilUtil::stripSlashes($_POST["id"]); include_once "./Services/COPage/classes/class.ilPageQuestionProcessor.php"; $as = ilPageQuestionProcessor::getAnswerStatus($id, $ilUser->getId()); // get question information include_once "./Modules/TestQuestionPool/classes/class.ilAssQuestionList.php"; $qlist = new ilAssQuestionList($ilDB, $lng, $ilPluginAdmin); $qlist->setParentObjId(0); $qlist->addFieldFilter("question_id", array($id)); $qlist->load(); $qdata = $qlist->getQuestionDataArray(); // has the user been blocked? if ($as["try"] >= $qdata[$as["qst_id"]]["nr_of_tries"] && $qdata[$as["qst_id"]]["nr_of_tries"] > 0 && !$as["passed"]) { include_once "./Services/Notification/classes/class.ilNotification.php"; $users = ilNotification::getNotificationsForObject(ilNotification::TYPE_LM_BLOCKED_USERS, $parent_id); if (count($users) > 0) { include_once "./Modules/LearningModule/classes/class.ilLMMailNotification.php"; $not = new ilLMMailNotification(); $not->setType(ilLMMailNotification::TYPE_USER_BLOCKED); $not->setQuestionId($id); $not->setRefId((int) $_GET["ref_id"]); $not->setRecipients($users); $not->send(); } } } }
/** * Process answer */ function processAnswer() { global $ilLog; /*$ilLog->write($_POST); $ilLog->write($_POST["id"]); $ilLog->write($_POST["type"]); $ilLog->write($_POST["answer"]); $ilLog->write($_GET);*/ include_once "./Services/COPage/classes/class.ilPageQuestionProcessor.php"; ilPageQuestionProcessor::saveQuestionAnswer(ilUtil::stripSlashes($_POST["type"]), ilUtil::stripSlashes($_POST["id"]), ilUtil::stripSlashes($_POST["answer"])); }
/** * Get on load code */ function getOnloadCode($a_mode) { global $ilCtrl, $ilUser; $code = array(); if ($this->getPage()->getPageConfig()->getEnableSelfAssessment()) { if (!$this->getPage()->getPageConfig()->getEnableSelfAssessmentScorm() && $a_mode != IL_PAGE_PREVIEW && $a_mode != "offline") { $ilCtrl->setParameterByClass(strtolower(get_class($this->getPage())) . "gui", "page_id", $this->getPage()->getId()); $url = $ilCtrl->getLinkTargetByClass(strtolower(get_class($this->getPage())) . "gui", "processAnswer", "", true, false); $code[] = "ilCOPageQuestionHandler.initCallback('" . $url . "');"; } if ($this->getPage()->getPageConfig()->getDisableDefaultQuestionFeedback()) { $code[] = "ilias.questions.default_feedback = false;"; } $code[] = self::getJSTextInitCode($this->getPage()->getPageConfig()->getLocalizationLanguage()) . ' il.COPagePres.updateQuestionOverviews();'; } $get_stored_tries = $this->getPage()->getPageConfig()->getUseStoredQuestionTries(); if ($get_stored_tries) { $q_ids = $this->getPage()->getQuestionIds(); if (count($q_ids) > 0) { foreach ($q_ids as $q_id) { include_once "./Services/COPage/classes/class.ilPageQuestionProcessor.php"; $as = ilPageQuestionProcessor::getAnswerStatus($q_id, $ilUser->getId()); $code[] = "ilias.questions.initAnswer(" . $q_id . ", " . (int) $as["try"] . ", " . ($as["passed"] ? "true" : "null") . ");"; } } } return $code; }
/** * Get blocked users information * * @param * @return */ function getBlockedUsersInformation() { global $ilDB, $lng, $ilPluginAdmin, $ilUser; $blocked_users = array(); // load question/pages information $this->page_questions = array(); $this->all_questions = array(); $page_for_question = array(); include_once "./Modules/LearningModule/classes/class.ilLMPageObject.php"; $q = ilLMPageObject::queryQuestionsOfLearningModule($this->lm_obj_id, "", "", 0, 0); foreach ($q["set"] as $quest) { $this->page_questions[$quest["page_id"]][] = $quest["question_id"]; $this->all_questions[] = $quest["question_id"]; $page_for_question[$quest["question_id"]] = $quest["page_id"]; } // get question information include_once "./Modules/TestQuestionPool/classes/class.ilAssQuestionList.php"; $qlist = new ilAssQuestionList($ilDB, $lng, $ilPluginAdmin); $qlist->setParentObjId(0); $qlist->addFieldFilter("question_id", $this->all_questions); $qlist->load(); $qdata = $qlist->getQuestionDataArray(); // load question answer information include_once "./Services/COPage/classes/class.ilPageQuestionProcessor.php"; $this->answer_status = ilPageQuestionProcessor::getAnswerStatus($this->all_questions); include_once "./Modules/LearningModule/classes/class.ilLMPageObject.php"; foreach ($this->answer_status as $as) { if ($as["try"] >= $qdata[$as["qst_id"]]["nr_of_tries"] && $qdata[$as["qst_id"]]["nr_of_tries"] > 0 && !$as["passed"]) { //var_dump($qdata[$as["qst_id"]]); $name = ilObjUser::_lookupName($as["user_id"]); $as["user_name"] = $name["lastname"] . ", " . $name["firstname"] . " [" . $name["login"] . "]"; $as["question_text"] = $qdata[$as["qst_id"]]["question_text"]; $as["page_id"] = $page_for_question[$as["qst_id"]]; $as["page_title"] = ilLMPageObject::_lookupTitle($as["page_id"]); $blocked_users[] = $as; } } return $blocked_users; }
/** * Unlock blocked question */ function unlockQuestion() { global $lng, $ilCtrl; include_once "./Services/COPage/classes/class.ilPageQuestionProcessor.php"; if (is_array($_POST["userquest_id"])) { foreach ($_POST["userquest_id"] as $uqid) { $uqid = explode(":", $uqid); ilPageQuestionProcessor::unlock((int) $uqid[0], (int) $uqid[1]); } ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true); } $ilCtrl->redirect($this, "listBlockedUsers"); }