MDL-16409 Make a new admin report to list all questions of a particular type, by context

Partially done. This has the settings form, and queries the database for the right data, but does not format it correctly yet.
This commit is contained in:
tjhunt 2008-09-09 10:16:17 +00:00
parent 2ddd044af8
commit 3041a0dfed
4 changed files with 104 additions and 2 deletions

View File

@ -10,6 +10,7 @@
require_login();
$systemcontext = get_context_instance(CONTEXT_SYSTEM);
require_capability('moodle/question:config', $systemcontext);
$canviewreports = has_capability('moodle/site:viewreports', $systemcontext);
admin_externalpage_setup('manageqtypes');
@ -179,8 +180,12 @@
} else {
$strcount = $counts[$qtypename]->numquestions;
}
$row[] = '<a href="' . admin_url('/report/questioninstances/index.php?qtype=' . $qtypename) .
'">' . $strcount . '</a>';
if ($canviewreports) {
$row[] = '<a href="' . admin_url('/report/questioninstances/index.php?qtype=' . $qtypename) .
'">' . $strcount . '</a>';
} else {
$strcount;
}
} else {
$row[] = 0;
}

View File

@ -0,0 +1,83 @@
<?php // $Id$
/**
* For a given question type, list the number of
*
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package roles
*/
/** */
require_once(dirname(__FILE__).'/../../../config.php');
require_once($CFG->libdir.'/adminlib.php');
require_once($CFG->libdir.'/questionlib.php');
// Check permissions.
require_login();
$systemcontext = get_context_instance(CONTEXT_SYSTEM);
require_capability('moodle/site:viewreports', $systemcontext);
// Get URL parameters.
$requestedqtype = optional_param('qtype', '', PARAM_SAFEDIR);
// Log.
add_to_log(SITEID, "admin", "report questioninstances", "report/questioninstances/index.php?qtype=$requestedqtype", $requestedqtype);
// Print the header.
admin_externalpage_setup('reportquestioninstances');
admin_externalpage_print_header();
// Prepare the list of capabilites to choose from
$qtypechoices = array();
foreach ($QTYPES as $qtype) {
$qtypechoices[$qtype->name()] = $qtype->local_name();
}
// Print the settings form.
print_box_start('generalbox boxwidthwide boxaligncenter centerpara');
echo '<form method="get" action="." id="settingsform"><div>';
print_heading(get_string('reportsettings', 'report_questioninstances'));
echo '<p id="intro">', get_string('intro', 'report_questioninstances') , '</p>';
echo '<p><label for="menuqtype"> ' . get_string('questiontype', 'admin') . '</label> ';
choose_from_menu($qtypechoices, 'qtype', $requestedqtype);
echo '</p>';
echo '<p><input type="submit" id="settingssubmit" value="' .
get_string('getreport', 'report_questioninstances') . '" /></p>';
echo '</div></form>';
print_box_end();
// If we have a qtype to report on, generate the report.
if ($requestedqtype) {
// Work out the bits needed for the SQL WHERE clauses.
if ($requestedqtype == 'missingtype') {
$othertypes = array_keys($QTYPES);
$key = array_search('missingtype', $othertypes);
unset($othertypes[$key]);
list($sqlqtypetest, $params) = $DB->get_in_or_equals($othertypes, SQL_PARAMS_QM, '', false);
} else {
$sqlqtypetest = '= ?';
$params = array($requestedqtype);
}
// Get all the role_capabilities rows for this capability - that is, all
// role definitions, and all role overrides.
$counts = $DB->get_records_sql("
SELECT qc.contextid, count(1) as numquestions, sum(hidden) as numhidden, con.id, con.contextlevel, con.instanceid, con.path, con.depth
FROM {question} q
JOIN {question_categories} qc ON q.category = qc.id
JOIN {context} con ON con.id = qc.contextid
WHERE qtype $sqlqtypetest
GROUP BY contextid, con.id, con.contextlevel, con.instanceid, con.path, con.depth
ORDER BY numquestions DESC, numhidden ASC", $params);
// Print the report heading.
print_heading(get_string('reportforqtype', 'report_questioninstances', $QTYPES[$requestedqtype]->local_name()));
// Now, print the table of results.
// TODO
print_object($counts);
}
// Footer.
admin_externalpage_print_footer();
?>

View File

@ -0,0 +1,8 @@
<?PHP // $Id$
$string['getreport'] = 'Get the report';
$string['intro'] = 'This report lists all the contexts in the system where there are questions of a particular type.';
$string['reportforqtype'] = 'Report for question type \'$a\'';
$string['reportsettings'] = 'Report settings';
$string['questioninstances'] = 'Question instances';
?>

View File

@ -965,6 +965,12 @@ body#admin-modules table.generaltable td.c0
#admin-report-capability-index h3 {
margin-bottom: 0;
}
#admin-report-questioninstances-index #settingsform h2 {
margin-top: 0;
}
#admin-report-questioninstances-index #settingsform p {
margin-bottom: 0;
}
#admin-roles-allowassign .buttons,
#admin-roles-allowoverride .buttons,