$table->setup();
- $primary_roles = stats_get_primary_role_subselect();
+ $primary_roles = sql_primary_role_subselect(); // In dmllib.php
$sql = 'SELECT DISTINCT prs.userid, u.firstname,u.lastname,u.idnumber,count(l.action) as count FROM ('.$primary_roles.') prs'
.' JOIN '.$CFG->prefix.'user u ON u.id = prs.userid LEFT JOIN '.$CFG->prefix.'log l ON prs.userid = l.userid '
.' AND prs.courseid = l.course AND l.time > '.$timefrom.' AND l.course = '.$course->id.' AND l.module = \''.$module->name.'\' '
}
}
+
+/**
+ * Returns SQL to be used as a subselect to find the primary role of users.
+ * Penny (the author) is very keen for this to be implemented as a view in
+ * future versions.
+ *
+ * eg if this function returns a string called $primaryroles, then you could:
+ * $sql = 'SELECT COUNT(DISTINCT prs.userid) FROM ('.$primary_roles.') prs
+ * WHERE prs.primary_roleid='.$role->id.' AND prs.courseid='.$course->id.
+ * ' AND prs.contextlevel = '.CONTEXT_COURSE;
+ *
+ * @return string the piece of SQL code to be used in your FROM( ) statement.
+ */
+function sql_primary_role_subselect() {
+ global $CFG;
+ return 'SELECT ra.userid,
+ ra.roleid AS primary_roleid,
+ ra.contextid,
+ r.sortorder,
+ r.name,
+ r.description,
+ r.shortname,
+ c.instanceid AS courseid,
+ c.contextlevel
+ FROM '.$CFG->prefix.'role_assignments ra
+ INNER JOIN '.$CFG->prefix.'role r ON ra.roleid = r.id
+ INNER JOIN '.$CFG->prefix.'context c ON ra.contextid = c.id
+ WHERE NOT EXISTS (
+ SELECT 1
+ FROM '.$CFG->prefix.'role_assignments i_ra
+ INNER JOIN '.$CFG->prefix.'role i_r ON i_ra.roleid = i_r.id
+ WHERE ra.userid = i_ra.userid AND
+ ra.contextid = i_ra.contextid AND
+ i_r.sortorder < r.sortorder
+ ) ';
+}
+
/**
* Prepare a SQL WHERE clause to select records where the given fields match the given values.
*
continue;
}
- $primary_roles = stats_get_primary_role_subselect();
+ $primary_roles = sql_primary_role_subselect(); // In dmllib.php
foreach ($roles as $role) {
// ENROLMENT FIRST....
// ALL users with this role...
return true;
}
-function stats_get_primary_role_subselect() {
- global $CFG;
- return 'SELECT ra.userid,
- ra.roleid AS primary_roleid,
- ra.contextid,
- r.sortorder,
- r.name,
- r.description,
- r.shortname,
- c.instanceid AS courseid,
- c.contextlevel
- FROM '.$CFG->prefix.'role_assignments ra
- INNER JOIN '.$CFG->prefix.'role r ON ra.roleid = r.id
- INNER JOIN '.$CFG->prefix.'context c ON ra.contextid = c.id
- WHERE NOT EXISTS (
- SELECT 1
- FROM '.$CFG->prefix.'role_assignments i_ra
- INNER JOIN '.$CFG->prefix.'role i_r ON i_ra.roleid = i_r.id
- WHERE ra.userid = i_ra.userid AND
- ra.contextid = i_ra.contextid AND
- i_r.sortorder < r.sortorder
- ) ';
-}
-
?>