Exemplo n.º 1
0
 public function delete()
 {
     global $CFG;
     $result = false;
     $muser = cm_get_moodleuserid($this->id);
     if (empty($muser) || !is_primary_admin($muser)) {
         $level = context_level_base::get_custom_context_level('user', 'block_curr_admin');
         $result = attendance::delete_for_user($this->id);
         $result = $result && curriculumstudent::delete_for_user($this->id);
         $result = $result && instructor::delete_for_user($this->id);
         $result = $result && student::delete_for_user($this->id);
         $result = $result && student_grade::delete_for_user($this->id);
         $result = $result && usertrack::delete_for_user($this->id);
         $result = $result && usercluster::delete_for_user($this->id);
         $result = $result && clusterassignment::delete_for_user($this->id);
         $result = $result && waitlist::delete_for_user($this->id);
         $result = $result && delete_context($level, $this->id);
         // Delete Moodle user.
         if ($muser = get_record('user', 'idnumber', $this->idnumber, 'mnethostid', $CFG->mnet_localhost_id, 'deleted', 0)) {
             $result = $result && delete_user($muser);
         }
         $result = $result && parent::delete();
     }
     return $result;
 }
Exemplo n.º 2
0
 function enrol_all_track_users_in_class()
 {
     // find all users who are not enrolled in the class
     // TODO: validate this...
     $sql = "NOT EXISTS (SELECT 'x'\n                                FROM {" . student::TABLE . "} s\n                                WHERE s.classid = ? AND s.userid = {" . usertrack::TABLE . "}.userid)\n                  AND trackid = ?";
     $params = array($this->classid, $this->trackid);
     $users = $this->_db->get_recordset_select(usertrack::TABLE, $sql, $params, 'userid');
     if ($users->valid() === true) {
         // ELIS-7582
         @set_time_limit(0);
         $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;
             try {
                 $enrol->save();
                 $count++;
             } catch (unsatisfied_prerequisites_exception $ex) {
                 $prereq++;
             } catch (pmclass_enrolment_limit_validation_exception $ex) {
                 // autoenrol into waitlist
                 $wait_record = new stdClass();
                 $wait_record->userid = $user->userid;
                 $wait_record->classid = $this->classid;
                 //$wait_record->enrolmenttime = $timenow;
                 $wait_record->timecreated = $timenow;
                 $wait_record->position = 0;
                 $wait_list = new waitlist($wait_record);
                 $wait_list->save();
                 $waitlisted++;
             }
         }
         print_string('n_users_enrolled', 'local_elisprogram', $count);
         if ($waitlisted) {
             print_string('n_users_waitlisted', 'local_elisprogram', $waitlisted);
         }
         if ($prereq) {
             print_string('n_users_unsatisfied_prereq', 'local_elisprogram', $prereq);
         }
     } else {
         print_string('all_users_already_enrolled', 'local_elisprogram');
     }
     unset($users);
 }
Exemplo n.º 3
0
 /**
  * Perform all necessary tasks to remove a student enrolment from the system.
  */
 function delete()
 {
     /// Remove any grade records for this enrolment.
     $result = student_grade::delete_for_user_and_class($this->userid, $this->classid);
     /// Unenrol them from the Moodle class.
     if (!empty($this->classid) && !empty($this->userid) && ($moodlecourseid = get_field('crlm_class_moodle', 'moodlecourseid', 'classid', $this->classid)) && ($muserid = cm_get_moodleuserid($this->userid))) {
         $context = get_context_instance(CONTEXT_COURSE, $moodlecourseid);
         if ($context && $context->id) {
             role_unassign(0, $muserid, 0, $context->id);
         }
     }
     $result = $result && $this->data_delete_record();
     if ($this->completestatusid == STUSTATUS_NOTCOMPLETE) {
         $cmclass = new cmclass($this->classid);
         if (empty($cmclass->maxstudents) || $cmclass->maxstudents > student::count_enroled($cmclass->id)) {
             $wlst = waitlist::get_next($this->classid);
             if (!empty($wlst)) {
                 $wlst->enrol();
             }
         }
     }
     return $result;
 }
