43        include_once(
"./Services/JSON/classes/class.ilJsonUtil.php");
 
   45        $tries = $answer->tries;
 
   46        $passed = $answer->passed;
 
   47        $choice = $answer->choice;
 
   49        $ilLog->write(
"Points: " . $points);
 
   52            "SELECT * FROM page_qst_answer WHERE " .
 
   53            " qst_id = " . 
$ilDB->quote($a_id, 
"integer") . 
" AND " .
 
   54            " user_id = " . 
$ilDB->quote(
$ilUser->getId(), 
"integer")
 
   82        if (!
$ilDB->fetchAssoc($set)) {
 
   86                    "qst_id" => array(
"integer", $a_id),
 
   87                    "user_id" => array(
"integer", 
$ilUser->getId())
 
   90                    "try" => array(
"integer", 1),
 
   91                    "passed" => array(
"integer", $passed),
 
   92                    "points" => array(
"float", $points)
 
   97                "UPDATE page_qst_answer SET " .
 
   99                " passed = " . 
$ilDB->quote($passed, 
"integer") . 
"," .
 
  100                " points = " . 
$ilDB->quote($points, 
"float") .
 
  101                " WHERE qst_id = " . 
$ilDB->quote($a_id, 
"integer") .
 
  102                " AND user_id = " . 
$ilDB->quote(
$ilUser->getId(), 
"integer")
 
  120            "SELECT count(user_id) usr_cnt FROM page_qst_answer WHERE " .
 
  121            " qst_id = " . 
$ilDB->quote($a_q_id, 
"integer")
 
  123        $rec = 
$ilDB->fetchAssoc($set);
 
  124        $all = $rec[
"usr_cnt"];
 
  128        $third_or_more = 
false;
 
  132                "SELECT count(user_id) usr_cnt FROM page_qst_answer WHERE " .
 
  133                " qst_id = " . 
$ilDB->quote($a_q_id, 
"integer") . 
" AND " .
 
  134                " passed = " . 
$ilDB->quote(1, 
"integer") . 
" AND " .
 
  135                " try = " . 
$ilDB->quote(1, 
"integer")
 
  137            $rec = 
$ilDB->fetchAssoc($set);
 
  138            $first = $rec[
"usr_cnt"];
 
  141                "SELECT count(user_id) usr_cnt FROM page_qst_answer WHERE " .
 
  142                " qst_id = " . 
$ilDB->quote($a_q_id, 
"integer") . 
" AND " .
 
  143                " passed = " . 
$ilDB->quote(1, 
"integer") . 
" AND " .
 
  144                " try = " . 
$ilDB->quote(2, 
"integer")
 
  146            $rec = 
$ilDB->fetchAssoc($set);
 
  147            $second = $rec[
"usr_cnt"];
 
  150                $q = 
"SELECT count(user_id) usr_cnt FROM page_qst_answer WHERE " .
 
  151                " qst_id = " . 
$ilDB->quote($a_q_id, 
"integer") . 
" AND " .
 
  152                " passed = " . 
$ilDB->quote(1, 
"integer") . 
" AND " .
 
  153                " try >= " . 
$ilDB->quote(3, 
"integer")
 
  155            $rec = 
$ilDB->fetchAssoc($set);
 
  156            $third_or_more = $rec[
"usr_cnt"];
 
  159        return array(
"all" => $all, 
"first" => $first, 
"second" => $second, 
"third_or_more" => $third_or_more);
 
  179            case "assSingleChoice":
 
  180                include_once(
"./Modules/TestQuestionPool/classes/class.assSingleChoice.php");
 
  182                $q->loadFromDb($a_id);
 
  184                foreach ($q->getAnswers() as 
$key => $answer) {
 
  185                    if (isset($a_choice[0]) && 
$key == $a_choice[0]) {
 
  186                        $points += $answer->getPoints();
 
  191            case "assMultipleChoice":
 
  192                include_once(
"./Modules/TestQuestionPool/classes/class.assMultipleChoice.php");
 
  194                $q->loadFromDb($a_id);
 
  196                foreach ($q->getAnswers() as 
$key => $answer) {
 
  197                    if (is_array($a_choice) && in_array(
$key, $a_choice)) {
 
  198                        $points += $answer->getPoints();
 
  200                        $points += $answer->getPointsUnchecked();
 
  206                include_once(
"./Modules/TestQuestionPool/classes/class.assClozeTest.php");
 
  208                $q->loadFromDb($a_id);
 
  210                foreach ($q->getGaps() as 
$id => $gap) {
 
  211                    $choice = $a_choice[
$id];
 
  212                    switch ($gap->getType()) {
 
  215                            for ($order = 0; $order < $gap->getItemCount(); $order++) {
 
  216                                $answer = $gap->getItem($order);
 
  217                                $gotpoints = $q->getTextgapPoints(
 
  218                                    $answer->getAnswertext(),
 
  222                                if ($gotpoints > $gappoints) {
 
  223                                    $gappoints = $gotpoints;
 
  226                            $points += $gappoints;
 
  232                            for ($order = 0; $order < $gap->getItemCount(); $order++) {
 
  233                                $answer = $gap->getItem($order);
 
  234                                $gotpoints = $q->getNumericgapPoints(
 
  235                                    $answer->getAnswertext(),
 
  237                                    $answer->getPoints(),
 
  238                                    $answer->getLowerBound(),
 
  239                                    $answer->getUpperBound()
 
  241                                if ($gotpoints > $gappoints) {
 
  242                                    $gappoints = $gotpoints;
 
  245                            $points += $gappoints;
 
  250                            for ($order = 0; $order < $gap->getItemCount(); $order++) {
 
  251                                $answer = $gap->getItem($order);
 
  252                                if ($choice == $answer->getOrder()) {
 
  253                                    $answerpoints = $answer->getPoints();
 
  254                                    $points += $answerpoints;
 
  263            case "assMatchingQuestion":
 
  264                include_once(
"./Modules/TestQuestionPool/classes/class.assMatchingQuestion.php");
 
  266                $q->loadFromDb($a_id);
 
  268                for (
$i = 0; 
$i < $q->getMatchingPairCount(); 
$i++) {
 
  269                    $pair = $q->getMatchingPair(
$i);
 
  270                    if (is_array($a_choice) && in_array($pair->definition->identifier . 
"-" . $pair->term->identifier, $a_choice)) {
 
  271                        $points += $pair->points;
 
  276            case "assOrderingQuestion":
 
  280                include_once(
"./Modules/TestQuestionPool/classes/class.assOrderingQuestion.php");
 
  282                $q->loadFromDb($a_id);
 
  286                foreach ($q->getOrderElements() as $answer) {
 
  287                    if ($a_choice[$cnt - 1] != $cnt) {
 
  293                    $points = $q->getPoints();
 
  297            case "assImagemapQuestion":
 
  298                include_once(
"./Modules/TestQuestionPool/classes/class.assImagemapQuestion.php");
 
  300                $q->loadFromDb($a_id);
 
  303                foreach ($q->getAnswers() as 
$key => $answer) {
 
  304                    if (is_array($a_choice) && in_array(
$key, $a_choice)) {
 
  305                        $points += $answer->getPoints();
 
  316        return (
int) $points;
 
  331        $qst = (is_array($a_q_id))
 
  332            ? 
$ilDB->in(
"qst_id", $a_q_id, 
false, 
"integer")
 
  333            : 
" qst_id = " . 
$ilDB->quote($a_q_id, 
"integer");
 
  335        $and = ($a_user_id > 0)
 
  336            ? 
" AND user_id = " . 
$ilDB->quote($a_user_id, 
"integer")
 
  340            "SELECT * FROM page_qst_answer WHERE " .
 
  345        if (is_array($a_q_id) || $a_user_id == 0) {
 
  347            while ($rec = 
$ilDB->fetchAssoc($set)) {
 
  348                $key = ($a_user_id == 0)
 
  349                    ? $rec[
"qst_id"] . 
":" . $rec[
"user_id"]
 
  355            return $ilDB->fetchAssoc($set);
 
  372            $q = 
"UPDATE page_qst_answer SET " .
 
  373                " try = " . 
$ilDB->quote(0, 
"integer") . 
"," .
 
  374                " passed = " . 
$ilDB->quote(0, 
"integer") . 
"," .
 
  375                " points = " . 
$ilDB->quote(0, 
"integer") . 
"," .
 
  376                " unlocked = " . 
$ilDB->quote(0, 
"integer") .
 
  377                " WHERE qst_id = " . 
$ilDB->quote($a_q_id, 
"integer") .
 
  378                " AND user_id = " . 
$ilDB->quote($a_user_id, 
"integer")
 
  388    public static function unlock($a_q_id, $a_user_id)
 
  395            $q = 
"UPDATE page_qst_answer SET " .
 
  396                " unlocked = " . 
$ilDB->quote(1, 
"integer") .
 
  397                " WHERE qst_id = " . 
$ilDB->quote($a_q_id, 
"integer") .
 
  398                " AND user_id = " . 
$ilDB->quote($a_user_id, 
"integer")
 
An exception for terminatinating execution or to throw for unit testing.
Class for image map questions.
Class for matching questions.
Class for multiple choice tests.
Class for ordering questions.
Class for single choice questions.
static decode($json_notated_string, $suppress_native=false)
static getQuestionStatistics($a_q_id)
Get statistics for question.
static resetTries($a_q_id, $a_user_id)
Reset tries.
static calculatePoints($a_type, $a_id, $a_choice)
Calculate points.
static getAnswerStatus($a_q_id, $a_user_id=0)
Get statistics for question.
static saveQuestionAnswer($a_type, $a_id, $a_answer)
Save question answer.
static unlock($a_q_id, $a_user_id)
Reset tries.
if(!array_key_exists('StateId', $_REQUEST)) $id
const CLOZE_TEXT
Cloze question constants.