MDL-27037, wiki does not support visiblegroups functionality
authorMayank Gupta <mayankgupta2005@gmail.com>
Fri, 8 Apr 2011 18:10:36 +0000 (23:40 +0530)
committerAparup Banerjee <aparup@moodle.com>
Fri, 11 Nov 2011 05:28:41 +0000 (13:28 +0800)
mod/wiki/locallib.php
mod/wiki/pagelib.php
mod/wiki/view.php

index 12e939a..db4bf8c 100644 (file)
@@ -899,7 +899,7 @@ function wiki_user_can_edit($subwiki) {
             // There is one wiki per group.
             //
             // Only members of subwiki group could edit that wiki
-            if ($subwiki->groupid == groups_get_activity_group($cm)) {
+            if (groups_is_member($subwiki->groupid)) {
                 // Only edit capability needed
                 return has_capability('mod/wiki:editpage', $context);
             } else { // User is not part of that group
index 4e19f57..0f6da3c 100644 (file)
@@ -155,6 +155,7 @@ abstract class page_wiki {
      */
     protected function setup_tabs($options = array()) {
         global $CFG, $PAGE;
+        $groupmode = groups_get_activity_groupmode($PAGE->cm);
 
         if (empty($CFG->usecomments) || !has_capability('mod/wiki:viewcomment', $PAGE->context)){
             unset($this->tabs['comments']);
@@ -164,6 +165,19 @@ abstract class page_wiki {
             unset($this->tabs['edit']);
         }
 
+        if ($groupmode and $groupmode == VISIBLEGROUPS) {
+            $currentgroup = groups_get_activity_group($PAGE->cm);
+            $manage = has_capability('mod/wiki:managewiki', $PAGE->cm->context);
+            $edit = has_capability('mod/wiki:editpage', $PAGE->context);
+            if (!$manage and !($edit and groups_is_member($currentgroup))) { 
+                unset($this->tabs['edit']);
+            }
+        } else {
+            if (!has_capability('mod/wiki:editpage', $PAGE->context)) {
+                unset($this->tabs['edit']);
+            }
+        }
+
 
         if (empty($options)) {
             $this->tabs_options = array('activetab' => substr(get_class($this), 10));
index ae1c4d5..c29bfec 100644 (file)
@@ -189,6 +189,19 @@ if ($id) {
 
     // Getting subwiki instance. If it does not exists, redirect to create page
     if (!$subwiki = wiki_get_subwiki_by_group($wiki->id, $gid, $uid)) {
+        $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+
+        $modeanduser = $wiki->wikimode == 'individual' && $uid != $USER->id;
+        $modeandgroupmember = $wiki->wikimode == 'collaborative' && !groups_is_member($gid);
+
+        $manage = has_capability('mod/wiki:managewiki', $context);
+        $edit = has_capability('mod/wiki:editpage', $context);
+        $manageandedit = $manage && $edit;
+
+        if ($groupmode == VISIBLEGROUPS and ($modeanduser || $modeandgroupmember) and !$manageandedit) {
+            print_error('nocontent','wiki');
+        }
+
         $params = array('wid' => $wiki->id, 'gid' => $gid, 'uid' => $uid, 'title' => $title);
         $url = new moodle_url('/mod/wiki/create.php', $params);
         redirect($url);