/** * When a role is selected from the sync configuration, create class * enrolments for the specified role assignments. */ static function student_sync_role_set() { require_once CURMAN_DIRLOCATION . '/lib/student.class.php'; global $CURMAN; $contextlevel = context_level_base::get_custom_context_level('class', 'block_curr_admin'); // find all class role assignments $sql = "SELECT ra.id, cu.id AS userid, ctx.instanceid AS classid\n FROM {$CURMAN->db->prefix_table('role_assignments')} ra\n JOIN {$CURMAN->db->prefix_table('user')} mu ON ra.userid = mu.id\n JOIN {$CURMAN->db->prefix_table('crlm_user')} cu ON mu.idnumber = cu.idnumber\n JOIN {$CURMAN->db->prefix_table('context')} ctx ON ctx.id = ra.contextid\n WHERE ctx.contextlevel = {$contextlevel}\n AND ra.roleid = {$CURMAN->config->enrolment_role_sync_student_role}"; $studentswanted = $CURMAN->db->get_records_sql($sql); $studentswanted = $studentswanted ? $studentswanted : array(); foreach ($studentswanted as $student) { unset($student->id); $student = new student($student); $student->add(); } return true; }
/** * */ public function action_waitlistconfirm() { $id = required_param('userid', PARAM_INT); $form_url = new moodle_url(null, array('s' => $this->pagename, 'section' => $this->section, 'action' => 'waitlistconfirm')); $waitlistform = new waitlistaddform($form_url, array('student_ids' => $id)); if ($data = $waitlistform->get_data()) { $now = time(); foreach ($data->userid as $uid) { if (isset($data->enrol[$uid]) && isset($data->classid[$uid]) && isset($data->enrolmenttime[$uid])) { if ($data->enrol[$uid] == 1) { $wait_record = new object(); $wait_record->userid = $uid; $wait_record->classid = $data->classid[$uid]; $wait_record->enrolmenttime = $data->enrolmenttime[$uid]; $wait_record->timecreated = $now; $wait_record->position = 0; $wait_list = new waitlist($wait_record); $wait_list->add(); } else { if ($data->enrol[$uid] == 2) { $user = new user($uid); $student_data = array(); $student_data['classid'] = $data->classid[$uid]; $student_data['userid'] = $uid; $student_data['enrolmenttime'] = $data->enrolmenttime[$uid]; $student_data['timecreated'] = $now; $student_data['completestatusid'] = STUSTATUS_NOTCOMPLETE; $newstu = new student($student_data); $status = $newstu->add(); if ($status !== true) { if (!empty($status->message)) { echo cm_error(get_string('record_not_created_reason', 'block_curr_admin', $status->message)); } else { echo cm_error(get_string('record_not_created', 'block_curr_admin')); } } } } } } } $this->action_default(); }
/** * Enrols a user in a track. * * @param int $userid The user id * @param int $trackid The track id */ static function enrol($userid, $trackid) { global $CURMAN; // make sure we don't double-enrol if ($CURMAN->db->record_exists(USRTRKTABLE, 'userid', $userid, 'trackid', $trackid)) { return false; } $record = new usertrack(); $record->userid = $userid; $record->trackid = $trackid; $record->data_insert_record(); $user = new user($userid); $track = new track($trackid); // add the student to the associated curriculum, if they're not already // enrolled if (!$CURMAN->db->record_exists(CURASSTABLE, 'userid', $userid, 'curriculumid', $track->curid)) { $curstu = new curriculumstudent(); $curstu->userid = $userid; $curstu->curriculumid = $track->curid; $curstu->completed = 0; $curstu->credits = 0; $curstu->locked = 0; $curstu->add(); } events_trigger('track_assigned', $record); /** * Get autoenrollable classes in the track. Classes are autoenrollable * if: * - the autoenrol flag is set * - it is the only class in that course slot for the track */ $sql = 'SELECT classid, courseid ' . 'FROM ' . $CURMAN->db->prefix_table(TRACKCLASSTABLE) . ' ' . 'WHERE trackid = \'' . $trackid . '\' ' . 'GROUP BY courseid ' . 'HAVING COUNT(*) = 1 AND MAX(autoenrol) = 1'; $classes = $CURMAN->db->get_records_sql($sql); if (!empty($classes)) { foreach ($classes as $class) { // enrol user in each autoenrolable class $stu_record = new object(); $stu_record->userid = $userid; $stu_record->classid = $class->classid; $stu_record->enrolmenttime = time(); $enrolment = new student($stu_record); // check prerequisites and enrolment limits $enrolment->add(array('prereq' => 1, 'waitlist' => 1), true); } } return true; }
function enrol_all_track_users_in_class() { global $CURMAN; // find all users who are not enrolled in the class $users = $CURMAN->db->get_records_select('crlm_user_track', "NOT EXISTS (SELECT 'x'\n FROM {$CURMAN->db->prefix_table(STUTABLE)} s\n WHERE s.classid = {$this->classid} AND s.userid = {$CURMAN->db->prefix_table('crlm_user_track')}.userid)\n AND trackid = {$this->trackid}", 'userid'); if ($users) { $timenow = time(); $count = 0; $waitlisted = 0; $prereq = 0; foreach ($users as $user) { // enrol user in track $enrol = new student(); $enrol->classid = $this->classid; $enrol->userid = $user->userid; $enrol->enrolmenttime = $timenow; $result = $enrol->add(array('prereq' => 1, 'waitlist' => 1)); if ($result === true) { $count++; } elseif (is_object($result)) { if ($result->code = 'user_waitlisted') { $waitlisted++; } elseif ($result->code = 'user_waitlisted') { $prereq++; } } } print_string('n_users_enrolled', 'block_curr_admin', $count); if ($waitlisted) { print_string('n_users_waitlisted', 'block_curr_admin', $waitlisted); } if ($prereq) { print_string('n_users_unsatisfied_prereq', 'block_curr_admin', $prereq); } } else { print_string('all_users_already_enrolled', 'block_curr_admin'); } }
/** * * @global object $CFG * @global object $CURMAN */ public function enrol() { global $CFG, $CURMAN; $this->data_delete_record(); $class = new cmclass($this->classid); $courseid = $class->get_moodle_course_id(); // enrol directly in the course $student = new student($this); $student->enrolmenttime = max(time(), $class->startdate); $student->add(); if ($courseid) { $course = $CURMAN->db->get_record('course', 'id', $this->id); // the elis plugin is treated specially if ($course->enrol != 'elis') { // send the user to the Moodle enrolment page $a = new stdClass(); $a->crs = $course; $a->class = $class; $a->wwwroot = $CFG->wwwroot; $subject = get_string('moodleenrol_subj', 'block_curr_admin', $a); $message = get_string('moodleenrol', 'block_curr_admin', $a); } } if (!isset($message)) { $a = $class->idnumber; $subject = get_string('nowenroled', 'block_curr_admin', $a); $message = get_string('nowenroled', 'block_curr_admin', $a); } $user = cm_get_moodleuser($this->userid); $from = get_admin(); notification::notify($message, $user, $from); email_to_user($user, $from, $subject, $message); }
function action_savenew() { global $USER, $CFG, $CURMAN; $clsid = cm_get_param('clsid', 0); $class = new cmclass($clsid); if (!$class->is_enrollable()) { print_error('notenrollable'); } // check if class is full if (!empty($class->maxstudents) && student::count_enroled($class->id) >= $class->maxstudents) { $form = $this->create_waitlistform($classid); $form->display(); return; } // call the Moodle enrolment plugin if attached to a Moodle course, and // it's not the elis plugin $courseid = $class->get_moodle_course_id(); if ($courseid) { $course = $CURMAN->db->get_record('course', 'id', $courseid); // the elis plugin is treated specially if ($course->enrol != 'elis') { // FIXME: add message redirect("{$CFG->wwwroot}/course/enrol.php?id={$courseid}"); } } $cuserid = cm_get_crlmuserid($USER->id); $sturecord = array(); $sturecord['classid'] = $class->id; $sturecord['userid'] = $cuserid; $sturecord['enrolmenttime'] = max(time(), $class->startdate); $sturecord['completetime'] = 0; $newstu = new student($sturecord); if (($status = $newstu->add()) !== true) { if (!empty($status->message)) { echo cm_error('Record not created. Reason: ' . $status->message); } else { echo cm_error('Record not created.'); } } $this->action_default(); }