tiki-quiz_edit.php 6.81 KB
Newer Older
1
<?php
changi67's avatar
changi67 committed
2 3
// (c) Copyright 2002-2009 by authors of the Tiki Wiki/CMS/Groupware Project
// 
4 5
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
changi67's avatar
changi67 committed
6
// $Id: /cvsroot/tikiwiki/tiki/tiki-quiz_edit.php,v 1.21.2.1 2007-11-04 21:49:20 nyloth Exp $
ggeller's avatar
ggeller committed
7 8
/*

changi67's avatar
changi67 committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
(The expire date must be rigid.  That is, papers will not be accepted after the expire
date, even if the quiz was started before the expire date.  Otherwise, in cases where
we have "show answers after expire date", a student who has completed the quiz could
give the answers to another student during the grace period.  So when the student
takes the quiz, the system must issue a warning to the student about the expire date
if the date is less the the session timeout time away.)
(Quiz results for students are always stored; quiz results for teachers
(defined here as anyone with tiki_p_admin_quizzes) are never stored.)

The data field is supposed to be xml representing things like the prolog, questions and
epilog for this quiz.  At present if you put
<?questions nQuestions=10 ?>
It is supposed to use 10 questions for this quiz from the tiki_quiz_questions table.
If you leave the data field blank, the default is to use all the questions from the table.
You can also set the same option under the Generl Options section.
ggeller's avatar
ggeller committed
24
*/
changi67's avatar
changi67 committed
25 26
require_once ('tiki-setup.php');
include_once ('lib/quizzes/quizlib.php');
27
if ($prefs['feature_quizzes'] != 'y') {
changi67's avatar
changi67 committed
28
	$smarty->assign('msg', tra("This feature is disabled") . ": feature_quizzes");
29 30 31
	$smarty->display("error.tpl");
	die;
}
changi67's avatar
changi67 committed
32
// quizId of 0 is used as a place holder; There should NEVER be a row in the
33
//   tiki_quizzes table with an id of zero.
changi67's avatar
changi67 committed
34
if (!isset($_REQUEST["quizId"])) {
35
	$_REQUEST["quizId"] = 0;
36
}
37 38

