From 6a952ce7a0a0a9bc84671d818bcb12578fb581e2 Mon Sep 17 00:00:00 2001 From: moodler Date: Mon, 14 Oct 2002 09:07:13 +0000 Subject: [PATCH] Many new additions - code not quite usable yet, but getting close --- mod/quiz/category.php | 3 +- mod/quiz/edit.php | 165 +++++++++++++++++++++++++++++++++++- mod/quiz/lib.php | 189 ++++++++++++++++++++++++++++++++++++++++++ mod/quiz/mod.html | 5 +- mod/quiz/question.php | 2 +- 5 files changed, 360 insertions(+), 4 deletions(-) diff --git a/mod/quiz/category.php b/mod/quiz/category.php index 404f141e44..b3ce80f42d 100644 --- a/mod/quiz/category.php +++ b/mod/quiz/category.php @@ -1,3 +1,4 @@ - diff --git a/mod/quiz/edit.php b/mod/quiz/edit.php index 404f141e44..d66424e944 100644 --- a/mod/quiz/edit.php +++ b/mod/quiz/edit.php @@ -1,3 +1,166 @@ -name or !$modform->intro) { + error(get_string("filloutallfields"), $HTTP_REFERER); + } + + + $SESSION->modform = $modform; // Save the form in the current session + save_session("SESSION"); + + } else { + if (!isset($SESSION->modform)) { + error("You have used this page incorrectly!"); + } + + $modform = $SESSION->modform; + } + + + if (! $course = get_record("course", "id", $modform->course)) { + error("This course doesn't exist"); + } + + require_login($course->id); + + if (!isteacher($course->id)) { + error("You can't modify this course!"); + } + + // Now, check for commands on this page and modify variables as necessary + + if ($up) { //------------------------------------------------------------ + $questions = explode(",", $modform->questions); + if ($questions[0] <> $up) { + foreach ($questions as $key => $question) { + if ($up == $question) { + $swap = $questions[$key-1]; + $questions[$key-1] = $question; + $questions[$key] = $swap; + break; + } + } + $modform->questions = implode(",", $questions); + } + } + + if ($down) { //---------------------------------------------------------- + $questions = explode(",", $modform->questions); + if ($questions[count($questions)-1] <> $down) { + foreach ($questions as $key => $question) { + if ($down == $question) { + $swap = $questions[$key+1]; + $questions[$key+1] = $question; + $questions[$key] = $swap; + break; + } + } + $modform->questions = implode(",", $questions); + } + } + + if ($add) { //----------------------------------------------------------- + $rawquestions = $HTTP_POST_VARS; + $questions = explode(",", $modform->questions); + foreach ($rawquestions as $key => $value) { // Parse input for question ids + if (substr($key, 0, 1) == "q") { + $key = substr($key,1); + foreach ($questions as $question) { + if ($question == $key) { + continue 2; + } + } + $questions[] = $key; + $newgrade->quiz = $quiz->id; + } + } + $modform->questions = implode(",", $questions); + } + + if ($delete) { //-------------------------------------------------------- + $questions = explode(",", $modform->questions); + foreach ($questions as $key => $question) { + if ($question == $delete) { + unset($questions[$key]); + $db->debug=true; + execute_sql("DELETE FROM quiz_question_grades WHERE quiz='$quiz->id' and question='$question'"); + $db->debug=false; + } + } + $modform->questions = implode(",", $questions); + } + + if ($grade) { //--------------------------------------------------------- + $rawgrades = $HTTP_POST_VARS; + foreach ($rawgrades as $key => $value) { // Parse input for question -> grades + if (substr($key, 0, 1) == "q") { + $key = substr($key,1); + set_field("quiz_question_grades", "grade", $value, "id", $key); + } + } + } + + if ($cat) { //----------------------------------------------------------- + if ($catshow) { + $modform->category = $cat; + } else if ($catrename) { + redirect("category.php?rename=$cat"); + } else if ($catdelete) { + redirect("category.php?delete=$cat"); + } else if ($catnew) { + redirect("category.php?new=$cat"); + } + } + + + $SESSION->modform = $modform; + save_session("SESSION"); + + + + $strediting = get_string("editingquiz", "quiz"); + $strname = get_string("name"); + + print_header("$course->shortname: $strediting", "$course->shortname: $strediting", + "wwwroot/course/view.php?id=$course->id\">$course->shortname -> $strediting"); + + // Print basic page layout. + + echo ""; + echo ""; + echo "
"; + print_simple_box_start("CENTER", "100%", $THEME->body); + print_heading($modform->name); + quiz_print_question_list($modform->questions); + ?> +
+

 

