mirror of
https://github.com/moodle/moodle.git
synced 2025-02-10 10:41:57 +01:00
Code based on the work of Daryl Hawes for the blog module. Thanks, Daryl! Please test the hell out of it as it's sure to have issues that need to be ironed out.
211 lines
7.4 KiB
PHP
211 lines
7.4 KiB
PHP
<?PHP // $Id$
|
|
|
|
// Allows the admin to configure blocks (hide/show, delete and configure)
|
|
|
|
require_once('../config.php');
|
|
require_once($CFG->libdir.'/blocklib.php');
|
|
|
|
optional_variable($_GET['confirm'], 0);
|
|
$hide = optional_param('hide', 0, PARAM_INT);
|
|
$show = optional_param('show', 0, PARAM_INT);
|
|
$delete = optional_param('delete', 0, PARAM_INT);
|
|
$multiple = optional_param('multiple', 0, PARAM_INT);
|
|
|
|
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');
|
|
$strmanageblocks = get_string('manageblocks');
|
|
$strdelete = get_string('delete');
|
|
$strversion = get_string('version');
|
|
$strhide = get_string('hide');
|
|
$strshow = get_string('show');
|
|
$strsettings = get_string('settings');
|
|
$strcourses = get_string('blockinstances', 'admin');
|
|
$strname = get_string('name');
|
|
$strmultiple = get_string('blockmultiple', 'admin');
|
|
|
|
print_header("$site->shortname: $strmanageblocks", "$site->fullname",
|
|
"<a href=\"index.php\">$stradministration</a> -> ".
|
|
"<a href=\"configure.php\">$strconfiguration</a> -> $strmanageblocks");
|
|
|
|
print_heading($strmanageblocks);
|
|
|
|
|
|
/// If data submitted, then process and store.
|
|
|
|
if (!empty($hide) && confirm_sesskey()) {
|
|
if (!$block = get_record('block', 'id', $hide)) {
|
|
error("Block doesn't exist!");
|
|
}
|
|
set_field('block', 'visible', '0', 'id', $block->id); // Hide block
|
|
}
|
|
|
|
if (!empty($show) && confirm_sesskey() ) {
|
|
if (!$block = get_record('block', 'id', $show)) {
|
|
error("Block doesn't exist!");
|
|
}
|
|
set_field('block', 'visible', '1', 'id', $block->id); // Show block
|
|
}
|
|
|
|
if (!empty($multiple) && confirm_sesskey()) {
|
|
if (!$block = blocks_get_record($multiple)) {
|
|
error("Block doesn't exist!");
|
|
}
|
|
$block->multiple = !$block->multiple;
|
|
update_record('block', $block);
|
|
}
|
|
|
|
if (!empty($delete) && confirm_sesskey()) {
|
|
|
|
if (!$block = blocks_get_record($delete)) {
|
|
error("Block doesn't exist!");
|
|
}
|
|
|
|
$blockobject = block_instance($block->name);
|
|
$strblockname = $blockobject->get_title();
|
|
|
|
if (!$_GET['confirm']) {
|
|
notice_yesno(get_string('blockdeleteconfirm', '', $strblockname),
|
|
'blocks.php?delete='.$block->id.'&confirm=1&sesskey='.$USER->sesskey,
|
|
'blocks.php');
|
|
print_footer();
|
|
exit;
|
|
|
|
} else {
|
|
// Delete block
|
|
if (!delete_records('block', 'id', $block->id)) {
|
|
notify("Error occurred while deleting the $strblockname record from blocks table");
|
|
}
|
|
|
|
$instances = get_records('block_instance', 'blockid', $block->id);
|
|
if(!empty($instances)) {
|
|
foreach($instances as $instance) {
|
|
blocks_delete_instance($instance);
|
|
}
|
|
}
|
|
|
|
// Then the tables themselves
|
|
|
|
if ($tables = $db->Metatables()) {
|
|
$prefix = $CFG->prefix.$block->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->block = $strblockname;
|
|
$a->directory = $CFG->dirroot.'/blocks/'.$block->name;
|
|
notice(get_string('blockdeletefiles', '', $a), 'blocks.php');
|
|
}
|
|
}
|
|
|
|
/// Main display starts here
|
|
|
|
/// Get and sort the existing blocks
|
|
|
|
if (false === ($blocks = get_records('block'))) {
|
|
error('No blocks found!'); // Should never happen
|
|
}
|
|
|
|
foreach ($blocks as $block) {
|
|
if(($blockobject = block_instance($block->name)) === false) {
|
|
// Failed to load
|
|
continue;
|
|
}
|
|
$blockbyname[$blockobject->get_title()] = $block->id;
|
|
$blockobjects[$block->id] = $blockobject;
|
|
}
|
|
|
|
if(empty($blockbyname)) {
|
|
error('One or more blocks are registered in the database, but they all failed to load!');
|
|
}
|
|
|
|
ksort($blockbyname);
|
|
|
|
/// Print the table of all blocks
|
|
|
|
if (empty($THEME->custompix)) {
|
|
$pixpath = '../pix';
|
|
// [pj] This is not used anywhere, but I'm leaving it in for the future
|
|
//$modpixpath = '../mod';
|
|
} else {
|
|
$pixpath = '../theme/'.$CFG->theme.'/pix';
|
|
// [pj] This is not used anywhere, but I'm leaving it in for the future
|
|
//$modpixpath = '../theme/'.$CFG->theme.'/pix/mod';
|
|
}
|
|
|
|
$table->head = array ($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strmultiple, $strdelete, $strsettings);
|
|
$table->align = array ('LEFT', 'RIGHT', 'LEFT', 'CENTER', 'CENTER', 'CENTER', 'CENTER');
|
|
$table->wrap = array ('NOWRAP', '', '', '', '', '', '');
|
|
$table->size = array ('100%', '10', '10', '10', '10','12');
|
|
$table->width = '100';
|
|
|
|
foreach ($blockbyname as $blockname => $blockid) {
|
|
|
|
// [pj] This is not used anywhere, but I'm leaving it in for the future
|
|
//$icon = "<img src=\"$modpixpath/$block->name/icon.gif\" hspace="10" height="16" width="16" border="0">";
|
|
$blockobject = $blockobjects[$blockid];
|
|
|
|
$delete = '<a href="blocks.php?delete='.$blockid.'&sesskey='.$USER->sesskey.'">'.$strdelete.'</a>';
|
|
|
|
$settings = ''; // By default, no configuration
|
|
if($blockobject->has_config()) {
|
|
$settings = '<a href="block.php?block='.$blockid.'&sesskey='.$USER->sesskey.'">'.$strsettings.'</a>';
|
|
}
|
|
|
|
$count = count_records('block_instance', 'blockid', $blockid);
|
|
$class = ''; // Nothing fancy, by default
|
|
|
|
if ($blocks[$blockid]->visible) {
|
|
$visible = '<a href="blocks.php?hide='.$blockid.'&sesskey='.$USER->sesskey.'" title="'.$strhide.'">'.
|
|
'<img src="'.$pixpath.'/i/hide.gif" style="height: 16px; width: 16px;" alt=\"\" /></a>';
|
|
} else {
|
|
$visible = '<a href="blocks.php?show='.$blockid.'&sesskey='.$USER->sesskey.'" title="'.$strshow.'">'.
|
|
'<img src="'.$pixpath.'/i/show.gif" style="height: 16px; width: 16px;" alt=\"\" /></a>';
|
|
$class = ' class="dimmed_text"'; // Leading space required!
|
|
}
|
|
if ($blockobject->instance_allow_multiple()) {
|
|
if($blocks[$blockid]->multiple) {
|
|
$multiple = '<nobr>'.get_string('yes').' (<a href="blocks.php?multiple='.$blockid.'&sesskey='.$USER->sesskey.'">'.get_string('change', 'admin').'</a>)</nobr>';
|
|
}
|
|
else {
|
|
$multiple = '<nobr>'.get_string('no').' (<a href="blocks.php?multiple='.$blockid.'&sesskey='.$USER->sesskey.'">'.get_string('change', 'admin').'</a>)</nobr>';
|
|
}
|
|
}
|
|
else {
|
|
$multiple = '';
|
|
}
|
|
|
|
$table->data[] = array(
|
|
'<p'.$class.'>'.$blockobject->get_title().'</p>',
|
|
$count,
|
|
$blockobject->get_version(),
|
|
$visible,
|
|
$multiple,
|
|
$delete,
|
|
$settings
|
|
);
|
|
}
|
|
echo '<p>';
|
|
print_table($table);
|
|
echo '</p>';
|
|
print_footer();
|
|
|
|
?>
|