$ts->profile_id = $profile->id;
$ts->created = common_sql_now();
$ts->insert();
+ self::blow('tagsub:by_profile:%d', $profile->id);
return $ts;
}
'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;
+ }
}
case 'TagunsubAction':
case 'TagsubsAction':
case 'TagSubForm':
+ case 'TagSubMenu':
case 'TagUnsubForm':
include_once $dir.'/'.strtolower($cls).'.php';
return false;
}
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;
+ }
+
}
--- /dev/null
+<?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');
+ }
+
+}