source: moodle/trunk/fuentes/admin/blocks.php @ 136

Last change on this file since 136 was 136, checked in by mabarracus, 3 years ago

Ported code to xenial

File size: 9.9 KB
Line 
1<?php
2
3    // Allows the admin to configure blocks (hide/show, uninstall and configure)
4
5    require_once('../config.php');
6    require_once($CFG->libdir.'/adminlib.php');
7    require_once($CFG->libdir.'/tablelib.php');
8
9    admin_externalpage_setup('manageblocks');
10
11    $confirm  = optional_param('confirm', 0, PARAM_BOOL);
12    $hide     = optional_param('hide', 0, PARAM_INT);
13    $show     = optional_param('show', 0, PARAM_INT);
14    $unprotect = optional_param('unprotect', 0, PARAM_INT);
15    $protect = optional_param('protect', 0, PARAM_INT);
16
17/// Print headings
18
19    $strmanageblocks = get_string('manageblocks');
20    $struninstall = get_string('uninstallplugin', 'core_admin');
21    $strversion = get_string('version');
22    $strhide = get_string('hide');
23    $strshow = get_string('show');
24    $strsettings = get_string('settings');
25    $strcourses = get_string('blockinstances', 'admin');
26    $strname = get_string('name');
27    $strshowblockcourse = get_string('showblockcourse');
28    $strprotecthdr = get_string('blockprotect', 'admin'). $OUTPUT->help_icon('blockprotect','admin');
29    $strprotect = get_string('blockprotect', 'admin');
30    $strunprotect = get_string('blockunprotect', 'admin');
31
32/// If data submitted, then process and store.
33
34    if (!empty($hide) && confirm_sesskey()) {
35        if (!$block = $DB->get_record('block', array('id'=>$hide))) {
36            print_error('blockdoesnotexist', 'error');
37        }
38        $DB->set_field('block', 'visible', '0', array('id'=>$block->id));      // Hide block
39        core_plugin_manager::reset_caches();
40        admin_get_root(true, false);  // settings not required - only pages
41    }
42
43    if (!empty($show) && confirm_sesskey() ) {
44        if (!$block = $DB->get_record('block', array('id'=>$show))) {
45            print_error('blockdoesnotexist', 'error');
46        }
47        $DB->set_field('block', 'visible', '1', array('id'=>$block->id));      // Show block
48        core_plugin_manager::reset_caches();
49        admin_get_root(true, false);  // settings not required - only pages
50    }
51
52    if (!isset($CFG->undeletableblocktypes) || (!is_array($CFG->undeletableblocktypes) && !is_string($CFG->undeletableblocktypes))) {
53        $undeletableblocktypes = array('navigation', 'settings');
54    } else if (is_string($CFG->undeletableblocktypes)) {
55        $undeletableblocktypes = explode(',', $CFG->undeletableblocktypes);
56    } else {
57        $undeletableblocktypes = $CFG->undeletableblocktypes;
58    }
59
60    if (!empty($protect) && confirm_sesskey()) {
61        if (!$block = $DB->get_record('block', array('id'=>$protect))) {
62            print_error('blockdoesnotexist', 'error');
63        }
64        if (!in_array($block->name, $undeletableblocktypes)) {
65            $undeletableblocktypes[] = $block->name;
66            set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
67        }
68        admin_get_root(true, false);  // settings not required - only pages
69    }
70
71    if (!empty($unprotect) && confirm_sesskey()) {
72        if (!$block = $DB->get_record('block', array('id'=>$unprotect))) {
73            print_error('blockdoesnotexist', 'error');
74        }
75        if (in_array($block->name, $undeletableblocktypes)) {
76            $undeletableblocktypes = array_diff($undeletableblocktypes, array($block->name));
77            set_config('undeletableblocktypes', implode(',', $undeletableblocktypes));
78        }
79        admin_get_root(true, false);  // settings not required - only pages
80    }
81
82    echo $OUTPUT->header();
83    echo $OUTPUT->heading($strmanageblocks);
84
85/// Main display starts here
86
87/// Get and sort the existing blocks
88
89    if (!$blocks = $DB->get_records('block', array(), 'name ASC')) {
90        print_error('noblocks', 'error');  // Should never happen
91    }
92
93    $incompatible = array();
94
95/// Print the table of all blocks
96
97    $table = new flexible_table('admin-blocks-compatible');
98
99    $table->define_columns(array('name', 'instances', 'version', 'hideshow', 'undeletable', 'settings', 'uninstall'));
100    $table->define_headers(array($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strprotecthdr, $strsettings, $struninstall));
101    $table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
102    $table->set_attribute('class', 'admintable blockstable generaltable');
103    $table->set_attribute('id', 'compatibleblockstable');
104    $table->setup();
105    $tablerows = array();
106
107    // Sort blocks using current locale.
108    $blocknames = array();
109    foreach ($blocks as $blockid=>$block) {
110        $blockname = $block->name;
111        if (file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) {
112            $blocknames[$blockid] = get_string('pluginname', 'block_'.$blockname);
113        } else {
114            $blocknames[$blockid] = $blockname;
115        }
116    }
117    core_collator::asort($blocknames);
118
119    foreach ($blocknames as $blockid=>$strblockname) {
120        $block = $blocks[$blockid];
121        $blockname = $block->name;
122        $dbversion = get_config('block_'.$block->name, 'version');
123
124        if (!file_exists("$CFG->dirroot/blocks/$blockname/block_$blockname.php")) {
125            $blockobject  = false;
126            $strblockname = '<span class="notifyproblem">'.$strblockname.' ('.get_string('missingfromdisk').')</span>';
127            $plugin = new stdClass();
128            $plugin->version = $dbversion;
129
130        } else {
131            $plugin = new stdClass();
132            $plugin->version = '???';
133            if (file_exists("$CFG->dirroot/blocks/$blockname/version.php")) {
134                include("$CFG->dirroot/blocks/$blockname/version.php");
135            }
136
137            if (!$blockobject  = block_instance($block->name)) {
138                $incompatible[] = $block;
139                continue;
140            }
141        }
142
143        if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('block_'.$blockname, 'manage')) {
144            $uninstall = html_writer::link($uninstallurl, $struninstall);
145        } else {
146            $uninstall = '';
147        }
148
149        $settings = ''; // By default, no configuration
150        if ($blockobject and $blockobject->has_config()) {
151            $blocksettings = admin_get_root()->locate('blocksetting' . $block->name);
152
153            if ($blocksettings instanceof admin_externalpage) {
154                $settings = '<a href="' . $blocksettings->url .  '">' . get_string('settings') . '</a>';
155            } else if ($blocksettings instanceof admin_settingpage) {
156                $settings = '<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/settings.php?section=blocksetting'.$block->name.'">'.$strsettings.'</a>';
157            } else {
158                $settings = '<a href="block.php?block='.$blockid.'">'.$strsettings.'</a>';
159            }
160        }
161
162        // MDL-11167, blocks can be placed on mymoodle, or the blogs page
163        // and it should not show up on course search page
164
165        $totalcount = $DB->count_records('block_instances', array('blockname'=>$blockname));
166        $count = $DB->count_records('block_instances', array('blockname'=>$blockname, 'pagetypepattern'=>'course-view-*'));
167
168        if ($count>0) {
169            $blocklist = "<a href=\"{$CFG->wwwroot}/course/search.php?blocklist=$blockid&amp;sesskey=".sesskey()."\" ";
170            $blocklist .= "title=\"$strshowblockcourse\" >$totalcount</a>";
171        }
172        else {
173            $blocklist = "$totalcount";
174        }
175        $class = ''; // Nothing fancy, by default
176
177        if (!$blockobject) {
178            // ignore
179            $visible = '';
180        } else if ($blocks[$blockid]->visible) {
181            $visible = '<a href="blocks.php?hide='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strhide.'">'.
182                       '<img src="'.$OUTPUT->pix_url('t/hide') . '" class="iconsmall" alt="'.$strhide.'" /></a>';
183        } else {
184            $visible = '<a href="blocks.php?show='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strshow.'">'.
185                       '<img src="'.$OUTPUT->pix_url('t/show') . '" class="iconsmall" alt="'.$strshow.'" /></a>';
186            $class = 'dimmed_text';
187        }
188
189        if ($dbversion == $plugin->version) {
190            $version = $dbversion;
191        } else {
192            $version = "$dbversion ($plugin->version)";
193        }
194
195        if (!$blockobject) {
196            // ignore
197            $undeletable = '';
198        } else if (in_array($blockname, $undeletableblocktypes)) {
199            $undeletable = '<a href="blocks.php?unprotect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strunprotect.'">'.
200                       '<img src="'.$OUTPUT->pix_url('t/unlock') . '" class="iconsmall" alt="'.$strunprotect.'" /></a>';
201        } else {
202            $undeletable = '<a href="blocks.php?protect='.$blockid.'&amp;sesskey='.sesskey().'" title="'.$strprotect.'">'.
203                       '<img src="'.$OUTPUT->pix_url('t/lock') . '" class="iconsmall" alt="'.$strprotect.'" /></a>';
204        }
205
206        $row = array(
207            $strblockname,
208            $blocklist,
209            $version,
210            $visible,
211            $undeletable,
212            $settings,
213            $uninstall,
214        );
215        $table->add_data($row, $class);
216    }
217
218    $table->print_html();
219
220    if (!empty($incompatible)) {
221        echo $OUTPUT->heading(get_string('incompatibleblocks', 'blockstable', 'admin'));
222
223        $table = new flexible_table('admin-blocks-incompatible');
224
225        $table->define_columns(array('block', 'uninstall'));
226        $table->define_headers(array($strname, $struninstall));
227        $table->define_baseurl($CFG->wwwroot.'/'.$CFG->admin.'/blocks.php');
228
229        $table->set_attribute('class', 'incompatibleblockstable generaltable');
230
231        $table->setup();
232
233        foreach ($incompatible as $block) {
234            if ($uninstallurl = core_plugin_manager::instance()->get_uninstall_url('block_'.$block->name, 'manage')) {
235                $uninstall = html_writer::link($uninstallurl, $struninstall);
236            } else {
237                $uninstall = '';
238            }
239            $table->add_data(array(
240                $block->name,
241                $uninstall,
242            ));
243        }
244        $table->print_html();
245    }
246
247    echo $OUTPUT->footer();
248
249
Note: See TracBrowser for help on using the repository browser.