/** * count users which have not completed the feedback * * @global object * @uses CONTEXT_MODULE * @param object $cm * @param int $group single groupid * @param string $sort * @param int $startpage * @param int $pagecount * @return object the userrecords */ function feedback_get_incomplete_users($cm, $group = false, $sort = '', $startpage = false, $pagecount = false) { global $DB; $context = context_module::instance($cm->id); //first get all user who can complete this feedback $cap = 'mod/feedback:complete'; $fields = 'u.id, u.username'; if (!($allusers = get_users_by_capability($context, $cap, $fields, $sort, '', '', $group, '', true))) { return false; } // Filter users that are not in the correct group/grouping. $allusers = groups_filter_users_by_course_module_visible($cm, $allusers); $allusers = array_keys($allusers); //now get all completeds $params = array('feedback' => $cm->instance); if (!($completedusers = $DB->get_records_menu('feedback_completed', $params, '', 'userid,id'))) { return $allusers; } $completedusers = array_keys($completedusers); //now strike all completedusers from allusers $allusers = array_diff($allusers, $completedusers); //for paging I use array_slice() if ($startpage !== false and $pagecount !== false) { $allusers = array_slice($allusers, $startpage, $pagecount); } return $allusers; }
/** * Load a list of users enrolled in the current course with the specified permission and group. * 0 for no group. * * @param int $currentgroup * @param bool $idsonly * @return array List of user records */ public function list_participants($currentgroup, $idsonly) { $key = $this->context->id . '-' . $currentgroup . '-' . $this->show_only_active_users(); if (!isset($this->participants[$key])) { $users = get_enrolled_users($this->context, 'mod/assign:submit', $currentgroup, 'u.*', null, null, null, $this->show_only_active_users()); $cm = $this->get_course_module(); $users = groups_filter_users_by_course_module_visible($cm, $users); $this->participants[$key] = $users; } if ($idsonly) { $idslist = array(); foreach ($this->participants[$key] as $id => $user) { $idslist[$id] = new stdClass(); $idslist[$id]->id = $id; } return $idslist; } return $this->participants[$key]; }
/** * Returns list of user objects that are subscribed to this forum * * @global object * @global object * @param object $course the course * @param forum $forum the forum * @param integer $groupid group id, or 0 for all. * @param object $context the forum context, to save re-fetching it where possible. * @param string $fields requested user fields (with "u." table prefix) * @return array list of users. */ function forum_subscribed_users($course, $forum, $groupid=0, $context = null, $fields = null) { global $CFG, $DB; $allnames = get_all_user_name_fields(true, 'u'); if (empty($fields)) { $fields ="u.id, u.username, $allnames, u.maildisplay, u.mailformat, u.maildigest, u.imagealt, u.email, u.emailstop, u.city, u.country, u.lastaccess, u.lastlogin, u.picture, u.timezone, u.theme, u.lang, u.trackforums, u.mnethostid"; } if (empty($context)) { $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id); $context = context_module::instance($cm->id); } if (forum_is_forcesubscribed($forum)) { $results = forum_get_potential_subscribers($context, $groupid, $fields, "u.email ASC"); } else { // only active enrolled users or everybody on the frontpage list($esql, $params) = get_enrolled_sql($context, '', $groupid, true); $params['forumid'] = $forum->id; $results = $DB->get_records_sql("SELECT $fields FROM {user} u JOIN ($esql) je ON je.id = u.id JOIN {forum_subscriptions} s ON s.userid = u.id WHERE s.forum = :forumid ORDER BY u.email ASC", $params); } // Guest user should never be subscribed to a forum. unset($results[$CFG->siteguest]); $cm = get_coursemodule_from_instance('forum', $forum->id); $modinfo = get_fast_modinfo($cm->course); return groups_filter_users_by_course_module_visible($modinfo->get_cm($cm->id), $results); }