From: nfreear Date: Thu, 22 Feb 2007 15:27:30 +0000 (+0000) Subject: Fixes for Bug MDL-8617 "Implement groupings & course modules..." X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=429e531e17bd58545a7d5f397b08f1b2fe127f0d;p=moodle.git Fixes for Bug MDL-8617 "Implement groupings & course modules..." --- diff --git a/group/db/dbmodulelib.php b/group/db/dbmodulelib.php index 5ad604f87d..2a97a7eeb8 100644 --- a/group/db/dbmodulelib.php +++ b/group/db/dbmodulelib.php @@ -18,7 +18,7 @@ * @param int $cmid The id of the module instance. * @return int The grouping id (or false if it is null or an error occurred) */ -function groups_db_m_get_groupingid($cmid) { +function groups___db_m_get_groupingid($cmid) { // @@@ Check nulls are turned into false $query = get_record('course_modules', 'groupingid', $userid); return $query; diff --git a/group/lib.php b/group/lib.php index d01b0217db..9cd645db46 100644 --- a/group/lib.php +++ b/group/lib.php @@ -14,8 +14,8 @@ require_once($CFG->dirroot.'/group/lib/groupinglib.php'); require_once($CFG->dirroot.'/group/lib/utillib.php'); -require_once($CFG->dirroot.'/group/lib/automaticgroupinglib.php'); +require_once($CFG->dirroot.'/group/lib/modulelib.php'); require_once($CFG->dirroot.'/group/lib/legacylib.php'); -?> +?> \ No newline at end of file diff --git a/group/lib/groupinglib.php b/group/lib/groupinglib.php index f735ec1640..13cf0e93f7 100644 --- a/group/lib/groupinglib.php +++ b/group/lib/groupinglib.php @@ -136,7 +136,7 @@ function groups_get_groups_for_user_in_grouping($userid, $groupingid) { $records = get_records_sql($sql); //print_object($records); - return groups_groups_to_groupids($records); //TODO:check. + return groups_groups_to_groupids($records); } /** diff --git a/group/lib/legacylib.php b/group/lib/legacylib.php index 514c453e95..5bdaec4889 100644 --- a/group/lib/legacylib.php +++ b/group/lib/legacylib.php @@ -156,7 +156,7 @@ function mygroupid($courseid) { */ function groupmode($course, $cm=null) { - if ($cm and !$course->groupmodeforce) { + if (is_object($cm) && isset($cm->groupmode) && !isset($course->groupmodeforce)) { return $cm->groupmode; } return $course->groupmode; diff --git a/group/lib/modulelib.php b/group/lib/modulelib.php index 22ec458748..1634a2b0bc 100644 --- a/group/lib/modulelib.php +++ b/group/lib/modulelib.php @@ -1,9 +1,5 @@ course) || !groupmode($cm->course, $cm)) { + return false; + } + elseif (GROUP_ANY_GROUPING == $groupingid) { + return groups_get_groups_for_user($userid, $cm->course); + } + return groups_get_groups_for_user_in_grouping($userid, $groupingid); +} + + +/** + * Get the ID of the first group for the global $USER in the course module. + * Replaces legacylib function 'mygroupid'. + * @uses $USER + * @param $cm A course module object. + * @return int A single group ID for this user. + */ +function groups_m_get_my_group($cm) { + global $USER; + $groupids = groups_m_get_groups_for_user($cm, $USER->id); + if (!$groupids || count($groupids) == 0) { + return 0; + } + return array_shift($groupids); +} + /** * Indicates if a specified user has a particular type of permission for a @@ -187,9 +201,17 @@ function groups_m_get_groups_for_user($cmid, $permissiontype, $userid) { * @return boolean True if the user has the specified permission type, false * otherwise or if an error occurred. */ - function groups_m_has_permission($cmid, $groupid, $permissiontype, $userid) { - $groupingid = groups_get_grouping_for_coursemodule($coursemoduleid); - $isstudent = isstudent($courseid, $userid); + function groups_m_has_permission($cm, $groupid, $permissiontype, $userid = null) { + if (!$userid) { + global $USER; + $userid = $USER->id; + } + $groupingid = groups_get_grouping_for_coursemodule($cm); + if (!$groupingid || !is_object($cm) || !isset($cm->course)) { + return false; + } + $courseid = $cm->course; + $isstudent = isstudent($courseid, $userid); $isteacher = isteacher($courseid, $userid); $groupmember = groups_is_member($groupid, $userid); $memberofsomegroup = groups_is_member_of_some_group_in_grouping($userid, $groupingid); @@ -264,7 +286,7 @@ function groups_m_get_members_with_permission($cmid, $groupid, $permissiontype) { // Get all the users as $userid $validuserids = array(); - foreach($userids as $userid) { + foreach($validuserids as $userid) { $haspermission = groups_m_has_permission($cmid, $groupid, $permissiontype, $userid); if ($haspermission) { @@ -313,88 +335,7 @@ function groups_m_get_members($cmid, $groupid) { } else { // Check if each user is enrolled on the course @@@ TO DO } -} - -/** - * Indicates if a user is a member of a particular group. In general you should - * use groups_m_has_permission, however this function is provided for - * circumstances where this function isn't sufficient for some reason. - * @param int $groupid The id of the group - * @param int $userid The id of the user - * @return boolean True if the user is a member of the group, false otherwise - */ -function groups_m_is_member($groupid, $userid) { - return groups_is_member($groupid, $userid); -} - -/** - * Determines if a user has a particular permission type for a particular group. Permissions - * are set at grouping level and are set via the grouping settings. This is the function - * to check, if somebody can't access something that you think they ought to be able to! - * This is for the current user. What about for general user? - * @param int $courseid The id of the course - * @param int $groupid The id of the group - * @param string $permissiontype The permission type: 'view', 'studentcontribute', - * 'teacherview', 'teachercontribute', 'viewmembers', 'contribute', 'all' - */ -function groups_m_has_permission($courseid, $groupid, $permissiontype) { - $userid = $USER->id; - $groupingid = groups_get_grouping_for_coursemodule($coursemoduleid); - $isstudent = isstudent($courseid, $userid); - $isteacher = isteacher($courseid, $userid); - $groupmember = groups_is_member($groupid, $userid); - $memberofsomegroup = groups_is_member_of_some_group_in_grouping($userid, $groupingid); - - $groupingsettings = groups_get_grouping_settings($groupingid); - $viewowngroup = $groupingsettings->viewowngroup; - $viewallgroupsmembers = $groupingsettings->viewallgroupmembers; - $viewallgroupsactivities = $groupingsettings->viewallgroupsactivities; - $teachersgroupsmark = $groupingsettings->teachersgroupsmark; - $teachersgroupsview = $groupingsettings->teachersgroupsview; - $teachersgroupmark = $groupingsettings->teachersgroupmark; - $teachersgroupview = $groupingsettings->teachersgroupview; - $teachersoverride = $groupingsettings->teachersoverride; - - $permission = false; - - switch ($permissiontype) { - case 'view': - if (($isstudent and $groupmember) or - ($isteacher and $groupmember) or - ($isstudent and $viewallgroupsactivities) or - ($isteacher and !$teachersgroupview) or - ($isteacher and !$memberofsomegroup and $teachersoverride)) { - $permission = true; - } - break; - - case 'studentcontribute': - if (($isstudent and $groupmember) or - ($isteacher and $groupmember) or - ($isteacher and !$memberofsomegroup and $teachersoverride)) { - $permission = true; - } - break; - case 'teachermark': - if (($isteacher and $groupmember) or - ($isteacher and !$teachersgroupmark) or - ($isteacher and !$memberofsomegroup and $teachersoverride)) { - $permission = true; - } - break; - - case 'viewmembers': - if (($isstudent and $groupmember and $viewowngroup) or - ($isstudent and $viewallgroupsmembers) or - ($isteacher and $groupmember) or - ($isteacher and !$teachersgroupview) or - ($isteacher and !$memberofsomegroup and $teachersoverride) or - $isteacheredit) { - $permission = true; - } - break; - } - return $permission; + return $memberids; } ?> \ No newline at end of file diff --git a/group/lib/utillib.php b/group/lib/utillib.php index 300dfa0528..19dc2c3c0a 100644 --- a/group/lib/utillib.php +++ b/group/lib/utillib.php @@ -40,6 +40,8 @@ function groups_count_groups_in_grouping($groupingid, $courseid) { if (GROUP_NOT_IN_GROUPING == $groupingid) { $groupids = groups_get_groups_not_in_any_grouping($courseid); return count($groupids); + } elseif (GROUP_ANY_GROUPING == $groupingid) { + return count_records('groups_courses_groups', 'courseid', $courseid); } else { return count_records('groups_groupings_groups', 'groupingid ', $groupingid); } @@ -154,7 +156,12 @@ function groups_groups_to_groupids($groups) { } $groupids = array(); foreach ($groups as $group) { - array_push($groupids, $group->id); + if (isset($group->id)) { + array_push($groupids, $group->id); + } else { + //Warn if there's no "groupid" member. + array_push($groupids, $group->groupid); + } } return $groupids; }