From 27978302ade271eb0068e5dd37b98409c9dbb176 Mon Sep 17 00:00:00 2001 From: mattc-catalyst Date: Thu, 23 Aug 2007 04:56:39 +0000 Subject: [PATCH] MDL-10888: groupings - mod/wiki - add support for groupings, use new groups functions --- mod/wiki/lib.php | 166 +++++++++++++++++++++++++++++++----------- mod/wiki/mod_form.php | 6 +- mod/wiki/view.php | 7 +- 3 files changed, 134 insertions(+), 45 deletions(-) diff --git a/mod/wiki/lib.php b/mod/wiki/lib.php index e8b12e2d29..9141be053c 100644 --- a/mod/wiki/lib.php +++ b/mod/wiki/lib.php @@ -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, diff --git a/mod/wiki/mod_form.php b/mod/wiki/mod_form.php index e2ecb9ca83..68290ec538 100644 --- a/mod/wiki/mod_form.php +++ b/mod/wiki/mod_form.php @@ -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(); diff --git a/mod/wiki/view.php b/mod/wiki/view.php index 36852ec3f5..cb922e7a3c 100644 --- a/mod/wiki/view.php +++ b/mod/wiki/view.php @@ -65,9 +65,12 @@ 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; -- 2.39.5