Fix left-nav link on multi-user instances
[reversefavs:reversefavs.git] / ReverseFavsPlugin.php
1 <?php
2 /**
3  * StatusNet - the distributed open-source microblogging tool
4  * Copyright (C) 2010, StatusNet, Inc.
5  *
6  * A plugin to enable social-bookmarking functionality
7  *
8  * PHP version 5
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Affero General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Affero General Public License for more details.
19  *
20  * You should have received a copy of the GNU Affero General Public License
21  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
22  *
23  * @category  SocialBookmark
24  * @package   StatusNet
25  * @author    Evan Prodromou <evan@status.net>
26  * @copyright 2010 StatusNet, Inc.
27  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
28  * @link      http://status.net/
29  */
30
31 if (!defined('STATUSNET')) {
32     exit(1);
33 }
34
35 /**
36  * ReverseFavs plugin main class
37  *
38  * @category  Favorites
39  * @package   StatusNet
40  * @author    Stephane Berube <chimo@chromic.org>
41  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
42  * @link      https://github.com/chimo/ReverseFavs
43  */
44 class ReverseFavsPlugin extends Plugin
45 {
46     const VERSION = '0.1';
47
48     /**
49      * Load related modules when needed
50      *
51      * @param string $cls Name of the class to be loaded
52      *
53      * @return boolean hook value; true means continue processing, false means stop.
54      */
55     function onAutoload($cls)
56     {
57         $dir = dirname(__FILE__);
58         switch ($cls)
59         {
60         case 'ReversefavsAction':
61             include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php';
62             return false;
63         default:
64             return true;
65         }
66     }
67
68     /**
69      * Map URLs to actions
70      *
71      * @param Net_URL_Mapper $m path-to-action mapper
72      *
73      * @return boolean hook value; true means continue processing, false means stop.
74      */
75     function onRouterInitialized($m)
76     {
77         if (common_config('singleuser', 'enabled')) {
78             $nickname = User::singleUserNickname();
79             $m->connect('reversefavs',
80                         array('action' => 'reversefavs'),
81                         array('nickname' => $nickname)); // FIXME: useless
82         } else {
83             $m->connect(':nickname/reversefavs',
84                         array('action' => 'reversefavs'),
85                         array('nickname' => Nickname::DISPLAY_FMT));
86         }
87
88         return true;
89     }
90
91     /**
92      * Modify the default menu to link to our custom action
93      *
94      * Using event handlers, it's possible to modify the default UI for pages
95      * almost without limit. In this method, we add a menu item to the default
96      * primary menu for the interface to link to our action.
97      *
98      * The Action class provides a rich set of events to hook, as well as output
99      * methods.
100      *
101      * @param Action $action The current action handler. Use this to
102      *                       do any output.
103      *
104      * @return boolean hook value; true means continue processing, false means stop.
105      *
106      * @see Action
107      */
108     function onEndPersonalGroupNav($action)
109     {
110         $this->user = common_current_user();
111
112         if (!$this->user) {
113             // TRANS: Client error displayed when trying to display rfavs for a non-existing user.
114             $this->clientError(_('No such user.'));
115             return false;
116         }
117
118         $action->menuItem(common_local_url('reversefavs', array('nickname' => $this->user->nickname)),
119                           // TRANS: Menu item in sample plugin.
120                           _m('Reverse Favs'),
121                           // TRANS: Menu item title in sample plugin.
122                           _m('A list of your notices, favored by others'), false, 'nav_timeline_rfavs');
123         return true;
124     }
125
126     /**
127      * Plugin version data
128      *
129      * @param array &$versions array of version data
130      *
131      * @return value
132      */
133     function onPluginVersion(&$versions)
134     {
135         $versions[] = array('name' => 'ReverseFavs',
136                             'version' => self::VERSION,
137                             'author' => 'Stephane Berube',
138                             'homepage' => 'https://github.com/chimo/ReverseFavs',
139                             'description' =>
140                             // TRANS: Plugin description.
141                             _m('Simple extension for displaying your notices that have been favored by others.'));
142         return true;
143     }
144 }