]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-10888: groupings - mod/wiki - add support for groupings, use new groups functions
authormattc-catalyst <mattc-catalyst>
Thu, 23 Aug 2007 04:56:39 +0000 (04:56 +0000)
committermattc-catalyst <mattc-catalyst>
Thu, 23 Aug 2007 04:56:39 +0000 (04:56 +0000)
mod/wiki/lib.php
mod/wiki/mod_form.php
mod/wiki/view.php

index e8b12e2d294c88ec5987d1a1b56b641bbba27677..9141be053c49202bea0ab1bef512dbfa9d3c3c43 100644 (file)
@@ -177,10 +177,14 @@ function wiki_print_recent_activity($course, $isteacher, $timestart) {
 /// Return true if there was output, or false is there was none.
 
     global $CFG;
-    if (!$logs = get_records_select('log', 'time > \''.$timestart.'\' AND '.
-                                           'course = \''.$course->id.'\' AND '.
-                                           'module = \'wiki\' AND '.
-                                           'action LIKE \'edit%\' ', 'time ASC')){
+    
+    $sql = "SELECT l.*, cm.instance FROM {$CFG->prefix}log l 
+                INNER JOIN {$CFG->prefix}course_modules cm ON l.cmid = cm.id 
+            WHERE l.time > '$timestart' AND l.course = {$course->id} 
+                AND l.module = 'wiki' AND action LIKE 'edit%'
+            ORDER BY l.time ASC";
+            
+    if (!$logs = get_records_sql($sql)){
         return false;
     }
 
@@ -188,7 +192,8 @@ function wiki_print_recent_activity($course, $isteacher, $timestart) {
         //Create a temp valid module structure (course,id)
         $tempmod = new Object();
         $tempmod->course = $log->course;
-        $tempmod->id = $log->cmid;
+        $tempmod->id = $log->instance;
+        
         //Obtain the visible property from the instance
         $modvisible = instance_is_visible($log->module,$tempmod);
 
@@ -201,7 +206,7 @@ function wiki_print_recent_activity($course, $isteacher, $timestart) {
         }
     }
 
-    if ($wikis) {
+    if (isset($wikis)) {
         $content = true;
         print_headline(get_string('updatedwikipages', 'wiki').':', 3);
         foreach ($wikis as $wiki) {
@@ -374,7 +379,8 @@ function wiki_get_entries(&$wiki, $byindex=NULL) {
 /// Returns an array with all wiki entries indexed by entry id; false if there are none.
 /// If the optional $byindex is specified, returns the entries indexed by that field.
 /// Valid values for $byindex are 'student', 'group'.
-
+    global $CFG;
+    
     if ($byindex == 'student') {
         return get_records('wiki_entries', 'wikiid', $wiki->id, '',
                            'userid,id,wikiid,course,groupid,pagename,timemodified');
@@ -395,7 +401,7 @@ function wiki_get_default_entry(&$wiki, &$course, $userid=0, $groupid=0) {
 /// Creates one if it needs to and it can.
     global $USER;
     /// If there is a groupmode, get the user's group id.
-    $groupmode = groupmode($course, $wiki);
+    $groupmode = groups_get_activity_groupmode($wiki);
     // if groups mode is in use and no group supplied, use the first one found
     if ($groupmode && !$groupid) {
         if(($mygroupids=mygroupid($course->id)) && count($mygroupids)>0) {
@@ -451,7 +457,7 @@ function wiki_get_entry(&$wiki, &$course, $userid=0, $groupid=0) {
 
     case 'group':
         /// If there is a groupmode, get the user's group id.
-        $groupmode = groupmode($course, $wiki);
+        $groupmode = groups_get_activity_groupmode($wiki);
         if($groupmode) {
             if(!$groupid) {
                 if(($mygroupids=mygroupid($course->id)) && count($mygroupids)>0) {
@@ -526,16 +532,36 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
 
     $wikis = false;
 
-    $groupmode = groupmode($course, $wiki);
+    $groupmode = groups_get_activity_groupmode($wiki);
     $mygroupid = mygroupid($course->id);
     $isteacher = wiki_is_teacher($wiki, $user->id);
     $isteacheredit = wiki_is_teacheredit($wiki, $user->id);
 
+    $groupingid = null;
+    $cm = new stdClass;
+    $cm->id = $wiki->cmid;
+    $cm->groupmode = $wiki->groupmode;
+    $cm->groupingid = $wiki->groupingid;
+    $cm->groupmembersonly = $wiki->groupmembersonly;
+    if (!empty($CFG->enablegroupings) && !empty($cm->groupingid)) {
+        $groupingid = $wiki->groupingid;
+    }
+    
+    
     switch ($wiki->wtype) {
 
     case 'student':
         /// Get all the existing entries for this wiki.
         $wiki_entries = wiki_get_entries($wiki, 'student');
+        
+        if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid)) {
+            $sql = "SELECT gm.userid FROM mdl_groups_members gm " .
+                    "INNER JOIN mdl_groupings_groups gg ON gm.groupid = gg.groupid " .
+                    "WHERE gg.groupingid = $wiki->groupingid ";
+    
+            $groupingmembers = get_records_sql($sql);
+        }
+        
         if ($isteacher and (SITEID != $course->id)) {
 
             /// If the user is an editing teacher, or a non-editing teacher not assigned to a group, show all student
@@ -547,7 +573,9 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
                     $defpagename = empty($wiki->pagename) ? get_string('wikidefaultpagename', 'wiki') : $wiki->pagename;
 
                     foreach ($students as $student) {
-
+                        if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid) && empty($groupingmembers[$student->id])) {
+                            continue;
+                        }
                         /// If this student already has an entry, use its pagename.
                         if ($wiki_entries[$student->id]) {
                             $pagename = $wiki_entries[$student->id]->pagename;
@@ -566,7 +594,9 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
                 if ($students = wiki_get_students($wiki, $mygroupid)) {
                     $defpagename = empty($wiki->pagename) ? get_string('wikidefaultpagename', 'wiki') : $wiki->pagename;
                     foreach ($students as $student) {
-
+                        if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid) && empty($groupingmembers[$student->id])) {
+                            continue;
+                        }
                         /// If this student already has an entry, use its pagename.
                         if ($wiki_entries[$student->id]) {
                             $pagename = $wiki_entries[$student->id]->pagename;
@@ -585,6 +615,9 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
                 if ($students = wiki_get_students($wiki, $mygroupid)) {
                     $defpagename = empty($wiki->pagename) ? get_string('wikidefaultpagename', 'wiki') : $wiki->pagename;
                     foreach ($students as $student) {
+                        if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid) && empty($groupingmembers[$student->id])) {
+                            continue;
+                        }
                         /// If this student already has an entry, use its pagename.
                         if ($wiki_entries[$student->id]) {
                             $pagename = $wiki_entries[$student->id]->pagename;
@@ -597,10 +630,20 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
                     }
                 }
                 /// Get all student wikis created, regardless of group.
-                $sql = 'SELECT w.id, w.userid, w.pagename, u.firstname, u.lastname '
-                      .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'user u '
-                      .'    WHERE w.wikiid = '.$wiki->id.' AND u.id = w.userid '
-                      .'    ORDER BY w.id';
+                if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid)) {
+                    $sql = 'SELECT w.id, w.userid, w.pagename, u.firstname, u.lastname '
+                          .'    FROM '.$CFG->prefix.'wiki_entries w '
+                          .'    INNER JOIN '.$CFG->prefix.'user u ON w.userid = u.id '
+                          .'    INNER JOIN '.$CFG->prefix.'groups_members gm ON gm.userid = u.id '
+                          .'    INNER JOIN '.$CFG->prefix.'groupings_groups gg ON gm.groupid = gg.groupid '
+                          .'    WHERE w.wikiid = '.$wiki->id.' AND gg.groupingid =  '.$wiki->groupingid
+                          .'    ORDER BY w.id';
+                } else {
+                    $sql = 'SELECT w.id, w.userid, w.pagename, u.firstname, u.lastname '
+                          .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'user u '
+                          .'    WHERE w.wikiid = '.$wiki->id.' AND u.id = w.userid '
+                          .'    ORDER BY w.id';
+                }
                 $wiki_entries = get_records_sql($sql);
                 $wiki_entries=is_array($wiki_entries)?$wiki_entries:array();
                 foreach ($wiki_entries as $wiki_entry) {
@@ -627,14 +670,27 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
             }
 
             if ($viewall !== false) {
-
-                $sql = 'SELECT w.id, w.userid, w.pagename, u.firstname, u.lastname '
-                      .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'user u '
-                      .'    WHERE w.wikiid = '.$wiki->id.' AND u.id = w.userid '
-                      .'    ORDER BY w.id';
+                if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid)) {
+                    $sql = 'SELECT w.id, w.userid, w.pagename, u.firstname, u.lastname '
+                          .'    FROM '.$CFG->prefix.'wiki_entries w '
+                          .'    INNER JOIN '.$CFG->prefix.'user u ON w.userid = u.id '
+                          .'    INNER JOIN '.$CFG->prefix.'groups_members gm ON gm.userid = u.id '
+                          .'    INNER JOIN '.$CFG->prefix.'groupings_groups gg ON gm.groupid = gg.groupid '
+                          .'    WHERE w.wikiid = '.$wiki->id.' AND gg.groupingid =  '.$wiki->groupingid
+                          .'    ORDER BY w.id';
+                } else {
+                    $sql = 'SELECT w.id, w.userid, w.pagename, u.firstname, u.lastname '
+                          .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'user u '
+                          .'    WHERE w.wikiid = '.$wiki->id.' AND u.id = w.userid '
+                          .'    ORDER BY w.id';
+                }
                 $wiki_entries = get_records_sql($sql);
                 $wiki_entries=is_array($wiki_entries)?$wiki_entries:array();
                 foreach ($wiki_entries as $wiki_entry) {
+                    if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid) && empty($groupingmembers[$wiki_entry->userid])) {
+                        continue;
+                    }
+                
                     if (($viewall === true) or groups_is_member($viewall, $wiki_entry->userid)) {
                         $key = 'view.php?id='.$id.'&userid='.$wiki_entry->userid.'&page='.$wiki_entry->pagename;
                         $wikis[$key] = fullname($wiki_entry).':'.$wiki_entry->pagename;
@@ -655,9 +711,9 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
 
         /// Get all the existing entries for this wiki.
         $wiki_entries = wiki_get_entries($wiki, 'group');
-
+        
         if ($groupmode and ($isteacheredit or ($isteacher and !$mygroupid))) {
-            if ($groups = groups_get_all_groups($course->id)) {
+            if ($groups = groups_get_all_groups($course->id, null, $groupingid)) {
                 $defpagename = empty($wiki->pagename) ? get_string('wikidefaultpagename', 'wiki') : $wiki->pagename;
                 foreach ($groups as $group) {
 
@@ -676,7 +732,7 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
         }
         //if a studnet with multiple groups in SPG
         else if ($groupmode == SEPARATEGROUPS){
-            if ($groups = groups_get_all_groups($course->id, $user->id)){
+            if ($groups = groups_get_all_groups($course->id, $user->id, $groupingid)){
 
                 $defpagename = empty($wiki->pagename) ? get_string('wikidefaultpagename', 'wiki') : $wiki->pagename;
                 foreach ($groups as $group) {
@@ -696,10 +752,19 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
         }
         /// A user can see other group wikis if there are visible groups.
         else if ($groupmode == VISIBLEGROUPS) {
-            $sql = 'SELECT w.id, w.groupid, w.pagename, g.name as gname '
-                  .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'groups g '
-                  .'    WHERE w.wikiid = '.$wiki->id.' AND g.id = w.groupid '
-                  .'    ORDER BY w.groupid';
+            if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid)) {
+                $sql = 'SELECT w.id, w.groupid, w.pagename, g.name as gname '
+                      .'    FROM '.$CFG->prefix.'wiki_entries w '
+                      .'    INNER JOIN '.$CFG->prefix.'groups g ON g.id = w.groupid '
+                      .'    INNER JOIN '.$CFG->prefix.'groupings_groups gg ON g.id = gg.groupid '
+                      .'    WHERE w.wikiid = '.$wiki->id.' AND gg.groupingid =  '.$wiki->groupingid
+                      .'    ORDER BY w.groupid';
+            } else {
+                $sql = 'SELECT w.id, w.groupid, w.pagename, g.name as gname '
+                      .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'groups g '
+                      .'    WHERE w.wikiid = '.$wiki->id.' AND g.id = w.groupid '
+                      .'    ORDER BY w.groupid';
+            }
             $wiki_entries = get_records_sql($sql);
             $wiki_entries=is_array($wiki_entries)?$wiki_entries:array();
             foreach ($wiki_entries as $wiki_entry) {
@@ -717,9 +782,8 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
             /// If the user is an editing teacher, or a non-editing teacher not assigned to a group, show all
             /// teacher wikis, regardless of creation.
             if ($groupmode and ($isteacheredit or ($isteacher and !$mygroupid))) {
-                if ($groups = groups_get_all_groups($course->id)) {
+                if ($groups = groups_get_all_groups($course->id, null, $groupingid)) {
                     $defpagename = empty($wiki->pagename) ? get_string('wikidefaultpagename', 'wiki') : $wiki->pagename;
-
                     foreach ($groups as $group) {
                         /// If this group already has an entry, use its pagename.
                         if ($wiki_entries[$group->id]) {
@@ -736,10 +800,19 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
             }
             /// A teacher can see all other group teacher wikis.
             else if ($groupmode) {
+            if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid)) {
+                $sql = 'SELECT w.id, w.groupid, w.pagename, g.name as gname '
+                      .'    FROM '.$CFG->prefix.'wiki_entries w '
+                      .'    INNER JOIN '.$CFG->prefix.'groups g ON g.id = w.groupid '
+                      .'    INNER JOIN '.$CFG->prefix.'groupings_groups gg ON g.id = gg.groupid '
+                      .'    WHERE w.wikiid = '.$wiki->id.' AND gg.groupingid =  '.$wiki->groupingid
+                      .'    ORDER BY w.groupid';
+            } else {
                 $sql = 'SELECT w.id, w.groupid, w.pagename, g.name as gname '
                       .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'groups g '
                       .'    WHERE w.wikiid = '.$wiki->id.' AND g.id = w.groupid '
                       .'    ORDER BY w.groupid';
+            }
                 $wiki_entries = get_records_sql($sql);
                 $wiki_entries=is_array($wiki_entries)?$wiki_entries:array();
                 foreach ($wiki_entries as $wiki_entry) {
@@ -764,10 +837,19 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
                 $viewall = false;
             }
             if ($viewall !== false) {
-                $sql = 'SELECT w.id, w.groupid, w.pagename, g.name as gname '
-                      .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'groups g '
-                      .'    WHERE w.wikiid = '.$wiki->id.' AND g.id = w.groupid '
-                      .'    ORDER BY w.groupid';
+                if (!empty($CFG->enablegroupings) && !empty($wiki->groupingid)) {
+                    $sql = 'SELECT w.id, w.groupid, w.pagename, g.name as gname '
+                          .'    FROM '.$CFG->prefix.'wiki_entries w '
+                          .'    INNER JOIN '.$CFG->prefix.'groups g ON g.id = w.groupid '
+                          .'    INNER JOIN '.$CFG->prefix.'groupings_groups gg ON g.id = gg.groupid '
+                          .'    WHERE w.wikiid = '.$wiki->id.' AND gg.groupingid =  '.$wiki->groupingid
+                          .'    ORDER BY w.groupid';
+                } else {
+                    $sql = 'SELECT w.id, w.groupid, w.pagename, g.name as gname '
+                          .'    FROM '.$CFG->prefix.'wiki_entries w, '.$CFG->prefix.'groups g '
+                          .'    WHERE w.wikiid = '.$wiki->id.' AND g.id = w.groupid '
+                          .'    ORDER BY w.groupid';
+                }
                 $wiki_entries = get_records_sql($sql);
                 $wiki_entries=is_array($wiki_entries)?$wiki_entries:array();
 
@@ -785,7 +867,7 @@ function wiki_get_other_wikis(&$wiki, &$user, &$course, $currentid=0) {
         }
         break;
     }
-
+    
     return $wikis;
 }
 
@@ -814,7 +896,7 @@ function wiki_add_entry(&$wiki, &$course, $userid=0, $groupid=0) {
 
     case 'group':
         /// Get the groupmode. It's been added to the wiki object.
-        $groupmode = groupmode($course, $wiki);
+        $groupmode = groups_get_activity_groupmode($wiki);
 
         ///give the first groupid by default and try
         $mygroups = mygroupid($course->id);
@@ -836,7 +918,7 @@ function wiki_add_entry(&$wiki, &$course, $userid=0, $groupid=0) {
 
     case 'teacher':
         /// Get the groupmode. It's been added to the wiki object.
-        $groupmode = groupmode($course, $wiki);
+        $groupmode = groups_get_activity_groupmode($wiki);
 
         /// If there is a groupmode, get the user's group id.
         if ($groupmode and $groupid == 0) {
@@ -860,7 +942,7 @@ function wiki_can_add_entry(&$wiki, &$user, &$course, $userid=0, $groupid=0) {
 /// Returns true or false if the user can add a wiki entry for this wiki.
 
     /// Get the groupmode. It's been added to the wiki object.
-    $groupmode = groupmode($course, $wiki);
+    $groupmode = groups_get_activity_groupmode($wiki);
     $mygroupid = mygroupid($course->id);
 
     switch ($wiki->wtype) {
@@ -928,7 +1010,7 @@ function wiki_can_edit_entry(&$wiki_entry, &$wiki, &$user, &$course) {
 /// Returns true or false if the user can edit this wiki entry.
 
     $can_edit = false;
-    $groupmode = groupmode($course, $wiki);
+    $groupmode = groups_get_activity_groupmode($wiki);
     $mygroupid = mygroupid($course->id);
 
     /// Editing teacher's and admins can edit all wikis, non-editing teachers can edit wikis in their groups,
@@ -978,7 +1060,7 @@ function wiki_user_can_access_student_wiki(&$wiki, $userid, &$course) {
     global $USER;
 
     /// Get the groupmode. It's been added to the wiki object.
-    $groupmode = groupmode($course, $wiki);
+    $groupmode = groups_get_activity_groupmode($wiki);
     $usersgroup = mygroupid($course->id);
     $isteacher = wiki_is_teacher($wiki, $USER->id);
 
@@ -1008,7 +1090,7 @@ function wiki_user_can_access_group_wiki(&$wiki, $groupid, &$course) {
     global $USER;
 
     /// Get the groupmode. It's been added to the wiki object.
-    $groupmode = groupmode($course, $wiki);
+    $groupmode = groups_get_activity_groupmode($wiki);
     $usersgroup = mygroupid($course->id);
     $isteacher = wiki_is_teacher($wiki, $USER->id);
 
@@ -1034,7 +1116,7 @@ function wiki_user_can_access_teacher_wiki(&$wiki, $groupid, &$course) {
     global $USER;
 
     /// Get the groupmode. It's been added to the wiki object.
-    $groupmode = groupmode($course, $wiki);
+    $groupmode = groups_get_activity_groupmode($wiki);
 
     /// A user can access a teacher wiki, if:
     ///     - group mode is NOGROUPS,
index e2ecb9ca83e72dafc296f64703f4c36f307a068a..68290ec538d863185c822e31cc2e6a36129f55ff 100644 (file)
@@ -87,7 +87,11 @@ class mod_wiki_mod_form extends moodleform_mod {
         $mform->setAdvanced('initialcontent');
 
 //-------------------------------------------------------------------------------
-        $this->standard_coursemodule_elements();
+        $features = new stdClass;
+        $features->groups = true;
+        $features->groupings = true;
+        $features->groupmembersonly = true;
+        $this->standard_coursemodule_elements($features);
 //-------------------------------------------------------------------------------
 // buttons
         $this->add_action_buttons();
index 36852ec3f521b40bff2728b808a12d4003021b8f..cb922e7a3c7160bb48628d96dcdd6f9a8d04042a 100644 (file)
 
     require_course_login($course, true, $cm);
     
-    /// Add the course module 'groupmode' to the wiki object, for easy access.
+    /// Add the course module info to the wiki object, for easy access.
     $wiki->groupmode = $cm->groupmode;
-
+    $wiki->groupingid = $cm->groupingid;
+    $wiki->groupmembersonly = $cm->groupmembersonly;
+    $wiki->cmid = $cm->id;
+    
     /// Default format:
     $moodle_format=FORMAT_MOODLE;