• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • Examples
  • File List
  • Globals

cms/modules/quiz/quizcorrect.php

Go to the documentation of this file.
00001 <?php
00002 if(!defined('__PRAGYAN_CMS'))
00003 { 
00004         header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden');
00005         echo "<h1>403 Forbidden<h1><h4>You are not authorized to access the page.</h4>";
00006         echo '<hr/>'.$_SERVER['SERVER_SIGNATURE'];
00007         exit(1);
00008 }
00009 /*
00010  * Created on Jan 23, 2009
00011  */
00012 
00013 function isQuizEvaluated($quizId) {
00014         $countQuery = "SELECT COUNT(*) FROM `quiz_userattempts` WHERE `quiz_marksallotted` IS NULL AND `page_modulecomponentid` = $quizId";
00015         $countResult = mysql_query($countQuery);
00016         $countRow = mysql_fetch_row($countResult);
00017         return $countRow[0] == 0;
00018 }
00019 
00024 function evaluateQuiz($quizId) {
00025         $updateQuery = <<<UPDATEQUERY
00026                 UPDATE `quiz_answersubmissions` SET `quiz_marksallotted` = (
00027                         SELECT 
00028                                 IF(`quiz_submittedanswer` IS NULL OR `quiz_submittedanswer` = '', 0, 
00029                                         IF(`ques`.`quiz_questiontype` = 'subjective', `quiz_answersubmissions`.`quiz_marksallotted`, 
00030                                                 IF(`quiz_submittedanswer` = `quiz_rightanswer`, `question_positivemarks`, -`question_negativemarks`)
00031                                         )
00032                                 ) AS `mark`
00033                         FROM `quiz_questions` AS `ques`, (SELECT * FROM `quiz_answersubmissions`) AS `ans`, `quiz_weightmarks` AS `weights`
00034                         WHERE
00035                                 `ques`.`page_modulecomponentid` = $quizId AND
00036                                 `ans`.`page_modulecomponentid` = $quizId AND
00037                                 `weights`.`page_modulecomponentid` = $quizId AND
00038                                 `weights`.`question_weight` = `ques`.`quiz_questionweight` AND
00039                                 `ques`.`quiz_sectionid` = `ans`.`quiz_sectionid` AND 
00040                                 `ques`.`quiz_questionid` = `ans`.`quiz_questionid` AND 
00041                                 `ques`.`quiz_questiontype` IN ('sso', 'mso') AND
00042                                 `ques`.`quiz_sectionid` = `quiz_answersubmissions`.`quiz_sectionid` AND 
00043                                 `ques`.`quiz_questionid` = `quiz_answersubmissions`.`quiz_questionid` AND
00044                                 `ans`.`user_id` = `quiz_answersubmissions`.`user_id`
00045                 )
00046                 WHERE `page_modulecomponentid` = $quizId
00047 UPDATEQUERY;
00048 //      echo $updateQuery;
00049 
00050         $updateResult = mysql_query($updateQuery);
00051         if (!$updateResult) {
00052                 displayerror('Database Error. Could not correct questions.');
00053                 return false;
00054         }
00055         
00056         return true;
00057 }
00062 function updateSectionMarks($quizId) {
00063         $updateQuery = "UPDATE `quiz_userattempts` SET `quiz_marksallotted` = (" .
00064                         "SELECT SUM(`quiz_marksallotted`) FROM `quiz_answersubmissions` WHERE " .
00065                         "`quiz_answersubmissions`.`user_id` = `quiz_userattempts`.`user_id` AND " .
00066                         "`quiz_answersubmissions`.`quiz_sectionid` = `quiz_userattempts`.`quiz_sectionid` AND " .
00067                         "`quiz_answersubmissions`.`page_modulecomponentid` = $quizId" .
00068                         ") WHERE `page_modulecomponentid` = $quizId";
00069         $updateResult = mysql_query($updateQuery);
00070 
00071         if (!$updateResult) {
00072                 displayerror('Database Error. Could not update section marks. ' . $updateQuery . ' ' . mysql_error());
00073                 return false;
00074         }
00075 
00076         return true;
00077 }
00078 
00079 function getWeights($quizId) {
00080         $weighs = array();
00081         $result = mysql_query("SELECT `quiz_questionweight` FROM `quiz_questions` WHERE `page_modulecomponentid` = $quizId AND `quiz_questionweight` NOT IN (SELECT `question_weight` FROM `quiz_weightmarks` WHERE `page_modulecomponentid` = $quizId)");
00082         while($row = mysql_fetch_assoc($result))
00083                 $weighs[] = $row['quiz_questionweight'];
00084         return $weighs;
00085 }
00086 
00087 function getQuizUserListHtml($quizId) {
00088         // Evaluate the quiz,
00089         // retrieve list of users and their total marks, and display
00090         $quizRow = getQuizRow($quizId);
00091         $weights = getWeights($quizId);
00092         
00093         if(count($weights) > 0) {
00094                 displayerror("Marks for questions with weight " . join(", ", $weights) . " is not set. Correct the quiz after setting marks for all weigh. You can set that in <a href='./+edit#quizWeightMarks'>Edit</a>.");
00095                 return '';
00096         }
00097 
00098         if (!isQuizEvaluated($quizId)||isset($_POST['btnRecalculateMarks']))
00099                 evaluateQuiz($quizId);
00100         updateSectionMarks($quizId);
00101         $tableJqueryStuff="";
00102         $numSecColumns=0;
00103         $userTable = MYSQL_DATABASE_PREFIX . 'users';
00104         $markQuery = "SELECT `$userTable`.`user_email` AS `email`, `$userTable`.`user_id` AS `user_id`, SUM(`quiz_marksallotted`) AS `total`, MIN(`quiz_attemptstarttime`) AS `starttime`, MAX(`quiz_submissiontime`) AS `finishtime`, TIMEDIFF(MAX(`quiz_submissiontime`), MIN(`quiz_attemptstarttime`)) AS `timetaken` FROM `$userTable`, `quiz_userattempts` WHERE " .
00105                         "`$userTable`.`user_id` = `quiz_userattempts`.`user_id` AND " .
00106                         "`quiz_userattempts`.`page_modulecomponentid` = $quizId " .
00107                         "GROUP BY `quiz_userattempts`.`user_id` ORDER BY `total` DESC, `timetaken`, `starttime`, `finishtime`, `email`";
00108         $markResult = mysql_query($markQuery);
00109         if (!$markResult) {
00110                 displayerror($markQuery . '  ' . mysql_error());
00111         }
00112         $query = mysql_fetch_array(mysql_query("SELECT `quiz_title` FROM `quiz_descriptions` WHERE `page_modulecomponentid` = $quizId"));
00113         $result = mysql_query("SELECT `quiz_sectiontitle` FROM `quiz_sections` WHERE `page_modulecomponentid` = '$quizId' ORDER BY `quiz_sectionid`");
00114         $sectionHead = "";
00115         $secCols="";
00116         $toggleColumns="<tr><td><input type='checkbox' onclick='fnShowHide(0);' checked />User Full Name<br/></td>";
00117         $toggleColumns.="<td><input type='checkbox' onclick='fnShowHide(1);' />User Email<br/></td>";
00118         $toggleColumns.="<td><input type='checkbox' onclick='fnShowHide(2);' checked />Marks<br/></td>";
00119         $toggleColumns.="<td><input type='checkbox' onclick='fnShowHide(3);' checked />Time Taken<br/></td>";
00120         $toggleColumns.="<td><input type='checkbox' onclick='fnShowHide(4);' />Started<br/></td>";
00121         $toggleColumns.="<td><input type='checkbox' onclick='fnShowHide(5);' />Finished<br/></td>";
00122         
00123         $c=6;
00124         while($row = mysql_fetch_array($result))
00125         {
00126                 $sectionHead .= "<th>Section : {$row['quiz_sectiontitle']}</th>";
00127                 $tableJqueryStuff.="null,";
00128                 if($c%6==0) $secCols.="</tr><tr>";
00129                 $secCols.="<td><input type='checkbox' onclick='fnShowHide($c);' checked />Section : {$row['quiz_sectiontitle']}<br/></td>";             
00130                 $numSecColumns++;
00131                 $c++;
00132         }
00133         $secCols.="</tr>";
00134         $toggleColumns.=$secCols;
00135         global $urlRequestRoot, $cmsFolder, $STARTSCRIPTS;
00136         
00137         $tableJqueryStuff=<<<STUFF
00138                                                         null,
00139                                                         { "bVisible": false },
00140                                                         null,
00141                                                         null,
00142                                                         { "bVisible": false },
00143                                                         { "bVisible": false },
00144                                                         $tableJqueryStuff
00145                                                         null
00146 STUFF;
00147         
00148         $smarttable = smarttable::render(array('userstable'),array('userstable'=>array('aoColumns'=>"$tableJqueryStuff")));
00149         
00150         $STARTSCRIPTS.="initSmartTable();";
00151         
00152         
00153         $userListHtml = <<<HEAD
00154         $smarttable
00155         <script type="text/javascript" charset="utf-8">
00156                         function fnShowHide( iCol )
00157                         {
00158                                 var bVis = oTable.fnSettings().aoColumns[iCol].bVisible;
00159                                 oTable.fnSetColumnVis( iCol, bVis ? false : true );
00160                         }
00161 
00162         </script>
00163 
00164 HEAD;
00165         
00166         global $ICONS_SRC,$ICONS;
00167         $userListHtml .= "<h3>User Submissions for Quiz: {$query[0]}</h3>
00168                 <fieldset><legend>Select Columns</legend><table>$toggleColumns</table></fieldset>" .
00169                 "<form action='./+correct' method=POST><input type='submit' value='Recalculate Marks' name='btnRecalculateMarks' /></form>
00170                 <table class=\"userlisttable display\" border=\"1\" id='userstable'>" .
00171                 "<thead><tr><th>User Full Name</th><th>User Email</th><th>Total Marks</th><th>Time Taken</th><th>Started</th><th>Finished</th>$sectionHead<th>Action</th></tr></thead><tbody>";
00172         while ($markRow = mysql_fetch_assoc($markResult)) {
00173                 $userMarks = "";
00174                 $marksResult = mysql_query("SELECT `quiz_marksallotted`,`quiz_sectionid` FROM `quiz_userattempts` WHERE `user_id` = {$markRow['user_id']} AND `page_modulecomponentid` = $quizId ORDER BY `quiz_sectionid`");
00175                 $cc=1;
00176                 
00177                 while($row = mysql_fetch_array($marksResult))
00178                 {
00179                         
00180                         if($row['quiz_sectionid']!=$cc) // To check if some sections are missing, if yes then add NA value
00181                         {       
00182                                 while($row['quiz_sectionid']>$cc) { $userMarks .= "<td>-0</td>"; $cc++; }
00183                         }
00184                         $userMarks .= "<td>{$row['quiz_marksallotted']}</td>";
00185                         $cc++;
00186                         
00187                 }
00188                 
00189                 while($cc<=$numSecColumns) {  $userMarks .= "<td>-0</td>"; $cc++;}
00190                 if (is_null($markRow['finishtime'])) {
00191                         $markRow['finished'] = 0;
00192                         $markRow['finishtime'] = 'NULL';
00193                 }
00194                 $userfullname=getUserFullNameFromEmail($markRow['email']);
00195                 if($userfullname=="") $userfullname="Anonymous";
00196                 $userListHtml .= "<tr><td>$userfullname</td><td>{$markRow['email']}</td><td>{$markRow['total']}</td><td>{$markRow['timetaken']}</td><td>{$markRow['starttime']}</td><td>{$markRow['finishtime']}</td>$userMarks";
00197                 $userListHtml .= '<td><form name="userclearform" method="POST" action=""><input type="hidden" name="hdnUserId" id="hdnUserId" value="' . $markRow['user_id'] . "\" /><a href=\"./+correct&useremail={$markRow['email']}\">".$ICONS['Correct']['small'].'</a><input type="image" src="'.$ICONS_SRC["Delete"]["small"].'" name="btnDeleteUser" id="btnDeleteUser" value="Reject Submission" title="Reject Submission"/></form></td>';
00198                 $userListHtml .= "</tr>\n";
00199         }
00200         $userListHtml .= "</tbody></table>\n";
00201 
00202         return $userListHtml;
00203 }
00204 
00205 function getQuizCorrectForm($quizId, $userId) {
00206         $marks = mysql_fetch_array(mysql_query("SELECT SUM(`quiz_marksallotted`) AS `total`, MIN(`quiz_attemptstarttime`) AS `starttime`, MAX(`quiz_submissiontime`) AS `finishtime`, TIMEDIFF(MAX(`quiz_submissiontime`), MIN(`quiz_attemptstarttime`)) AS `timetaken` FROM `quiz_userattempts` WHERE `user_id` = {$userId} AND `page_modulecomponentid` = $quizId"));
00207         $title = mysql_fetch_array(mysql_query("SELECT `quiz_title` FROM `quiz_descriptions` WHERE `page_modulecomponentid` = '$quizId'"));
00208 
00209         $correctFormHtml = "";
00210         $sectionHead="";
00211 
00212         $sections = mysql_query("SELECT `quiz_sections`.`quiz_sectiontitle` AS `quiz_sectiontitle`, `quiz_sections`.`quiz_sectionid` AS `quiz_sectionid`, `quiz_marksallotted` FROM `quiz_userattempts` JOIN `quiz_sections` ON `quiz_userattempts`.`quiz_sectionid` = `quiz_sections`.`quiz_sectionid` WHERE `user_id` = $userId AND `quiz_userattempts`.`page_modulecomponentid` = $quizId AND `quiz_sections`.`page_modulecomponentid` = $quizId");
00213         
00214         while($sectionsRow = mysql_fetch_array($sections)) {
00215         $correctFormHtml .= "<h4>{$sectionsRow['quiz_sectiontitle']}(Marks: {$sectionsRow['quiz_marksallotted']})</h4>";
00216         $sectionHead .="<td><b>{$sectionsRow['quiz_sectiontitle']}</b> section marks: {$sectionsRow['quiz_marksallotted']}</td>";
00217         
00218         
00219         $questionQuery = "SELECT `quiz_questions`.`quiz_questionid` AS `quiz_questionid`, " .
00220                         "`quiz_questions`.`quiz_question` AS `quiz_question`, `quiz_questiontype`, " .
00221                         "`quiz_rightanswer`, `quiz_submittedanswer`, `quiz_marksallotted`,`quiz_questions`.`quiz_sectionid` " .
00222                         "FROM `quiz_questions`, `quiz_answersubmissions` WHERE " .
00223                         "`quiz_questions`.`page_modulecomponentid` = $quizId AND " .
00224                         "`quiz_questions`.`page_modulecomponentid` = `quiz_answersubmissions`.`page_modulecomponentid` AND " .
00225                         "`quiz_questions`.`quiz_sectionid` = `quiz_answersubmissions`.`quiz_sectionid` AND " .
00226                         "`quiz_questions`.`quiz_questionid` = `quiz_answersubmissions`.`quiz_questionid` AND " .
00227                         "`quiz_questions`.`quiz_sectionid` = {$sectionsRow['quiz_sectionid']} AND " .
00228                         "`user_id` = $userId ORDER BY `quiz_answersubmissions`.`quiz_questionrank`";
00229 
00230 
00231         $questionResult = mysql_query($questionQuery);
00232 
00233         if (!$questionResult)
00234                 displayerror($questionQuery . '<br />' . mysql_error());
00235         
00236         while ($questionRow = mysql_fetch_assoc($questionResult)) {
00237                 $correctFormHtml .= '<table class="quiz_' . (is_null($questionRow['quiz_marksallotted']) || floatval($questionRow['quiz_marksallotted']) <= 0 ? 'wrong' : 'right') . "answer\"><tr><td colspan=\"2\">{$questionRow['quiz_question']}</td></tr>\n";
00238                 if ($questionRow['quiz_questiontype'] == 'subjective') {
00239                         $submittedAnswers = array();
00240                         $submittedAnswers[] = $questionRow['quiz_submittedanswer'];
00241                         $correctAnswers = array();
00242                         $correctAnswers[] = $questionRow['quiz_rightanswer'];
00243                         $correctFormHtml .= '<tr><td nowrap="nowrap" width="10%">Submitted Answer:</td><td>'.implode("<br />\n", $submittedAnswers) . "</td></tr>\n";
00244                         $correctFormHtml .= '<tr><td nowrap="nowrap" width="10%">Correct Answer:</td><td>'.implode("<br />\n", $correctAnswers) . "</td></tr>\n"; 
00245                         $correctFormHtml .= "<tr><td>Mark:</td><td><form method=POST action='./+correct&useremail=" . safe_html($_GET['useremail']) . "'><input type=hidden name=quizid value='{$quizId}'><input type=hidden name=sectionid value={$questionRow['quiz_sectionid']}><input type=hidden name=questionid value={$questionRow['quiz_questionid']}><input type=hidden name=userid value={$userId}><input type=text name=mark size=5 value='{$questionRow['quiz_marksallotted']}'><input type=submit value='Submit' name=btnSetMark></form></td></tr>";
00246                 }
00247                 elseif ($questionRow['quiz_questiontype'] == 'sso' || $questionRow['quiz_questiontype'] == 'mso') {
00248                         $optionList = getQuestionOptionList($quizId, $sectionsRow['quiz_sectionid'], $questionRow['quiz_questionid']);
00249                         $options = array();
00250                         for ($i = 0; $i < count($optionList); ++$i)
00251                                 $options[$optionList[$i]['quiz_optionid']] = $optionList[$i];
00252 
00253                         $correctAnswers = array();
00254                         $rightAnswerIds = explode('|', $questionRow['quiz_rightanswer']);
00255                         for ($i = 0; $i < count($rightAnswerIds); ++$i)
00256                                 $correctAnswers[] = $options[$rightAnswerIds[$i]]['quiz_optiontext'];
00257 
00258                         $submittedAnswers = array();
00259                         $submittedAnswerIds = explode('|', $questionRow['quiz_submittedanswer']);
00260                         for ($i = 0; $i < count($submittedAnswerIds); ++$i)
00261                                 $submittedAnswers[] = $options[$submittedAnswerIds[$i]]['quiz_optiontext'];
00262                         $correctFormHtml .= '<tr><td nowrap="nowrap" width="10%">Submitted Answer:</td><td>' . implode("<br />\n", $submittedAnswers) . "</td></tr>\n";
00263                         $correctFormHtml .= "<tr><td nowrap=\"nowrap\" width=\"10%\">Correct Answer:</td><td>" . implode("<br />\n", $correctAnswers) . "</td></tr>\n";
00264                         $correctFormHtml .= "<tr><td>Mark:</td><td>{$questionRow['quiz_marksallotted']}</td></tr>";
00265                 }
00266                 $correctFormHtml .= "</table>\n";
00267         }
00268         }
00269         $quizcorrectinfo="<h3>{$title['quiz_title']} - Quiz Answers Correct form for user: " . safe_html($_GET['useremail']) . "</h3><form name='userclearform' method='POST' action='./+correct'><a href='./+correct'>&lt;&lt;Back</a> &nbsp;&nbsp;&nbsp;<input type='hidden' name='hdnUserId' id='hdnUserId' value='{$userId}' /><input type='submit' name='btnDeleteUser' id='btnDeleteUser' value='Reject Submission' /></form><table width=100%><tr><td>Total marks: {$marks['total']}</td>$sectionHead<td>Start time: {$marks['starttime']}</td><td>Finish time: {$marks['finishtime']}</td><td>Time taken: {$marks['timetaken']}</td></tr></table>";
00270         $correctFormHtml .= "<a href='./+correct'>&lt;&lt;Back</a>";
00271         return $quizcorrectinfo.$correctFormHtml;
00272 }

Generated on Sun Jan 2 2011 04:55:32 for Pragyan CMS by  doxygen 1.7.1