Exemplo n.º 4
0
 public function delete()
 {
     global $CFG;
     $muser = $this->get_moodleuser();
     if (empty($muser) || !is_primary_admin($muser->id)) {
         // delete associated data
         require_once elis::lib('data/data_filter.class.php');
         $filter = new field_filter('userid', $this->id);
         curriculumstudent::delete_records($filter, $this->_db);
         student::delete_records($filter, $this->_db);
         student_grade::delete_records($filter, $this->_db);
         waitlist::delete_records($filter, $this->_db);
         instructor::delete_records($filter, $this->_db);
         usertrack::delete_records($filter, $this->_db);
         clusterassignment::delete_records($filter, $this->_db);
         //delete association to Moodle user, if applicable
         require_once elispm::lib('data/usermoodle.class.php');
         $filter = new field_filter('cuserid', $this->id);
         usermoodle::delete_records($filter, $this->_db);
         // Delete Moodle user.
         if (!empty($muser)) {
             delete_user($muser);
         }
         parent::delete();
         $context = \local_elisprogram\context\user::instance($this->id);
         $context->delete();
     }
 }
 function get_item_display_waitlistsize($column, $class)
 {
     require_once CURMAN_DIRLOCATION . '/lib/waitlist.class.php';
     return waitlist::count_records($class->id);
 }
