From 76038fe20c7ebd732ffbc659827ab812ee5a4b6e Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 13 Oct 2010 22:44:06 -0400 Subject: [PATCH] better deletion of related objects in User_group::delete() --- classes/User_group.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/classes/User_group.php b/classes/User_group.php index 1f70057852..7d6e219148 100644 --- a/classes/User_group.php +++ b/classes/User_group.php @@ -559,16 +559,27 @@ class User_group extends Memcached_DataObject function delete() { if ($this->id) { + // Safe to delete in bulk for now + $related = array('Group_inbox', 'Group_block', 'Group_member', 'Related_group'); + Event::handle('UserGroupDeleteRelated', array($this, &$related)); + foreach ($related as $cls) { + $inst = new $cls(); $inst->group_id = $this->id; - $inst->delete(); + + if ($inst->find()) { + while ($inst->fetch()) { + $dup = clone($inst); + $dup->delete(); + } + } } // And related groups in the other direction... @@ -584,6 +595,10 @@ class User_group extends Memcached_DataObject if ($local) { $local->delete(); } + + // blow the cached ids + self::blow('user_group:notice_ids:%d', $this->id); + } else { common_log(LOG_WARN, "Ambiguous user_group->delete(); skipping related tables."); }