tiki-quiz_edit.php 6.46 KB
Newer Older
1
<?php
changi67's avatar
changi67 committed
2
// (c) Copyright 2002-2010 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 29

$access->check_feature('feature_quizzes');

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

$tikilib->get_perm_object($_REQUEST["quizId"], 'quiz');
37 38 39

$access->check_permission('tiki_p_admin_quizzes');

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

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