From b93244395f2c5643ae5e1be1e4e1d652c6d654c1 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 6 Jan 2010 11:10:33 -0800 Subject: Fix for broken profile flag admin UI: delete stray flag entries when users are deleted so broken entries don't litter the lookups. * added ProfileDeleteRelated event to match UserDeleteRelated, to allow plugins to add extra related tables on profile deletion * UserFlagPlugin: deleting flags when target profile is deleted * UserFlagPlugin: deleting flags when flagging user is deleted * UserFlagPlugin: fix for autoloader -- class names are case-insensitive. We may get lowercase class names coming in at times, such as when creating DB objects programatically from a table name. Note that any already-existing bogus entries need to be removed from the database: select * from user_flag_profile where (select id from profile where id=profile_id) is null; select * from user_flag_profile where (select id from user where id=user_id) is null; --- classes/Profile.php | 1 + 1 file changed, 1 insertion(+) (limited to 'classes') diff --git a/classes/Profile.php b/classes/Profile.php index 03196447b..25d908dbf 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -504,6 +504,7 @@ class Profile extends Memcached_DataObject 'Reply', 'Group_member', ); + Event::handle('ProfileDeleteRelated', array($this, &$related)); foreach ($related as $cls) { $inst = new $cls(); -- cgit v1.2.3-54-g00ecf From 85554d0840642f4c1b47b50202dd648db565781c Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 6 Jan 2010 13:23:39 -0800 Subject: Rearrange Memcached_DataObject::staticGet() to avoid "only variables can be passed by reference" warnings when DB lookup fails and we return false. (We need to keep it returning a reference because the extlib parent class is stuck in PHP 4-land and uses references everywhere, including this function's return value. Yuck!) Also changed pkeyGet to drop the reference, since it doesn't have an upstream equivalent. --- classes/Memcached_DataObject.php | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'classes') diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php index d11bd6368..04f75b775 100644 --- a/classes/Memcached_DataObject.php +++ b/classes/Memcached_DataObject.php @@ -90,17 +90,16 @@ class Memcached_DataObject extends DB_DataObject unset($i); } $i = Memcached_DataObject::getcached($cls, $k, $v); - if ($i !== false) { // false == cache miss - return $i; - } else { + if ($i === false) { // false == cache miss $i = DB_DataObject::factory($cls); if (empty($i)) { - return false; + $i = false; + return $i; } $result = $i->get($k, $v); if ($result) { + // Hit! $i->encache(); - return $i; } else { // save the fact that no such row exists $c = self::memcache(); @@ -108,12 +107,16 @@ class Memcached_DataObject extends DB_DataObject $ck = self::cachekey($cls, $k, $v); $c->set($ck, null); } - return false; + $i = false; } } + return $i; } - function &pkeyGet($cls, $kv) + /** + * @fixme Should this return false on lookup fail to match staticGet? + */ + function pkeyGet($cls, $kv) { $i = Memcached_DataObject::multicache($cls, $kv); if ($i !== false) { // false == cache miss -- cgit v1.2.3-54-g00ecf From 4e2acd153b4e3208e24464478098fac458a13590 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Wed, 6 Jan 2010 14:28:40 -0800 Subject: ...and drop the unnecessary &reference from child class pkeyGet() overrides. --- classes/Avatar.php | 2 +- classes/Config.php | 2 +- classes/Fave.php | 2 +- classes/File_to_post.php | 2 +- classes/Group_block.php | 2 +- classes/Group_inbox.php | 2 +- classes/Group_member.php | 2 +- classes/Notice_inbox.php | 2 +- classes/Notice_tag.php | 2 +- classes/Profile_role.php | 2 +- classes/Queue_item.php | 2 +- classes/Subscription.php | 2 +- plugins/OpenID/User_openid_trustroot.php | 2 +- plugins/UserFlag/User_flag_profile.php | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) (limited to 'classes') diff --git a/classes/Avatar.php b/classes/Avatar.php index 8d6424e8b..91bde0f04 100644 --- a/classes/Avatar.php +++ b/classes/Avatar.php @@ -37,7 +37,7 @@ class Avatar extends Memcached_DataObject } } - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Avatar', $kv); } diff --git a/classes/Config.php b/classes/Config.php index 6d914ca1f..43b99587f 100644 --- a/classes/Config.php +++ b/classes/Config.php @@ -120,7 +120,7 @@ class Config extends Memcached_DataObject return $result; } - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Config', $kv); } diff --git a/classes/Fave.php b/classes/Fave.php index 11e876ff1..8113c8e16 100644 --- a/classes/Fave.php +++ b/classes/Fave.php @@ -32,7 +32,7 @@ class Fave extends Memcached_DataObject return $fave; } - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Fave', $kv); } diff --git a/classes/File_to_post.php b/classes/File_to_post.php index e3db91b20..72a42b088 100644 --- a/classes/File_to_post.php +++ b/classes/File_to_post.php @@ -62,7 +62,7 @@ class File_to_post extends Memcached_DataObject } } - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('File_to_post', $kv); } diff --git a/classes/Group_block.php b/classes/Group_block.php index de2cf5f6e..9f4d59295 100644 --- a/classes/Group_block.php +++ b/classes/Group_block.php @@ -40,7 +40,7 @@ class Group_block extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Group_block', $kv); } diff --git a/classes/Group_inbox.php b/classes/Group_inbox.php index 1af7439f7..2a0787e38 100644 --- a/classes/Group_inbox.php +++ b/classes/Group_inbox.php @@ -20,7 +20,7 @@ class Group_inbox extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Group_inbox', $kv); } diff --git a/classes/Group_member.php b/classes/Group_member.php index 3c23a991f..069b2c7a1 100644 --- a/classes/Group_member.php +++ b/classes/Group_member.php @@ -21,7 +21,7 @@ class Group_member extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Group_member', $kv); } diff --git a/classes/Notice_inbox.php b/classes/Notice_inbox.php index d3ddad656..e350e6e2f 100644 --- a/classes/Notice_inbox.php +++ b/classes/Notice_inbox.php @@ -101,7 +101,7 @@ class Notice_inbox extends Memcached_DataObject return $ids; } - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Notice_inbox', $kv); } diff --git a/classes/Notice_tag.php b/classes/Notice_tag.php index 02740280f..79231f0b0 100644 --- a/classes/Notice_tag.php +++ b/classes/Notice_tag.php @@ -96,7 +96,7 @@ class Notice_tag extends Memcached_DataObject } } - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Notice_tag', $kv); } diff --git a/classes/Profile_role.php b/classes/Profile_role.php index afa7fb74e..74aca3730 100644 --- a/classes/Profile_role.php +++ b/classes/Profile_role.php @@ -43,7 +43,7 @@ class Profile_role extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Profile_role', $kv); } diff --git a/classes/Queue_item.php b/classes/Queue_item.php index 295c321b5..9c673540d 100644 --- a/classes/Queue_item.php +++ b/classes/Queue_item.php @@ -55,7 +55,7 @@ class Queue_item extends Memcached_DataObject return null; } - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Queue_item', $kv); } diff --git a/classes/Subscription.php b/classes/Subscription.php index fedfd5f19..faf1331cd 100644 --- a/classes/Subscription.php +++ b/classes/Subscription.php @@ -46,7 +46,7 @@ class Subscription extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('Subscription', $kv); } diff --git a/plugins/OpenID/User_openid_trustroot.php b/plugins/OpenID/User_openid_trustroot.php index 44288945b..0b411b8f7 100644 --- a/plugins/OpenID/User_openid_trustroot.php +++ b/plugins/OpenID/User_openid_trustroot.php @@ -22,7 +22,7 @@ class User_openid_trustroot extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('User_openid_trustroot', $kv); } diff --git a/plugins/UserFlag/User_flag_profile.php b/plugins/UserFlag/User_flag_profile.php index 658259452..063ed04ea 100644 --- a/plugins/UserFlag/User_flag_profile.php +++ b/plugins/UserFlag/User_flag_profile.php @@ -97,7 +97,7 @@ class User_flag_profile extends Memcached_DataObject * @return User_flag_profile found object or null */ - function &pkeyGet($kv) + function pkeyGet($kv) { return Memcached_DataObject::pkeyGet('User_flag_profile', $kv); } -- cgit v1.2.3-54-g00ecf