]> git.mjollnir.org Git - moodle.git/commitdiff
OK, it seems reliable enough now for alpha testing.
authormoodler <moodler>
Tue, 15 Oct 2002 12:54:11 +0000 (12:54 +0000)
committermoodler <moodler>
Tue, 15 Oct 2002 12:54:11 +0000 (12:54 +0000)
If you have existing quizzes, delete them all, then
drop all the quiz tables and delete the quiz line from
the modules table.

Things to do still:

  - add/edit/remove categories
  - display question feedback on submissions ...
  - record the time they started the quiz, as well as the completion.
  - place time limits between attempts
  - add full specification of quiz open time and quiz close time

lang/en/moodle.php
lang/en/quiz.php
mod/quiz/attempt.php
mod/quiz/db/mysql.sql
mod/quiz/edit.php
mod/quiz/index.php
mod/quiz/lib.php
mod/quiz/multichoice.html
mod/quiz/report.php
mod/quiz/shortanswer.html
mod/quiz/view.php

index 08d210a03e8d196ba917dca327321913030a812e..d705b48136c21e31b5fa7b81c5f0f7b1373cb15f 100644 (file)
@@ -192,6 +192,7 @@ GNU General Public License for more details:
 
 http://www.gnu.org/copyleft/gpl.html";
 $string['grade'] = "Grade";
+$string['grades'] = "Grades";
 $string['guestskey'] = "Allow guests who have the key";
 $string['guestsno'] = "Do not allow guests in";
 $string['guestsnotallowed'] = "Sorry, '\$a' does not allow guests to enter.";
index f04866a19a05a9e7afee7e784423d54e5a9f9739..8bf38ff845e8e778b7228f1bd42b9185417ddda4 100644 (file)
@@ -40,11 +40,10 @@ $string['false'] = "False";
 $string['feedback'] = "Feedback";
 $string['filloutoneanswer'] = "You must fill out at least one possible answer.  Answers left blank will not be used.";
 $string['fillouttwochoices'] = "You must fill out at least two choices.  Choices left blank will not be used.";
-$string['grade'] = "Grade";
 $string['gradeaverage'] = "Average grade";
 $string['gradehighest'] = "Highest grade";
 $string['grademethod'] = "Grading method";
-$string['imageaddress'] = "Image URL address";
+$string['imagedisplay'] = "Image to display";
 $string['introduction'] = "Introduction";
 $string['marks'] = "Marks";
 $string['multichoice'] = "Multiple Choice";
@@ -59,12 +58,14 @@ $string['save'] = "Save";
 $string['savegrades'] = "Save grades";
 $string['savemyanswers'] = "Save my answers";
 $string['savequiz'] = "Save this whole quiz";
+$string['score'] = "Raw score";
 $string['select'] = "Select";
 $string['selectcategoryabove'] = "Select a category above";
 $string['shortanswer'] = "Short Answer";
 $string['show'] = "Show";
 $string['showfeedback'] = "After answering, show feedback?";
 $string['showcorrectanswer'] = "After answering, show correct answers?";
+$string['time'] = "Time";
 $string['true'] = "True";
 $string['truefalse'] = "True/False";
 $string['viewallanswers'] = "View \$a completed quizzes";
index 5c4b438ef2cd50433dbe4698c00080e40ff667c4..dac9679cb5102ef907e1208a46450ef24292ba95 100644 (file)
             error("Sorry! Could not calculate your best grade!");
         }
 
-        print_heading(get_string("grade", "quiz").": $result->grade/$quiz->grade  ($result->sumgrades / $quiz->sumgrades = $result->percentage %)");
+        $strgrade = get_string("grade");
+        $strscore = get_string("score", "quiz");
+
+        print_heading("$strscore: $result->sumgrades/$quiz->sumgrades ($result->percentage %)");
+        print_heading("$strgrade: $result->grade/$quiz->grade");
 
         print_continue("view.php?id=$cm->id");
 
