/** * Finds all potential users * * Potential users are determined by checking for users with a capability * determined in {@see forum_get_potential_subscribers()} * * @param string $search * @return array */ public function find_users($search) { global $DB; $availableusers = forum_get_potential_subscribers($this->context, $this->currentgroup, $this->required_fields_sql('u'), 'u.firstname ASC, u.lastname ASC'); if (empty($availableusers)) { $availableusers = array(); } else if ($search) { $search = strtolower($search); foreach ($availableusers as $key=>$user) { if (stripos($user->firstname, $search) === false && stripos($user->lastname, $search) === false) { unset($availableusers[$key]); } } } // Unset any existing subscribers if (count($this->existingsubscribers)>0 && !$this->forcesubscribed) { foreach ($this->existingsubscribers as $group) { foreach ($group as $user) { if (array_key_exists($user->id, $availableusers)) { unset($availableusers[$user->id]); } } } } if ($this->forcesubscribed) { return array(get_string("existingsubscribers", 'forum') => $availableusers); } else { return array(get_string("potentialsubscribers", 'forum') => $availableusers); } }
/** * 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; if (empty($fields)) { $fields ="u.id, u.username, u.firstname, u.lastname, 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]); return $results; }
print_error('cannotremovesubscriber', 'forum', '', $removesubscriber); } } } else { if (!empty($frm->showall)) { $searchtext = ''; } } } } /// Get all existing subscribers for this forum. if (!($subscribers = forum_subscribed_users($course, $forum, $currentgroup, $context))) { $subscribers = array(); } /// Get all the potential subscribers excluding users already subscribed $users = forum_get_potential_subscribers($context, $currentgroup, 'id,email,firstname,lastname', 'firstname ASC, lastname ASC'); if (!$users) { $users = array(); } foreach ($subscribers as $subscriber) { unset($users[$subscriber->id]); } /// This is yucky, but do the search in PHP, becuase the list we are using comes from get_users_by_capability, /// which does not allow searching in the database. Fortunately the list is only this list of users in this /// course, which is normally OK, except on the site course of a big site. But before you can enter a search /// term, you have already seen a page that lists everyone, since this code never does paging, so you have probably /// already crashed your server if you are going to. This will be fixed properly for Moodle 2.0: MDL-17550. if ($searchtext) { $searchusers = array(); $lcsearchtext = moodle_strtolower($searchtext); foreach ($users as $userid => $user) {
require_sesskey(); switch ($mode) { case FORUM_CHOOSESUBSCRIBE: // 0 forum_forcesubscribe($forum->id, FORUM_CHOOSESUBSCRIBE); redirect($returnto, get_string("everyonecannowchoose", "forum"), 1); break; case FORUM_FORCESUBSCRIBE: // 1 forum_forcesubscribe($forum->id, FORUM_FORCESUBSCRIBE); redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); break; case FORUM_INITIALSUBSCRIBE: // 2 if ($forum->forcesubscribe != FORUM_INITIALSUBSCRIBE) { $users = forum_get_potential_subscribers($context, 0, 'u.id, u.email', ''); foreach ($users as $user) { forum_subscribe($user->id, $forum->id); } } forum_forcesubscribe($forum->id, FORUM_INITIALSUBSCRIBE); redirect($returnto, get_string("everyoneisnowsubscribed", "forum"), 1); break; case FORUM_DISALLOWSUBSCRIBE: // 3 forum_forcesubscribe($forum->id, FORUM_DISALLOWSUBSCRIBE); redirect($returnto, get_string("noonecansubscribenow", "forum"), 1); break; default: print_error(get_string('invalidforcesubscribe', 'forum')); }
/** * Returns list of user objects that are subscribed to this forum * * @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. * @return array list of users. */ function forum_subscribed_users($course, $forum, $groupid = 0, $context = NULL) { global $CFG; if ($groupid) { $grouptables = ", {$CFG->prefix}groups_members gm "; $groupselect = "AND gm.groupid = {$groupid} AND u.id = gm.userid"; } else { $grouptables = ''; $groupselect = ''; } if (forum_is_forcesubscribed($forum)) { if (empty($context)) { $cm = get_coursemodule_from_instance('forum', $forum->id, $course->id); $context = get_context_instance(CONTEXT_MODULE, $cm->id); } $sort = "u.email ASC"; $fields = "u.id, u.username, u.firstname, u.lastname, u.maildisplay, u.mailformat, u.maildigest, u.emailstop, u.imagealt,\n u.email, u.city, u.country, u.lastaccess, u.lastlogin, u.picture, u.timezone, u.theme, u.lang, u.trackforums, u.mnethostid"; $results = forum_get_potential_subscribers($context, $groupid, $fields, $sort); } else { $results = get_records_sql("SELECT u.id, u.username, u.firstname, u.lastname, u.maildisplay, u.mailformat, u.maildigest, u.emailstop, u.imagealt,\n u.email, u.city, u.country, u.lastaccess, u.lastlogin, u.picture, u.timezone, u.theme, u.lang, u.trackforums, u.mnethostid\n FROM {$CFG->prefix}user u,\n {$CFG->prefix}forum_subscriptions s {$grouptables}\n WHERE s.forum = '{$forum->id}'\n AND s.userid = u.id\n AND u.deleted = 0 {$groupselect}\n ORDER BY u.email ASC"); } static $guestid = null; if (is_null($guestid)) { if ($guest = guest_user()) { $guestid = $guest->id; } else { $guestid = 0; } } // Guest user should never be subscribed to a forum. unset($results[$guestid]); return $results; }
error("Could not remove subscriber with id {$removesubscriber} from this forum!"); } } } else { if (!empty($frm->showall)) { $searchtext = ''; } } } } /// Get all existing subscribers for this forum. if (!($subscribers = forum_subscribed_users($course, $forum, $currentgroup, $context))) { $subscribers = array(); } /// Get all the potential subscribers excluding users already subscribed $users = forum_get_potential_subscribers($context, $currentgroup, 'u.id,u.email,u.firstname,u.lastname', 'u.firstname ASC, u.lastname ASC'); if (!$users) { $users = array(); } foreach ($subscribers as $subscriber) { unset($users[$subscriber->id]); } /// This is yucky, but do the search in PHP, becuase the list we are using comes from get_users_by_capability, /// which does not allow searching in the database. Fortunately the list is only this list of users in this /// course, which is normally OK, except on the site course of a big site. But before you can enter a search /// term, you have already seen a page that lists everyone, since this code never does paging, so you have probably /// already crashed your server if you are going to. This will be fixed properly for Moodle 2.0: MDL-17550. if ($searchtext) { $searchusers = array(); $lcsearchtext = moodle_strtolower($searchtext); foreach ($users as $userid => $user) {
/** * 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,\n u.username,\n {$allnames},\n u.maildisplay,\n u.mailformat,\n u.maildigest,\n u.imagealt,\n u.email,\n u.emailstop,\n u.city,\n u.country,\n u.lastaccess,\n u.lastlogin,\n u.picture,\n u.timezone,\n u.theme,\n u.lang,\n u.trackforums,\n 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}\n FROM {user} u\n JOIN ({$esql}) je ON je.id = u.id\n JOIN {forum_subscriptions} s ON s.userid = u.id\n WHERE s.forum = :forumid\n 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); }