]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
NoticeListItem attentions showed double for User_group
authorMikael Nordfeldth <mmn@hethane.se>
Wed, 30 Oct 2013 11:56:17 +0000 (12:56 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Wed, 30 Oct 2013 11:56:17 +0000 (12:56 +0100)
...because they each have their own Profile now! Whiie!

classes/Profile.php
classes/User_group.php
lib/nosuchgroupexception.php [new file with mode: 0644]
lib/nosuchuserexception.php
lib/noticelistitem.php
plugins/Xmpp/README

index 4e0632ba0ac998db4520050942dbcd418514d0b3..c93ba07c29b020cbb50ed459230e482807a5db3f 100644 (file)
@@ -99,13 +99,37 @@ class Profile extends Managed_DataObject
         if ($this->_user === -1) {
             $this->_user = User::getKV('id', $this->id);
         }
-        if (!($this->_user instanceof User)) {
+        if (!$this->_user instanceof User) {
             throw new NoSuchUserException(array('id'=>$this->id));
         }
 
         return $this->_user;
     }
 
+    protected $_group = -1;
+
+    public function getGroup()
+    {
+        if ($this->_group === -1) {
+            $this->_group = User_group::getKV('profile_id', $this->id);
+        }
+        if (!$this->_group instanceof User_group) {
+            throw new NoSuchGroupException(array('profile_id'=>$this->id));
+        }
+
+        return $this->_group;
+    }
+
+    public function isGroup()
+    {
+        try {
+            $this->getGroup();
+            return true;
+        } catch (NoSuchGroupException $e) {
+            return false;
+        }
+    }
+
     public function isLocal()
     {
         try {
index 22b8d0bc04c7ab3004c93f9450ad8eaa9d00e3b2..590cc47bc7bdb4fdc83f388e8a9ff9f1fa643062 100644 (file)
@@ -62,6 +62,7 @@ class User_group extends Managed_DataObject
             'primary key' => array('id'),
             'unique keys' => array(
                 'user_group_uri_key' => array('uri'),
+// when it's safe and everyone's run upgrade.php                'user_profile_id_key' => array('profile_id'),
             ),
             'foreign keys' => array(
                 'user_group_id_fkey' => array('profile', array('profile_id' => 'id')),
diff --git a/lib/nosuchgroupexception.php b/lib/nosuchgroupexception.php
new file mode 100644 (file)
index 0000000..fffd944
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * class for an exception when a User_group is not found by certain criteria
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Exception
+ * @package   GNUsocial
+ * @author    Evan Prodromou <evan@status.net>
+ * @author    Mikael Nordfeldth <mmn@hethane.se>
+ * @copyright 2013 Free Software Foundation, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link      http://status.net/
+ */
+
+if (!defined('GNUSOCIAL')) { exit(1); }
+
+/**
+ * Class for an exception when a local user is not found by certain criteria
+ *
+ * @category Exception
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @author   Mikael Nordfeldth <mmn@hethane.se>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link     http://status.net/
+ */
+
+class NoSuchGroupException extends ServerException
+{
+    public $data = array();
+
+    /**
+     * constructor
+     *
+     * @param array $data User_group search criteria
+     */
+
+    public function __construct(array $data)
+    {
+        // filter on unique keys for User_group entries
+        foreach(array('id', 'profile_id') as $key) {
+            if (isset($data[$key]) && !empty($data[$key])) {
+                $this->data[$key] = $data[$key];
+            }
+        }
+
+        // Here we could log the failed lookup
+
+        parent::__construct(_('No such user found.'));
+    }
+}
index 0fa1c8d3db87c30d55b3cf4108673590c82a78f6..ade5d924a062ab79ed19e5b95ed3fe2a920cc865 100644 (file)
@@ -28,9 +28,7 @@
  * @link      http://status.net/
  */
 
-if (!defined('STATUSNET')) {
-    exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
 
 /**
  * Class for an exception when a local user is not found by certain criteria
index 19d6674ae35f9387590f70f0f0a0d3ae6514aed3..734342819db553f49eb797e6c2de798926643dcc 100644 (file)
@@ -241,15 +241,12 @@ class NoticeListItem extends Widget
 
     function showAddressees()
     {
-        $ga = $this->getGroupAddressees();
         $pa = $this->getProfileAddressees();
 
-        $a = array_merge($ga, $pa);
-
-        if (!empty($a)) {
+        if (!empty($pa)) {
             $this->out->elementStart('span', 'addressees');
             $first = true;
-            foreach ($a as $addr) {
+            foreach ($pa as $addr) {
                 if (!$first) {
                     // TRANS: Separator in profile addressees list.
                     $this->out->text(_m('SEPARATOR',', '));
@@ -265,46 +262,22 @@ class NoticeListItem extends Widget
         }
     }
 
-    function getGroupAddressees()
-    {
-        $ga = array();
-
-        $groups = $this->getGroups();
-
-        $user = common_current_user();
-
-        $streamNicknames = !empty($user) && $user->streamNicknames();
-
-        foreach ($groups as $group) {
-            $ga[] = array('href' => $group->homeUrl(),
-                          'title' => $group->nickname,
-                          'class' => 'addressee group',
-                          'text' => ($streamNicknames) ? $group->nickname : $group->getBestName());
-        }
-
-        return $ga;
-    }
-
-    function getGroups()
-    {
-        return $this->notice->getGroups();
-    }
-
     function getProfileAddressees()
     {
         $pa = array();
 
-        $replies = $this->getReplyProfiles();
+        $attentions = $this->getReplyProfiles();
 
         $user = common_current_user();
 
         $streamNicknames = !empty($user) && $user->streamNicknames();
 
-        foreach ($replies as $reply) {
-            $pa[] = array('href' => $reply->profileurl,
-                          'title' => $reply->nickname,
-                          'class' => 'addressee account',
-                          'text' => ($streamNicknames) ? $reply->nickname : $reply->getBestName());
+        foreach ($attentions as $attn) {
+            $class = $attn->isGroup() ? 'group' : 'account';
+            $pa[] = array('href' => $attn->profileurl,
+                          'title' => $attn->nickname,
+                          'class' => "addressee {$class}",
+                          'text' => ($streamNicknames) ? $attn->nickname : $attn->getBestName());
         }
 
         return $pa;
index 3b1093c886c3bf401f44fdc975a9836f2bd8e1ff..a8ec7da73a629406cc822733b4a92fc06692bd9d 100644 (file)
@@ -17,7 +17,7 @@ Settings
 ========
 user*: user part of the jid
 server*: server part of the jid
-resource*: resource part of the jid
+resource (gnusocial): resource part of the jid
 port (5222): port on which to connect to the server
 encryption (true): use encryption on the connection
 host (same as server): host to connect to. Usually, you won't set this.