/** * Handle cascading deletion, on the model of notice and profile. * * 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_block', 'Group_member', 'Related_group'); Event::handle('UserGroupDeleteRelated', array($this, &$related)); foreach ($related as $cls) { $inst = new $cls(); $inst->group_id = $this->id; if ($inst->find()) { while ($inst->fetch()) { $dup = clone $inst; $dup->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(); } // 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."); } parent::delete(); }
/** * Handle cascading deletion, on the model of notice and profile. * * 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($useWhere = false) { if (empty($this->id)) { common_log(LOG_WARNING, "Ambiguous User_group->delete(); skipping related tables."); return parent::delete($useWhere); } try { $profile = $this->getProfile(); $profile->delete(); } catch (GroupNoProfileException $unp) { common_log(LOG_INFO, "Group {$this->nickname} has no profile; continuing deletion."); } // 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; if ($inst->find()) { while ($inst->fetch()) { $dup = clone $inst; $dup->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()); // $this->isLocal() but we're using the resulting object $local = Local_group::getKV('group_id', $this->id); if ($local instanceof Local_group) { $local->delete(); } // blow the cached ids self::blow('user_group:notice_ids:%d', $this->id); return parent::delete($useWhere); }