Exemplo n.º 6
0
 /**
  * Enrols a user in a track.
  *
  * @param int $userid The user id
  * @param int $trackid The track id
  */
 public static function enrol($userid, $trackid)
 {
     global $DB;
     // make sure we don't double-enrol
     if ($DB->record_exists(self::TABLE, array('userid' => $userid, 'trackid' => $trackid))) {
         return false;
     }
     $record = new usertrack();
     $record->userid = $userid;
     $record->trackid = $trackid;
     $record->save();
     $user = new user($userid);
     $track = new track($trackid);
     if (!$DB->record_exists(curriculumstudent::TABLE, array('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->save();
     }
     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 {' . trackassignment::TABLE . '} ' . 'WHERE trackid = ? ' . 'GROUP BY courseid ' . 'HAVING COUNT(*) = 1 AND MAX(autoenrol) = 1';
     $params = array($trackid);
     $classes = $DB->get_recordset_sql($sql, $params);
     foreach ($classes as $class) {
         // ELIS-3460: check pre-requisites ...
         $curcrs = new curriculumcourse(array('courseid' => $class->courseid, 'curriculumid' => $track->curid));
         if (!$curcrs->prerequisites_satisfied($userid)) {
             //error_log("/local/elisprogram/lib/data/usertrack.class.php::enrol({$userid}); pre-requisites NOT satisfied for course: {$class->courseid}, curriculum: {$track->curid}");
             continue;
         }
         $now = time();
         // enrol user in each autoenrolable class
         $stu_record = new object();
         $stu_record->userid = $userid;
         $stu_record->classid = $class->classid;
         $stu_record->enrolmenttime = $now;
         $enrolment = new student($stu_record);
         // catch enrolment limits
         try {
             $status = $enrolment->save();
         } catch (pmclass_enrolment_limit_validation_exception $e) {
             // autoenrol into waitlist
             $wait_record = new object();
             $wait_record->userid = $userid;
             $wait_record->classid = $class->classid;
             $wait_record->enrolmenttime = $now;
             $wait_record->timecreated = $now;
             $wait_record->position = 0;
             $wait_list = new waitlist($wait_record);
             $wait_list->save();
             $status = true;
         } catch (Exception $e) {
             $param = array('message' => $e->getMessage());
             echo cm_error(get_string('record_not_created_reason', 'local_elisprogram', $param));
         }
     }
     unset($classes);
     return true;
 }
Exemplo n.º 7
0
 function get_item_display_waitlistsize($column, $class)
 {
     require_once elispm::lib('data/waitlist.class.php');
     return waitlist::count_records($class->id);
 }
Exemplo n.º 8
0
 function action_overenrol()
 {
     global $CURMAN;
     $id = $this->required_param('id', PARAM_INT);
     $recs = explode(',', $this->required_param('selected', PARAM_TEXT));
     // make sure everything is an int
     foreach ($recs as $key => $val) {
         $recs[$key] = (int) $val;
         if (empty($recs[$key])) {
             unset($recs[$key]);
         }
     }
     $result = true;
     foreach ($recs as $recid) {
         $waitlistobj = new waitlist($recid);
         $waitlistobj->enrol();
     }
     $tmppage = new waitlistpage(array('id' => $id));
     if ($result) {
         redirect($tmppage->get_url(), get_string('success_waitlist_overenrol', 'block_curr_admin'));
     } else {
         print_error('error_waitlist_overenrol', 'block_curr_admin', $tmppage->get_url());
     }
 }
Exemplo n.º 9
0
 public function check_autoenrol_after_course_completion($enrolment)
 {
     if ($enrolment->completestatusid != STUSTATUS_NOTCOMPLETE) {
         $cmclass = new cmclass($enrolment->classid);
         if ((empty($cmclass->maxstudents) || $cmclass->maxstudents > student::count_enroled($cmclass->id)) && !empty($cmclass->enrol_from_waitlist)) {
             $wlst = waitlist::get_next($enrolment->classid);
             if (!empty($wlst)) {
                 $wlst->enrol();
             }
         }
     }
     return true;
 }
Exemplo n.º 10
0
 public static function check_autoenrol_after_course_completion($enrolment)
 {
     if ($enrolment->completestatusid != STUSTATUS_NOTCOMPLETE) {
         $pmclass = new pmclass($enrolment->classid);
         $pmclass->load();
         if ((empty($pmclass->maxstudents) || $pmclass->maxstudents > student::count_enroled($pmclass->id)) && !empty($pmclass->enrol_from_waitlist)) {
             $wlst = waitlist::get_next($enrolment->classid);
             if (!empty($wlst)) {
                 $crsid = $pmclass->course->id;
                 foreach ($pmclass->course->curriculumcourse as $curcrs) {
                     if ($curcrs->courseid == $crsid && $curcrs->prerequisites_satisfied($wlst->userid)) {
                         $wlst->enrol();
                     }
                 }
             }
         }
     }
     return true;
 }
Exemplo n.º 11
0
 /**
  * Handle a request to resolve the enrolment limit for a class.
  *
  * Over-enrols, adds to waitlist, or skips enrolment based on user selection.
  *
  * @param array $elements An array of elements to perform the action on.
  * @param int $classid The ID of the class we're enrolling into.
  * @param string $rawuseractions The JSON string containing the actions we want to perform. This will be an array, indexed by
  *                               element ID, with values being "waitlist" for add to waitlist, "overenrol" for overenrol, or
  *                               anything else being skip enrolment. If we are performing a bulk enrolment, a "bulk_enrol" key
  *                               will be present, which will take precendence.
  * @param string $enroldata A JSON string containing enrolment data for the users we want to overenrol.
  * @return array An array consisting of 'result' and 'num_affected', indicating success, and the number of users either enroled,
  *               or added to waitlist, respectively.
  */
 protected function waitlistconfirm($elements, $classid, $rawuseractions, $enroldata)
 {
     set_time_limit(0);
     // Unpack and process incoming desired user actions.
     // $rawuseractions comes from jQuery's serializeArray function, which gives us an array of arrays, each containing a "name"
     // and "value" member. after processing here, we will get an array indexed by user ID, with the value being the desired
     // waitlist action (waitlist, overenrol, skip).
     if (is_string($rawuseractions)) {
         $rawuseractions = @json_decode($rawuseractions, true);
     }
     if (empty($rawuseractions) || !is_array($rawuseractions)) {
         $rawuseractions = array();
     }
     $useractions = array();
     foreach ($rawuseractions as $param) {
         if (is_numeric($param['name']) || $param['name'] == 'bulk_action') {
             $useractions[$param['name']] = $param['value'];
         }
     }
     if (empty($useractions)) {
         throw new Exception('Did not receive any valid user ids.');
     }
     // Original enrolment data.
     $enroldata = $this->process_enrolment_data($classid, @json_decode($enroldata));
     if (empty($enroldata)) {
         throw new Exception('Did not receive valid enrolment data.');
     }
     $now = time();
     $numaffected = 0;
     foreach ($elements as $userid) {
         // Skip invalid userids or users which we dont have permission to modify.
         if (!is_numeric($userid) || !student::can_manage_assoc($userid, $classid)) {
             continue;
         }
         // Get action.
         if (isset($useractions['bulk_action'])) {
             $action = $useractions['bulk_action'];
         } else {
             if (isset($useractions[$userid])) {
                 $action = $useractions[$userid];
             } else {
                 continue;
             }
         }
         // Perform actions.
         try {
             if ($action === 'waitlist') {
                 $waitrecord = new object();
                 $waitrecord->userid = $userid;
                 $waitrecord->classid = $classid;
                 $waitrecord->timecreated = $now;
                 $waitrecord->timemodified = $now;
                 $waitrecord->position = 0;
                 $waitlist = new waitlist($waitrecord);
                 $status = $waitlist->save();
                 $numaffected++;
             } else {
                 if ($action === 'overenrol') {
                     $sturecord = $enroldata;
                     $sturecord['userid'] = $userid;
                     $newstu = new student($sturecord);
                     $newstu->validation_overrides[] = 'prerequisites';
                     $newstu->validation_overrides[] = 'enrolment_limit';
                     $status = $newstu->save();
                     $numaffected++;
                 }
             }
         } catch (Exception $e) {
             $param = array('message' => $e->getMessage());
             throw new Exception(get_string('record_not_created_reason', 'local_elisprogram', $param));
         }
     }
     return array('result' => 'success', 'num_affected' => $numaffected);
 }
Exemplo n.º 12
0
 function do_overenrol()
 {
     $id = $this->required_param('id', PARAM_INT);
     $recs = explode(',', $this->required_param('selected', PARAM_TEXT));
     $this->session_selection_deletion();
     // make sure everything is an int
     foreach ($recs as $key => $val) {
         $recs[$key] = (int) $val;
         if (empty($recs[$key])) {
             unset($recs[$key]);
         }
     }
     $result = !empty($recs);
     foreach ($recs as $recid) {
         $waitlistobj = new waitlist($recid);
         $waitlistobj->enrol();
     }
     $tmppage = new waitlistpage(array('id' => $id));
     if ($result) {
         redirect($tmppage->url, get_string('success_waitlist_overenrol', self::LANG_FILE));
     } else {
         print_error('error_waitlist_overenrol', self::LANG_FILE, $tmppage->url);
     }
 }
Exemplo n.º 13
0
 /**
  * Updates resulting enrolments that are auto-created after users are
  * assigned to user sets (specifically user-track assignments, user-program
  * assignments, and class enrolments in a track's default class)
  *
  * Note: This is essentially equivalent to cluster_assigned_handler but
  * runs a fixed number of queries for scalability reasons
  *
  * @param  int  $userid     A specific PM user id to filter on for
  *                          consideration, or all users if zero
  * @param  int  $clusterid  A specific cluster / user set id to filter
  *                          on for consideration, or all users if zero
  */
 static function update_enrolments($userid = 0, $clusterid = 0)
 {
     global $DB;
     require_once elispm::lib('data/usermoodle.class.php');
     // error_log("/local/elisprogram/lib/data/clusterassignment.class.php::update_enrolments({$userid}, {$clusterid})");
     // ELIS-7582
     @set_time_limit(0);
     // convert provided parameters to SQL conditions
     $extraconditions = array();
     $extraparams = array();
     if (!empty($userid)) {
         $users = array($userid);
         $extraconditions[] = 'u.id = ?';
         $extraparams[] = $userid;
     } else {
         $users = clusterassignment::find(new field_filter('clusterid', $clusterid));
     }
     if (!empty($clusterid)) {
         $extraconditions[] = 'clu.clusterid = ?';
         $extraparams[] = $clusterid;
     }
     $extrawhere = '';
     if (!empty($extraconditions)) {
         $extrawhere = ' AND ' . implode(' AND ', $extraconditions);
     }
     //use the current time as the time created and modified for curriculum
     //assignments
     $timenow = time();
     //assign to curricula based on user-cluster and cluster-curriculum
     //associations
     $sql = "INSERT INTO {" . curriculumstudent::TABLE . "}\n                    (userid, curriculumid, timecreated, timemodified)\n                SELECT DISTINCT u.id, clucur.curriculumid, {$timenow}, {$timenow}\n                  FROM {" . clusterassignment::TABLE . "} clu\n                  JOIN {" . user::TABLE . "} u ON u.id = clu.userid\n                  JOIN {" . clustercurriculum::TABLE . "} clucur\n                    ON clucur.clusterid = clu.clusterid\n             LEFT JOIN {" . curriculumstudent::TABLE . "} ca\n                    ON ca.userid = u.id\n                   AND ca.curriculumid = clucur.curriculumid\n                 WHERE ca.curriculumid IS NULL\n                   AND clucur.autoenrol = 1\n                   {$extrawhere}";
     $DB->execute($sql, $extraparams);
     //assign to curricula based on user-cluster and cluster-track
     //associations (assigning a user to a track auto-assigns them to
     //the track's curriculum, track assignment happens below)
     $sql = "INSERT INTO {" . curriculumstudent::TABLE . "}\n                    (userid, curriculumid, timecreated, timemodified)\n                SELECT DISTINCT u.id, trk.curid, {$timenow}, {$timenow}\n                  FROM {" . clusterassignment::TABLE . "} clu\n                  JOIN {" . user::TABLE . "} u\n                    ON u.id = clu.userid\n                  JOIN {" . clustertrack::TABLE . "} clutrk\n                    ON clutrk.clusterid = clu.clusterid\n                  JOIN {" . track::TABLE . "} trk\n                    ON clutrk.trackid = trk.id\n             LEFT JOIN {" . curriculumstudent::TABLE . "} ca\n                    ON ca.userid = u.id\n                   AND ca.curriculumid = trk.curid\n                 WHERE ca.curriculumid IS NULL\n                   AND clutrk.autoenrol = 1\n                   {$extrawhere}";
     $DB->execute($sql, $extraparams);
     //this represents the tracks that users will be assigned to
     //based on user-cluster and cluster-track associations
     //(actual assignment happens below)
     $exists = "EXISTS (SELECT DISTINCT u.id, clutrk.trackid\n                             FROM {" . clusterassignment::TABLE . "} clu\n                             JOIN {" . user::TABLE . "} u\n                               ON u.id = clu.userid\n                             JOIN {" . clustertrack::TABLE . "} clutrk\n                               ON clutrk.clusterid = clu.clusterid\n                        LEFT JOIN {" . usertrack::TABLE . "} ta\n                               ON ta.userid = u.id\n                              AND ta.trackid = clutrk.trackid\n                            WHERE ta.trackid IS NULL\n                              AND clutrk.autoenrol = 1\n                              AND outerta.trackid = clutrk.trackid\n\t                      {$extrawhere})";
     /**
      * 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
      */
     // group the classes from the same course together
     // only select the ones that are the only class for that course in
     // the given track, and if the autoenrol flag is set
     $sql = "SELECT outerta.classid, outerta.courseid, trk.curid\n                  FROM {" . trackassignment::TABLE . "} outerta\n                  JOIN {" . track::TABLE . "} trk ON trk.id = outerta.trackid\n                 WHERE {$exists}\n              GROUP BY courseid\n                HAVING COUNT(*) = 1 AND MAX(autoenrol) = 1";
     //go through and assign user(s) to the autoenollable classes
     $classes = $DB->get_records_sql($sql, $extraparams);
     if (!empty($classes)) {
         foreach ($users as $user) {
             $userid = is_object($user) ? $user->userid : $user;
             foreach ($classes as $class) {
                 // check pre-requisites
                 $curcrs = new curriculumcourse(array('courseid' => $class->courseid, 'curriculumid' => $class->curid));
                 if (!$curcrs->prerequisites_satisfied($userid)) {
                     continue;
                 }
                 $now = time();
                 // enrol user in each autoenrolable class
                 $stu_record = new object();
                 $stu_record->userid = $userid;
                 $stu_record->classid = $class->classid;
                 $stu_record->enrolmenttime = $now;
                 $enrolment = new student($stu_record);
                 // catch enrolment limits
                 try {
                     $enrolment->save();
                 } catch (pmclass_enrolment_limit_validation_exception $e) {
                     // autoenrol into waitlist
                     $wait_record = new object();
                     $wait_record->userid = $userid;
                     $wait_record->classid = $class->classid;
                     $wait_record->enrolmenttime = $now;
                     $wait_record->timecreated = $now;
                     $wait_record->position = 0;
                     $wait_list = new waitlist($wait_record);
                     $wait_list->save();
                 } catch (Exception $e) {
                     $param = array('message' => $e->getMessage());
                     if (in_cron()) {
                         mtrace(get_string('record_not_created_reason', 'local_elisprogram', $param));
                     } else {
                         echo cm_error(get_string('record_not_created_reason', 'local_elisprogram', $param));
                     }
                 }
             }
         }
     }
     //assign to tracks based on user-cluster and cluster-track
     //associations
     $sql = "INSERT INTO {" . usertrack::TABLE . "}\n                       (userid, trackid)\n                SELECT DISTINCT u.id, clutrk.trackid\n                  FROM {" . clusterassignment::TABLE . "} clu\n                  JOIN {" . user::TABLE . "} u\n                    ON u.id = clu.userid\n                  JOIN {" . clustertrack::TABLE . "} clutrk\n                    ON clutrk.clusterid = clu.clusterid\n             LEFT JOIN {" . usertrack::TABLE . "} ta\n                    ON ta.userid = u.id\n                   AND ta.trackid = clutrk.trackid\n                 WHERE ta.trackid IS NULL\n                   AND clutrk.autoenrol = 1\n                   {$extrawhere}";
     $DB->execute($sql, $extraparams);
     //update site-level "cluster groups"
     //TODO: make sure all "cluster groups" scenarios are handled here, and look at
     //performance in more detal
     if (!empty($userid) && file_exists(elispm::file('plugins/usetgroups/lib.php'))) {
         require_once elispm::file('plugins/usetgroups/lib.php');
         //need the Moodle user id
         $mdluserid = $DB->get_field(usermoodle::TABLE, 'muserid', array('cuserid' => $userid));
         if ($mdluserid) {
             //find all assignments for this user
             $assignments = $DB->get_recordset(clusterassignment::TABLE, array('userid' => $userid));
             foreach ($assignments as $assignment) {
                 //update site-level group assignments
                 userset_groups_update_site_course($assignment->clusterid, true, $mdluserid);
             }
         }
         //update course-level group assignment
         userset_groups_update_groups(array('mdlusr.cuserid' => $userid));
     }
 }
Exemplo n.º 14
0
 /**
  * Perform all necessary tasks to remove a student enrolment from the system.
  */
 function delete()
 {
     /// Remove any grade records for this enrolment.
     $result = student_grade::delete_for_user_and_class($this->userid, $this->classid);
     /// Unenrol them from the Moodle class.
     if ($moodlecourseid = moodle_get_course($this->classid)) {
         if (($mcourse = $this->_db->get_record('course', array('id' => $moodlecourseid))) && ($muser = $this->users->get_moodleuser())) {
             $sql = 'SELECT enrol.*
                       FROM {user_enrolments} enrolments
                       JOIN {enrol} enrol ON enrol.id = enrolments.enrolid
                      WHERE enrol.courseid = ?
                        AND enrolments.userid = ?';
             $enrolments = $this->_db->get_recordset_sql($sql, array($moodlecourseid, $muser->id));
             foreach ($enrolments as $enrolment) {
                 $plugin = enrol_get_plugin($enrolment->enrol);
                 $plugin->unenrol_user($enrolment, $muser->id);
             }
             unset($enrolments);
         }
     }
     parent::delete();
     if ($this->completestatusid == STUSTATUS_NOTCOMPLETE) {
         $pmclass = $this->pmclass;
         if (empty($pmclass->maxstudents) || $pmclass->maxstudents > static::count_enroled($pmclass->id)) {
             $wlst = waitlist::get_next($this->classid);
             if (!empty($wlst)) {
                 $wlst->enrol();
             }
         }
     }
     return $result;
 }
Exemplo n.º 15
0
 function delete()
 {
     $status = true;
     if (!empty($this->id)) {
         instructor::delete_for_class($this->id);
         student::delete_for_class($this->id);
         trackassignmentclass::delete_for_class($this->id);
         classmoodlecourse::delete_for_class($this->id);
         student_grade::delete_for_class($this->id);
         attendance::delete_for_class($this->id);
         taginstance::delete_for_class($this->id);
         waitlist::delete_for_class($this->id);
         classmoodlecourse::delete_for_class($this->id);
         $level = context_level_base::get_custom_context_level('class', 'block_curr_admin');
         $result = delete_context($level, $this->id);
         $status = $this->data_delete_record();
     }
     return $status;
 }
Exemplo n.º 16
0
 /**
  *
  */
 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();
 }
Exemplo n.º 17
0
 /**
  * Test the autoenrol after course completion function.
  */
 public function test_check_autoenrol_after_course_completion()
 {
     $dataset = $this->createCsvDataSet(array(course::TABLE => elispm::file('tests/fixtures/pmcourse.csv'), pmclass::TABLE => elispm::file('tests/fixtures/pmclass.csv'), user::TABLE => elispm::file('tests/fixtures/pmuser.csv'), student::TABLE => elispm::file('tests/fixtures/student.csv'), waitlist::TABLE => elispm::file('tests/fixtures/waitlist2.csv')));
     $this->loadDataSet($dataset);
     $class = new pmclass(100);
     $class->load();
     $class->maxstudents = 2;
     $class->enrol_from_waitlist = 1;
     $class->save();
     $student = new student(array('userid' => 103, 'classid' => 100));
     $student->completestatusid = STUSTATUS_PASSED;
     $student->save();
     $return = waitlist::check_autoenrol_after_course_completion($student);
     $this->assertTrue($return);
 }
Exemplo n.º 18
0
function pm_course_complete($enrolment)
{
    track::check_autoenrol_after_course_completion($enrolment);
    waitlist::check_autoenrol_after_course_completion($enrolment);
    return true;
}
Exemplo n.º 19
0
 public function save()
 {
     $isnew = empty($this->id);
     parent::save();
     if (isset($this->track) && is_array($this->track)) {
         $param['classid'] = $this->id;
         $param['courseid'] = $this->courseid;
         foreach ($this->track as $t) {
             if (trackassignment::exists(array(new field_filter('classid', $this->id), new field_filter('trackid', $t)))) {
                 continue;
             }
             $param['trackid'] = $t;
             $trackassignobj = new trackassignment($param);
             $trackassignobj->save();
         }
     }
     if (isset($this->unlink_attached_course) && isset($this->moodlecourseid)) {
         // process unlink moodle course id request
         $return = moodle_detach_class($this->id, $this->moodlecourseid);
         $this->moodlecourseid = 0;
     }
     if ($this->moodlecourseid || $this->autocreate) {
         moodle_attach_class($this->id, $this->moodlecourseid, '', true, true, $this->autocreate);
     }
     if (!$isnew) {
         if (!empty($this->oldmax) && (!$this->maxstudents || $this->oldmax < $this->maxstudents) && ($waiting = waitlist::count_records($this->id)) > 0) {
             $start = student_count_records($this->id);
             $max = $this->maxstudents ? $this->maxstudents : $start + $waiting + 1;
             //error_log("pmclass.class.php::save() oldmax = {$this->oldmax}, start = {$start}, newmax = {$this->maxstudents}, waiting = {$waiting} ... max = {$max}");
             for ($i = $start; $i < $max; $i++) {
                 $next_student = waitlist::get_next($this->id);
                 if (empty($next_student)) {
                     break;
                 }
                 $next_student->enrol();
             }
         }
     }
     field_data::set_for_context_from_datarecord(CONTEXT_ELIS_CLASS, $this);
 }