/** * Kohl's KW - WP06A - Google calendar integration * * If the unassigned user belongs to a course with an upcoming * face-to-face session and they are signed-up to attend, cancel * the sign-up (and trigger notification). */ function facetoface_eventhandler_role_unassigned_bulk($event) { global $CFG, $USER, $DB; $now = time(); $tmptable = $event['tmptable']; $hascontextid = $event['hascontextid']; $hasuserid = $event['hasuserid']; $hasroleid = $event['hasroleid']; $enrol = $event['enrol']; // Nothing to do if there are no contexts or userids if (!$hascontextid || !$hasuserid) { return true; } $sql = "SELECT DISTINCT cx.id, cx.* from {context} cx inner join {{$tmptable}} t on cx.id=t.contextid where cx.contextlevel="; $ctxlist = $DB->get_records_sql($sql, array(CONTEXT_COURSE)); if (!$ctxlist) { return true; } foreach ($ctxlist as $ctx) { // get all face-to-face activites in the course $activities = $DB->get_records('facetoface', array('course' => $ctx->instanceid)); if ($activities) { foreach ($activities as $facetoface) { // get all upcoming sessions for each face-to-face $sql = "SELECT s.id, s.facetoface, s.datetimeknown, s.capacity, s.duration, d.timestart, d.timefinish FROM {facetoface_sessions} s JOIN {facetoface_sessions_dates} d ON s.id = d.sessionid WHERE s.facetoface = ? AND d.sessionid = s.id AND (s.datetimeknown = 0 OR d.timestart > ?) ORDER BY s.datetimeknown, d.timestart "; if ($sessions = get_records_sql($sql, array($facetoface->id, $now))) { $cancelreason = "Unenrolled from course"; foreach ($sessions as $session) { $session = facetoface_get_session($session->id); // load dates etc. // remove trainer session assignments for user (if any exist) if ($trainers = facetoface_get_trainers($session->id)) { foreach ($trainers as $role_id => $users) { foreach ($users as $user_id => $trainer) { if ( record_exists($t, 'userid', $trainer->id, 'contextid', $ctx->id) ) { $form = $trainers; unset($form[$role_id][$user_id]); // remove trainer facetoface_update_trainers($session->id, $form); break; } } } } $signups = $DB->get_records_sql("SELECT DISTINCT t.userid FROM {{$tmptable}} t INNER JOIN {facetoface_signups} fs ON t.userid=fs.userid WHERE fs.sessionid=?", array($session->id)); if (!$signups) { $signups = array(); } foreach ($signups as $signup) { // cancel learner signup for user (if any exist) $errorstr = ''; if (facetoface_user_cancel($session, $signup->userid, true, $errorstr, $cancelreason)) { facetoface_send_cancellation_notice($facetoface, $session, $signup->userid); } } } } } } } return true; }
} } foreach ($customfields as $field) { $fieldname = "custom_{$field->shortname}"; if (!isset($fromform->{$fieldname})) { $fromform->{$fieldname} = ''; // Need to be able to clear fields. } if (!facetoface_save_customfield_value($field->id, $fromform->{$fieldname}, $sessionid, 'session')) { $transaction->force_transaction_rollback(); print_error('error:couldnotsavecustomfield', 'facetoface', $returnurl); } } // Save trainer roles. if (isset($fromform->trainerrole)) { facetoface_update_trainers($sessionid, $fromform->trainerrole); } // Retrieve record that was just inserted/updated. if (!($session = facetoface_get_session($sessionid))) { $transaction->force_transaction_rollback(); print_error('error:couldnotfindsession', 'facetoface', $returnurl); } // Update calendar entries. facetoface_update_calendar_entries($session, $facetoface); if ($update) { // Logging and events trigger. $params = array('context' => $modulecontext, 'objectid' => $session->id); $event = \mod_facetoface\event\update_session::create($params); $event->add_record_snapshot('facetoface_sessions', $session); $event->add_record_snapshot('facetoface', $facetoface); $event->trigger();