Merge branch 'wip-MDL-27058-master' of git://github.com/samhemelryk/moodle.git (solve...
authorAparup Banerjee <aparup@moodle.com>
Tue, 11 Oct 2011 05:37:34 +0000 (13:37 +0800)
committerAparup Banerjee <aparup@moodle.com>
Tue, 11 Oct 2011 05:37:34 +0000 (13:37 +0800)
1  2 
lib/navigationlib.php

diff --combined lib/navigationlib.php
@@@ -1608,7 -1608,6 +1608,7 @@@ class global_navigation extends navigat
                      $activity->hidden = (!$cm->visible);
                      $activity->modname = $cm->modname;
                      $activity->nodetype = navigation_node::NODETYPE_LEAF;
 +                    $activity->onclick = $cm->get_on_click();
                      $url = $cm->get_url();
                      if (!$url) {
                          $activity->url = null;
       * @return array Array of activity nodes
       */
      protected function load_section_activities(navigation_node $sectionnode, $sectionnumber, $activities) {
 +        // A static counter for JS function naming
 +        static $legacyonclickcounter = 0;
  
          if ($activities instanceof course_modinfo) {
              debugging('global_navigation::load_section_activities argument 3 should now recieve an array of activites. See that method for an example.', DEBUG_DEVELOPER);
              } else {
                  $icon = new pix_icon('icon', get_string('modulename', $activity->modname), $activity->modname);
              }
 -            $activitynode = $sectionnode->add(format_string($activity->name), $activity->url, navigation_node::TYPE_ACTIVITY, null, $activity->id, $icon);
 +
 +            // Prepare the default name and url for the node
 +            $activityname = format_string($activity->name, true, array('context' => get_context_instance(CONTEXT_MODULE, $activity->id)));
 +            $action = new moodle_url($activity->url);
 +
 +            // Check if the onclick property is set (puke!)
 +            if (!empty($activity->onclick)) {
 +                // Increment the counter so that we have a unique number.
 +                $legacyonclickcounter++;
 +                // Generate the function name we will use
 +                $functionname = 'legacy_activity_onclick_handler_'.$legacyonclickcounter;
 +                $propogrationhandler = '';
 +                // Check if we need to cancel propogation. Remember inline onclick
 +                // events would return false if they wanted to prevent propogation and the
 +                // default action.
 +                if (strpos($activity->onclick, 'return false')) {
 +                    $propogrationhandler = 'e.halt();';
 +                }
 +                // Decode the onclick - it has already been encoded for display (puke)
 +                $onclick = htmlspecialchars_decode($activity->onclick);
 +                // Build the JS function the click event will call
 +                $jscode = "function {$functionname}(e) { $propogrationhandler $onclick }";
 +                $this->page->requires->js_init_code($jscode);
 +                // Override the default url with the new action link
 +                $action = new action_link($action, $activityname, new component_action('click', $functionname));
 +            }
 +
 +            $activitynode = $sectionnode->add($activityname, $action, navigation_node::TYPE_ACTIVITY, null, $activity->id, $icon);
              $activitynode->title(get_string('modulename', $activity->modname));
              $activitynode->hidden = $activity->hidden;
              $activitynode->display = $activity->display;
              }
          }
  
-         // Add nodes for forum posts and discussions if the user can view either or both
-         // There are no capability checks here as the content of the page is based
-         // purely on the forums the current user has access too.
-         $forumtab = $usernode->add(get_string('forumposts', 'forum'));
-         $forumtab->add(get_string('posts', 'forum'), new moodle_url('/mod/forum/user.php', $baseargs));
-         $forumtab->add(get_string('discussions', 'forum'), new moodle_url('/mod/forum/user.php', array_merge($baseargs, array('mode'=>'discussions'))));
+         if (!empty($CFG->navadduserpostslinks)) {
+             // Add nodes for forum posts and discussions if the user can view either or both
+             // There are no capability checks here as the content of the page is based
+             // purely on the forums the current user has access too.
+             $forumtab = $usernode->add(get_string('forumposts', 'forum'));
+             $forumtab->add(get_string('posts', 'forum'), new moodle_url('/mod/forum/user.php', $baseargs));
+             $forumtab->add(get_string('discussions', 'forum'), new moodle_url('/mod/forum/user.php', array_merge($baseargs, array('mode'=>'discussions'))));
+         }
  
          // Add blog nodes
          if (!empty($CFG->bloglevel)) {
              $coursenode->add(get_string('tags', 'tag'), new moodle_url('/tag/search.php'));
          }
  
 -        // Calendar
 -        $calendarurl = new moodle_url('/calendar/view.php', array('view' => 'month'));
 -        $coursenode->add(get_string('calendar', 'calendar'), $calendarurl, self::TYPE_CUSTOM, null, 'calendar');
 +        if (isloggedin()) {
 +            // Calendar
 +            $calendarurl = new moodle_url('/calendar/view.php', array('view' => 'month'));
 +            $coursenode->add(get_string('calendar', 'calendar'), $calendarurl, self::TYPE_CUSTOM, null, 'calendar');
 +        }
  
          // View course reports
          if (has_capability('moodle/site:viewreports', $this->page->context)) { // basic capability for listing of reports