]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Added tagsub to the left-hand menu
authorEvan Prodromou <evan@status.net>
Tue, 5 Apr 2011 22:14:48 +0000 (18:14 -0400)
committerEvan Prodromou <evan@status.net>
Tue, 5 Apr 2011 22:14:48 +0000 (18:14 -0400)
plugins/TagSub/TagSub.php
plugins/TagSub/TagSubPlugin.php
plugins/TagSub/tagsubmenu.php [new file with mode: 0644]

index a734b4fc5fc709a7695928139d3fd2099807fac2..c2da072693c6a892db206f93f89552387c705ff5 100644 (file)
@@ -120,6 +120,7 @@ class TagSub extends Managed_DataObject
         $ts->profile_id = $profile->id;
         $ts->created = common_sql_now();
         $ts->insert();
+        self::blow('tagsub:by_profile:%d', $profile->id);
         return $ts;
     }
 
@@ -135,6 +136,32 @@ class TagSub extends Managed_DataObject
                                     'profile_id' => $profile->id));
         if ($ts) {
             $ts->delete();
+            self::blow('tagsub:by_profile:%d', $profile->id);
         }
     }
+
+    static function forProfile(Profile $profile)
+    {
+        $tags = array();
+
+        $keypart = sprintf('tagsub:by_profile:%d', $profile->id);
+        $tagstring = self::cacheGet($keypart);
+        
+        if ($tagstring !== false) {
+            $tags = explode(',', $tagstring);
+        } else {
+            $tagsub = new TagSub();
+            $tagsub->profile_id = $profile->id;
+
+            if ($tagsub->find()) {
+                while ($tagsub->fetch()) {
+                    $tags[] = $tagsub->tag;
+                }
+            }
+
+            self::cacheSet($keypart, implode(',', $tags));
+        }
+
+        return $tags;
+    }
 }
index 53a06ab5bf701cdaf9ddb1beb8abe3947c4fd8f3..13e525bb62d5529955d187e946a802760910b3dd 100644 (file)
@@ -80,6 +80,7 @@ class TagSubPlugin extends Plugin
         case 'TagunsubAction':
         case 'TagsubsAction':
         case 'TagSubForm':
+        case 'TagSubMenu':
         case 'TagUnsubForm':
             include_once $dir.'/'.strtolower($cls).'.php';
             return false;
@@ -239,4 +240,28 @@ class TagSubPlugin extends Plugin
         }
         return true;
     }
+
+    function onEndDefaultLocalNav($menu, $user)
+    {
+        $user = common_current_user();
+
+        $tags = TagSub::forProfile($user->getProfile());
+
+        if (!empty($tags)) {
+            $tagSubMenu = new TagSubMenu($menu->out, $user, $tags);
+            $menu->submenu(_m('Tags'), $tagSubMenu);
+        }
+
+        foreach ($tags as $tag) {
+                $menu->out->menuItem(common_local_url('tag',
+                                                      array('tag' => $tag)),
+                                     sprintf('#%s', $tag),
+                                     sprintf(_('Notices tagged with %s'), $tag),
+                                     $menu->actionName == 'tag' && $menu->action->arg('tag') == $tag,
+                                     'nav_streams_tag_'.$tag);
+        }
+
+        return true;
+    }
+
 }
diff --git a/plugins/TagSub/tagsubmenu.php b/plugins/TagSub/tagsubmenu.php
new file mode 100644 (file)
index 0000000..4477065
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2011, StatusNet, Inc.
+ *
+ * Menu to show tags you're subscribed to
+ * 
+ * PHP version 5
+ *
+ * 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  Menu
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Class comment
+ *
+ * @category  General
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2011 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class TagSubMenu extends Menu
+{
+    protected $user;
+    protected $tags;
+
+    function __construct($out, $user, $tags)
+    {
+        parent::__construct($out);
+        $this->user = $user;
+        $this->tags = $tags;
+    }
+
+    function show()
+    {
+        $this->out->elementStart('ul', array('class' => 'nav'));
+
+        foreach ($tags as $tag) {
+                $this->out->menuItem(common_local_url('tag',
+                                                      array('tag' => $tag)),
+                                     sprintf('#%s', $tag),
+                                     sprintf(_('Notices tagged with %s'), $tag),
+                                     $this->actionName == 'tag' && $this->action->arg('tag') == $tag,
+                                     'nav_streams_tag_'.$tag);
+        }
+
+        $this->out->elementEnd('ul');
+    }
+    
+}