MDL-24282 allow admins to manage forum subscriptions
authorPetr Skoda <skodak@moodle.org>
Sun, 19 Sep 2010 14:15:18 +0000 (14:15 +0000)
committerPetr Skoda <skodak@moodle.org>
Sun, 19 Sep 2010 14:15:18 +0000 (14:15 +0000)
mod/forum/lib.php

index fd0c6a0..588f467 100644 (file)
@@ -7443,86 +7443,85 @@ function forum_extend_settings_navigation(settings_navigation $settingsnav, navi
     if (empty($PAGE->cm->context)) {
         $PAGE->cm->context = get_context_instance(CONTEXT_MODULE, $PAGE->cm->instance);
     }
-    if (is_enrolled($PAGE->cm->context)) { // means enrolled users only
-        $notenode = false;
-        $helpbutton = false;
-
-        $canmanage  = has_capability('mod/forum:managesubscriptions', $PAGE->cm->context);
-        $subscriptionmode = forum_get_forcesubscribed($forumobject);
-        $cansubscribe = ($subscriptionmode != FORUM_FORCESUBSCRIBE && ($subscriptionmode != FORUM_DISALLOWSUBSCRIBE || $canmanage));
-
-        if ($canmanage) {
-            $mode = $forumnode->add(get_string('subscriptionmode', 'forum'), null, navigation_node::TYPE_CONTAINER);
-
-            $allowchoice = $mode->add(get_string('subscriptionoptional', 'forum'), new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id, 'mode'=>'0')), navigation_node::TYPE_SETTING);
-            $forceforever = $mode->add(get_string("subscriptionforced", "forum"), new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id, 'mode'=>'1')), navigation_node::TYPE_SETTING);
-            $forceinitially = $mode->add(get_string("subscriptionauto", "forum"), new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id, 'mode'=>'2')), navigation_node::TYPE_SETTING);
-            $disallowchoice = $mode->add(get_string('subscriptiondisabled', 'forum'), new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id, 'mode'=>'3')), navigation_node::TYPE_SETTING);
-
-            switch ($subscriptionmode) {
-                case FORUM_CHOOSESUBSCRIBE : // 0
-                    $allowchoice->action = null;
-                    $allowchoice->add_class('activesetting');
-                    break;
-                case FORUM_FORCESUBSCRIBE : // 1
-                    $forceforever->action = null;
-                    $forceforever->add_class('activesetting');
-                    break;
-                case FORUM_INITIALSUBSCRIBE : // 2
-                    $forceinitially->action = null;
-                    $forceinitially->add_class('activesetting');
-                    break;
-                case FORUM_DISALLOWSUBSCRIBE : // 3
-                    $disallowchoice->action = null;
-                    $disallowchoice->add_class('activesetting');
-                    break;
-            }
 
-        } else {
+    // for some actions you need to be enrolled, beiing admin is not enough sometimes here
+    $enrolled = is_enrolled($PAGE->cm->context);
 
-            switch ($subscriptionmode) {
-                case FORUM_CHOOSESUBSCRIBE : // 0
-                    $notenode = $forumnode->add(get_string('subscriptionoptional', 'forum'));
-                    break;
-                case FORUM_FORCESUBSCRIBE : // 1
-                    $notenode = $forumnode->add(get_string('subscriptionforced', 'forum'));
-                    break;
-                case FORUM_INITIALSUBSCRIBE : // 2
-                    $notenode = $forumnode->add(get_string('subscriptionauto', 'forum'));
-                    break;
-                case FORUM_DISALLOWSUBSCRIBE : // 3
-                    $notenode = $forumnode->add(get_string('subscriptiondisabled', 'forum'));
-                    break;
-            }
+    $canmanage  = has_capability('mod/forum:managesubscriptions', $PAGE->cm->context);
+    $subscriptionmode = forum_get_forcesubscribed($forumobject);
+    $cansubscribe = ($enrolled &&($subscriptionmode != FORUM_FORCESUBSCRIBE && ($subscriptionmode != FORUM_DISALLOWSUBSCRIBE || $canmanage)));
+
+    if ($canmanage) {
+        $mode = $forumnode->add(get_string('subscriptionmode', 'forum'), null, navigation_node::TYPE_CONTAINER);
+
+        $allowchoice = $mode->add(get_string('subscriptionoptional', 'forum'), new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id, 'mode'=>'0')), navigation_node::TYPE_SETTING);
+        $forceforever = $mode->add(get_string("subscriptionforced", "forum"), new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id, 'mode'=>'1')), navigation_node::TYPE_SETTING);
+        $forceinitially = $mode->add(get_string("subscriptionauto", "forum"), new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id, 'mode'=>'2')), navigation_node::TYPE_SETTING);
+        $disallowchoice = $mode->add(get_string('subscriptiondisabled', 'forum'), new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id, 'mode'=>'3')), navigation_node::TYPE_SETTING);
+
+        switch ($subscriptionmode) {
+            case FORUM_CHOOSESUBSCRIBE : // 0
+                $allowchoice->action = null;
+                $allowchoice->add_class('activesetting');
+                break;
+            case FORUM_FORCESUBSCRIBE : // 1
+                $forceforever->action = null;
+                $forceforever->add_class('activesetting');
+                break;
+            case FORUM_INITIALSUBSCRIBE : // 2
+                $forceinitially->action = null;
+                $forceinitially->add_class('activesetting');
+                break;
+            case FORUM_DISALLOWSUBSCRIBE : // 3
+                $disallowchoice->action = null;
+                $disallowchoice->add_class('activesetting');
+                break;
         }
 
