]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
fixes #1305 - user and entity cache now cleared on delete
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Tue, 8 Dec 2009 12:46:53 +0000 (12:46 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Tue, 8 Dec 2009 12:46:53 +0000 (12:46 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@3743 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/lib/entities.php
engine/lib/users.php
engine/tests/objects/users.php

index ef99f764a2da8726baa132343f07ae3b75ed2d67..f86299c6edc249213e39ca20962072e6b6e29bbb 100644 (file)
@@ -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.
index 5892035a6ad14efb0a45ef64aa8a2a859a042986..0857c520af6eb41a34dcc675bd7b71c49661ab37 100644 (file)
@@ -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);
index ace683a8261e68d032a44b8a07d0aab8bc8ff0a2..c1403af1a1df2857504fa2512a6352484cbeed33 100644 (file)
@@ -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;