diff options
-rw-r--r-- | engine/lib/entities.php | 7 | ||||
-rw-r--r-- | engine/lib/users.php | 10 | ||||
-rw-r--r-- | engine/tests/objects/users.php | 14 |
3 files changed, 30 insertions, 1 deletions
diff --git a/engine/lib/entities.php b/engine/lib/entities.php index ef99f764a..f86299c6e 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -2399,13 +2399,18 @@ function enable_entity($guid) { * Note: this bypasses ownership of sub items. */ function delete_entity($guid, $recursive = true) { - global $CONFIG; + global $CONFIG, $ENTITY_CACHE; $guid = (int)$guid; if ($entity = get_entity($guid)) { if (trigger_elgg_event('delete', $entity->type, $entity)) { if ($entity->canEdit()) { + // delete cache + if (isset($ENTITY_CACHE[$guid])) { + invalidate_cache_for_entity($guid); + } + // Delete contained owned and otherwise releated objects (depth first) if ($recursive) { // Temporary token overriding access controls TODO: Do this better. diff --git a/engine/lib/users.php b/engine/lib/users.php index 5892035a6..0857c520a 100644 --- a/engine/lib/users.php +++ b/engine/lib/users.php @@ -153,6 +153,16 @@ class ElggUser extends ElggEntity * @return bool */ public function delete() { + global $USERNAME_TO_GUID_MAP_CACHE, $CODE_TO_GUID_MAP_CACHE; + + // clear cache + if (isset($USERNAME_TO_GUID_MAP_CACHE[$this->username])) { + unset($USERNAME_TO_GUID_MAP_CACHE[$this->username]); + } + if (isset($CODE_TO_GUID_MAP_CACHE[$this->code])) { + unset($CODE_TO_GUID_MAP_CACHE[$this->code]); + } + // Delete owned data clear_annotations_by_owner($this->guid); clear_metadata_by_owner($this->guid); diff --git a/engine/tests/objects/users.php b/engine/tests/objects/users.php index ace683a82..c1403af1a 100644 --- a/engine/tests/objects/users.php +++ b/engine/tests/objects/users.php @@ -162,6 +162,20 @@ class ElggCoreUserTest extends ElggCoreUnitTest { $this->assertFalse($this->fetchUser($guid)); } + public function testElggUserNameCache() { + // Trac #1305 + + // very unlikely a user would have this username + $name = (string)time(); + $this->user->username = $name; + + $guid = $this->user->save(); + + $user = get_user_by_username($name); + $user->delete(); + $user = get_user_by_username($name); + $this->assertFalse($user); + } protected function fetchUser($guid) { global $CONFIG; |