Ejemplo n.º 1
0
/**
 * Checks whether a quiz has been set up properly with sufficient number of questions.
 * @param integer $quizId Quiz Id.
 * @return boolean True indicating that the quiz is set up properly, false indicating otherwise.
 */
function checkQuizSetup($quizId)
{
    $sectionList = getSectionList($quizId);
    if (count($sectionList) == 0) {
        return false;
    }
    $questionTypes = array_keys(getQuestionTypes());
    for ($i = 0; $i < count($sectionList); ++$i) {
        $questionCounts = getQuestionTypeCounts($quizId, $sectionList[$i]['quiz_sectionid']);
        for ($j = 0; $j < count($questionTypes); ++$j) {
            if ($questionCounts[$questionTypes[$j]] < $sectionList[$i]['quiz_section' . $questionTypes[$j] . 'count']) {
                return false;
            }
        }
    }
    return true;
}
Ejemplo n.º 2
0
/**
 * function submitQuestionEditForm:
 * updates question properties in database when a question edit form is submitted.
 * for objective answers also the options are updated
 */
function submitQuestionEditForm($quizId, $sectionId, $questionId)
{
    $updates = array();
    $done = true;
    if (isset($_POST['txtQuestion'])) {
        $updates[] = "`quiz_question` = '" . escape($_POST['txtQuestion']) . "'";
    }
    if (isset($_POST['selQuestionType']) && in_array($_POST['selQuestionType'], array_keys(getQuestionTypes()))) {
        $updates[] = "`quiz_questiontype` = '" . escape($_POST['selQuestionType']) . "'";
    } else {
        displayerror('No or invalid question type specified.');
        return false;
    }
    if (isset($_POST['txtQuestionWeight']) && is_numeric($_POST['txtQuestionWeight']) && $_POST['txtQuestionWeight'] > 0) {
        $updates[] = "`quiz_questionweight` = " . escape($_POST['txtQuestionWeight']);
    }
    deleteQuestionOptions($quizId, $sectionId, $questionId);
    $questionType = escape($_POST['selQuestionType']);
    if ($questionType != 'subjective') {
        $i = 0;
        $rightAnswer = array();
        while (true) {
            if (!isset($_POST['txtOptionText' . $i]) || $_POST["txtOptionText{$i}"] == '') {
                break;
            }
            $optionText = escape($_POST['txtOptionText' . $i]);
            $insertQuery = "INSERT INTO `quiz_objectiveoptions`(`page_modulecomponentid`, `quiz_sectionid`, `quiz_questionid`, `quiz_optiontext`, `quiz_optionrank`) " . "SELECT '{$quizId}', '{$sectionId}', '{$questionId}', '{$optionText}', IFNULL(MAX(`quiz_optionrank`), 0) + 1 FROM `quiz_objectiveoptions` WHERE `page_modulecomponentid` = '{$quizId}' AND `quiz_sectionid` = '{$sectionId}' AND `quiz_questionid` = '{$questionId}' LIMIT 1";
            if (!mysql_query($insertQuery)) {
                displayerror('Database Error. Could not insert options.');
                return false;
            }
            $optionId = mysql_insert_id();
            if ($questionType == 'sso' && isset($_POST['optOption']) && $_POST['optOption'] == $i || $questionType == 'mso' && isset($_POST['chkOption' . $i])) {
                $rightAnswer[] = $optionId;
            }
            ++$i;
        }
        if (!isset($rightAnswer[0])) {
            displayerror('No options specified for objective answer');
            $done = false;
        }
        $rightAnswer = implode('|', $rightAnswer);
    } else {
        $rightAnswer = isset($_POST['txtRightAnswer']) ? safe_html($_POST['txtRightAnswer']) : '';
    }
    $updates[] = "`quiz_rightanswer` = '{$rightAnswer}'";
    $updateQuery = "UPDATE `quiz_questions` SET " . implode(', ', $updates) . " WHERE `page_modulecomponentid` = {$quizId} AND `quiz_sectionid` = '{$sectionId}' AND `quiz_questionid` = '{$questionId}'";
    if (!mysql_query($updateQuery)) {
        displayerror('Database Error. Could not save section details. ' . $updateQuery . ' ' . mysql_error());
        return false;
    }
    return $done;
}
Ejemplo n.º 3
0
 /**
  * function getSectionQuestions:
  * gets list of questionId in this section considering, whether quiz is randomized and number of questions per section
  */
 private function getSectionQuestions($sectionRow)
 {
     $questionTypes = array_keys(getQuestionTypes());
     $sectionId = $sectionRow['quiz_sectionid'];
     if ($sectionRow['quiz_sectionquestionshuffled'] == 0) {
         $limit = 0;
         for ($i = 0; $i < count($questionTypes); ++$i) {
             $limit += $sectionRow["quiz_section{$questionTypes[$i]}count"];
         }
         $questionQuery = "SELECT `quiz_questionid` FROM `quiz_questions` WHERE `page_modulecomponentid` = '{$this->quizId}' AND `quiz_sectionid` = '{$sectionId}' ORDER BY `quiz_questionrank` LIMIT {$limit}";
     } else {
         $questionIdQueries = array();
         for ($i = 0; $i < count($questionTypes); ++$i) {
             $limit = $sectionRow["quiz_section{$questionTypes[$i]}count"];
             if ($limit) {
                 $questionIdQueries[] = "(SELECT `quiz_questionid` FROM `quiz_questions` WHERE `page_modulecomponentid` = '{$this->quizId}' AND `quiz_sectionid` = '{$sectionId}' AND `quiz_questiontype` = '{$questionTypes[$i]}' ORDER BY RAND() LIMIT {$limit})";
             }
         }
         $questionQuery = "SELECT `quiz_questionid` FROM (" . implode(' UNION ', $questionIdQueries) . ") AS `questions` ORDER BY RAND()";
     }
     $questionIds = array();
     $questionResult = mysql_query($questionQuery) or die(mysql_error());
     while ($questionRow = mysql_fetch_row($questionResult)) {
         $questionIds[] = $questionRow[0];
     }
     return $questionIds;
 }