]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-10888 groupmembers only checks in require_login()
authorskodak <skodak>
Fri, 17 Aug 2007 12:15:32 +0000 (12:15 +0000)
committerskodak <skodak>
Fri, 17 Aug 2007 12:15:32 +0000 (12:15 +0000)
lang/en_utf8/group.php
lib/grouplib.php
lib/moodlelib.php
mod/assignment/view.php

index d17d98cf66f2829f98348f1e9d5748b21550783f..e3cc4bf03ad47a6b0411aa71e338ebf0172f88ac 100644 (file)
@@ -99,6 +99,7 @@ $string['groupsnone'] = 'No groups';
 $string['groupsseparate'] = 'Separate groups';
 $string['groupsvisible'] = 'Visible groups';
 $string['groupmembersonly'] = 'Available for group members only';
+$string['groupmembersonlyerror'] = 'Sorry, you must be member of at least one group that is used in this activity.';
 
 $string['groupaddedsuccesfully'] = 'Group $a added succesfully';
 $string['nopermissionforcreation'] = 'Can\'t create group \"$a\" as you dont have the required permissions';
index 8c7de05963cd23cc7b36f3519e5020f28b38209e..daf6d1fd7cec4b6f8f9a18ec83dd5a16e66b62b7 100644 (file)
@@ -108,6 +108,35 @@ function groups_is_member($groupid, $userid=null) {
     return record_exists('groups_members', 'groupid', $groupid, 'userid', $userid);
 }
 
+/**
+ * Determines if current or specified is member of any active group in activity
+ * @param object $cm coruse module object
+ * @param int $userid id of user, null menas $USER->id
+ * @return booelan true if user member of at least one group used in activity
+ */
+function groups_has_membership($cm, $userid=null) {
+    global $CFG, $USER;
+
+    if (empty($userid)) {
+        $userid = $USER->id;
+    }
+
+    if ($cm->groupingid) {
+        // find out if member of any group in selected activity grouping
+        $sql = "SELECT 'x'
+                  FROM {$CFG->prefix}groups_members gm, {$CFG->prefix}groupings_groups gg
+                 WHERE gm.userid = $userid AND gm.groupid = gg.groupid AND gg.groupingid = {$cm->groupingid}";
+
+    } else {
+        // no grouping used - check all groups in course
+        $sql = "SELECT 'x'
+                  FROM {$CFG->prefix}groups_members gm, {$CFG->prefix}groups g
+                 WHERE gm.userid = $userid AND gm.groupid = g.id AND g.courseid = {$cm->course}";
+    }
+
+    return record_exists_sql($sql);
+}
+
 /**
  * Returns the users in the specified group.
  * @param int $groupid The groupid to get the users for
index e349806c9d0260eb914c1092f20c7116466cb938..1c66f077815babbec5860868d2c0c229a8be6eb8 100644 (file)
@@ -1707,18 +1707,24 @@ function require_login($courseorid=0, $autologinguest=true, $cm=null) {
     }
 
 /// If the site is currently under maintenance, then print a message
-    if (!has_capability('moodle/site:config',get_context_instance(CONTEXT_SYSTEM, SITEID))) {
+    if (!has_capability('moodle/site:config',get_context_instance(CONTEXT_SYSTEM))) {
         if (file_exists($CFG->dataroot.'/'.SITEID.'/maintenance.html')) {
             print_maintenance_message();
             exit;
         }
     }
 
+/// groupmembersonly access control
+    if (!empty($CFG->enablegroupings) and $cm and $cm->groupmembersonly and !has_capability('moodle/site:accessallgroups', get_context_instance(CONTEXT_MODULE, $cm->id))) {
+        if (isguestuser() or !groups_has_membership($cm)) {
+            error(get_string('groupmembersonlyerror', 'group'), $CFG->wwwroot.'/course/view.php?id='.$cm->course);
+        }
+    }
 
     if ($COURSE->id == SITEID) {
 /// We can eliminate hidden site activities straight away
         if (!empty($cm) && !$cm->visible and !has_capability('moodle/course:viewhiddenactivities',
-                                                      get_context_instance(CONTEXT_SYSTEM, SITEID))) {
+                                                      get_context_instance(CONTEXT_SYSTEM))) {
             redirect($CFG->wwwroot, get_string('activityiscurrentlyhidden'));
         }
         return;
index d38dcb8e34c70b02eb01579fa6b6dc42a0103360..495a719a14ce4db73d2823de3317d37444f2bf0a 100644 (file)
@@ -30,7 +30,7 @@
         }
     }
 
-    require_login($course->id);
+    require_login($course, true, $cm);
 
     require ("$CFG->dirroot/mod/assignment/type/$assignment->assignmenttype/assignment.class.php");
     $assignmentclass = "assignment_$assignment->assignmenttype";