tiki-quiz_edit.php 7.06 KB
Newer Older
1
<?php
2
// (c) Copyright 2002-2011 by authors of the Tiki Wiki CMS Groupware Project
changi67's avatar
changi67 committed
3
// 
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$
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 28

$access->check_feature('feature_quizzes');
29 30 31
//Use 12- or 24-hour clock for $publishDate time selector based on admin and user preferences
include_once ('lib/userprefs/userprefslib.php');
$smarty->assign('use_24hr_clock', $userprefslib->get_user_clock_pref($user));
32

changi67's avatar
changi67 committed
33
// quizId of 0 is used as a place holder; There should NEVER be a row in the
34
//   tiki_quizzes table with an id of zero.
changi67's avatar
changi67 committed
35
if (!isset($_REQUEST["quizId"])) {
36
	$_REQUEST["quizId"] = 0;
37
}
38 39

$tikilib->get_perm_object($_REQUEST["quizId"], 'quiz');
40 41 42

$access->check_permission('tiki_p_admin_quizzes');

ggeller's avatar
ggeller committed
43 44 45
$cat_type = 'quiz';
$cat_objid = $_REQUEST["quizId"];
include_once ("categorize_list.php");
changi67's avatar
changi67 committed
46 47
if (isset($_REQUEST["preview"]) || isset($_REQUEST["xmlview"]) || isset($_REQUEST["textview"])) {
	echo "line: " . __LINE__ . "<br>";
48
	echo "Sorry, preview, xmlview and textview are not supported in this version.<br>";
changi67's avatar
changi67 committed
49 50 51
	// 	foreach ($_REQUEST as $key => $request){
	// 		echo $key." = ".$request."<br>";
	// 	}
ggeller's avatar
ggeller committed
52 53
	die;
}
54
$quiz = $quizlib->quiz_fetch($_REQUEST["quizId"]);
changi67's avatar
changi67 committed
55 56
function fetchYNOption(&$quiz, $_REQUEST, $option) {
	if (isset($_REQUEST[$option]) && $_REQUEST[$option] == 'on') {
ggeller's avatar
ggeller committed
57 58 59 60 61
		$quiz[$option] = 'y';
	} else {
		$quiz[$option] = 'n';
	}
}
changi67's avatar
changi67 committed
62 63
// Load the data from the
function quiz_data_load() {
64 65
	global $_REQUEST;
	$quiz_data = array();
changi67's avatar
changi67 committed
66 67 68
	foreach($_REQUEST as $key => $val) {
		if (preg_match("/^quiz_/", $key)) {
			$k = preg_replace("/^quiz_([.]*)/", "\$1", $key);
69
			$quiz_data[$k] = $val;
ggeller's avatar
ggeller committed
70 71
		}
	}
changi67's avatar
changi67 committed
72
	if ($quiz_data["online"] == "online") {
73
		$quiz_data["online"] = "y";
changi67's avatar
changi67 committed
74
	} else if ($quiz_data["online"] == "offline") {
75
		$quiz_data["online"] = "n";
ggeller's avatar
ggeller committed
76
	}
77 78 79 80 81 82 83 84
	//Convert 12-hour clock hours to 24-hour scale to compute time
	if (!empty($_REQUEST['publish_Meridian'])) {
		$_REQUEST['publish_Hour'] = date('H', strtotime($_REQUEST['publish_Hour'] . ':00 ' . $_REQUEST['publish_Meridian']));
	}
	if (!empty($_REQUEST['expire_Meridian'])) {
		$_REQUEST['expire_Hour'] = date('H', strtotime($_REQUEST['expire_Hour'] . ':00 ' . $_REQUEST['expire_Meridian']));
	}
	
changi67's avatar
changi67 committed
85 86 87 88
	$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) {
89
		fetchYNOption($quiz_data, $quiz_data, $field);
90
		// echo '$quiz_data["'.$field.'"] = '.$quiz_data[$field]."<br>";
changi67's avatar
changi67 committed
91 92 93
		
	}
	return $quiz_data;
