Added tagsub to the left-hand menu
This commit is contained in:
		@@ -120,6 +120,7 @@ class TagSub extends Managed_DataObject
 | 
				
			|||||||
        $ts->profile_id = $profile->id;
 | 
					        $ts->profile_id = $profile->id;
 | 
				
			||||||
        $ts->created = common_sql_now();
 | 
					        $ts->created = common_sql_now();
 | 
				
			||||||
        $ts->insert();
 | 
					        $ts->insert();
 | 
				
			||||||
 | 
					        self::blow('tagsub:by_profile:%d', $profile->id);
 | 
				
			||||||
        return $ts;
 | 
					        return $ts;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -135,6 +136,32 @@ class TagSub extends Managed_DataObject
 | 
				
			|||||||
                                    'profile_id' => $profile->id));
 | 
					                                    'profile_id' => $profile->id));
 | 
				
			||||||
        if ($ts) {
 | 
					        if ($ts) {
 | 
				
			||||||
            $ts->delete();
 | 
					            $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;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,6 +80,7 @@ class TagSubPlugin extends Plugin
 | 
				
			|||||||
        case 'TagunsubAction':
 | 
					        case 'TagunsubAction':
 | 
				
			||||||
        case 'TagsubsAction':
 | 
					        case 'TagsubsAction':
 | 
				
			||||||
        case 'TagSubForm':
 | 
					        case 'TagSubForm':
 | 
				
			||||||
 | 
					        case 'TagSubMenu':
 | 
				
			||||||
        case 'TagUnsubForm':
 | 
					        case 'TagUnsubForm':
 | 
				
			||||||
            include_once $dir.'/'.strtolower($cls).'.php';
 | 
					            include_once $dir.'/'.strtolower($cls).'.php';
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
@@ -239,4 +240,28 @@ class TagSubPlugin extends Plugin
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        return true;
 | 
					        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;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										76
									
								
								plugins/TagSub/tagsubmenu.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								plugins/TagSub/tagsubmenu.php
									
									
									
									
									
										Normal file
									
								
							@@ -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');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user