Skip to content

Commit

Permalink
MDL-25999: update Admin Bookmarks block to work properly in 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Rossiani Wijaya committed Apr 18, 2011
1 parent 50467e5 commit d03f904
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 32 deletions.
115 changes: 83 additions & 32 deletions blocks/admin_bookmarks/block_admin_bookmarks.php
Original file line number Diff line number Diff line change
@@ -1,15 +1,65 @@
<?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/>.

/**
* 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 {

// seems to work...
// maybe I should add some pretty icons?
// or possibly add the ability to custom-name things?
/** @var string */
public $blockname = null;

class block_admin_bookmarks extends block_base {
/** @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);
Expand All @@ -18,58 +68,59 @@ function applicable_formats() {
}
}

function preferred_width() {
return 210;
}

function create_item($visiblename,$link,$icon) {
$this->tempcontent .= '<a href="' . $link . '"><img src="' . $icon . '" alt="" /> ' . $visiblename . '</a><br />' . "\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 .= '<ol class="list">'."\n";

$contents = array();
foreach($bookmarks as $bookmark) {
$temp = $adminroot->locate($bookmark);
if ($temp instanceof admin_settingpage) {
$this->content->text .= '<li><a href="' . $CFG->wwwroot . '/' . $CFG->admin . '/settings.php?section=' . $bookmark . '">' . $temp->visiblename . "</a></li>\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 .= '<li><a href="' . $temp->url . '">' . $temp->visiblename . "</a></li>\n";
$contenturl = new moodle_url($temp->url);
$contentlink = html_writer::link($contenturl, $temp->visiblename);
$contents[] = html_writer::tag('li', $contentlink);
}
}
$this->content->text .= "</ol>\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 = '<a href="' . $CFG->wwwroot . '/blocks/admin_bookmarks/delete.php?section=' . $section . '&amp;sesskey='.sesskey().'">' . get_string('unbookmarkthispage','admin') . '</a>';
} else if ($section = (isset($this->page->section) ? $this->page->section : '')) {
$this->content->footer = '<a href="' . $CFG->wwwroot . '/blocks/admin_bookmarks/create.php?section=' . $section . '&amp;sesskey='.sesskey().'">' . get_string('bookmarkthispage','admin') . '</a>';
} 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;
Expand Down
2 changes: 2 additions & 0 deletions blocks/admin_bookmarks/create.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

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()) {
Expand Down
2 changes: 2 additions & 0 deletions blocks/admin_bookmarks/delete.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
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()) {
Expand Down

0 comments on commit d03f904

Please sign in to comment.