function count_users_avail($namesearch = '', $alpha = '') { global $CFG, $CURMAN; $LIKE = $CURMAN->db->sql_compare(); $FULLNAME = sql_concat('usr.firstname', "' '", 'usr.lastname'); $select = 'SELECT COUNT(usr.id) '; $tables = 'FROM ' . $CURMAN->db->prefix_table(USRTABLE) . ' usr '; $join = 'LEFT JOIN ' . $CURMAN->db->prefix_table(INSTABLE) . ' ins '; $on = 'ON ins.userid = usr.id '; /// If limiting returns to specific teams, set that up now. if (!empty($CFG->curr_configteams)) { $where = 'usr.team IN (' . $CFG->curr_configteams . ') '; } else { $where = ''; } if (!empty($namesearch)) { $namesearch = trim($namesearch); $where .= (!empty($where) ? ' AND ' : '') . "({$FULLNAME} {$LIKE} '%{$namesearch}%') "; } if ($alpha) { $where .= (!empty($where) ? ' AND ' : '') . "({$FULLNAME} {$LIKE} '{$alpha}%') "; } /* switch ($type) { case 'student': $where .= (!empty($where) ? ' AND ' : '') . 'usr.type = \'Student\' '; break; case 'instructor': $where .= (!empty($where) ? ' AND ' : '') . 'usr.type = \'Instructor\' '; break; case '': $where .= (!empty($where) ? ' AND ' : '') . '(usr.type = \'Student\' OR usr.type = \'Instructor\') '; break; } */ $uids = array(); $stu = new student(); if ($users = $stu->get_students()) { foreach ($users as $user) { $uids[] = $user->id; } } if ($users = $this->get_instructors()) { foreach ($users as $user) { $uids[] = $user->id; } } if (!empty($uids)) { $where .= (!empty($where) ? ' AND ' : '') . 'usr.id NOT IN ( ' . implode(', ', $uids) . ' ) '; } if (!empty($where)) { $where = 'WHERE ' . $where . ' '; } $sql = $select . $tables . $join . $on . $where; return $CURMAN->db->count_records_sql($sql); }
function count_users_avail($namesearch = '', $alpha = '') { global $CFG; $params = array(); $FULLNAME = $this->_db->sql_concat('usr.firstname', "' '", 'usr.lastname'); $FULLNAME_LIKE = $this->_db->sql_like($FULLNAME, ':name_like', FALSE); $LASTNAME_STARTSWITH = $this->_db->sql_like('usr.lastname', ':lastname_startswith', FALSE); $select = 'SELECT COUNT(usr.id) '; $tables = 'FROM {' . user::TABLE . '} usr '; $join = 'LEFT JOIN {' . instructor::TABLE . '} ins '; $on = 'ON ins.userid = usr.id '; /// If limiting returns to specific teams, set that up now. if (!empty($CFG->curr_configteams)) { $where = 'usr.team IN (' . $CFG->curr_configteams . ') '; } else { $where = ''; } if (!empty($namesearch)) { $namesearch = trim($namesearch); $where .= (!empty($where) ? ' AND ' : ' ') . "{$FULLNAME_LIKE} "; $params['name_like'] = "%{$namesearch}%"; } if ($alpha) { $where .= (!empty($where) ? ' AND ' : ' ') . "{$LASTNAME_STARTSWITH} "; $params['lastname_startswith'] = "{$alpha}%"; } /* switch ($type) { case 'student': $where .= (!empty($where) ? ' AND ' : '') . 'usr.type = \'Student\' '; break; case 'instructor': $where .= (!empty($where) ? ' AND ' : '') . 'usr.type = \'Instructor\' '; break; case '': $where .= (!empty($where) ? ' AND ' : '') . '(usr.type = \'Student\' OR usr.type = \'Instructor\') '; break; } */ $uids = array(); $stu = new student(); if ($users = $stu->get_students($this->classid)) { foreach ($users as $user) { $uids[] = $user->id; } } unset($users); if ($users = $this->get_instructors()) { foreach ($users as $user) { $uids[] = $user->id; } } unset($users); if (!empty($uids)) { $where .= (!empty($where) ? ' AND ' : '') . 'usr.id NOT IN ( ' . implode(', ', $uids) . ' ) '; } //if appropriate, limit selection to users belonging to clusters that //the current user can manage instructor assignments for // TODO: Ugly, this needs to be overhauled $cpage = new pmclasspage(); if (!$cpage->_has_capability('local/elisprogram:assign_class_instructor', $this->classid)) { //perform SQL filtering for the more "conditional" capability $allowed_clusters = instructor::get_allowed_clusters($this->classid); if (empty($allowed_clusters)) { $where .= (!empty($where) ? ' AND ' : '') . '0=1 '; } else { $cluster_filter = implode(',', $allowed_clusters); $where .= (!empty($where) ? ' AND ' : '') . 'usr.id IN ( SELECT userid FROM {' . clusterassignment::TABLE . "}\n WHERE clusterid IN ({$cluster_filter}))"; } } if (!empty($where)) { $where = 'WHERE ' . $where . ' '; } $sql = $select . $tables . $join . $on . $where; return $this->_db->count_records_sql($sql, $params); }
/** * Enrol the students associated with the class into the attached Moodle * course. * * @param none * @return bool True on success, False otherwise. */ function data_enrol_students() { if (empty($this->classid) || empty($this->moodlecourseid) || !empty($this->siteconfig) && !file_exists($this->siteconfig)) { return false; } $stu = new student(); if ($students = $stu->get_students($this->classid)) { /// At this point we must switch over the other Moodle site's DB config, if needed if (!empty($this->siteconfig)) { $cfgbak = moodle_load_config($this->siteconfig); } /// This has to be put here in case we have a site config reload. $CFG = $GLOBALS['CFG']; $CURMAN = $GLOBALS['CURMAN']; $db = $GLOBALS['db']; $role = get_default_course_role($this->moodlecourseid); if (!($context = get_context_instance(CONTEXT_COURSE, $this->moodlecourseid))) { return false; } foreach ($students as $student) { /// Make sure that a Moodle account exists for this user already. $user = new user($student->id); if (!($muser = $CURMAN->db->get_record('user', 'idnumber', addslashes($user->idnumber)))) { $muser = addslashes_recursive($muser); /// Create a new record. $muser = new stdClass(); $muser->idnumber = $user->idnumber; $muser->username = $user->uname; $muser->passwword = $user->passwd; $muser->firstname = $user->firstname; $muser->lastname = $user->lastname; $muser->auth = 'manual'; $muser->timemodified = time(); $muser->id = $CURMAN->db->insert_record('user', $muser); } /// If we have a vald Moodle user account, apply the role. if (!empty($muser->id)) { role_assign($role->id, $muser->id, 0, $context->id, 0, 0, 0, 'manual'); } } /// Reset $CFG object. if (!empty($this->siteconfig)) { moodle_load_config($cfgbak->dirroot . '/config.php'); } } return true; }
public function test_get_students() { // Fixture. $dataset = $this->createCsvDataSet(array(user::TABLE => elispm::file('tests/fixtures/pmuser.csv'), student::TABLE => elispm::file('tests/fixtures/student.csv'))); $this->loadDataSet($dataset); // Test. $student = new student(); $student->classid = 100; $students = $student->get_students(); $this->assertNotEmpty($students); // Verify. $found = false; foreach ($students as $userrec) { if ($userrec->id === '103') { $found = true; break; } } $this->assertTrue($found); }