diff --git a/blocks/moodleblock.class.php b/blocks/moodleblock.class.php
index 9c62c55f6c9..d43a1e42449 100644
--- a/blocks/moodleblock.class.php
+++ b/blocks/moodleblock.class.php
@@ -84,6 +84,10 @@ class block_base {
var $cron = NULL;
+ /**
+ * Indicates blocked is pinned - can not be moved, always present, does not have own context
+ */
+ var $pinned = false;
/// Class Functions
@@ -266,7 +270,11 @@ class block_base {
*/
function is_empty() {
- $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ if (empty($this->instance->pinned)) {
+ $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ } else {
+ $context = get_context_instance(CONTEXT_SYSTEM); // pinned blocks do not have own context
+ }
if ( !has_capability('moodle/block:view', $context) ) {
return true;
@@ -366,8 +374,11 @@ class block_base {
function _add_edit_controls($options) {
global $CFG, $USER, $PAGE;
- // this is the context relevant to this particular block instance
- $blockcontext = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ if (empty($this->instance->pinned)) {
+ $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ } else {
+ $context = get_context_instance(CONTEXT_SYSTEM); // pinned blocks do not have own context
+ }
// context for site or course, i.e. participant list etc
// check to see if user can edit site or course blocks.
@@ -375,7 +386,7 @@ class block_base {
switch ($this->instance->pagetype) {
case 'course-view':
- if (!has_capability('moodle/site:manageblocks', $blockcontext)) {
+ if (!has_capability('moodle/site:manageblocks', $context)) {
return null;
}
break;
@@ -427,7 +438,7 @@ class block_base {
$script = $page->url_get_full(array('instanceid' => $this->instance->id, 'sesskey' => $USER->sesskey));
if (empty($this->instance->pinned)) {
- $movebuttons .= '' .
+ $movebuttons .= '' .
'
';
}
@@ -756,7 +767,11 @@ class block_list extends block_base {
function is_empty() {
- $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ if (empty($this->instance->pinned)) {
+ $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ } else {
+ $context = get_context_instance(CONTEXT_SYSTEM); // pinned blocks do not have own context
+ }
if ( !has_capability('moodle/block:view', $context) ) {
return true;
diff --git a/blocks/rss_client/block_rss_client.php b/blocks/rss_client/block_rss_client.php
index 5e843d2a613..d15abc35f56 100644
--- a/blocks/rss_client/block_rss_client.php
+++ b/blocks/rss_client/block_rss_client.php
@@ -96,7 +96,11 @@
}
}
- $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ if (empty($this->instance->pinned)) {
+ $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ } else {
+ $context = get_context_instance(CONTEXT_SYSTEM); // pinned blocks do not have own context
+ }
if (has_capability('block/rss_client:createsharedfeeds', $context)
|| has_capability('block/rss_client:createprivatefeeds', $context)) {
diff --git a/blocks/rss_client/config_instance.html b/blocks/rss_client/config_instance.html
index b52fe3439f7..3066ed61ce1 100644
--- a/blocks/rss_client/config_instance.html
+++ b/blocks/rss_client/config_instance.html
@@ -93,7 +93,11 @@ print_box_start();
print $checkbox . $feedtitle .'
'."\n";
}
} else {
- $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ if (empty($this->instance->pinned)) {
+ $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ } else {
+ $context = get_context_instance(CONTEXT_SYSTEM); // pinned blocks do not have own context
+ }
print_string('nofeeds', 'block_rss_client');
if (has_capability('block/rss_client:createprivatefeeds', $context)
@@ -169,7 +173,11 @@ print_box_start();
} else {
global $act, $url, $rssid, $preferredtitle, $shared;
print ''; // Closes off page form
- $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ if (empty($this->instance->pinned)) {
+ $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+ } else {
+ $context = get_context_instance(CONTEXT_SYSTEM); // pinned blocks do not have own context
+ }
print_box_start();
rss_display_feeds($id, $USER->id, '', $context);
diff --git a/blocks/rss_client/config_instance_tabs.php b/blocks/rss_client/config_instance_tabs.php
index 3ba5cc15408..c3a7e3274c5 100644
--- a/blocks/rss_client/config_instance_tabs.php
+++ b/blocks/rss_client/config_instance_tabs.php
@@ -6,7 +6,11 @@ global $USER;
$tabs = $row = array();
-$context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+if (empty($this->instance->pinned)) {
+ $context = get_context_instance(CONTEXT_BLOCK, $this->instance->id);
+} else {
+ $context = get_context_instance(CONTEXT_SYSTEM); // pinned blocks do not have own context
+}
if (has_capability('moodle/site:manageblocks', $context)) {
$script = $page->url_get_full(array('instanceid' => $this->instance->id, 'sesskey' => $USER->sesskey, 'blockaction' => 'config', 'currentaction' => 'configblock', 'id' => $id, 'section' => 'rss'));