+
destination ?>> + + "> +
+
+
"; + print_simple_box_start("CENTER", "100%", $THEME->body); + quiz_print_category_form($course, $modform->category); + print_simple_box_end(); + + print_spacer(5,1); + + print_simple_box_start("CENTER", "100%", $THEME->body); + quiz_print_cat_question_list($modform->category); + print_simple_box_end(); + echo "
"; + + print_footer($course); ?> diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php index 8e463770e7..6c5fec8684 100644 --- a/mod/quiz/lib.php +++ b/mod/quiz/lib.php @@ -231,7 +231,196 @@ function quiz_print_quiz_questions($quiz, $results=NULL) { echo "
"; echo ""; } + +function quiz_get_default_category($courseid) { + if ($categories = get_records("quiz_categories", "course", $courseid, "id")) { + foreach ($categories as $category) { + return $category; // Return the first one (lowest id) + } + } + + // Otherwise, we need to make one + $category->name = get_string("miscellaneous", "quiz"); + $category->info = get_string("miscellaneous", "quiz"); + $category->course = $courseid; + $category->publish = 0; + + if (!$category->id = insert_record("quiz_categories", $category)) { + notify("Error creating a default category!"); + return false; + } + return $category; +} + +function quiz_print_category_form($course, $current) { +// Prints a form to choose categories + if (!$categories = get_records_sql_menu("SELECT id,name FROM quiz_categories + WHERE course='$course->id' OR publish = '1' + ORDER by name ASC")) { + if (!$category = quiz_get_default_category($course->id)) { + notify("Error creating a default category!"); + return false; + } + $categories[$category->id] = $category->name; + } + $strcategory = get_string("category", "quiz"); + $strshow = get_string("show", "quiz"); + $strrename = get_string("rename", "quiz"); + $strdelete = get_string("delete"); + $strnew = get_string("new"); + + echo "
"; + echo "$strcategory: "; + choose_from_menu($categories, "cat", "$current"); + echo ""; + echo ""; + echo ""; + echo ""; + echo "
"; +} + + +function quiz_print_question_list($questionlist) { +// Prints a list of quiz questions in a small layout form with knobs + + global $THEME; + + if (!$questionlist) { + echo "

"; + print_string("noquestions", "quiz"); + echo "

"; + return; + } + + $order = explode(",", $questionlist); + + if (!$questions = get_records_sql("SELECT q.*, qg.grade FROM quiz_questions q, quiz_question_grades qg + WHERE q.id in ($questionlist) and qg.question = q.id")) { + error("No questions were found!"); + } + + $strorder = get_string("order"); + $strquestionname = get_string("questionname", "quiz"); + $strgrade = get_string("grade"); + $strdelete = get_string("delete"); + $stredit = get_string("edit"); + $strmoveup = get_string("moveup"); + $strmovedown = get_string("movedown"); + $strsavegrades = get_string("savegrades", "quiz"); + + for ($i=100; $i>=0; $i--) { + $grades[$i] = $i; + } + $count = 0; + $sumgrade = 0; + $total = count($order); + echo "
"; + echo ""; + echo ""; + foreach ($order as $qnum) { + $count++; + echo "cellcontent\">"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + + $sumgrade += $questions[$qnum]->grade; + } + echo ""; + echo "
$strorder$strquestionname$strgrade$stredit
$count"; + if ($count != 1) { + echo ""; + } + echo ""; + if ($count != $total) { + echo ""; + } + echo "".$questions[$qnum]->name.""; + choose_from_menu($grades, "q$qnum", $questions[$qnum]->grade, ""); + echo ""; + echo " "; + echo ""; + echo "
"; + echo ""; + echo ""; + echo "cellcontent\">"; + echo "$sumgrade"; + echo "
"; + echo "
"; +} + + +function quiz_print_cat_question_list($categoryid) { +// Prints a form to choose categories + + global $THEME, $QUIZ_QUESTION_TYPE; + + $strquestion = get_string("question", "quiz"); + $strnoquestions = get_string("noquestions", "quiz"); + $strselect = get_string("select", "quiz"); + $strcreatenewquestion = get_string("createnewquestion", "quiz"); + $strquestionname = get_string("questionname", "quiz"); + $strdelete = get_string("delete"); + $stredit = get_string("edit"); + $straddselectedtoquiz = get_string("addselectedtoquiz", "quiz"); + + if (!$categoryid) { + echo "

"; + print_string("selectcategoryabove", "quiz"); + echo "

"; + return; + } + + if (!$category = get_record("quiz_categories", "id", "$categoryid")) { + notify("Category not found!"); + return; + } + echo "

$category->info

"; + + echo "
"; + echo "$strquestion: "; + choose_from_menu($QUIZ_QUESTION_TYPE, "type", "", ""); + echo "id\">"; + echo ""; + echo "
"; + + if (!$questions = get_records("quiz_questions", "category", $category->id)) { + echo "

"; + print_string("noquestions", "quiz"); + echo "

"; + return; + } + + echo "
"; + echo ""; + echo ""; + foreach ($questions as $question) { + echo "cellcontent\">"; + echo ""; + echo ""; + echo ""; + } + echo ""; + echo "
$strselect$strquestionname$stredit
"; + echo "id VALUE=\"1\">"; + echo "".$question->name.""; + echo "id\"> "; + echo "id\">"; + echo "
"; + echo ""; + echo ""; + echo "
"; + echo "
"; +} function quiz_get_user_attempts($quizid, $userid) { diff --git a/mod/quiz/mod.html b/mod/quiz/mod.html index 1ad49e2132..3323b3c953 100644 --- a/mod/quiz/mod.html +++ b/mod/quiz/mod.html @@ -4,7 +4,8 @@ dirroot/mod/quiz/lib.php") ?>

This module is not ready for use

-
+ +
@@ -102,6 +103,7 @@
+ @@ -110,6 +112,7 @@ + ">
diff --git a/mod/quiz/question.php b/mod/quiz/question.php index 404f141e44..3e100f7ae3 100644 --- a/mod/quiz/question.php +++ b/mod/quiz/question.php @@ -1,3 +1,3 @@ - -- 2.39.5