We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

showfavorites.php 6.44 KB
Newer Older
1
<?php
Evan Prodromou's avatar
Evan Prodromou committed
2 3
/**
 * Laconica, the distributed open-source microblogging tool
4
 *
Evan Prodromou's avatar
Evan Prodromou committed
5 6 7 8 9
 * List of replies
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
10 11 12 13 14 15 16 17 18 19 20
 * 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/>.
Evan Prodromou's avatar
Evan Prodromou committed
21 22 23 24 25 26 27
 *
 * @category  Personal
 * @package   Laconica
 * @author    Evan Prodromou <evan@controlyourself.ca>
 * @copyright 2008-2009 Control Yourself, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://laconi.ca/
28 29
 */

Evan Prodromou's avatar
Evan Prodromou committed
30 31 32
if (!defined('LACONICA')) {
    exit(1);
}
33

Evan Prodromou's avatar
Evan Prodromou committed
34 35 36
require_once INSTALLDIR.'/lib/personalgroupnav.php';
require_once INSTALLDIR.'/lib/noticelist.php';
require_once INSTALLDIR.'/lib/feedlist.php';
37

Evan Prodromou's avatar
Evan Prodromou committed
38 39 40 41 42 43 44 45 46
/**
 * List of replies
 *
 * @category Personal
 * @package  Laconica
 * @author   Evan Prodromou <evan@controlyourself.ca>
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link     http://laconi.ca/
 */
47

Evan Prodromou's avatar
Evan Prodromou committed
48 49 50 51 52 53 54
class ShowfavoritesAction extends Action
{
    /** User we're getting the faves of */
    var $user = null;
    /** Page of the faves we're on */
    var $page = null;

Evan Prodromou's avatar
Evan Prodromou committed
55 56 57 58 59 60 61 62 63 64 65
    /**
     * Is this a read-only page?
     *
     * @return boolean true
     */

    function isReadOnly()
    {
        return true;
    }

Evan Prodromou's avatar
Evan Prodromou committed
66 67 68 69 70 71 72 73 74
    /**
     * Title of the page
     *
     * Includes name of user and page number.
     *
     * @return string title of page
     */

    function title()
75
    {
Evan Prodromou's avatar
Evan Prodromou committed
76 77 78 79 80 81 82 83
        if ($this->page == 1) {
            return sprintf(_("%s favorite notices"), $this->user->nickname);
        } else {
            return sprintf(_("%s favorite notices, page %d"),
                           $this->user->nickname,
                           $this->page);
        }
    }
84

Evan Prodromou's avatar
Evan Prodromou committed
85 86 87 88 89 90 91 92 93 94 95 96 97 98
    /**
     * Prepare the object
     *
     * Check the input values and initialize the object.
     * Shows an error page on bad input.
     *
     * @param array $args $_REQUEST data
     *
     * @return boolean success flag
     */

    function prepare($args)
    {
        parent::prepare($args);
99

100
        $nickname = common_canonical_nickname($this->arg('nickname'));
101

Evan Prodromou's avatar
Evan Prodromou committed
102 103 104
        $this->user = User::staticGet('nickname', $nickname);

        if (!$this->user) {
105
            $this->clientError(_('No such user.'));
Evan Prodromou's avatar
Evan Prodromou committed
106
            return false;
107
        }
108

Evan Prodromou's avatar
Evan Prodromou committed
109
        $this->page = $this->trimmed('page');
110

Evan Prodromou's avatar
Evan Prodromou committed
111 112
        if (!$this->page) {
            $this->page = 1;
113
        }
114

115 116
        common_set_returnto($this->selfUrl());
        
Evan Prodromou's avatar
Evan Prodromou committed
117 118
        return true;
    }
119

Evan Prodromou's avatar
Evan Prodromou committed
120 121 122 123 124 125 126 127 128
    /**
     * Handle a request
     *
     * Just show the page. All args already handled.
     *
     * @param array $args $_REQUEST data
     *
     * @return void
     */
129

Evan Prodromou's avatar
Evan Prodromou committed
130 131 132 133
    function handle($args)
    {
        parent::handle($args);
        $this->showPage();
134
    }
135

Evan Prodromou's avatar
Evan Prodromou committed
136 137 138 139 140 141 142
    /**
     * Feeds for the <head> section
     *
     * @return void
     */

    function showFeeds()
143
    {
Evan Prodromou's avatar
Evan Prodromou committed
144 145 146 147 148 149
        $feedurl   = common_local_url('favoritesrss',
                                      array('nickname' =>
                                            $this->user->nickname));
        $feedtitle = sprintf(_('Feed for favorites of %s'),
                             $this->user->nickname);

150
        $this->element('link', array('rel' => 'alternate',
Evan Prodromou's avatar
Evan Prodromou committed
151
                                     'href' => $feedurl,
152
                                     'type' => 'application/rss+xml',
Evan Prodromou's avatar
Evan Prodromou committed
153
                                     'title' => $feedtitle));
154
    }
155

156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
    /**
     * Output document relationship links
     *
     * @return void
     */
    function showRelationshipLinks()
    {
        // Machine-readable pagination
        if ($this->page > 1) {
            $this->element('link', array('rel' => 'next',
                                         'href' => common_local_url('showfavorites',
                                                                    array('nickname' => $this->user->nickname,
                                                                          'page' => $this->page - 1)),
                                         'title' => _('Next Favorite Notices')));
        }
        $this->element('link', array('rel' => 'prev',
                                     'href' => common_local_url('showfavorites',
                                                                array('nickname' => $this->user->nickname,
                                                                      'page' => $this->page + 1)),
                                     'title' => _('Previous Favorite Notices')));
    }

Evan Prodromou's avatar
Evan Prodromou committed
178 179 180 181 182
    /**
     * show the personal group nav
     *
     * @return void
     */
183

Evan Prodromou's avatar
Evan Prodromou committed
184 185 186 187
    function showLocalNav()
    {
        $nav = new PersonalGroupNav($this);
        $nav->show();
188
    }
189

Evan Prodromou's avatar
Evan Prodromou committed
190 191 192 193 194 195 196
    /**
     * Show the replies feed links
     *
     * @return void
     */

    function showExportData()
197
    {
Evan Prodromou's avatar
Evan Prodromou committed
198 199 200
        $feedurl = common_local_url('favoritesrss',
                                    array('nickname' =>
                                          $this->user->nickname));
201

Evan Prodromou's avatar
Evan Prodromou committed
202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218
        $fl = new FeedList($this);

        // XXX: I18N

        $fl->show(array(0=>array('href'=> $feedurl,
                                 'type' => 'rss',
                                 'version' => 'RSS 1.0',
                                 'item' => 'Favorites')));
    }

    /**
     * Show the content
     *
     * A list of notices that this user has marked as a favorite
     *
     * @return void
     */
219

Evan Prodromou's avatar
Evan Prodromou committed
220 221 222 223
    function showContent()
    {
        $notice = $this->user->favoriteNotices(($this->page-1)*NOTICES_PER_PAGE,
                                               NOTICES_PER_PAGE + 1);
224

225
        if (!$notice) {
226
            $this->serverError(_('Could not retrieve favorite notices.'));
227 228
            return;
        }
229

Evan Prodromou's avatar
Evan Prodromou committed
230 231 232
        $nl = new NoticeList($notice, $this);

        $cnt = $nl->show();
233

Evan Prodromou's avatar
Evan Prodromou committed
234 235 236
        $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
                          $this->page, 'showfavorites',
                          array('nickname' => $this->user->nickname));
237
    }
238
}