You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

200 lines
6.6 KiB

<?php
/**
* @package tikiwiki
*/
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// 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.
// $Id$
/*
(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.
*/
require_once('tiki-setup.php');
$access->check_feature('feature_quizzes');
//Use 12- or 24-hour clock for $publishDate time selector based on admin and user preferences
$quizlib = TikiLib::lib('quiz');
$userprefslib = TikiLib::lib('userprefs');
$smarty->assign('use_24hr_clock', $userprefslib->get_user_clock_pref($user));
// quizId of 0 is used as a placeholder; There should NEVER be a row in the
// tiki_quizzes table with an id of zero.
if (! isset($_REQUEST["quizId"])) {
$_REQUEST["quizId"] = 0;
}
$tikilib->get_perm_object($_REQUEST["quizId"], 'quiz');
$access->check_permission('tiki_p_admin_quizzes');
$cat_type = 'quiz';
$cat_objid = $_REQUEST["quizId"];
include_once("categorize_list.php");
if (isset($_REQUEST["preview"]) || isset($_REQUEST["xmlview"]) || isset($_REQUEST["textview"])) {
echo "line: " . __LINE__ . "<br>";
echo "Sorry, preview, xmlview and textview are not supported in this version.<br>";
die;
}
$quiz = $quizlib->quiz_fetch($_REQUEST["quizId"]);
/**
* @param $quiz
* @param $_REQUEST
* @param $option
*/
function fetchYNOption(&$quiz, $request, $option)
{
if (isset($request[$option]) && $request[$option] == 'on') {
$quiz[$option] = 'y';
} else {
$quiz[$option] = 'n';
}
}
// Load the data from the
/**
* @return array
*/
function quiz_data_load()
{
global $_REQUEST;
$quiz_data = [];
foreach ($_REQUEST as $key => $val) {
if (preg_match("/^quiz_/", $key)) {
$k = preg_replace("/^quiz_([.]*)/", "\$1", $key);
$quiz_data[$k] = $val;
}
}
if ($quiz_data["online"] == "online") {
$quiz_data["online"] = "y";
} elseif ($quiz_data["online"] == "offline") {
$quiz_data["online"] = "n";
}
//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']));
}
$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 = ['nQuestion'
, 'shuffleAnswers'
, 'shuffleQuestions'
, 'multiSession'
, 'additionalQuestions'
, 'limitDisplay'
, 'timeLimited'
, 'canRepeat'
, 'additionalQuestions'
, 'forum'
];
foreach ($fields as $field) {
fetchYNOption($quiz_data, $quiz_data, $field);
}
return $quiz_data;
}
if (isset($_REQUEST["save"])) {
check_ticket('edit-quiz-question');
$quiz_data = quiz_data_load();
$quizNew = new Quiz();
$quizNew->data_load($quiz_data);
// if the id is 0, use just save the new data
// otherwise we compare the data to what was there before.
if ($quiz->id == 0 || ($quizNew != $quiz)) {
$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
}
die;
echo "line: " . __LINE__ . "<br>";
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!
if ($cat_objid != 0) {
$cat_href = "tiki-quiz.php?quizId=" . $cat_objid;
$cat_name = $_REQUEST["name"];
$cat_desc = substr($_REQUEST["description"], 0, 200);
include_once("categorize.php");
}
die;
}
$smarty->assign('quiz', $quiz);
/**
* @param $tpl
*/
function setup_options(&$tpl)
{
global $prefs;
$tpl['online_choices'] = ['online' => 'Online', 'offline' => 'Offline'];
$optionsGrading = [];
$optionsGrading[] = "machine";
$optionsGrading[] = "peer review";
$optionsGrading[] = "teacher";
$tpl['optionsGrading'] = $optionsGrading;
$optionsShowScore = [];
$optionsShowScore[] = "immediately";
$optionsShowScore[] = "after expire date";
$optionsShowScore[] = "never";
$tpl['optionsShowScore'] = $optionsShowScore;
// FIXME - This needs to be limited to the session timeout in php.ini
$mins = [];
for ($i = 1; $i <= 20; $i++) {
$mins[] = $i;
}
$tpl['mins'] = $mins;
$repetitions = [];
$qpp = [];
for ($i = 1; $i <= 10; $i++) {
$qpp[] = $i;
$repetitions[] = $i;
}
$repetitions[] = "unlimited";
$qpp[] = "unlimited";
$tpl['repetitions'] = $repetitions;
$tpl['qpp'] = $qpp;
$tpl['siteTimeZone'] = $prefs['display_timezone'];
}
$tpl = [];
setup_options($tpl);
$smarty->assign('tpl', $tpl);
ask_ticket('edit-quiz-question');
$smarty->assign('mid', 'tiki-quiz_edit.tpl');
$smarty->display("tiki.tpl");