diff options
author | marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2009-04-22 15:20:13 +0000 |
---|---|---|
committer | marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2009-04-22 15:20:13 +0000 |
commit | 8b5fd806d6871aaeb179376328a8af215ed44f88 (patch) | |
tree | a31f8cc50864e11f850e610eaa2877e8f4419e45 /engine/lib | |
parent | d99f1028ce873ab99c345dcea5b4fba67d73203d (diff) | |
download | elgg-8b5fd806d6871aaeb179376328a8af215ed44f88.tar.gz elgg-8b5fd806d6871aaeb179376328a8af215ed44f88.tar.bz2 |
Closes #957: Annotations and metadata owned by a deleted user are now also deleted.
git-svn-id: https://code.elgg.org/elgg/trunk@3227 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'engine/lib')
-rw-r--r-- | engine/lib/annotations.php | 21 | ||||
-rw-r--r-- | engine/lib/entities.php | 3 | ||||
-rw-r--r-- | engine/lib/metadata.php | 21 | ||||
-rw-r--r-- | engine/lib/users.php | 15 |
4 files changed, 59 insertions, 1 deletions
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index 8ad918180..dd647444a 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -820,6 +820,27 @@ }
}
+ } + + /** + * Clear all annotations belonging to a given owner_guid + * + * @param int $owner_guid The owner + */ + function clear_annotations_by_owner($owner_guid) + { + $owner_guid = (int)$owner_guid; + + $annotations = get_data("SELECT id from {$CONFIG->dbprefix}annotations WHERE owner_guid=$owner_guid"); + $deleted = 0; + + foreach ($annotations as $id) + { + if (delete_annotation($id)) // Is this the best way? + $deleted++; + } + + return $deleted; }
/**
diff --git a/engine/lib/entities.php b/engine/lib/entities.php index ff4487570..fc572e29a 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -1843,7 +1843,7 @@ $entity->clearAnnotations();
$entity->clearRelationships();
remove_from_river_by_subject($guid);
- remove_from_river_by_object($guid);
+ remove_from_river_by_object($guid);
$res = delete_data("DELETE from {$CONFIG->dbprefix}entities where guid={$guid}"); if ($res) { @@ -2777,6 +2777,7 @@ // Allow a permission override for recursive entity deletion
// TODO: Can this be done better?
register_plugin_hook('permissions_check','all','recursive_delete_permissions_check'); + register_plugin_hook('permissions_check:metadata','all','recursive_delete_permissions_check'); register_plugin_hook('gc','system','entities_gc');
}
diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index 3decc1461..57987107c 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -730,6 +730,27 @@ return delete_data("DELETE from {$CONFIG->dbprefix}metadata where entity_guid={$entity_guid}");
}
return false;
+ } + + /** + * Clear all annotations belonging to a given owner_guid + * + * @param int $owner_guid The owner + */ + function clear_metadata_by_owner($owner_guid) + { + $owner_guid = (int)$owner_guid; + + $metas = get_data("SELECT id from {$CONFIG->dbprefix}metadata WHERE owner_guid=$owner_guid"); + $deleted = 0; + + foreach ($metas as $id) + { + if (delete_metadata($id)) // Is this the best way? + $deleted++; + } + + return $deleted; }
/**
diff --git a/engine/lib/users.php b/engine/lib/users.php index e45223e54..5a9234dc6 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -143,6 +143,21 @@ // Now save specific stuff
return create_user_entity($this->get('guid'), $this->get('name'), $this->get('username'), $this->get('password'), $this->get('salt'), $this->get('email'), $this->get('language'), $this->get('code'));
+ } + + /** + * User specific override of the entity delete method. + * + * @return bool + */ + public function delete() + { + // Delete owned data + clear_annotations_by_owner($this->owner_guid); + clear_metadata_by_owner($this->owner_guid); + + // Delete entity + return parent::delete(); }
/**
|