94 95 96
}
if (isset($_REQUEST["save"])) {
	check_ticket('edit-quiz-question');
changi67's avatar
changi67 committed
97 98 99 100 101 102 103
	// 	echo __FILE__." line ".__LINE__."<br />";
	// 	foreach($_REQUEST as $key => $val){
	// 		if (preg_match("/^quiz_/",$key)){
	// 			echo $key." = ".$val."<br />";
	// 		}
	// 	}
	// 	die;
104
	$quiz_data = quiz_data_load();
changi67's avatar
changi67 committed
105 106 107 108
	// 	foreach($quiz_data as $key => $val){
	// 		echo $key." = ".$val."<br />";
	// 	}
	// 	die;
109 110 111 112 113
	$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
114
	if ($quiz->id == 0 || ($quizNew != $quiz)) {
115 116
		$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
117 118
		
	} else {
119
		// tell user no changes were stored, return to list of admin quizzes
changi67's avatar
changi67 committed
120
		
121 122
	}
	// This way for including questions is was too complicated.  Need to think of a simpler way.
changi67's avatar
changi67 committed
123 124
	die;
	echo "line: " . __LINE__ . "<br>";
125 126
	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
127
	if ($cat_objid != 0) {
128 129 130 131 132
		$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
133
	die;
134
}
ggeller's avatar
ggeller committed
135
// Scaffolding
136 137
// The taken and history stuff has to come from version and studentAttempts fields in
//  the tiki_quiz table in the database.
ggeller's avatar
ggeller committed
138 139 140 141 142 143
// $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).";
ggeller's avatar
ggeller committed
144 145
$smarty->assign('quiz', $quiz);
// echo __LINE__."<br>";
146
// echo '$quiz->id = '.$quiz->id."<br>";
ggeller's avatar
ggeller committed
147
// die;
changi67's avatar
changi67 committed
148
function setup_options(&$tpl) {
ggeller's avatar
ggeller committed
149
	//	global $smarty;
150 151
	global $tikilib;
	global $user;
changi67's avatar
changi67 committed
152
	$tpl['online_choices'] = array('online' => 'Online', 'offline' => 'Offline');
153 154 155 156
	$optionsGrading = array();
	$optionsGrading[] = "machine";
	$optionsGrading[] = "peer review";
	$optionsGrading[] = "teacher";
ggeller's avatar
ggeller committed
157
	$tpl['optionsGrading'] = $optionsGrading;
158 159 160 161
	$optionsShowScore = array();
	$optionsShowScore[] = "immediately";
	$optionsShowScore[] = "after expire date";
	$optionsShowScore[] = "never";
ggeller's avatar
ggeller committed
162
	$tpl['optionsShowScore'] = $optionsShowScore;
163 164
	// FIXME - This needs to be limited to the session timeout in php.ini
	$mins = array();
changi67's avatar
changi67 committed
165
	for ($i = 1; $i <= 20; $i++) {
166 167
		$mins[] = $i;
	}
168
	$tpl['mins'] = $mins;
169 170
	$repetitions = array();
	$qpp = array();
changi67's avatar
changi67 committed
171
	for ($i = 1; $i <= 10; $i++) {
172 173 174 175
		$qpp[] = $i;
		$repetitions[] = $i;
	}
	$repetitions[] = "unlimited";
176 177
	$qpp[] = "unlimited";
	$tpl['repetitions'] = $repetitions;
ggeller's avatar
ggeller committed
178
	$tpl['qpp'] = $qpp;
179
	$tpl['siteTimeZone'] = $prefs['display_timezone'];
180
}
ggeller's avatar
ggeller committed
181
$tpl = array();
182
setup_options($tpl);
ggeller's avatar
ggeller committed
183
$smarty->assign('tpl', $tpl);
184
ask_ticket('edit-quiz-question');
185

186
$smarty->assign('mid', 'tiki-quiz_edit.tpl');
187
$smarty->display("tiki.tpl");