blocks MDL-24066 Blocks can now choose to be hideable + navigation and settings are no longer hideable.
This commit is contained in:
@@ -725,11 +725,26 @@ class block_base {
|
||||
throw new coding_exception('config_print() can no longer be used. Blocks should use a settings.php file.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be overridden by the block to prevent the block from being dockable.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function instance_can_be_docked() {
|
||||
global $CFG;
|
||||
return (!empty($CFG->allowblockstodock) && $this->page->theme->enable_dock);
|
||||
}
|
||||
|
||||
/**
|
||||
* If overridden and set to true by the block it will not be hidable when
|
||||
* editing is turned on.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function instance_can_be_hidden() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/** @callback callback functions for comments api */
|
||||
public static function comment_template($options) {
|
||||
$ret = <<<EOD
|
||||
|
||||
@@ -85,6 +85,16 @@ class block_navigation extends block_base {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* The navigation block cannot be hidden by default as it is integral to
|
||||
* the navigation of Moodle.
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
function instance_can_be_hidden() {
|
||||
return false;
|
||||
}
|
||||
|
||||
function instance_can_be_docked() {
|
||||
return (parent::instance_can_be_docked() && (empty($this->config->enabledock) || $this->config->enabledock=='yes'));
|
||||
}
|
||||
|
||||
@@ -48,10 +48,29 @@
|
||||
* was complex due to us wanting to remvoe the outmoded blocks that this
|
||||
* block was going to replace.
|
||||
*
|
||||
* @global moodle_database $DB
|
||||
* @param int $oldversion
|
||||
* @param object $block
|
||||
*/
|
||||
function xmldb_block_navigation_upgrade($oldversion, $block) {
|
||||
global $DB;
|
||||
// Implemented at 2009082800
|
||||
|
||||
if ($oldversion < 2010091400) {
|
||||
|
||||
$sql = "SELECT bp.id FROM {block_instances} bi
|
||||
LEFT JOIN {block_positions} bp ON bp.blockinstanceid=bi.id
|
||||
WHERE bi.blockname='navigation' AND bp.visible=0";
|
||||
$blockpositions = $DB->get_records_sql($sql);
|
||||
if ($blockpositions) {
|
||||
foreach ($blockpositions as $bp) {
|
||||
$bp->visible = 1;
|
||||
$DB->update_record('block_positions', $bp);
|
||||
}
|
||||
}
|
||||
|
||||
upgrade_block_savepoint(true, 2010091400, 'navigation');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -15,4 +15,4 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
$plugin->version = 2009082800;
|
||||
$plugin->version = 2010091400;
|
||||
|
||||
@@ -60,6 +60,16 @@ class block_settings extends block_base {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* The settings block cannot be hidden by default as it is integral to
|
||||
* the navigation of Moodle.
|
||||
*
|
||||
* @return false
|
||||
*/
|
||||
function instance_can_be_hidden() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the applicable formats for this block to all
|
||||
* @return array
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
// This file is part of Moodle - http://moodle.org/
|
||||
//
|
||||
// Moodle is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// Moodle is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/**
|
||||
* This file keeps track of upgrades to the settings block
|
||||
*
|
||||
* Sometimes, changes between versions involve alterations to database structures
|
||||
* and other major things that may break installations.
|
||||
*
|
||||
* The upgrade function in this file will attempt to perform all the necessary
|
||||
* actions to upgrade your older installation to the current version.
|
||||
*
|
||||
* If there's something it cannot do itself, it will tell you what you need to do.
|
||||
*
|
||||
* The commands in here will all be database-neutral, using the methods of
|
||||
* database_manager class
|
||||
*
|
||||
* Please do not forget to use upgrade_set_timeout()
|
||||
* before any action that may take longer time to finish.
|
||||
*
|
||||
* @since 2.0
|
||||
* @package blocks
|
||||
* @copyright 2009 Sam Hemelryk
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
/**
|
||||
* As of the implementation of this block and the general navigation code
|
||||
* in Moodle 2.0 the body of immediate upgrade work for this block and
|
||||
* settings is done in core upgrade {@see lib/db/upgrade.php}
|
||||
*
|
||||
* There were several reasons that they were put there and not here, both becuase
|
||||
* the process for the two blocks was very similar and because the upgrade process
|
||||
* was complex due to us wanting to remvoe the outmoded blocks that this
|
||||
* block was going to replace.
|
||||
*
|
||||
* @global moodle_database $DB
|
||||
* @param int $oldversion
|
||||
* @param object $block
|
||||
*/
|
||||
function xmldb_block_settings_upgrade($oldversion, $block) {
|
||||
global $DB;
|
||||
// Implemented at 2009082800
|
||||
|
||||
if ($oldversion < 2010091400) {
|
||||
|
||||
$sql = "SELECT bp.id FROM {block_instances} bi
|
||||
LEFT JOIN {block_positions} bp ON bp.blockinstanceid=bi.id
|
||||
WHERE bi.blockname='settings' AND bp.visible=0";
|
||||
$blockpositions = $DB->get_records_sql($sql);
|
||||
if ($blockpositions) {
|
||||
foreach ($blockpositions as $bp) {
|
||||
$bp->visible = 1;
|
||||
$DB->update_record('block_positions', $bp);
|
||||
}
|
||||
}
|
||||
|
||||
upgrade_block_savepoint(true, 2010091400, 'settings');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -15,4 +15,4 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
$plugin->version = 2009082800;
|
||||
$plugin->version = 2010091400;
|
||||
|
||||
+7
-2
@@ -93,7 +93,10 @@ class block_manager {
|
||||
|
||||
/// Field declarations =========================================================
|
||||
|
||||
/** @var moodle_page the moodle_page we are managing blocks for. */
|
||||
/**
|
||||
* the moodle_page we are managing blocks for.
|
||||
* @var moodle_page
|
||||
*/
|
||||
protected $page;
|
||||
|
||||
/** @var array region name => 1.*/
|
||||
@@ -972,7 +975,7 @@ class block_manager {
|
||||
'icon' => 'i/roles', 'caption' => get_string('assignroles', 'role'));
|
||||
}
|
||||
|
||||
if ($this->page->user_can_edit_blocks()) {
|
||||
if ($this->page->user_can_edit_blocks() && $block->instance_can_be_hidden()) {
|
||||
// Show/hide icon.
|
||||
if ($block->instance->visible) {
|
||||
$controls[] = array('url' => $actionurl . '&bui_hideid=' . $block->instance->id,
|
||||
@@ -1096,6 +1099,8 @@ class block_manager {
|
||||
|
||||
if (!$this->page->user_can_edit_blocks()) {
|
||||
throw new moodle_exception('nopermissions', '', $this->page->url->out(), get_string('hideshowblocks'));
|
||||
} else if (!$block->instance_can_be_hidden()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
blocks_set_visibility($block->instance, $this->page, $newvisibility);
|
||||
|
||||
Reference in New Issue
Block a user