]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Use poster's subscribed groups to disambiguate group linking when a remote group...
authorBrion Vibber <brion@pobox.com>
Wed, 3 Mar 2010 19:00:02 +0000 (19:00 +0000)
committerBrion Vibber <brion@pobox.com>
Wed, 3 Mar 2010 19:00:02 +0000 (19:00 +0000)
classes/Notice.php
classes/Profile.php
classes/User.php
classes/User_group.php
lib/util.php

index c1263c782101536acafbc0490e34b48f97092950..97cb3b8fbe0e6dae58f6ee512fedbee70e47b5fd 100644 (file)
@@ -877,7 +877,7 @@ class Notice extends Memcached_DataObject
 
         foreach (array_unique($match[1]) as $nickname) {
             /* XXX: remote groups. */
-            $group = User_group::getForNickname($nickname);
+            $group = User_group::getForNickname($nickname, $profile);
 
             if (empty($group)) {
                 continue;
index 470ef33207da5e7e9a49cb9b1f3768512c0d86d2..9c2fa7a0c5664ca49d73f66cdc74db5178a3e886 100644 (file)
@@ -282,6 +282,32 @@ class Profile extends Memcached_DataObject
         }
     }
 
+    function getGroups($offset=0, $limit=null)
+    {
+        $qry =
+          'SELECT user_group.* ' .
+          'FROM user_group JOIN group_member '.
+          'ON user_group.id = group_member.group_id ' .
+          'WHERE group_member.profile_id = %d ' .
+          'ORDER BY group_member.created DESC ';
+
+        if ($offset>0 && !is_null($limit)) {
+            if ($offset) {
+                if (common_config('db','type') == 'pgsql') {
+                    $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
+                } else {
+                    $qry .= ' LIMIT ' . $offset . ', ' . $limit;
+                }
+            }
+        }
+
+        $groups = new User_group();
+
+        $cnt = $groups->query(sprintf($qry, $this->id));
+
+        return $groups;
+    }
+
     function avatarUrl($size=AVATAR_PROFILE_SIZE)
     {
         $avatar = $this->getAvatar($size);
index 57d76731b8a288f8d45bc1ba15dab42f48130125..aa9fbf94838f3b64427efdc4196b74c3a4624fce 100644 (file)
@@ -612,28 +612,8 @@ class User extends Memcached_DataObject
 
     function getGroups($offset=0, $limit=null)
     {
-        $qry =
-          'SELECT user_group.* ' .
-          'FROM user_group JOIN group_member '.
-          'ON user_group.id = group_member.group_id ' .
-          'WHERE group_member.profile_id = %d ' .
-          'ORDER BY group_member.created DESC ';
-
-        if ($offset>0 && !is_null($limit)) {
-            if ($offset) {
-                if (common_config('db','type') == 'pgsql') {
-                    $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset;
-                } else {
-                    $qry .= ' LIMIT ' . $offset . ', ' . $limit;
-                }
-            }
-        }
-
-        $groups = new User_group();
-
-        $cnt = $groups->query(sprintf($qry, $this->id));
-
-        return $groups;
+        $profile = $this->getProfile();
+        return $profile->getGroups($offset, $limit);
     }
 
     function getSubscriptions($offset=0, $limit=null)
index 64fe024b34de06deeb19495aa4c429bb7f7f1502..1a5ddf2533477ba9122ea858052ef748f8c36c47 100644 (file)
@@ -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)) {
index add1b0ae67e4ec5512713244627e2d5a4deac2d2..46be920fa7940aa671155985170cf5552af77c64 100644 (file)
@@ -853,7 +853,7 @@ function common_valid_profile_tag($str)
 function common_group_link($sender_id, $nickname)
 {
     $sender = Profile::staticGet($sender_id);
-    $group = User_group::getForNickname($nickname);
+    $group = User_group::getForNickname($nickname, $sender);
     if ($sender && $group && $sender->isMember($group)) {
         $attrs = array('href' => $group->permalink(),
                        'class' => 'url');