mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 14:27:22 +01:00
a9f15ed952
An info notification has been added to the "Manage blocks" page to warn admins about the "Unneeded blocks" theme setting.
240 lines
9.5 KiB
PHP
240 lines
9.5 KiB
PHP
<?php
|
|
|
|
// Allows the admin to configure blocks (hide/show, uninstall and configure)
|
|
|
|
require_once('../config.php');
|
|
require_once($CFG->libdir.'/adminlib.php');
|
|
require_once($CFG->libdir.'/blocklib.php');
|
|
require_once($CFG->libdir.'/tablelib.php');
|
|
|
|
admin_externalpage_setup('manageblocks');
|
|
|
|
$confirm = optional_param('confirm', 0, PARAM_BOOL);
|
|
$hide = optional_param('hide', 0, PARAM_INT);
|
|
$show = optional_param('show', 0, PARAM_INT);
|
|
$unprotect = optional_param('unprotect', 0, PARAM_INT);
|
|
$protect = optional_param('protect', 0, PARAM_INT);
|
|
|
|
/// Print headings
|
|
|
|
$strmanageblocks = get_string('manageblocks');
|
|
$struninstall = get_string('uninstallplugin', 'core_admin');
|
|
$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');
|
|
$strshowblockcourse = get_string('showblockcourse');
|
|
$strprotecthdr = get_string('blockprotect', 'admin'). $OUTPUT->help_icon('blockprotect','admin');
|
|
$strprotect = get_string('blockprotect', 'admin');
|
|
$strunprotect = get_string('blockunprotect', 'admin');
|
|
|
|
|
|
// If data submitted, then process and store.
|
|
if (!empty($hide) && confirm_sesskey()) {
|
|
if (!$block = $DB->get_record('block', ['id' => $hide])) {
|
|
throw new \moodle_exception('blockdoesnotexist', 'error');
|
|
}
|
|
|
|
$class = \core_plugin_manager::resolve_plugininfo_class('block');
|
|
$class::enable_plugin($block->name, false);
|
|
// Settings not required - only pages.
|
|
admin_get_root(true, false);
|
|
}
|
|
|
|
if (!empty($show) && confirm_sesskey() ) {
|
|
if (!$block = $DB->get_record('block', ['id' => $show])) {
|
|
throw new \moodle_exception('blockdoesnotexist', 'error');
|
|
}
|
|
|
|
$class = \core_plugin_manager::resolve_plugininfo_class('block');
|
|
$class::enable_plugin($block->name, true);
|
|
// Settings not required - only pages.
|
|
admin_get_root(true, false);
|
|
}
|
|
|
|
if (!empty($protect) && confirm_sesskey()) {
|
|
block_manager::protect_block((int)$protect);
|
|
admin_get_root(true, false); // settings not required - only pages
|
|
}
|
|
|
|
if (!empty($unprotect) && confirm_sesskey()) {
|
|
block_manager::unprotect_block((int)$unprotect);
|
|
admin_get_root(true, false); // settings not required - only pages
|
|
}
|
|
|
|
$undeletableblocktypes = block_manager::get_undeletable_block_types();
|
|
|
|
echo $OUTPUT->header();
|
|
echo $OUTPUT->heading($strmanageblocks);
|
|
|
|
echo $OUTPUT->notification(get_string('noteunneededblocks', 'admin'), 'info');
|
|
/// Main display starts here
|
|
|
|
/// Get and sort the existing blocks
|
|
|
|
if (!$blocks = $DB->get_records('block', array(), 'name ASC')) {
|
|
print_error('noblocks', 'error'); // Should never happen
|
|
}
|
|
|
|
$incompatible = array();
|
|
|
|
/// Print the table of all blocks
|
|
|
|
$table = new flexible_table('admin-blocks-compatible');
|
|
|
|
$table->define_columns(array('name', 'instances', 'version', 'hideshow', 'undeletable', 'settings', 'uninstall'));
|
|
$table->define_headers(array($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strprotecthdr, $strsettings, $struninstall));
|
|
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
|
|
$table->set_attribute('class', 'admintable blockstable generaltable');
|
|
$table->set_attribute('id', 'compatibleblockstable');
|
|
$table->setup();
|
|
$tablerows = array();
|
|
|
|
// Sort blocks using current locale.
|
|
$blocknames = array();
|
|
foreach ($blocks as $blockid=>$block) {
|
|
$blockname = $block->name;
|
|
if (file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) {
|
|
$blocknames[$blockid] = get_string('pluginname', 'block_'.$blockname);
|
|
} else {
|
|
$blocknames[$blockid] = $blockname;
|
|
}
|
|
}
|
|
core_collator::asort($blocknames);
|
|
|
|
foreach ($blocknames as $blockid=>$strblockname) {
|
|
$block = $blocks[$blockid];
|
|
$blockname = $block->name;
|
|
$dbversion = get_config('block_'.$block->name, 'version');
|
|
|
|
if (!file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) {
|
|
$blockobject = false;
|
|
$strblockname = '<span class="notifyproblem">'.$strblockname.' ('.get_string('missingfromdisk').')</span>';
|
|
$plugin = new stdClass();
|
|
$plugin->version = $dbversion;
|
|
|
|
} else {
|
|
$plugin = new stdClass();
|
|
$plugin->version = '???';
|
|
if (file_exists("$CFG->dirroot/blocks/$blockname/version.php")) {
|
|
include("$CFG->dirroot/blocks/$blockname/version.php");
|
|
}
|
|
|
|
if (!$blockobject = block_instance($block->name)) {
|
|
$incompatible[] = $block;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('block_'.$blockname, 'manage')) {
|
|
$uninstall = html_writer::link($uninstallurl, $struninstall);
|
|
} else {
|
|
$uninstall = '';
|
|
}
|
|
|
|
$settings = ''; // By default, no configuration
|
|
if ($blockobject and $blockobject->has_config()) {
|
|
$blocksettings = admin_get_root()->locate('blocksetting' . $block->name);
|
|
|
|
if ($blocksettings instanceof admin_externalpage) {
|
|
$settings = '<a href="' . $blocksettings->url . '">' . get_string('settings') . '</a>';
|
|
} else if ($blocksettings instanceof admin_settingpage) {
|
|
$settings = '<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/settings.php?section=blocksetting'.$block->name.'">'.$strsettings.'</a>';
|
|
} else if (!file_exists($CFG->dirroot.'/blocks/'.$block->name.'/settings.php')) {
|
|
// If the block's settings node was not found, we check that the block really provides the settings.php file.
|
|
// Note that blocks can inject their settings to other nodes in the admin tree without using the default locations.
|
|
// This can be done by assigning null to $setting in settings.php and it is a valid case.
|
|
debugging('Warning: block_'.$block->name.' returns true in has_config() but does not provide a settings.php file',
|
|
DEBUG_DEVELOPER);
|
|
}
|
|
}
|
|
|
|
// MDL-11167, blocks can be placed on mymoodle, or the blogs page
|
|
// and it should not show up on course search page
|
|
|
|
$totalcount = $DB->count_records('block_instances', array('blockname'=>$blockname));
|
|
$count = $DB->count_records('block_instances', array('blockname'=>$blockname, 'pagetypepattern'=>'course-view-*'));
|
|
|
|
if ($count>0) {
|
|
$blocklist = "<a href=\"{$CFG->wwwroot}/course/search.php?blocklist=$blockid&sesskey=".sesskey()."\" ";
|
|
$blocklist .= "title=\"$strshowblockcourse\" >$totalcount</a>";
|
|
}
|
|
else {
|
|
$blocklist = "$totalcount";
|
|
}
|
|
$class = ''; // Nothing fancy, by default
|
|
|
|
if (!$blockobject) {
|
|
// ignore
|
|
$visible = '';
|
|
} else if ($blocks[$blockid]->visible) {
|
|
$visible = '<a href="blocks.php?hide='.$blockid.'&sesskey='.sesskey().'" title="'.$strhide.'">'.
|
|
$OUTPUT->pix_icon('t/hide', $strhide) . '</a>';
|
|
} else {
|
|
$visible = '<a href="blocks.php?show='.$blockid.'&sesskey='.sesskey().'" title="'.$strshow.'">'.
|
|
$OUTPUT->pix_icon('t/show', $strshow) . '</a>';
|
|
$class = 'dimmed_text';
|
|
}
|
|
|
|
if ($dbversion == $plugin->version) {
|
|
$version = $dbversion;
|
|
} else {
|
|
$version = "$dbversion ($plugin->version)";
|
|
}
|
|
|
|
if (!$blockobject) {
|
|
// ignore
|
|
$undeletable = '';
|
|
} else if (in_array($blockname, $undeletableblocktypes)) {
|
|
$undeletable = '<a href="blocks.php?unprotect='.$blockid.'&sesskey='.sesskey().'" title="'.$strunprotect.'">'.
|
|
$OUTPUT->pix_icon('t/unlock', $strunprotect) . '</a>';
|
|
} else {
|
|
$undeletable = '<a href="blocks.php?protect='.$blockid.'&sesskey='.sesskey().'" title="'.$strprotect.'">'.
|
|
$OUTPUT->pix_icon('t/lock', $strprotect) . '</a>';
|
|
}
|
|
|
|
$row = array(
|
|
$strblockname,
|
|
$blocklist,
|
|
$version,
|
|
$visible,
|
|
$undeletable,
|
|
$settings,
|
|
$uninstall,
|
|
);
|
|
$table->add_data($row, $class);
|
|
}
|
|
|
|
$table->print_html();
|
|
|
|
if (!empty($incompatible)) {
|
|
echo $OUTPUT->heading(get_string('incompatibleblocks', 'blockstable', 'admin'));
|
|
|
|
$table = new flexible_table('admin-blocks-incompatible');
|
|
|
|
$table->define_columns(array('block', 'uninstall'));
|
|
$table->define_headers(array($strname, $struninstall));
|
|
$table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
|
|
|
|
$table->set_attribute('class', 'incompatibleblockstable generaltable');
|
|
|
|
$table->setup();
|
|
|
|
foreach ($incompatible as $block) {
|
|
if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('block_'.$block->name, 'manage')) {
|
|
$uninstall = html_writer::link($uninstallurl, $struninstall);
|
|
} else {
|
|
$uninstall = '';
|
|
}
|
|
$table->add_data(array(
|
|
$block->name,
|
|
$uninstall,
|
|
));
|
|
}
|
|
$table->print_html();
|
|
}
|
|
|
|
echo $OUTPUT->footer();
|