summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/Profile.php75
-rw-r--r--classes/User.php43
2 files changed, 118 insertions, 0 deletions
diff --git a/classes/Profile.php b/classes/Profile.php
index f926b2cef..0ee6fa657 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -461,4 +461,79 @@ class Profile extends Memcached_DataObject
$c->delete(common_cache_key('profile:notice_count:'.$this->id));
}
}
+
+ function delete()
+ {
+ $this->_deleteNotices();
+ $this->_deleteSubscriptions();
+ $this->_deleteMessages();
+ $this->_deleteTags();
+ $this->_deleteBlocks();
+
+ $related = array('Avatar',
+ 'Reply',
+ 'Group_member',
+ );
+
+ foreach ($related as $cls) {
+ $inst = new $cls();
+ $inst->profile_id = $this->id;
+ $inst->delete();
+ }
+
+ parent::delete();
+ }
+
+ function _deleteNotices()
+ {
+ $notice = new Notice();
+ $notice->profile_id = $this->id;
+
+ if ($notice->find()) {
+ while ($notice->fetch()) {
+ $other = clone($notice);
+ $other->delete();
+ }
+ }
+ }
+
+ function _deleteSubscriptions()
+ {
+ $sub = new Subscription();
+ $sub->subscriber = $this->id;
+ $sub->delete();
+
+ $subd = new Subscription();
+ $subd->subscribed = $this->id;
+ $subd->delete();
+ }
+
+ function _deleteMessages()
+ {
+ $msg = new Message();
+ $msg->from_profile = $this->id;
+ $msg->delete();
+
+ $msg = new Message();
+ $msg->to_profile = $this->id;
+ $msg->delete();
+ }
+
+ function _deleteTags()
+ {
+ $tag = new Profile_tag();
+ $tag->tagged = $this->id;
+ $msg->delete();
+ }
+
+ function _deleteBlocks()
+ {
+ $block = new Profile_block();
+ $block->blocked = $this->id;
+ $block->delete();
+
+ $block = new Group_block();
+ $block->blocked = $this->id;
+ $block->delete();
+ }
}
diff --git a/classes/User.php b/classes/User.php
index bea47a3b0..991e9c18f 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -685,4 +685,47 @@ class User extends Memcached_DataObject
{
return Design::staticGet('id', $this->design_id);
}
+
+ function delete()
+ {
+ $profile = $this->getProfile();
+ $profile->delete();
+
+ $related = array('Fave',
+ 'User_openid',
+ 'Confirm_address',
+ 'Remember_me',
+ 'Foreign_link',
+ 'Invitation',
+ );
+
+ if (common_config('inboxes', 'enabled')) {
+ $related[] = 'Notice_inbox';
+ }
+
+ foreach ($related as $cls) {
+ $inst = new $cls();
+ $inst->user_id = $this->id;
+ $inst->delete();
+ }
+
+ $this->_deleteTags();
+
+ parent::delete();
+ }
+
+ function _deleteTags()
+ {
+ $tag = new Profile_tag();
+ $tag->tagger = $this->id;
+ $tag->delete();
+ }
+
+ function _deleteBlocks()
+ {
+ $block = new Profile_block();
+ $block->blocker = $this->id;
+ $block->delete();
+ // XXX delete group block? Reset blocker?
+ }
}