$tikilib->get_perm_object($_REQUEST["quizId"], 'quiz');
39
if ($tiki_p_admin_quizzes != 'y') {
40
	$smarty->assign('errortype', 401);
41
	$smarty->assign('msg', tra("You don't have permission to edit quizzes."));
42 43
	$smarty->display("error.tpl");
	die;
44
}
45 46 47
$cat_type = 'quiz';
$cat_objid = $_REQUEST["quizId"];
include_once ("categorize_list.php");
changi67's avatar
changi67 committed
48 49
if (isset($_REQUEST["preview"]) || isset($_REQUEST["xmlview"]) || isset($_REQUEST["textview"])) {
	echo "line: " . __LINE__ . "<br>";
50
	echo "Sorry, preview, xmlview and textview are not supported in this version.<br>";
changi67's avatar
changi67 committed
51 52 53
	// 	foreach ($_REQUEST as $key => $request){
	// 		echo $key." = ".$request."<br>";
	// 	}
ggeller's avatar
ggeller committed
54 55
	die;
}
56
$quiz = $quizlib->quiz_fetch($_REQUEST["quizId"]);
changi67's avatar
changi67 committed
57 58
function fetchYNOption(&$quiz, $_REQUEST, $option) {
	if (isset($_REQUEST[$option]) && $_REQUEST[$option] == 'on') {
ggeller's avatar
ggeller committed
59 60 61 62 63
		$quiz[$option] = 'y';
	} else {
		$quiz[$option] = 'n';
	}
}
changi67's avatar
changi67 committed
64 65
// Load the data from the
function quiz_data_load() {
66 67
	global $_REQUEST;
	$quiz_data = array();
changi67's avatar
changi67 committed
68 69 70
	foreach($_REQUEST as $key => $val) {
		if (preg_match("/^quiz_/", $key)) {
			$k = preg_replace("/^quiz_([.]*)/", "\$1", $key);
71
			$quiz_data[$k] = $val;
72 73
		}
	}
changi67's avatar
changi67 committed
74
	if ($quiz_data["online"] == "online") {
75
		$quiz_data["online"] = "y";
changi67's avatar
changi67 committed
76
	} else if ($quiz_data["online"] == "offline") {
77
		$quiz_data["online"] = "n";
ggeller's avatar
ggeller committed
78
	}
changi67's avatar
changi67 committed
79 80 81 82
	$quiz_data["datePub"] = TikiLib::make_time($quiz_data["publish_Hour"], $quiz_data["publish_Minute"], 0, $quiz_data["publish_Month"], $quiz_data["publish_Day"], $quiz_data["publish_Year"]);
	$quiz_data["dateExp"] = TikiLib::make_time($quiz_data["expire_Hour"], $quiz_data["expire_Minute"], 0, $quiz_data["expire_Month"], $quiz_data["expire_Day"], $quiz_data["expire_Year"]);
	$fields = array('nQuestion', 'shuffleAnswers', 'shuffleQuestions', 'multiSession', 'additionalQuestions', 'limitDisplay', 'timeLimited', 'canRepeat', 'additionalQuestions', 'forum');
	foreach($fields as $field) {
83
		fetchYNOption($quiz_data, $quiz_data, $field);
84
		// echo '$quiz_data["'.$field.'"] = '.$quiz_data[$field]."<br>";
changi67's avatar
changi67 committed
85 86 87
		
	}
	return $quiz_data;
88 89 90
}
if (isset($_REQUEST["save"])) {
	check_ticket('edit-quiz-question');
changi67's avatar
changi67 committed
91 92 93 94 95 96 97
	// 	echo __FILE__." line ".__LINE__."<br />";
	// 	foreach($_REQUEST as $key => $val){
	// 		if (preg_match("/^quiz_/",$key)){
	// 			echo $key." = ".$val."<br />";
	// 		}
	// 	}
	// 	die;
98
	$quiz_data = quiz_data_load();
changi67's avatar
changi67 committed
99 100 101 102
	// 	foreach($quiz_data as $key => $val){
	// 		echo $key." = ".$val."<br />";
	// 	}
	// 	die;
103 104 105 106 107
	$quizNew = new Quiz;
	$quizNew->data_load($quiz_data);
	// echo __FILE__." line: ".__LINE__."<br />";
	// if the id is 0, use just save the new data
	// otherwise we compare the data to what was there before.
changi67's avatar
changi67 committed
108
	if ($quiz->id == 0 || ($quizNew != $quiz)) {
109 110
		$quizlib->quiz_store($quizNew);
		// tell user changes were stored (new quiz stored with id of x or quiz x modified), return to list of admin quizzes
changi67's avatar
changi67 committed
111 112
		
	} else {
113
		// tell user no changes were stored, return to list of admin quizzes
changi67's avatar
changi67 committed
114
		
115 116
	}
	// This way for including questions is was too complicated.  Need to think of a simpler way.
changi67's avatar
changi67 committed
117 118
	die;
	echo "line: " . __LINE__ . "<br>";
119 120
	echo "Sorry, this is only a prototype at present.<br>";
	// Fixme, this doesn't work for a brand-new quiz because the quizId is zero!
changi67's avatar
changi67 committed
121
	if ($cat_objid != 0) {
122 123 124 125 126
		$cat_href = "tiki-quiz.php?quizId=" . $cat_objid;
		$cat_name = $_REQUEST["name"];
		$cat_desc = substr($_REQUEST["description"], 0, 200);
		include_once ("categorize.php");
	}
ggeller's avatar
ggeller committed
127
	die;
128
}
129
// Scaffolding
130 131
// The taken and history stuff has to come from version and studentAttempts fields in
//  the tiki_quiz table in the database.
132 133 134 135 136 137
// $quiz->taken = 'y';
// $quiz->history = array();
// $quiz->history[] = "and so on...";
// $quiz->history[] = "Version 3 (date stamp) was attempted by students 3 time(s).";
// $quiz->history[] = "Version 2 (date stamp) was attempted by students 2 time(s).";
// $quiz->history[] = "Version 1 (date stamp) was attempted by students 1 time(s).";
138 139
$smarty->assign('quiz', $quiz);
// echo __LINE__."<br>";
140
// echo '$quiz->id = '.$quiz->id."<br>";
141
// die;
changi67's avatar
changi67 committed
142
function setup_options(&$tpl) {
ggeller's avatar
ggeller committed
143
	//	global $smarty;
144 145
	global $tikilib;
	global $user;
changi67's avatar
changi67 committed
146
	$tpl['online_choices'] = array('online' => 'Online', 'offline' => 'Offline');
147 148 149 150
	$optionsGrading = array();
	$optionsGrading[] = "machine";
	$optionsGrading[] = "peer review";
	$optionsGrading[] = "teacher";
151
	$tpl['optionsGrading'] = $optionsGrading;
152 153 154 155
	$optionsShowScore = array();
	$optionsShowScore[] = "immediately";
	$optionsShowScore[] = "after expire date";
	$optionsShowScore[] = "never";
156
	$tpl['optionsShowScore'] = $optionsShowScore;
157 158
	// FIXME - This needs to be limited to the session timeout in php.ini
	$mins = array();
changi67's avatar
changi67 committed
159
	for ($i = 1; $i <= 20; $i++) {
160 161
		$mins[] = $i;
	}
162
	$tpl['mins'] = $mins;
163 164
	$repetitions = array();
	$qpp = array();
changi67's avatar
changi67 committed
165
	for ($i = 1; $i <= 10; $i++) {
166 167 168 169
		$qpp[] = $i;
		$repetitions[] = $i;
	}
	$repetitions[] = "unlimited";
170 171
	$qpp[] = "unlimited";
	$tpl['repetitions'] = $repetitions;
172
	$tpl['qpp'] = $qpp;
173
	$tpl['siteTimeZone'] = $prefs['display_timezone'];
174
}
175
$tpl = array();
176
setup_options($tpl);
177
$smarty->assign('tpl', $tpl);
178
ask_ticket('edit-quiz-question');
179 180
// Display the template
$smarty->assign('mid', 'tiki-quiz_edit.tpl');
181
$smarty->display("tiki.tpl");