/** * Group deleted * * @param \core\event\group_deleted $event * @return void */ public static function group_deleted(\core\event\group_deleted $event) { global $DB; $group = $event->get_record_snapshot('groups', $event->objectid); $courseids = local_metagroups_parent_courses($group->courseid); foreach ($courseids as $courseid) { $course = get_course($courseid); if ($metagroup = $DB->get_record('groups', array('courseid' => $course->id, 'idnumber' => $group->id))) { groups_delete_group($metagroup); } } }
/** * Delete a group best effort, first removing members and links with courses and groupings. * Removes group avatar too. * * @param mixed $grouporid The id of group to delete or full group object * @return bool True if deletion was successful, false otherwise */ function groups_delete_group($grouporid) { global $CFG, $DB; require_once "{$CFG->libdir}/gdlib.php"; if (is_object($grouporid)) { $groupid = $grouporid->id; $group = $grouporid; } else { $groupid = $grouporid; if (!($group = $DB->get_record('groups', array('id' => $groupid)))) { //silently ignore attempts to delete missing already deleted groups ;-) return true; } } // delete group calendar events $DB->delete_records('event', array('groupid' => $groupid)); //first delete usage in groupings_groups $DB->delete_records('groupings_groups', array('groupid' => $groupid)); //delete members $DB->delete_records('groups_members', array('groupid' => $groupid)); //group itself last $DB->delete_records('groups', array('id' => $groupid)); // Delete all files associated with this group $context = context_course::instance($group->courseid); $fs = get_file_storage(); $fs->delete_area_files($context->id, 'group', 'description', $groupid); $fs->delete_area_files($context->id, 'group', 'icon', $groupid); // Invalidate the grouping cache for the course cache_helper::invalidate_by_definition('core', 'groupdata', array(), array($group->courseid)); // Trigger group event. $params = array('context' => $context, 'objectid' => $groupid); $event = \core\event\group_deleted::create($params); $event->add_record_snapshot('groups', $group); $event->trigger(); return true; }
/** * group_deleted * * @param \core\event\group_deleted $event Event object containing useful data * @return bool true if success */ public static function group_deleted(\core\event\group_deleted $event) { global $CFG, $DB; $data = $event->get_record_snapshot('groups', $event->objectid); $course = $DB->get_record('course', array('id' => $data->courseid), '*', MUST_EXIST); if (!($grouptools = get_all_instances_in_course('grouptool', $course))) { return true; } $grouprecreated = false; $agrpids = array(); foreach ($grouptools as $grouptool) { $cmid = $grouptool->coursemodule; switch ($grouptool->ifgroupdeleted) { default: case GROUPTOOL_RECREATE_GROUP: if (!$grouprecreated) { $newid = $DB->insert_record('groups', $data, true); if ($newid !== false) { // Delete auto-inserted agrp. if ($DB->record_exists('grouptool_agrps', array('groupid' => $newid))) { $DB->delete_records('grouptool_agrps', array('groupid' => $newid)); } // Update reference. if ($DB->record_exists('grouptool_agrps', array('groupid' => $data->id))) { $DB->set_field('grouptool_agrps', 'groupid', $newid, array('groupid' => $data->id)); } // Trigger event! $logdata = array('cmid' => $cmid, 'groupid' => $data->id, 'newid' => $newid, 'courseid' => $data->courseid); \mod_grouptool\event\group_recreated::create_from_object($logdata)->trigger(); if ($grouptool->immediate_reg) { require_once $CFG->dirroot . '/mod/grouptool/locallib.php'; $instance = new mod_grouptool($cmid, $grouptool); $instance->push_registrations(); } $grouprecreated = true; } else { print_error('error', 'moodle'); return false; } } else { if ($grouptool->immediate_reg) { require_once $CFG->dirroot . '/mod/grouptool/locallib.php'; $instance = new mod_grouptool($cmid, $grouptool); $instance->push_registrations(); } } break; case GROUPTOOL_DELETE_REF: if ($agrpid = $DB->get_field('grouptool_agrps', 'id', array('groupid' => $data->id, 'grouptoolid' => $grouptool->id))) { $agrpids[] = $agrpid; } break; } } if (count($agrpids) > 0) { $agrps = $DB->get_records_list('grouptool_agrps', 'id', $agrpids); $cms = array(); $regs = $DB->get_records_list('grouptool_registered', 'agrpid', $agrpids); $DB->delete_records_list('grouptool_registered', 'agrpid', $agrpids); foreach ($regs as $cur) { if (empty($cms[$agrps[$cur->agrpid]->grouptoolid])) { $cms[$agrps[$cur->agrpid]->grouptoolid] = get_coursemodule_from_instance('grouptool', $agrps[$cur->agrpid]->grouptoolid); } $cur->groupid = $agrps[$cur->agrpid]->groupid; \mod_grouptool\event\registration_deleted::create_via_eventhandler($cms[$agrps[$cur->agrpid]->grouptoolid], $cur); } $queues = $DB->get_records_list('grouptool_queued', 'agrpid', $agrpids); $DB->delete_records_list('grouptool_queued', 'agrpid', $agrpids); foreach ($queues as $cur) { if (empty($cms[$agrps[$cur->agrpid]->grouptoolid])) { $cms[$agrps[$cur->agrpid]->grouptoolid] = get_coursemodule_from_instance('grouptool', $agrps[$cur->agrpid]->grouptoolid); } // Trigger event! $cur->groupid = $agrps[$cur->agrpid]->groupid; \mod_grouptool\event\queue_entry_deleted::create_via_eventhandler($cms[$agrps[$cur->agrpid]->grouptoolid], $cur); } $DB->delete_records_list('grouptool_agrps', 'id', $agrpids); foreach ($agrps as $cur) { if (empty($cms[$cur->grouptoolid])) { $cms[$cur->grouptoolid] = get_coursemodule_from_instance('grouptool', $cur->grouptoolid); } // Trigger event! $logdata = new stdClass(); $logdata->id = $cur->id; $logdata->cmid = $cms[$cur->grouptoolid]->id; $logdata->groupid = $cur->groupid; $logdata->agrpid = $cur->id; $logdata->courseid = $data->courseid; \mod_grouptool\event\agrp_deleted::create_from_object($logdata); } } return true; }