summaryrefslogtreecommitdiff
path: root/classes/User_group.php
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-03-03 19:00:02 +0000
committerBrion Vibber <brion@pobox.com>2010-03-03 19:00:02 +0000
commit3bb42d117027ebf610481ca3b0733854e0127e56 (patch)
treed0e5aa1f5fb0407879f4ba155dbfe170165a6dd6 /classes/User_group.php
parente6fd387c94f858a7cc63b90b02ad2afb135b6aba (diff)
Use poster's subscribed groups to disambiguate group linking when a remote group and a local group exist with the same name. (If you're a member of two groups with the same name though, there's not a defined winner.)
Diffstat (limited to 'classes/User_group.php')
-rw-r--r--classes/User_group.php20
1 files changed, 17 insertions, 3 deletions
diff --git a/classes/User_group.php b/classes/User_group.php
index 64fe024b3..1a5ddf253 100644
--- a/classes/User_group.php
+++ b/classes/User_group.php
@@ -279,12 +279,26 @@ class User_group extends Memcached_DataObject
return true;
}
- static function getForNickname($nickname)
+ static function getForNickname($nickname, $profile=null)
{
$nickname = common_canonical_nickname($nickname);
- $group = User_group::staticGet('nickname', $nickname);
+
+ // Are there any matching remote groups this profile's in?
+ if ($profile) {
+ $group = $profile->getGroups();
+ while ($group->fetch()) {
+ if ($group->nickname == $nickname) {
+ // @fixme is this the best way?
+ return clone($group);
+ }
+ }
+ }
+
+ // If not, check local groups.
+
+ $group = Local_group::staticGet('nickname', $nickname);
if (!empty($group)) {
- return $group;
+ return User_group::staticGet('id', $group->group_id);
}
$alias = Group_alias::staticGet('alias', $nickname);
if (!empty($alias)) {