3 * Give a warm greeting to our friendly user
9 * @author Evan Prodromou <evan@status.net>
10 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
11 * @link http://status.net/
13 * StatusNet - the distributed open-source microblogging tool
14 * Copyright (C) 2009, StatusNet, Inc.
16 * This program is free software: you can redistribute it and/or modify
17 * it under the terms of the GNU Affero General Public License as published by
18 * the Free Software Foundation, either version 3 of the License, or
19 * (at your option) any later version.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU Affero General Public License for more details.
26 * You should have received a copy of the GNU Affero General Public License
27 * along with this program. If not, see <http://www.gnu.org/licenses/>.
30 if (!defined('STATUSNET')) {
34 require_once 'bookmarksnoticestream.php';
37 * List currently logged-in user's bookmakrs
41 * @author Stephane Berube <chimo@chromic.org>
42 * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
43 * @link https://github.com/chimo/BookmarkList
45 class BookmarksAction extends Action
51 * Take arguments for running
53 * This method is called first, and it lets the action class get
54 * all its arguments and validate them. It's also the time
55 * to fetch any relevant data from the database.
57 * Action classes should run parent::prepare($args) as the first
58 * line of this method to make sure the default argument-processing
61 * @param array $args $_REQUEST args
63 * @return boolean success flag
65 function prepare($args)
67 parent::prepare($args);
69 if (common_config('singleuser', 'enabled')) {
70 $nickname = User::singleUserNickname();
73 // $nickname = $this->returnToArgs()[1]['nickname'];
76 $nickname = $this->returnToArgs();
77 $nickname = $nickname[1]['nickname'];
80 $this->user = User::staticGet('nickname', $nickname);
83 // TRANS: Client error displayed when trying to display bookmarks for a non-existing user.
84 $this->clientError(_('No such user.'));
88 $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
90 $stream = new BookmarksNoticeStream($this->user->id, true);
91 $this->notices = $stream->getNotices(($this->page-1)*NOTICES_PER_PAGE,
92 NOTICES_PER_PAGE + 1);
94 if($this->page > 1 && $this->notices->N == 0) {
95 throw new ClientException(_('No such page.'), 404);
104 * This is the main method for handling a request. Note that
105 * most preparation should be done in the prepare() method;
106 * by the time handle() is called the action should be
107 * more or less ready to go.
109 * @param array $args $_REQUEST args; handled in prepare()
113 function handle($args)
115 parent::handle($args);
122 * Override this method to show a custom title.
124 * @return string Title of the page
129 if (empty($this->user)) {
130 // TRANS: Page title for sample plugin.
133 // TRANS: Page title for sample plugin. %s is a user nickname.
134 return sprintf(_m('%s\'s bookmarks'), $this->user->nickname);
139 * Feeds for the <head> section
141 * @return array Feed objects to show
145 return array(new Feed(Feed::JSON,
146 common_local_url('ApiTimelineBookmarks',
148 'id' => $this->user->nickname,
150 // TRANS: Feed link text. %s is a username.
151 sprintf(_('Feed for favorites of %s (Activity Streams JSON)'),
152 $this->user->nickname)),
154 common_local_url('bookmarksrss',
155 array('nickname' => $this->user->nickname)),
156 // TRANS: Feed link text. %s is a username.
157 sprintf(_('Feed for favorites of %s (RSS 1.0)'),
158 $this->user->nickname)),
160 common_local_url('ApiTimelineBookmarks',
162 'id' => $this->user->nickname,
164 // TRANS: Feed link text. %s is a username.
165 sprintf(_('Feed for favorites of %s (RSS 2.0)'),
166 $this->user->nickname)),
168 common_local_url('ApiTimelineBookmarks',
170 'id' => $this->user->nickname,
171 'format' => 'atom')),
172 // TRANS: Feed link text. %s is a username.
173 sprintf(_('Feed for favorites of %s (Atom)'),
174 $this->user->nickname)));
178 * Show content in the content area
180 * The default StatusNet page has a lot of decorations: menus,
181 * logos, tabs, all that jazz. This method is used to show
182 * content in the content area of the page; it's the main
183 * thing you want to overload.
185 * This method also demonstrates use of a plural localized string.
189 function showContent()
192 $nl = new NoticeList($this->notices, $this);
197 $this->showEmptyList();
200 $this->pagination($this->page > 1,
201 $cnt > NOTICES_PER_PAGE,
202 $this->page, 'bookmarks',
203 array('nickname' => $this->user->nickname));
206 function showEmptyList() {
207 $message = sprintf(_('This is %1$s\'s bookmark stream, but %1$s hasn\'t bookmarked anything yet.'), $this->user->nickname) . ' ';
209 $this->elementStart('div', 'guide');
210 $this->raw(common_markup_to_html($message));
211 $this->elementEnd('div');
215 * Return true if read only.
217 * Some actions only read from the database; others read and write.
218 * The simple database load-balancer built into StatusNet will
219 * direct read-only actions to database mirrors (if they are configured),
220 * and read-write actions to the master database.
222 * This defaults to false to avoid data integrity issues, but you
223 * should make sure to overload it for performance gains.
225 * @param array $args other arguments, if RO/RW status depends on them.
227 * @return boolean is read only action?
229 function isReadOnly($args)