diff --git a/classes/User_group.php b/classes/User_group.php index fabb8e8d5c..1f70057852 100644 --- a/classes/User_group.php +++ b/classes/User_group.php @@ -551,29 +551,39 @@ class User_group extends Memcached_DataObject /** * Handle cascading deletion, on the model of notice and profile. * - * Pretty sure some caching won't get handled properly here. + * This should handle freeing up cached entries for the group's + * id, nickname, URI, and aliases. There may be other areas that + * are not de-cached in the UI, including the sidebar lists on + * GroupsAction */ function delete() { if ($this->id) { + // Safe to delete in bulk for now $related = array('Group_inbox', - 'Group_alias', 'Group_block', 'Group_member', - 'Local_group', - 'Related_group', - ); + 'Related_group'); Event::handle('UserGroupDeleteRelated', array($this, &$related)); - foreach ($related as $cls) { $inst = new $cls(); $inst->group_id = $this->id; $inst->delete(); } + // And related groups in the other direction... $inst = new Related_group(); $inst->related_group_id = $this->id; $inst->delete(); + + // Aliases and the local_group entry need to be cleared explicitly + // or we'll miss clearing some cache keys; that can make it hard + // to create a new group with one of those names or aliases. + $this->setAliases(array()); + $local = Local_group::staticGet('group_id', $this->id); + if ($local) { + $local->delete(); + } } else { common_log(LOG_WARN, "Ambiguous user_group->delete(); skipping related tables."); }