diff --git a/blocks/admin_bookmarks/block_admin_bookmarks.php b/blocks/admin_bookmarks/block_admin_bookmarks.php index 0b3b039ec25..807a18b3533 100644 --- a/blocks/admin_bookmarks/block_admin_bookmarks.php +++ b/blocks/admin_bookmarks/block_admin_bookmarks.php @@ -1,15 +1,65 @@ . -// seems to work... -// maybe I should add some pretty icons? -// or possibly add the ability to custom-name things? +/** + * Admin Bookmarks Block page. + * + * @package block + * @subpackage admin_bookmarks + * @copyright 2011 Moodle + * @author 2006 vinkmar + * 2011 Rossiani Wijaya (updated) + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * + */ +/** + * The admin bookmarks block class + */ class block_admin_bookmarks extends block_base { + /** @var string */ + public $blockname = null; + + /** @var bool */ + protected $contentgenerated = false; + + /** @var bool|null */ + protected $docked = null; + + /** + * Set the initial properties for the block + */ function init() { - $this->title = get_string('pluginname', 'block_admin_bookmarks'); + $this->blockname = get_class($this); + $this->title = get_string('pluginname', $this->blockname); } + /** + * All multiple instances of this block + * @return bool Returns false + */ + function instance_allow_multiple() { + return false; + } + + /** + * Set the applicable formats for this block to all + * @return array + */ function applicable_formats() { if (has_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM))) { return array('all' => true); @@ -18,58 +68,59 @@ class block_admin_bookmarks extends block_base { } } - function preferred_width() { - return 210; - } - - function create_item($visiblename,$link,$icon) { - $this->tempcontent .= ' ' . $visiblename . '
' . "\n"; - } - + /** + * Gets the content for this block + */ function get_content() { - global $CFG, $USER; + global $CFG; - if ($this->content !== NULL) { + // First check if we have already generated, don't waste cycles + if ($this->contentgenerated === true) { return $this->content; } - $this->content = new stdClass; - $this->content->text = ''; if (get_user_preferences('admin_bookmarks')) { - // this is expensive! Only require when bookmakrs exist.. require_once($CFG->libdir.'/adminlib.php'); $adminroot = admin_get_root(false, false); // settings not required - only pages $bookmarks = explode(',', get_user_preferences('admin_bookmarks')); - // hmm... just a liiitle (potentially) processor-intensive - // (recall that $adminroot->locate is a huge recursive call... and we're calling it repeatedly here - /// Accessibility: markup as a list. - $this->content->text .= '
    '."\n"; - + $contents = array(); foreach($bookmarks as $bookmark) { $temp = $adminroot->locate($bookmark); if ($temp instanceof admin_settingpage) { - $this->content->text .= '
  1. ' . $temp->visiblename . "
  2. \n"; + $contenturl = new moodle_url('settings.php', array('section'=>$bookmark)); + $contentlink = html_writer::link($contenturl, $temp->visiblename); + $contents[] = html_writer::tag('li', $contentlink); } else if ($temp instanceof admin_externalpage) { - $this->content->text .= '
  3. ' . $temp->visiblename . "
  4. \n"; + $contenturl = new moodle_url($temp->url); + $contentlink = html_writer::link($contenturl, $temp->visiblename); + $contents[] = html_writer::tag('li', $contentlink); } } - $this->content->text .= "
\n"; + $this->content->text = html_writer::tag('ol', implode('', $contents), array('class' => 'list')); } else { $bookmarks = array(); } - if (isset($this->page->section) and $this->page->section == 'search'){ + $this->content->footer = ''; + $this->page->settingsnav->initialise(); + $node = $this->page->settingsnav->get('root', navigation_node::TYPE_SETTING); + if (!$node || !$node->contains_active_node()) { + return $this->content; + } + $section = $node->find_active_node()->key; + + if ($section == 'search' || empty($section)){ // the search page can't be properly bookmarked at present $this->content->footer = ''; - } else if (($section = (isset($this->page->section) ? $this->page->section : '')) && (in_array($section, $bookmarks))) { - $this->content->footer = '' . get_string('unbookmarkthispage','admin') . ''; - } else if ($section = (isset($this->page->section) ? $this->page->section : '')) { - $this->content->footer = '' . get_string('bookmarkthispage','admin') . ''; + } else if (in_array($section, $bookmarks)) { + $deleteurl = new moodle_url('/blocks/admin_bookmarks/delete.php', array('section'=>$section, 'sesskey'=>sesskey())); + $this->content->footer = html_writer::link($deleteurl, get_string('unbookmarkthispage','admin')); } else { - $this->content->footer = ''; + $createurl = new moodle_url('/blocks/admin_bookmarks/create.php', array('section'=>$section, 'sesskey'=>sesskey())); + $this->content->footer = html_writer::link($createurl, get_string('bookmarkthispage','admin')); } return $this->content; diff --git a/blocks/admin_bookmarks/create.php b/blocks/admin_bookmarks/create.php index 8ba99aed773..ecb4c3e6bdf 100644 --- a/blocks/admin_bookmarks/create.php +++ b/blocks/admin_bookmarks/create.php @@ -4,6 +4,8 @@ require('../../config.php'); require_once($CFG->libdir.'/adminlib.php'); require_login(); +$context = get_context_instance(CONTEXT_SYSTEM); +$PAGE->set_context($context); $adminroot = admin_get_root(false, false); // settings not required - only pages if ($section = optional_param('section', '', PARAM_SAFEDIR) and confirm_sesskey()) { diff --git a/blocks/admin_bookmarks/delete.php b/blocks/admin_bookmarks/delete.php index bef0c4c9ed9..7abe599a7b2 100644 --- a/blocks/admin_bookmarks/delete.php +++ b/blocks/admin_bookmarks/delete.php @@ -5,6 +5,8 @@ require('../../config.php'); require_once($CFG->libdir.'/adminlib.php'); require_login(); +$context = get_context_instance(CONTEXT_SYSTEM); +$PAGE->set_context($context); $adminroot = admin_get_root(false, false); // settings not required - only pages if ($section = optional_param('section', '', PARAM_SAFEDIR) and confirm_sesskey()) {