in classes/feature/usergroups/observers.php [324:460]
public static function handle_course_reset_started(\core\event\course_reset_started $event) {
global $CFG, $DB;
if (!\local_o365\utils::is_configured()) {
return false;
}
if (!\local_o365\feature\usergroups\utils::is_enabled()) {
return false;
}
$eventdata = $event->get_data();
$courseid = $eventdata['courseid'];
if (!$course = $DB->get_record('course', ['id' => $courseid])) {
return false;
}
if (!\local_o365\feature\usergroups\utils::course_is_group_enabled($courseid)) {
return false;
}
$connectedtoteam = false;
if (\local_o365\feature\usergroups\utils::course_is_group_feature_enabled($courseid, 'team')) {
// The course is configured to be connected to Team.
if (!$o365object = $DB->get_record('local_o365_objects',
['type' => 'group', 'subtype' => 'courseteam', 'moodleid' => $courseid])) {
// The team cannot be found.
return false;
}
$connectedtoteam = true;
} else {
// The course is configured to be connected to group.
if (!$o365object = $DB->get_record('local_o365_objects',
['type' => 'group', 'subtype' => 'course', 'moodleid' => $courseid])) {
return false;
}
}
// Get coursegroups API.
$apiclient = static::get_unified_api('handle_course_reset_started');
if (empty($apiclient)) {
return false;
}
$coursegroups = new \local_o365\feature\usergroups\coursegroups($apiclient, false);
// All validation passed. Start processing.
$siteresetsetting = get_config('local_o365', 'course_reset_teams');
$createteams = get_config('local_o365', 'createteams');
switch ($createteams) {
case 'off':
$siteresetsetting = TEAMS_GROUP_COURSE_RESET_SITE_SETTING_DISCONNECT_ONLY;
break;
case 'onall':
if ($siteresetsetting == TEAMS_GROUP_COURSE_RESET_SITE_SETTING_DISCONNECT_ONLY) {
$siteresetsetting = TEAMS_GROUP_COURSE_RESET_SITE_SETTING_DISCONNECT_AND_CREATE_NEW;
}
break;
}
switch ($siteresetsetting) {
case TEAMS_GROUP_COURSE_RESET_SITE_SETTING_PER_COURSE:
// Check course settings.
if ($DB->record_exists('config_plugins', ['plugin' => 'block_microsoft', 'name' => 'version'])) {
// Plugin found.
if (file_exists($CFG->dirroot . '/blocks/microsoft/lib.php')) {
require_once($CFG->dirroot . '/blocks/microsoft/lib.php');
$courseresetsetting = block_microsoft_get_course_reset_setting($courseid);
if ($connectedtoteam) {
switch ($createteams) {
case 'off':
$courseresetsetting = TEAMS_COURSE_RESET_SETTING_DISCONNECT_ONLY;
break;
case 'onall':
if ($courseresetsetting == TEAMS_COURSE_RESET_SETTING_DISCONNECT_ONLY) {
$courseresetsetting = TEAMS_COURSE_RESET_SETTING_DISCONNECT_AND_CREATE_NEW;
}
break;
}
switch ($courseresetsetting) {
case TEAMS_COURSE_RESET_SETTING_DISCONNECT_AND_CREATE_NEW:
$coursegroups->process_course_reset_team($course, $o365object, true);
break;
case TEAMS_COURSE_RESET_SETTING_DISCONNECT_ONLY:
$coursegroups->process_course_reset_team($course, $o365object, false);
utils::set_course_group_enabled($courseid, false, true);
break;
}
} else {
switch ($createteams) {
case 'off':
$courseresetsetting = GROUP_COURSE_RESET_SETTING_DISCONNECT_ONLY;
break;
case 'onall':
if ($courseresetsetting == GROUP_COURSE_RESET_SETTING_DISCONNECT_AND_CREATE_NEW) {
$courseresetsetting = GROUP_COURSE_RESET_SETTING_DISCONNECT_AND_CREATE_NEW;
}
break;
}
switch ($courseresetsetting) {
case GROUP_COURSE_RESET_SETTING_DISCONNECT_AND_CREATE_NEW:
$coursegroups->process_course_reset_group($course, $o365object, true);
break;
case GROUP_COURSE_RESET_SETTING_DISCONNECT_AND_CREATE_NEW:
$coursegroups->process_course_reset_group($course, $o365object, false);
utils::set_course_group_enabled($courseid, false, true);
break;
}
}
}
}
break;
case TEAMS_GROUP_COURSE_RESET_SITE_SETTING_DISCONNECT_AND_CREATE_NEW:
if ($connectedtoteam) {
$coursegroups->process_course_reset_team($course, $o365object, true);
} else {
$coursegroups->process_course_reset_group($course, $o365object, true);
}
break;
case TEAMS_GROUP_COURSE_RESET_SITE_SETTING_DISCONNECT_ONLY:
if ($connectedtoteam) {
$coursegroups->process_course_reset_team($course, $o365object, false);
} else {
$coursegroups->process_course_reset_group($course, $o365object, false);
}
utils::set_course_group_enabled($courseid, false, true);
break;
}
return true;
}