index e1e192e153513cbe3d52bceb0d4128cf42a1560a..e76a618dadf01ace7e609b016e31d16598685f86 100644 (file)
@@ -3,7 +3,7 @@
 # http://www.phpmyadmin.net/ (download page)
 #
 # Host: localhost
-# Generation Time: Oct 13, 2002 at 03:11 PM
+# Generation Time: Oct 15, 2002 at 08:22 PM
 # Server version: 3.23.49
 # PHP Version: 4.2.3
 # Database : `moodle`
@@ -40,10 +40,9 @@ CREATE TABLE `quiz_answers` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `question` int(10) unsigned NOT NULL default '0',
   `answer` varchar(255) NOT NULL default '',
-  `fraction` float NOT NULL default '0',
+  `fraction` varchar(10) NOT NULL default '0.0',
   `feedback` varchar(255) NOT NULL default '',
   PRIMARY KEY  (`id`)
-
 ) TYPE=MyISAM COMMENT='Answers, with a fractional grade (0-1) and feedback';
 # --------------------------------------------------------
 
@@ -56,7 +55,7 @@ CREATE TABLE `quiz_attempts` (
   `quiz` int(10) unsigned NOT NULL default '0',
   `user` int(10) unsigned NOT NULL default '0',
   `attempt` smallint(6) NOT NULL default '0',
-  `sumgrades` float NOT NULL default '0',
+  `sumgrades` int(10) NOT NULL default '0',
   `timemodified` int(10) unsigned NOT NULL default '0',
   PRIMARY KEY  (`id`)
 ) TYPE=MyISAM COMMENT='Stores various attempts on a quiz';
@@ -84,7 +83,7 @@ CREATE TABLE `quiz_grades` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `quiz` int(10) unsigned NOT NULL default '0',
   `user` int(10) unsigned NOT NULL default '0',
-  `grade` float NOT NULL default '0',
+  `grade` int(10) NOT NULL default '0',
   `timemodified` int(10) unsigned NOT NULL default '0',
   PRIMARY KEY  (`id`)
 ) TYPE=MyISAM COMMENT='Final quiz grade (may be best of several attempts)';
@@ -126,7 +125,7 @@ CREATE TABLE `quiz_questions` (
   `id` int(10) NOT NULL auto_increment,
   `category` int(10) NOT NULL default '0',
   `name` varchar(255) NOT NULL default '',
-  `question` text NOT NULL,
+  `questiontext` text NOT NULL,
   `image` varchar(255) NOT NULL default '',
   `type` smallint(6) NOT NULL default '0',
   PRIMARY KEY  (`id`)
@@ -142,7 +141,7 @@ CREATE TABLE `quiz_responses` (
   `attempt` int(10) unsigned NOT NULL default '0',
   `question` int(10) unsigned NOT NULL default '0',
   `answer` varchar(255) NOT NULL default '',
-  `grade` float NOT NULL default '0',
+  `grade` int(10) NOT NULL default '0',
   PRIMARY KEY  (`id`)
 ) TYPE=MyISAM COMMENT='Stores user responses to a quiz, and percentage grades';
 # --------------------------------------------------------
@@ -154,8 +153,8 @@ CREATE TABLE `quiz_responses` (
 CREATE TABLE `quiz_shortanswer` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `question` int(10) unsigned NOT NULL default '0',
-  `answer` int(10) NOT NULL default '0',
-  `case` tinyint(4) NOT NULL default '0',
+  `answers` varchar(255) NOT NULL default '',
+  `usecase` tinyint(2) NOT NULL default '0',
   PRIMARY KEY  (`id`),
   KEY `question` (`question`)
 ) TYPE=MyISAM COMMENT='Options for short answer questions';
index 9ccfa50ad6d9d8fd5d1cba40be82e4a3e526637a..09963d828e7a06697c9a9348fafc0189eae2bc4c 100644 (file)
         $modform->questions = implode(",", $questions);
     }
 
