From 3579ccac8e2b334d4caef57ffe5b01be21a5cf11 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 12 Oct 2010 16:13:07 -0700 Subject: [PATCH] Cascading deletion for user_group; doesn't yet work properly with caching. --- classes/User_group.php | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/classes/User_group.php b/classes/User_group.php index cfdcef2906..fabb8e8d5c 100644 --- a/classes/User_group.php +++ b/classes/User_group.php @@ -547,4 +547,36 @@ class User_group extends Memcached_DataObject $group->query('COMMIT'); return $group; } + + /** + * Handle cascading deletion, on the model of notice and profile. + * + * Pretty sure some caching won't get handled properly here. + */ + function delete() + { + if ($this->id) { + $related = array('Group_inbox', + 'Group_alias', + 'Group_block', + 'Group_member', + 'Local_group', + 'Related_group', + ); + Event::handle('UserGroupDeleteRelated', array($this, &$related)); + + foreach ($related as $cls) { + $inst = new $cls(); + $inst->group_id = $this->id; + $inst->delete(); + } + + $inst = new Related_group(); + $inst->related_group_id = $this->id; + $inst->delete(); + } else { + common_log(LOG_WARN, "Ambiguous user_group->delete(); skipping related tables."); + } + parent::delete(); + } }