Skip to content

Commit

Permalink
Part of the future question type plug-in mechanism. This is not yet a…
Browse files Browse the repository at this point in the history
…ctive, I am committing this only so as not to loose it.
  • Loading branch information
gustav_delius committed Feb 19, 2006
1 parent 14afbbf commit 2e42186
Showing 1 changed file with 171 additions and 0 deletions.
171 changes: 171 additions & 0 deletions admin/questiontypes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
<?PHP // $Id$
// Allows the admin to manage questiontypes
// This page is adapted from modules.php

// This page is not yet in service, the whole plug-in architecture
// for question types is still under construction.

require_once("../config.php");

$disable = optional_param('disable');
$enable = optional_param('enable');
$delete = optional_param('delete');
$confirm = optional_param('confirm');

require_login();

if (!isadmin()) {
error("Only administrators can use this page!");
}

if (!$site = get_site()) {
error("Site isn't defined!");
}


/// Print headings

$stradministration = get_string("administration");
$strconfiguration = get_string("configuration");
$strdelete = get_string("delete");
$strversion = get_string("version");
$strhide = get_string("hide");
$strshow = get_string("show");
$strsettings = get_string("settings");
$strquestions = get_string("questions");
$strquestiontype = get_string("questiontype", 'quiz');

print_header("$site->shortname: $strquestions", "$site->fullname",
"<a href=\"index.php\">$stradministration</a> -> ".
"<a href=\"configure.php\">$strconfiguration</a> -> $strquestions");

print_heading($strquestions);


/// If data submitted, then process and store.

if (!empty($hide) and confirm_sesskey()) {
if (!$qtype = get_record("question_types", "name", $hide)) {
error("Question type doesn't exist!");
}
set_field("question_types", "visible", "0", "id", $qtype->id); // Hide question type
}

if (!empty($show) and confirm_sesskey()) {
if (!$qtype = get_record("question_types", "name", $show)) {
error("Question type doesn't exist!");
}
set_field("question_types", "visible", "1", "id", $qtype->id); // Show question type
}

if (!empty($delete) and confirm_sesskey()) {

$strqtypename = get_string("qtypename", "qtype_$delete");

if (empty($confirm)) {
notice_yesno(get_string("qtypedeleteconfirm", "admin", $strqtypename),
"questiontypes.php?delete=$delete&amp;confirm=$delete&amp;sesskey=$USER->sesskey",
"questiontypes.php");
print_footer();
exit;

} else { // Delete everything!!

if ($delete == "random") {
error("You can not delete the random question type!!");
}

if (!$qtype = get_record("question_types", "name", $delete)) {
error("Question type doesn't exist!");
}

// OK, first delete all the questions
if ($questions = get_records("quiz_questions", "qtype", $qtype->id)) {
foreach ($questions as $question) {
if (! quiz_delete_question($coursemod->id, $coursemod->section)) {
notify("Could not delete the $strqtypename with id = $question->id");
}
}
}

// And the qtype entry itself
if (!delete_records("question_types", "name", $qtype->name)) {
notify("Error occurred while deleting the $strqtypename record from question_types table");
}

// Then the tables themselves

if ($tables = $db->Metatables()) {
$prefix = $CFG->prefix.$qtype->name;
foreach ($tables as $table) {
if (strpos($table, $prefix) === 0) {
if (!execute_sql("DROP TABLE $table", false)) {
notify("ERROR: while trying to drop table $table");
}
}
}
}

$a->qtype = $strqtypename;
$a->directory = "$CFG->dirroot/qtype/$delete";
notice(get_string("qtypedeletefiles", "", $a), "questiontypes.php");
}
}

/// Get and sort the existing questiontypes

if (!$qtypes = get_records("question_types")) {
error("No question types found!!"); // Should never happen
}

foreach ($qtypes as $qtype) {
$strqtypename = get_string("qtypename", "qtype_$qtype->name");
$qtypebyname[$strqtypename] = $qtype;
}
ksort($qtypebyname);

/// Print the table of all questiontypes

$table->head = array ($strquestiontype, $strquestions, $strversion, "$strhide/$strshow", $strdelete, $strsettings);
$table->align = array ("left", "right", "left", "center", "center", "center");
$table->wrap = array ("nowrap", "", "", "", "","");
$table->size = array ("100%", "10", "10", "10", "10","12");
$table->width = "100";

foreach ($qtypebyname as $qtypename => $qtype) {

$icon = "<img src=\"$CFG->dirroot/mod/quiz/questiontypes/$qtype->name/icon.gif\" hspace=\"10\" height=\"16\" width=\"16\" border=\"0\" alt=\"\" />";

if (file_exists("$CFG->dirroot/mod/quiz/questiontypes/$qtype->name/config.html")) {
$settings = "<a href=\"questiontype.php?qtype=$qtype->name\">$strsettings</a>";
} else {
$settings = "";
}

$count = count_records('quiz_questions', 'qtype', $qtype->id);

$delete = $count ? '' : "<a href=\"questiontypes.php?delete=$qtype->name&amp;sesskey=$USER->sesskey\">$strdelete</a>";

if ($qtype->visible) {
$visible = "<a href=\"questiontypes.php?hide=$qtype->name&amp;sesskey=$USER->sesskey\" title=\"$strhide\">".
"<img src=\"$CFG->pixpath/i/hide.gif\" align=\"middle\" height=\"16\" width=\"16\" border=\"0\" alt=\"\" /></a>";
$class = "";
} else {
$visible = "<a href=\"questiontypes.php?show=$qtype->name&amp;sesskey=$USER->sesskey\" title=\"$strshow\">".
"<img src=\"$CFG->pixpath/i/show.gif\" align=\"middle\" height=\"16\" width=\"16\" border=\"0\" alt=\"\" /></a>";
$class = "class=\"dimmed_text\"";
}
if ($qtype->name == "random") {
$delete = "";
$visible = "";
$class = "";
}
$table->data[] = array ("<span $class>$icon $qtypename</span>", $count, $qtype->version, $visible, $delete, $settings);
}
print_table($table);

echo "<br /><br />";

print_footer();

?>

0 comments on commit 2e42186

Please sign in to comment.