/** * 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; }
/** * 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; }
/** * 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; }