-        if ($cansubscribe) {
-            if (forum_is_subscribed($USER->id, $forumobject)) {
-                $linktext = get_string('unsubscribe', 'forum');
-            } else {
-                $linktext = get_string('subscribe', 'forum');
-            }
-            $url = new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id));
-            $forumnode->add($linktext, $url, navigation_node::TYPE_SETTING);
+    } else if ($enrolled) {
+
+        switch ($subscriptionmode) {
+            case FORUM_CHOOSESUBSCRIBE : // 0
+                $notenode = $forumnode->add(get_string('subscriptionoptional', 'forum'));
+                break;
+            case FORUM_FORCESUBSCRIBE : // 1
+                $notenode = $forumnode->add(get_string('subscriptionforced', 'forum'));
+                break;
+            case FORUM_INITIALSUBSCRIBE : // 2
+                $notenode = $forumnode->add(get_string('subscriptionauto', 'forum'));
+                break;
+            case FORUM_DISALLOWSUBSCRIBE : // 3
+                $notenode = $forumnode->add(get_string('subscriptiondisabled', 'forum'));
+                break;
         }
+    }
 
-        if (has_capability('mod/forum:viewsubscribers', $PAGE->cm->context)){
-            $url = new moodle_url('/mod/forum/subscribers.php', array('id'=>$forumobject->id));
-            $forumnode->add(get_string('showsubscribers', 'forum'), $url, navigation_node::TYPE_SETTING);
+    if ($cansubscribe) {
+        if (forum_is_subscribed($USER->id, $forumobject)) {
+            $linktext = get_string('unsubscribe', 'forum');
+        } else {
+            $linktext = get_string('subscribe', 'forum');
         }
+        $url = new moodle_url('/mod/forum/subscribe.php', array('id'=>$forumobject->id));
+        $forumnode->add($linktext, $url, navigation_node::TYPE_SETTING);
+    }
 
-        if (forum_tp_can_track_forums($forumobject)) {
-            if (forum_tp_is_tracked($forumobject)) {
-                $linktext = get_string('notrackforum', 'forum');
-            } else {
-                $linktext = get_string('trackforum', 'forum');
-            }
-            $url = new moodle_url('/mod/forum/settracking.php', array('id'=>$forumobject->id));
-            $forumnode->add($linktext, $url, navigation_node::TYPE_SETTING);
+    if (has_capability('mod/forum:viewsubscribers', $PAGE->cm->context)){
+        $url = new moodle_url('/mod/forum/subscribers.php', array('id'=>$forumobject->id));
+        $forumnode->add(get_string('showsubscribers', 'forum'), $url, navigation_node::TYPE_SETTING);
+    }
+
+    if ($enrolled && forum_tp_can_track_forums($forumobject)) {
+        if (forum_tp_is_tracked($forumobject)) {
+            $linktext = get_string('notrackforum', 'forum');
+        } else {
+            $linktext = get_string('trackforum', 'forum');
         }
+        $url = new moodle_url('/mod/forum/settracking.php', array('id'=>$forumobject->id));
+        $forumnode->add($linktext, $url, navigation_node::TYPE_SETTING);
     }
 
-    if (!empty($CFG->enablerssfeeds) && !empty($CFG->forum_enablerssfeeds) && $forumobject->rsstype && $forumobject->rssarticles) {
+    if ($enrolled && !empty($CFG->enablerssfeeds) && !empty($CFG->forum_enablerssfeeds) && $forumobject->rsstype && $forumobject->rssarticles) {
 
         if (!function_exists('rss_get_url')) {
             require_once("$CFG->libdir/rsslib.php");