-    if ($grade) { /// The grades have been updated, so update our internal list
+    if ($setgrades) { /// The grades have been updated, so update our internal list
         $rawgrades = $HTTP_POST_VARS;
+        unset($modform->grades);
         foreach ($rawgrades as $key => $value) {    // Parse input for question -> grades
             if (substr($key, 0, 1) == "q") {
                 $key = substr($key,1);
index e7e4a36ed527a9055ead2576c299f26cb1818049..febce54f59e3ac64537358caa49e7148e9555a13 100644 (file)
     $strname  = get_string("name");
     $strweek  = get_string("week");
     $strtopic  = get_string("topic");
+    $strgrades  = get_string("grades");
 
     if ($course->format == "weeks") {
-        $table->head  = array ($strweek, $strname);
+        $table->head  = array ($strweek, $strname, $strgrades);
         $table->align = array ("CENTER", "LEFT");
+        $table->width = array (10, "*", 10);
     } else if ($course->format == "topics") {
-        $table->head  = array ($strtopic, $strname);
+        $table->head  = array ($strtopic, $strname, $strgrades);
         $table->align = array ("CENTER", "LEFT", "LEFT", "LEFT");
+        $table->width = array (10, "*", 10);
     } else {
-        $table->head  = array ($strname);
-        $table->align = array ("LEFT", "LEFT", "LEFT");
+        $table->head  = array ($strname, $strgrades);
+        $table->align = array ("LEFT", "LEFT");
+        $table->width = array ("*", 10);
     }
 
     foreach ($quizzes as $quiz) {
index 09c304bdb19cbf06c6a38bd99b2055ccf3d668ed..3489c5bd1e8c5594429ca8fb2b99ea6886a675d4 100644 (file)
@@ -16,9 +16,9 @@ $QUIZ_GRADE_METHOD = array ( GRADEHIGHEST => get_string("gradehighest", "quiz"),
 define("SHORTANSWER", "1");
 define("TRUEFALSE",   "2");
 define("MULTICHOICE", "3");
-$QUIZ_QUESTION_TYPE = array ( SHORTANSWER => get_string("shortanswer", "quiz"),
+$QUIZ_QUESTION_TYPE = array ( MULTICHOICE => get_string("multichoice", "quiz"),
                               TRUEFALSE   => get_string("truefalse", "quiz"),
-                              MULTICHOICE => get_string("multichoice", "quiz"));
+                              SHORTANSWER => get_string("shortanswer", "quiz") );
 
 
 
@@ -39,11 +39,14 @@ function quiz_add_instance($quiz) {
     // The grades for every question in this quiz are stored in an array
     if ($quiz->grades) {
         foreach ($quiz->grades as $question => $grade) {
-            $questiongrade->quiz = $quiz->id;
-            $questiongrade->question = $question;
-            $questiongrade->grade = $grade;
-            if (!insert_record("quiz_question_grades", $questiongrade)) {
-                return false;
+            if ($question and $grade) {
+                unset($questiongrade);
+                $questiongrade->quiz = $quiz->id;
+                $questiongrade->question = $question;
+                $questiongrade->grade = $grade;
+                if (!insert_record("quiz_question_grades", $questiongrade)) {
+                    return false;
+                }
             }
         }
     }
@@ -72,20 +75,23 @@ function quiz_update_instance($quiz) {
 
     if ($quiz->grades) {
         foreach ($quiz->grades as $question => $grade) {
-            $questiongrade->quiz = $quiz->id;
-            $questiongrade->question = $question;
-            $questiongrade->grade = $grade;
-            if (isset($existing[$question])) {
-                if ($existing[$question]->grade != $grade) {
-                    $questiongrade->id = $existing[$question]->id;
-                    if (!update_record("quiz_question_grades", $questiongrade)) {
+            if ($question and $grade) {
+                unset($questiongrade);
+                $questiongrade->quiz = $quiz->id;
+                $questiongrade->question = $question;
+                $questiongrade->grade = $grade;
+                if (isset($existing[$question])) {
+                    if ($existing[$question]->grade != $grade) {
+                        $questiongrade->id = $existing[$question]->id;
+                        if (!update_record("quiz_question_grades", $questiongrade)) {
+                            return false;
+                        }
+                    }
+                } else {
+                    if (!insert_record("quiz_question_grades", $questiongrade)) {
                         return false;
                     }
                 }
-            } else {
-                if (!insert_record("quiz_question_grades", $questiongrade)) {
-                    return false;
-                }
             }
         }
     }
@@ -328,6 +334,13 @@ function quiz_print_category_form($course, $current) {
         }
         $categories[$category->id] = $category->name;
     }
+    foreach ($categories as $key => $category) {
+       if ($category->publish) {
+           if ($course = get_record_sql("course", "id", $category->course)) {
+               $categories[$key]->name .= " ($course->shortname)";
+           }
+       }
+    }
     $strcategory = get_string("category", "quiz");
     $strshow = get_string("show", "quiz");
     $stredit = get_string("edit");
@@ -423,7 +436,7 @@ function quiz_print_question_list($questionlist, $grades) {
         echo "</TD>";
         echo "<TD>".$questions[$qnum]->name."</TD>";
         echo "<TD>";
-        choose_from_menu($gradesmenu, "q$qnum", $grades[$qnum], "");
+        choose_from_menu($gradesmenu, "q$qnum", (string)$grades[$qnum], "");
         echo "<TD>";
             echo "<A TITLE=\"$strdelete\" HREF=\"edit.php?delete=$qnum\"><IMG 
                  SRC=\"../../pix/t/delete.gif\" BORDER=0></A>&nbsp;";
@@ -435,7 +448,7 @@ function quiz_print_question_list($questionlist, $grades) {
     }
     echo "<TR><TD COLSPAN=3><TD ALIGN=right>";
     echo "<INPUT TYPE=submit VALUE=\"$strsavegrades:\">";
-    echo "<INPUT TYPE=hidden NAME=grade VALUE=\"save\">";
+    echo "<INPUT TYPE=hidden NAME=setgrades VALUE=\"save\">";
     echo "<TD ALIGN=LEFT BGCOLOR=\"$THEME->cellcontent\">";
     echo "<B>$sumgrade</B>";
     echo "</TD><TD></TD></TR>";
@@ -473,6 +486,7 @@ function quiz_print_cat_question_list($categoryid) {
         return;
     }
     echo "<P><B>$strcategory:</B> $category->name</P>\n";
+    echo "<CENTER>";
     echo text_to_html($category->info);
 
     echo "<FORM METHOD=GET ACTION=question.php>"; 
@@ -481,6 +495,7 @@ function quiz_print_cat_question_list($categoryid) {
     echo "<INPUT TYPE=hidden NAME=category VALUE=\"$category->id\">";
     echo "<INPUT TYPE=submit NAME=new VALUE=\"$strcreatenewquestion\">";
     echo "</FORM>";
+    echo "</CENTER>";
 
     if (!$questions = get_records("quiz_questions", "category", $category->id)) {
         echo "<P align=center>";
@@ -528,6 +543,23 @@ function quiz_get_user_attempts($quizid, $userid) {
     return get_records_sql("SELECT * FROM quiz_attempts WHERE quiz = '$quizid' and user = '$userid' ORDER by attempt ASC");
 }
 
+
+function quiz_get_user_attempts_string($quiz, $attempts, $bestgrade) {
+/// Returns a simple little comma-separated list of all attempts, 
+/// with the best grade bolded
+
+    $bestgrade = format_float($bestgrade);
+    foreach ($attempts as $attempt) {
+        $attemptgrade = format_float(($attempt->sumgrades / $quiz->sumgrades) * $quiz->grade);
+        if ($attemptgrade == $bestgrade) {
+            $userattempts[] = "<B>$attemptgrade</B>";
+        } else {
+            $userattempts[] = "$attemptgrade";
+        }
+    }
+    return implode(",", $userattempts);
+}
+
 function quiz_get_best_grade($quizid, $userid) {
 /// Get the best current grade for a particular user in a quiz
     if (!$grade = get_record_sql("SELECT * FROM quiz_grades WHERE quiz = '$quizid' and user = '$userid'")) {
@@ -702,9 +734,6 @@ function quiz_grade_attempt_results($quiz, $questions) {
     
     $result->sumgrades = 0;
 
-    global $db;
-    $db->debug=true;
-
     foreach ($questions as $question) {
         if (!$answers = quiz_get_answers($question)) {
             error("No answers defined for question id $question->id!");
@@ -777,8 +806,9 @@ function quiz_grade_attempt_results($quiz, $questions) {
         $result->feedback[$question->id] = $feedback;
     }
 
-    $result->percentage = ($result->sumgrades / $quiz->sumgrades);
-    $result->grade      = $result->percentage * $quiz->grade;
+    $fraction = (float)($result->sumgrades / $quiz->sumgrades);
+    $result->percentage = format_float($fraction * 100.0);
+    $result->grade      = format_float($fraction * $quiz->grade);
 
     return $result;
 }
index f0ff1885fa132524d7400eab8c1bb8f8117f74d8..e727ff0bcbf378cc4f1498b4b6fc64904b9e5bd5 100644 (file)
@@ -49,7 +49,7 @@
     <TD align=right><P><B><? print_string("choice", "quiz") ?> 1:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[0]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptionsfull, "fraction[]", $answers[0]->fraction, ""); ?>\r
         <BR>\r
@@ -70,7 +70,7 @@
     <TD align=right><P><B><? print_string("choice", "quiz") ?> 2:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[1]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptionsfull, "fraction[]", $answers[1]->fraction, ""); ?>\r
         <BR>\r
@@ -91,7 +91,7 @@
     <TD align=right><P><B><? print_string("choice", "quiz") ?> 3:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[2]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptionsfull, "fraction[]", $answers[2]->fraction, ""); ?>\r
         <BR>\r
     <TD align=right><P><B><? print_string("choice", "quiz") ?> 4:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[3]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptionsfull, "fraction[]", $answers[3]->fraction, ""); ?>\r
         <BR>\r
     <TD align=right><P><B><? print_string("choice", "quiz") ?> 5:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[4]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptionsfull, "fraction[]", $answers[4]->fraction, ""); ?>\r
         <BR>\r
     <TD align=right><P><B><? print_string("choice", "quiz") ?> 6:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[5]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptionsfull, "fraction[]", $answers[5]->fraction, ""); ?>\r
         <BR>\r
index bd9b878f4b3c0105b4f2c4b1371f9a9b645db76d..e7116106ebefd86730c561015d2490ed748484de 100644 (file)
@@ -52,7 +52,7 @@
     $strreport  = get_string("report", "quiz");
     $strname  = get_string("name");
     $strattempts  = get_string("attempts", "quiz");
-    $strgrade  = get_string("grade", "quiz");
+    $strgrade  = get_string("grade");
 
     print_header("$course->shortname: $quiz->name", "$course->fullname",
                  "$navigation <A HREF=index.php?id=$course->id>$strquizzes</A> 
         $picture = print_user_picture($grade->user, $course->id, $grade->picture, false, true);
 
         if ($attempts = quiz_get_user_attempts($quiz->id, $grade->user)) {
-            foreach ($attempts as $attempt) {
-                $userattempts[] = ($attempt->sumgrades / $quiz->sumgrades) * $quiz->grade;
-            }
-            $userattempts = implode(",", $userattempts);
+            $userattempts = quiz_get_user_attempts_string($quiz, $attempts, $grade->grade);
         }
 
         $table->data[] = array ($picture, 
index 8b93a20a38beef98b8d366288b16a36c80f40cba..703921ccc2b8971f227e599d0884051e9796a6e8 100644 (file)
@@ -48,7 +48,7 @@
     <TD align=right><P><B><? print_string("answer", "quiz") ?> 1:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[0]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptions, "fraction[]", $answers[0]->fraction,""); ?>\r
         <BR>\r
@@ -69,7 +69,7 @@
     <TD align=right><P><B><? print_string("answer", "quiz") ?> 2:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[1]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptions, "fraction[]", $answers[1]->fraction,""); ?>\r
         <BR>\r
@@ -90,7 +90,7 @@
     <TD align=right><P><B><? print_string("answer", "quiz") ?> 3:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[2]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptions, "fraction[]", $answers[2]->fraction,""); ?>\r
         <BR>\r
     <TD align=right><P><B><? print_string("answer", "quiz") ?> 4:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[3]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptions, "fraction[]", $answers[3]->fraction,""); ?>\r
         <BR>\r
     <TD align=right><P><B><? print_string("answer", "quiz") ?> 5:</B></P></TD>\r
     <TD>\r
         <INPUT type="text" name="answer[]" size=50 value="<? p($answers[4]->answer) ?>">&nbsp;&nbsp;\r
-        <? print_string("grade", "quiz");\r
+        <? print_string("grade");\r
            echo ":&nbsp;";\r
            choose_from_menu($gradeoptions, "fraction[]", $answers[4]->fraction,""); ?>\r
         <BR>\r
index c7e0c2b0f37d78f9e999099142245bf9631686e9..dfdb4d95ce37506757b97f6225fed0fdfe37fadd 100644 (file)
     if ($quiz->attempts > 1) {
         echo "<P ALIGN=CENTER>".get_string("attemptsallowed", "quiz").": $quiz->attempts</P>";
         echo "<P ALIGN=CENTER>".get_string("grademethod", "quiz").": ".$QUIZ_GRADE_METHOD[$quiz->grademethod]."</P>";
+    } else {
+        echo "<BR>";
     }
+
+    $strattempt = get_string("attempt", "quiz");
+    $strtime = get_string("time", "quiz");
+    $strgrade = get_string("grade");
+
     if ($numattempts) { 
-        $table->head = array("Attempt", "Time", "Grade");
+        $table->head = array($strattempt, $strtime, "$strgrade / $quiz->grade");
         $table->align = array("CENTER", "LEFT", "RIGHT");
         foreach ($attempts as $attempt) {
             $table->data[] = array( $attempt->attempt, 
                                     userdate($attempt->timemodified), 
-                                    ($attempt->sumgrades/$quiz->sumgrades)*$quiz->grade );
+                                    format_float(($attempt->sumgrades/$quiz->sumgrades)*$quiz->grade) );
         }
         print_table($table);
     }
 
     $mygrade = quiz_get_best_grade($quiz->id, $USER->id);
 
-    if ($numattempts < $quiz->attempts or !$quiz->attempts) { 
-        if ($available) {
-            $options["id"] = $cm->id;
-            if ($numattempts) {
-                print_heading("Your best grade so far is $mygrade / $quiz->grade.");
+    if (!$quiz->questions) {
+        print_heading(get_string("noquestions", "quiz"));
+    } else {
+        if ($numattempts < $quiz->attempts or !$quiz->attempts) { 
+            if ($available) {
+                $options["id"] = $cm->id;
+                if ($numattempts) {
+                    print_heading("Your best grade so far is $mygrade / $quiz->grade.");
+                }
+                echo "<BR>";
+                echo "<DIV align=CENTER>";
+                print_single_button("attempt.php", $options, $label="Attempt quiz now");
+                echo "</P>";
             }
-            echo "<BR>";
-            echo "<DIV align=CENTER>";
-            print_single_button("attempt.php", $options, $label="Attempt quiz now");
-            echo "</P>";
+        } else {
+            print_heading(get_string("nomoreattempts", "quiz"));
+            print_heading(get_string("yourfinalgradeis", "quiz", "$mygrade / $quiz->grade"));
         }
-    } else {
-        print_heading(get_string("nomoreattempts", "quiz"));
-        print_heading(get_string("yourfinalgradeis", "quiz", "$mygrade / $quiz->grade"));
     }