protected function get_course_user_ids()
 {
     global $DB, $PAGE;
     if (!isset($this->courseid)) {
         return array();
     } else {
         $course = $DB->get_record('course', array('id' => $this->courseid));
         $courseenrolmentmanager = new course_enrolment_manager($PAGE, $course);
         $users = $courseenrolmentmanager->get_users('lastname', $perpage = 0);
         // Only return the keys (user ids).
         return array_keys($users);
     }
 }
 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
 * @version Moodle 2.0
 */
// security
if (!defined('MOODLE_INTERNAL')) {
    print_error('errorillegaldirectaccess', 'flashcard');
}
if ($action == 'reset') {
    $userid = required_param('userid', PARAM_INT);
    $DB->delete_records('flashcard_card', array('flashcardid' => $flashcard->id, 'userid' => $userid));
}
require_once $CFG->dirroot . '/enrol/locallib.php';
$course_context = get_context_instance(CONTEXT_COURSE, $COURSE->id);
$course = $DB->get_record('course', array('id' => $COURSE->id), '*', MUST_EXIST);
$manager = new course_enrolment_manager($PAGE, $course);
$courseusers = $manager->get_users('lastname', 'ASC', 0, 250);
$struser = get_string('username');
$strdeckstates = get_string('deckstates', 'flashcard');
$strcounts = get_string('counters', 'flashcard');
$table = new html_table();
$table->head = array("<b>{$struser}</b>", "<b>{$strdeckstates}</b>", "<b>{$strcounts}</b>");
$table->size = array('30%', '50%', '20%');
$table->width = '90%';
echo $out;
if (!empty($courseusers)) {
    foreach ($courseusers as $auser) {
        $status = flashcard_get_deck_status($flashcard, $auser->id);
        $userbox = $OUTPUT->user_picture($auser);
        $userbox .= fullname($auser);
        if ($status) {
            $flashcard->cm =& $cm;
 /**
  * Verify get_users() returned number of users expected in every situation.
  */
 public function test_get_users()
 {
     global $PAGE;
     $this->resetAfterTest();
     // All users filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course);
     $users = $manager->get_users('id');
     $this->assertCount(6, $users, 'All users must be returned when no filtering is applied.');
     $this->assertArrayHasKey($this->users['user0']->id, $users);
     $this->assertArrayHasKey($this->users['user1']->id, $users);
     $this->assertArrayHasKey($this->users['user21']->id, $users);
     $this->assertArrayHasKey($this->users['user22']->id, $users);
     $this->assertArrayHasKey($this->users['userall']->id, $users);
     $this->assertArrayHasKey($this->users['usertch']->id, $users);
     // Student role filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course, null, 5);
     $users = $manager->get_users('id');
     $this->assertCount(5, $users, 'Only students must be returned when student role filtering is applied.');
     $this->assertArrayHasKey($this->users['user0']->id, $users);
     $this->assertArrayHasKey($this->users['user1']->id, $users);
     $this->assertArrayHasKey($this->users['user21']->id, $users);
     $this->assertArrayHasKey($this->users['user22']->id, $users);
     $this->assertArrayHasKey($this->users['userall']->id, $users);
     // Teacher role filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course, null, 3);
     $users = $manager->get_users('id');
     $this->assertCount(1, $users, 'Only teacher must be returned when teacher role filtering is applied.');
     $this->assertArrayHasKey($this->users['usertch']->id, $users);
     // Search user filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course, null, 0, 'userall');
     $users = $manager->get_users('id');
     $this->assertCount(1, $users, 'Only searchable user must be returned when search filtering is applied.');
     $this->assertArrayHasKey($this->users['userall']->id, $users);
     // Group 1 filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course, null, 0, '', $this->groups['group1']->id);
     $users = $manager->get_users('id');
     $this->assertCount(2, $users, 'Only group members must be returned when group filtering is applied.');
     $this->assertArrayHasKey($this->users['user1']->id, $users);
     $this->assertArrayHasKey($this->users['userall']->id, $users);
     // Group 2 filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course, null, 0, '', $this->groups['group2']->id);
     $users = $manager->get_users('id');
     $this->assertCount(3, $users, 'Only group members must be returned when group filtering is applied.');
     $this->assertArrayHasKey($this->users['user21']->id, $users);
     $this->assertArrayHasKey($this->users['user22']->id, $users);
     $this->assertArrayHasKey($this->users['userall']->id, $users);
     // 'No groups' filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course, null, 0, '', -1);
     $users = $manager->get_users('id');
     $this->assertCount(2, $users, 'Only non-group members must be returned when \'no groups\' filtering is applied.');
     $this->assertArrayHasKey($this->users['user0']->id, $users);
     $this->assertArrayHasKey($this->users['usertch']->id, $users);
     // Active users filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course, null, 0, '', 0, ENROL_USER_ACTIVE);
     $users = $manager->get_users('id');
     $this->assertCount(5, $users, 'Only active users must be returned when active users filtering is applied.');
     $this->assertArrayHasKey($this->users['user0']->id, $users);
     $this->assertArrayHasKey($this->users['user1']->id, $users);
     $this->assertArrayHasKey($this->users['user21']->id, $users);
     $this->assertArrayHasKey($this->users['userall']->id, $users);
     $this->assertArrayHasKey($this->users['usertch']->id, $users);
     // Suspended users filtering.
     $manager = new course_enrolment_manager($PAGE, $this->course, null, 0, '', 0, ENROL_USER_SUSPENDED);
     $users = $manager->get_users('id');
     $this->assertCount(1, $users, 'Only suspended users must be returned when suspended users filtering is applied.');
     $this->assertArrayHasKey($this->users['user22']->id, $users);
 }
if ($currentgroup) {
    /*
    $sql = "SELECT u.*
        FROM {role_assignments} ra, {user} u, {course} c, {context} cxt
        WHERE ra.userid = u.id
            AND ra.contextid = cxt.id
            AND cxt.contextlevel = 50
            AND cxt.instanceid = c.id
            AND c.id = ?
            AND roleid =5
            AND u.id IN (SELECT userid FROM {groups_members} gm WHERE gm.groupid = ?)
        ORDER BY u.$sort ASC";
    $params = array($cm->course, $currentgroup);
    $students = $DB->get_records_sql($sql, $params);
    */
    $students = $manager->get_users($sort);
    // FIXME add $currentgroup somehow
} else {
    $students = $manager->get_users($sort);
}
$sort = $sort == 'firstname' ? 'firstname' : 'lastname';
/// Now we need a menu for separategroups as well!
if ($groupmode == VISIBLEGROUPS || $groupmode && has_capability('moodle/site:accessallgroups', $context)) {
    groups_print_activity_menu($cm, $CFG->wwwroot . "/mod/attforblock/attendances.php?id={$id}&sessionid={$sessionid}&sort={$sort}");
}
$statuses = get_statuses($course->id);
if (count($statuses) == 0) {
    // maybe we don't have them set yet? no sense in doing everything else
    echo '<p>';
    echo get_string('settingsareempty', 'attforblock');
    echo ': <a href="attsettings.php?id=' . $cm->id . '">' . get_string('settings', 'attforblock') . '</a>';
 private function unenroll_all($id)
 {
     global $DB, $PAGE;
     // Unenroll everybody from given course.
     // Get list of enrollments.
     $course = $DB->get_record('course', array('id' => $id));
     $courseenrolment = new course_enrolment_manager($PAGE, $course);
     $userlist = $courseenrolment->get_users('', 'ASC', 0, 0);
     foreach ($userlist as $user) {
         $ues = $courseenrolment->get_user_enrolments($user->id);
         foreach ($ues as $ue) {
             $courseenrolment->unenrol_user($ue);
         }
     }
 }
 /**
  * enrol and add user to groups in course
  * @param object $course
  * @param csv_import_reader $reader
  * @param int $roleid
  */
 public function process_uploaded_groups($course, $reader, $roleid)
 {
     global $DB, $PAGE;
     $usercol = null;
     // Index of username column.
     $groupcol = null;
     // Index of group column.
     // Find the index of the needed columns.
     $i = 0;
     foreach ($reader->get_columns() as $col) {
         $col = strtoupper(trim($col));
         switch ($col) {
             case 'USERNAME':
                 $usercol = $i;
                 break;
             case 'GROUP':
                 $groupcol = $i;
                 break;
         }
         $i++;
     }
     // Get the manual enrolment plugin.
     $enrolinstances = enrol_get_instances($course->id, true);
     $manualinstance = null;
     foreach ($enrolinstances as $instance) {
         if ($instance->enrol == 'manual') {
             $manualinstance = $instance;
             break;
         }
     }
     $manualenroler = enrol_get_plugin('manual');
     // Get the list of enrolled users for the course.
     $manager = new course_enrolment_manager($PAGE, $course);
     $totalusers = $manager->get_total_users();
     /*
      * Since the number of fields being retrieved are limited (email, id, lastaccess, and lastseen),
      * I feel comfortable retrieving the entire enrolled userbase for this course.
      */
     $users = $manager->get_users('firstname', 'ASC', 0, $totalusers);
     $groups = $manager->get_all_groups();
     $groupids = array();
     foreach ($groups as $group) {
         $groupids[$group->name] = $group->id;
     }
     // Prep the returned array.
     $output = array('group_created' => array(), 'user_enrolled' => array(), 'member_added' => array(), 'error' => array('user_not_found' => array(), 'group_failed' => array(), 'enrol_failed' => array(), 'member_failed' => array(), 'user_not_added' => array()));
     // Loop through the records.
     $reader->init();
     while ($line = $reader->next()) {
         $username = trim($line[$usercol]);
         $groupname = trim($line[$groupcol]);
         // Check if the user exists.
         $user = $DB->get_record('user', array('username' => $username));
         if ($user === false) {
             $output['error']['user_not_found'][] = $username;
             continue;
         }
         // Enroll the user as needed.
         if (!isset($users[$user->id])) {
             try {
                 $manualenroler->enrol_user($manualinstance, $user->id, $roleid);
                 $output['user_enrolled'][] = $username;
             } catch (Exception $e) {
                 $output['error']['enroll_failed'][] = $username;
             }
         }
         // Create the group as needed.
         if (!isset($groupids[$groupname])) {
             if ($groupname != '') {
                 $data = new stdClass();
                 $data->courseid = $course->id;
                 $data->name = $groupname;
                 $newgroupid = groups_create_group($data);
             } else {
                 $newgroupid = false;
             }
             if ($newgroupid === false) {
                 if ($groupname != '') {
                     $output['error']['group_failed'][] = $groupname;
                 }
             } else {
                 $groupids[$groupname] = $newgroupid;
                 $output['group_created'][] = $groupname;
             }
         }
         // Add the user to the group.
         if ($groupname != '') {
             if (groups_add_member($groupids[$groupname], $user->id)) {
                 if (!isset($output['member_added'][$groupname])) {
                     $output['member_added'][$groupname] = array();
                 }
                 $output['member_added'][$groupname][] = $username;
             } else {
                 if (!isset($output['error']['member_failed'][$groupname])) {
                     $output['error']['member_failed'][$groupname] = array();
                 }
                 $output['error']['member_failed'][$groupname][] = $username;
             }
         } else {
             // No group name was provided for this user.
             $output['error']['user_not_added'][] = $username;
         }
     }
     return $output;
 }
 if ($currentgroup) {
     /*
     $sql = "SELECT u.*
         FROM {role_assignments} ra, {user} u, {course} c, {context} cxt
         WHERE ra.userid = u.id
             AND ra.contextid = cxt.id
             AND cxt.contextlevel = 50
             AND cxt.instanceid = c.id
             AND c.id = ?
             AND roleid =5
             AND u.id IN (SELECT userid FROM {groups_members} gm WHERE gm.groupid = ?)
         ORDER BY u.$sort ASC";
     $params = array($cm->course, $currentgroup);
     $students = $DB->get_records_sql($sql, $params);
     */
     $students = $manager->get_users('lastname');
     // FIXME add $currentgroup somehow
 } else {
     $students = $manager->get_users('lastname');
 }
 // display date interval selector
 $rec = $DB->get_record_sql("SELECT MIN(sessdate) AS min, MAX(sessdate) AS max \n                                    FROM {attendance_sessions}\n                                    WHERE courseid=? AND sessdate >= ?", array($course->id, $course->startdate));
 $firstdate = $rec->min;
 $lastdate = $rec->max;
 $now = time();
 $current = $current == 0 ? $now : $current;
 list(, , , $wday, $syear, $smonth, $sday) = array_values(usergetdate($firstdate));
 $wday = $wday == 0 ? 7 : $wday;
 //////////////////////////////////////////////////// Нужна проверка настройки календаря
 $startdate = make_timestamp($syear, $smonth, $sday - $wday + 1);
 //GMT timestamp but for local midnight of monday