//Add this to the SQL to show only group users
if ($currentgroup !== NULL) {
- $groupmembers = ', '.groups_members_from_sql(); //TODO: ", {$CFG->prefix}groups_members gm ";
- $groupselect = ' AND '.groups_members_where_sql($currentgroup, 'u.id'); //" AND u.id = gm.userid AND gm.groupid = '$currentgroup'";
+ $groupmembers = ", {$CFG->prefix}groups_members gm ";
+ $groupselect = " AND u.id = gm.userid AND gm.groupid = '$currentgroup'";
}
if ($COURSE->id == SITEID) { // Site-level
case 'group':
$SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql
- .groups_members_from_sql().', '.$CFG->prefix.'user u
- WHERE '.groups_members_where_sql($filterselect, 'p.userid').'
- AND u.id = p.userid
- AND u.deleted = 0
- '.$permissionsql.$typesql;
-
- /*'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql
- .$CFG->prefix.'groups_members m, '.$CFG->prefix.'user u
- WHERE p.userid = m.userid '.$tagquerysql.'
- AND u.id = p.userid
- AND m.groupid = '.$filterselect.'
- AND u.deleted = 0
- AND '.$permissionsql.$typesql;
- '.$permissionsql;
- */
+ .$CFG->prefix.'groups_members gm, '.$CFG->prefix.'user u
+ WHERE p.userid =g m.userid AND u.id = p.userid
+ AND gm.groupid = '.$filterselect.'
+ AND u.deleted = 0
+ '.$permissionsql.$typesql;
break;
case 'user':
*/
-/**
- * Returns the groupid of a group with the name specified for the course
- * specified. If there's more than one with the name specified it returns the
- * first one it finds it the database, so you need to be careful how you use it!
- * This is needed to support upload of users into the database
- * @param int $courseid The id of the course
- * @param string $groupname
- * @return int $groupid
- */
-function groups_get_group_by_name($courseid, $groupname) {
- //uploaduser.php, get_record("groups","courseid",$course[$i]->id,"name",$addgroup[$i])
- $groupids = groups_db_get_groups($courseid);
- if (! $groupids) {
- return false;
- }
- foreach ($groupids as $id) {
- if (groups_get_group_name($id) == $groupname) {
- return $id;
- }
- }
- return false;
-}
+
/**
* Returns an array of group objects that the user is a member of
if ($userid) {
$groupids = groups_get_groups_for_user($userid, $courseid);
} else {
- $groupids = groups_get_groups($courseid);
+ $groupids = array_keys(groups_get_all_groups($courseid));
}
return groups_groupids_to_groups($groupids, $courseid, $alldata=true);
}
-function oldgroups_print_user_group_info($currentgroup, $isseparategroups, $courseid) {
- global $CFG;
- $context = get_context_instance(CONTEXT_COURSE, $courseid);
-
- if ($currentgroup and (!$isseparategroups or has_capability('moodle/site:accessallgroups', $context))) { /// Display info about the group
- if ($group = get_record('groups', 'id', $currentgroup)) {
- if (!empty($group->description) or (!empty($group->picture) and empty($group->hidepicture))) {
- echo '<table class="groupinfobox"><tr><td class="left side picture">';
- print_group_picture($group, $course->id, true, false, false);
- echo '</td><td class="content">';
- echo '<h3>'.$group->name;
- if (has_capability('moodle/site:accessallgroups', $context)) {
- echo ' <a title="'.get_string('editgroupprofile').'" href="../course/groups.php?id='.$course->id.'&group='.$group->id.'">';
- echo '<img src="'.$CFG->pixpath.'/t/edit.gif" alt="" border="0">';
- echo '</a>';
- }
- echo '</h3>';
- echo format_text($group->description);
- echo '</td></tr></table>';
- }
- }
- }
-}
-
-/**
- * Get the group object, including the course ID by default.
- * @param groupid ID of the group.
- * @param getcourse (default true), include the course ID in the return.
- * @return group object, optionally including 'courseid'.
- */
-function groups_get_group($groupid, $getcourse=true) {
- $group = groups_db_get_group_settings($groupid);
- if ($group && $getcourse) {
- $group->courseid = groups_get_course($groupid);
- }
- return $group;
-}
-
-
/**
* Get an array of groups, as id => name.
* Replaces, get_records_menu("groups", "courseid", $course->id, "name ASC", "id,name")
//TODO:check. Remove group DB dependencies.
return get_records_sql("SELECT u.id, u.firstname, u.lastname, u.email
FROM {$CFG->prefix}user u,
- ".groups_members_from_sql()."
- WHERE $select AND ".groups_members_where_sql($groupid, 'u.id')."
+ {$CFG->prefix}groups_members gm
+ WHERE $select AND gm.groupid = '$groupid' AND gm.userid = u.id
AND ($fullname $LIKE '%$searchtext%' OR u.email $LIKE '%$searchtext%')
$except $order");
} else {
use_html_editor($name);
}
+/** various deprecated groups function **/
+
+
+/**
+ * Returns the table in which group members are stored, with a prefix 'gm'.
+ * @return SQL string.
+ */
+function groups_members_from_sql() {
+ global $CFG;
+ return " {$CFG->prefix}groups_members gm ";
+}
+
+/**
+ * Returns a join testing user.id against member's user ID.
+ * Relies on 'user' table being included as 'user u'.
+ * Used in Quiz module reports.
+ * @param group ID, optional to include a test for this in the SQL.
+ * @return SQL string.
+ */
+function groups_members_join_sql($groupid=false) {
+ $sql = ' JOIN '.groups_members_from_sql().' ON u.id = gm.userid ';
+ if ($groupid) {
+ $sql = "AND gm.groupid = '$groupid' ";
+ }
+ return $sql;
+ //return ' INNER JOIN '.$CFG->prefix.'role_assignments ra ON u.id=ra.userid'.
+ // ' INNER JOIN '.$CFG->prefix.'context c ON ra.contextid=c.id AND c.contextlevel='.CONTEXT_GROUP.' AND c.instanceid='.$groupid;
+}
+
+/**
+ * Returns SQL for a WHERE clause testing the group ID.
+ * Optionally test the member's ID against another table's user ID column.
+ * @param groupid
+ * @param userid_sql Optional user ID column selector, example "mdl_user.id", or false.
+ * @return SQL string.
+ */
+function groups_members_where_sql($groupid, $userid_sql=false) {
+ $sql = " gm.groupid = '$groupid' ";
+ if ($userid_sql) {
+ $sql .= "AND $userid_sql = gm.userid ";
+ }
+ return $sql;
+}
?>
if ($groupid) { /// How many in a particular group?
return count_records_sql("SELECT COUNT(DISTINCT gm.userid, gm.groupid)
FROM {$CFG->prefix}assignment_submissions a,
- ".groups_members_from_sql()."
- WHERE a.assignment = $assignment->id
+ {$CFG->prefix}groups_members g
+ WHERE a.assignment = $assignment->id
AND a.timemodified > 0
- AND ".groups_members_where_sql($groupid, 'a.userid'));
+ AND g.groupid = '$groupid'
+ AND a.userid = g.userid ");
} else {
$cm = get_coursemodule_from_instance('assignment', $assignment->id);
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
}
return get_records_sql("SELECT s.*, AVG(a.grade) AS grade FROM
- ".groups_members_from_sql().", {$CFG->prefix}exercise_submissions s,
+ {$CFG->prefix}groups_members g, {$CFG->prefix}exercise_submissions s,
{$CFG->prefix}exercise_assessments a
- WHERE $select ". groups_members_where_sql($groupid)."
+ WHERE $select g.groupid = $groupid
AND s.exerciseid = $exercise->id
AND a.submissionid = s.id
GROUP BY s.id
}
return get_records_sql("SELECT s.* FROM {$CFG->prefix}user n,
- ".groups_members_from_sql().", {$CFG->prefix}exercise_submissions s
- WHERE $select ". groups_members_where_sql()."
+ {$CFG->prefix}groups_members g, {$CFG->prefix}exercise_submissions s
+ WHERE $select g.groupid = $groupid
AND s.exerciseid = $exercise->id
ORDER BY $order");
if ($groupid) {
$stats = get_record_sql("SELECT COUNT(*) as count, AVG(gradinggrade) AS mean,
STDDEV(gradinggrade) AS stddev, MIN(gradinggrade) AS min, MAX(gradinggrade) AS max
- FROM ".groups_members_from_sql().", {$CFG->prefix}exercise_assessments a
- WHERE ".groups_members_where_sql($groupid, 'a.userid')." AND a.timegraded > 0
+ FROM {$CFG->prefix}groups_members g, {$CFG->prefix}exercise_assessments a
+ WHERE g.groupid = $groupid AND a.userid = g.userid AND a.timegraded > 0
AND a.exerciseid = $exercise->id");
} else { // no group/all participants
$stats = get_record_sql("SELECT COUNT(*) as count, AVG(gradinggrade) AS mean,
if ($groupid) {
$stats = get_record_sql("SELECT COUNT(*) as count, AVG(grade) AS mean,
STDDEV(grade) AS stddev, MIN(grade) AS min, MAX(grade) AS max
- FROM ".groups_members_from_sql().", {$CFG->prefix}exercise_assessments a,
+ FROM {$CFG->prefix}groups_members g, {$CFG->prefix}exercise_assessments a,
{$CFG->prefix}exercise_submissions s
- WHERE ".groups_members_where_sql($groupid, 's.userid')." AND a.submissionid = s.id
+ WHERE g.groupid = $groupid AND s.userid = g.userid AND a.submissionid = s.id
AND a.exerciseid = $exercise->id");
} else { // no group/all participants
$stats = get_record_sql("SELECT COUNT(*) as count, AVG(grade) AS mean,
}
if ($groupid) {
- $grouptables = ', '. groups_members_from_sql();
- $groupselect = 'AND'.groups_members_where_sql($groupid, 'u.id');
+ $grouptables = ", {$CFG->prefix}groups_members gm ";
+ $groupselect = "AND gm.groupid = '$groupid' AND u.id = gm.userid";
+
} else {
$grouptables = '';
$groupselect = '';
if ($groupid) { /// How many in a particular group?
return count_records_sql("SELECT COUNT(*)
FROM {$CFG->prefix}journal_entries j,
- ".groups_members_from_sql()."
+ {$CFG->prefix}groups_members g
WHERE j.journal = $journal->id
- AND ".groups_members_where_sql($groupid, 'j.userid'));
+ AND g.groupid = '$groupid'
+ AND j.userid = g.userid");
} else { /// Count all the entries from the whole course
//Add this to the SQL to show only group users
if ($currentgroup) {
- $groupmembers = ', '.groups_members_from_sql();
- $groupwhere = ' AND '.groups_members_where_sql($currentgroup, 'u.id');
+ $groupmembers = ", {$CFG->prefix}groups_members gm ";
+ $groupwhere = "AND gm.groupid = '$currentgroup' AND u.id = gm.userid";
}
$sql = 'SELECT qa.* FROM '.$CFG->prefix.'quiz_attempts qa, '.$CFG->prefix.'user u '.$groupmembers.
// we want a particular group and we only want to see students WITH attempts.
// So join on groups_members and do an inner join on attempts.
$from = 'FROM '.$CFG->prefix.'user u JOIN '.$CFG->prefix.'role_assignments ra ON ra.userid = u.id '.
- groups_members_join_sql().
+ 'JOIN '.$CFG->prefix.'groups_members gm ON u.id = gm.userid '.
'JOIN '.$CFG->prefix.'quiz_attempts qa ON u.id = qa.userid AND qa.quiz = '.$quiz->id;
- $where = ' WHERE ra.contextid ' . $contextlists . ' AND '. groups_members_where_sql($currentgroup) .' AND qa.preview = 0';
+ $where = ' WHERE ra.contextid ' . $contextlists . ' AND gm.groupid = '. $currentgroup .' AND qa.preview = 0';
} else if (!empty($currentgroup) && !empty($noattempts)) {
// We want a particular group and we want to do something funky with attempts
// So join on groups_members and left join on attempts...
$from = 'FROM '.$CFG->prefix.'user u JOIN '.$CFG->prefix.'role_assignments ra ON ra.userid = u.id '.
- groups_members_join_sql().
+ 'JOIN '.$CFG->prefix.'groups_members gm ON u.id = gm.userid '.
'LEFT JOIN '.$CFG->prefix.'quiz_attempts qa ON u.id = qa.userid AND qa.quiz = '.$quiz->id;
- $where = ' WHERE ra.contextid ' .$contextlists . ' AND '.groups_members_where_sql($currentgroup);
+ $where = ' WHERE ra.contextid ' .$contextlists . ' AND gm.groupid = '.$currentgroup;
if ($noattempts == 1) {
// noattempts = 1 means only no attempts, so make the left join ask for only records where the right is null (no attempts)
$where .= ' AND qa.userid IS NULL'; // show ONLY no attempts;
global $CFG;
if ($groupid) {
- $groupsdb = ', '. groups_members_from_sql();
- $groupsql = 'AND'.groups_members_where_sql($groupid, 'u.id');
+ $groupsdb = ", {$CFG->prefix}groups_members gm ";
+ $groupsql = "AND gm.groupid = '$groupid' AND u.id = gm.userid";
+
} else {
$groupsdb = "";
$groupsql = "";