Пример #1
0
 /**
  * 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);
         }
     }
 }
Пример #2
0
/**
 * 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;
}
Пример #3
0
 /**
  * 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;
 }