From d7319652ad79fac5ffdc75617cbe503f19b187de Mon Sep 17 00:00:00 2001 From: samhemelryk Date: Wed, 9 Sep 2009 03:59:26 +0000 Subject: [PATCH] navigation MDL-20234 Fixed bug with moveto icon action and added support for URL switching of dock state --- .../block_global_navigation_tree.php | 63 +++++++++++++++---- .../block_settings_navigation_tree.php | 42 ++++++++++--- 2 files changed, 86 insertions(+), 19 deletions(-) diff --git a/blocks/global_navigation_tree/block_global_navigation_tree.php b/blocks/global_navigation_tree/block_global_navigation_tree.php index 510ed248c9..807a17df1e 100644 --- a/blocks/global_navigation_tree/block_global_navigation_tree.php +++ b/blocks/global_navigation_tree/block_global_navigation_tree.php @@ -40,7 +40,10 @@ class block_global_navigation_tree extends block_tree { public static $navcount; /** @var string */ public $blockname = null; + /** @var bool */ protected $contentgenerated = false; + /** @var bool|null */ + protected $docked = null; /** * Set the initial properties for the block @@ -91,6 +94,24 @@ class block_global_navigation_tree extends block_tree { block_global_navigation_tree::$navcount++; + // Check if this block has been docked + if ($this->docked === null) { + $this->docked = get_user_preferences('nav_in_tab_panel_globalnav'.block_global_navigation_tree::$navcount, 0); + } + + // Check if there is a param to change the docked state + if ($this->docked && optional_param('undock', null, PARAM_INT)==$this->instance->id) { + unset_user_preference('nav_in_tab_panel_globalnav'.block_global_navigation_tree::$navcount); + $url = $this->page->url; + $url->remove_params(array('undock')); + redirect($url); + } else if (!$this->docked && optional_param('dock', null, PARAM_INT)==$this->instance->id) { + set_user_preferences(array('nav_in_tab_panel_globalnav'.block_global_navigation_tree::$navcount=>1)); + $url = $this->page->url; + $url->remove_params(array('dock')); + redirect($url); + } + // Set the expansionlimit if one has been set in block config if (!empty($this->config->expansionlimit) && $this->config->expansionlimit!='0') { $this->page->navigation->expansionlimit = $this->config->expansionlimit; @@ -131,21 +152,34 @@ class block_global_navigation_tree extends block_tree { $this->page->requires->js_function_call('setup_new_navtree', array($this->id))->on_dom_ready(); // Grab the items to display $this->content->items = array($this->page->navigation); - - $url = $this->page->url; - $url->param('regenerate','navigation'); - $reloadstr = get_string('reload'); - $this->content->footer .= ''.$reloadstr.''; + + $reloadicon = new moodle_action_icon(); + $reloadicon->link->url = $this->page->url; + $reloadicon->link->url->param('regenerate','navigation'); + $reloadicon->link->add_class('customcommand'); + $reloadicon->image->src = $OUTPUT->old_icon_url('t/reload'); + $reloadicon->alt = get_string('reload'); + $reloadicon->title = get_string('reload'); + $this->content->footer .= $OUTPUT->action_icon($reloadicon); + if (empty($this->config->enablesidebarpopout) || $this->config->enablesidebarpopout == 'yes') { user_preference_allow_ajax_update('nav_in_tab_panel_globalnav'.block_global_navigation_tree::$navcount, PARAM_INT); - if (get_user_preferences('nav_in_tab_panel_globalnav'.block_global_navigation_tree::$navcount, 0)) { - $icon = $OUTPUT->old_icon_url('t/movetoblock'); - $string = $toggleblockdisplay; + + $moveicon = new moodle_action_icon(); + $moveicon->link->add_classes('moveto customcommand requiresjs'); + $moveicon->link->url = $this->page->url; + if ($this->docked) { + $moveicon->image->src = $OUTPUT->old_icon_url('t/movetoblock'); + $moveicon->image->alt = $toggleblockdisplay; + $moveicon->image->title = $toggleblockdisplay; + $moveicon->link->url->param('undock', $this->instance->id); } else { - $icon = $OUTPUT->old_icon_url('t/movetosidetab'); - $string = $togglesidetabdisplay; + $moveicon->image->src = $OUTPUT->old_icon_url('t/movetosidetab'); + $moveicon->image->alt = $togglesidetabdisplay; + $moveicon->image->title = $togglesidetabdisplay; + $moveicon->link->url->param('dock', $this->instance->id); } - $this->content->footer .= ''.$string.''; + $this->content->footer .= $OUTPUT->action_icon($moveicon); } // Set content generated to true so that we know it has been done @@ -166,10 +200,15 @@ class block_global_navigation_tree extends block_tree { */ public function html_attributes() { $attributes = parent::html_attributes(); + + if ($this->docked===null) { + $this->docked = get_user_preferences('nav_in_tab_panel_globalnav'.block_global_navigation_tree::$navcount, 0); + } + if (!empty($this->config->enablehoverexpansion) && $this->config->enablehoverexpansion == 'yes') { $attributes['class'] .= ' sideblock_js_expansion'; } - if (get_user_preferences('nav_in_tab_panel_globalnav'.block_global_navigation_tree::$navcount, 0)) { + if ($this->docked) { $attributes['class'] .= ' sideblock_js_sidebarpopout'; } return $attributes; diff --git a/blocks/settings_navigation_tree/block_settings_navigation_tree.php b/blocks/settings_navigation_tree/block_settings_navigation_tree.php index e86c60ea8e..f904cdd584 100644 --- a/blocks/settings_navigation_tree/block_settings_navigation_tree.php +++ b/blocks/settings_navigation_tree/block_settings_navigation_tree.php @@ -39,8 +39,11 @@ class block_settings_navigation_tree extends block_tree { /** @var string */ public static $navcount; public $blockname = null; - protected $contentgenerated = false; public $id = null; + /** @var bool */ + protected $contentgenerated = false; + /** @var bool|null */ + protected $docked = null; /** * Set the initial properties for the block @@ -87,6 +90,24 @@ class block_settings_navigation_tree extends block_tree { $this->page->requires->js('lib/javascript-navigation.js'); block_settings_navigation_tree::$navcount++; + // Check if this block has been docked + if ($this->docked === null) { + $this->docked = get_user_preferences('nav_in_tab_panel_settingsnav'.block_settings_navigation_tree::$navcount, 0); + } + + // Check if there is a param to change the docked state + if ($this->docked && optional_param('undock', null, PARAM_INT)==$this->instance->id) { + unset_user_preference('nav_in_tab_panel_settingsnav'.block_settings_navigation_tree::$navcount, 0); + $url = $this->page->url; + $url->remove_params(array('undock')); + redirect($url); + } else if (!$this->docked && optional_param('dock', null, PARAM_INT)==$this->instance->id) { + set_user_preferences(array('nav_in_tab_panel_settingsnav'.block_settings_navigation_tree::$navcount=>1)); + $url = $this->page->url; + $url->remove_params(array('dock')); + redirect($url); + } + $togglesidetabdisplay = get_string('togglesidetabdisplay', $this->blockname); $toggleblockdisplay = get_string('toggleblockdisplay', $this->blockname); $args = array('instance'=>$this->instance->id); @@ -130,20 +151,21 @@ class block_settings_navigation_tree extends block_tree { $this->content->footer .= $OUTPUT->action_icon($reloadicon); if (!empty($this->config->enablesidebarpopout) && $this->config->enablesidebarpopout == 'yes') { + user_preference_allow_ajax_update('nav_in_tab_panel_settingsnav'.block_settings_navigation_tree::$navcount, PARAM_INT); + $moveicon = new moodle_action_icon(); $moveicon->link->add_classes('moveto customcommand requiresjs'); - $moveicon->link->url = ''; - - user_preference_allow_ajax_update('nav_in_tab_panel_settingsnav'.block_settings_navigation_tree::$navcount, PARAM_INT); - if (get_user_preferences('nav_in_tab_panel_settingsnav'.block_settings_navigation_tree::$navcount, 0)) { + $moveicon->link->url = $this->page->url; + if ($this->docked) { $moveicon->image->src = $OUTPUT->old_icon_url('t/movetoblock'); - $string = $toggleblockdisplay; $moveicon->image->alt = $toggleblockdisplay; $moveicon->image->title = $toggleblockdisplay; + $moveicon->link->url->param('undock', $this->instance->id); } else { $moveicon->image->src = $OUTPUT->old_icon_url('t/movetosidetab'); $moveicon->image->alt = $togglesidetabdisplay; $moveicon->image->title = $togglesidetabdisplay; + $moveicon->link->url->param('dock', $this->instance->id); } $this->content->footer .= $OUTPUT->action_icon($moveicon); } @@ -155,10 +177,16 @@ class block_settings_navigation_tree extends block_tree { function html_attributes() { $attributes = parent::html_attributes(); + + // Check if this block has been docked + if ($this->docked === null) { + $this->docked = get_user_preferences('nav_in_tab_panel_settingsnav'.block_settings_navigation_tree::$navcount, 0); + } + if (!empty($this->config->enablehoverexpansion) && $this->config->enablehoverexpansion == 'yes') { $attributes['class'] .= ' sideblock_js_expansion'; } - if (get_user_preferences('nav_in_tab_panel_settingsnav'.block_settings_navigation_tree::$navcount, 0)) { + if ($this->docked) { $attributes['class'] .= ' sideblock_js_sidebarpopout'; } return $attributes; -- 2.39.5