]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - actions/public.php
Modify public stream to use new UI framework
[quix0rs-gnu-social.git] / actions / public.php
1 <?php
2 /**
3  * Laconica, the distributed open-source microblogging tool
4  *
5  * Action for displaying the public stream
6  *
7  * PHP version 5
8  *
9  * LICENCE: This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU Affero General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU Affero General Public License for more details.
18  *
19  * You should have received a copy of the GNU Affero General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  * @category  Public
23  * @package   Laconica
24  * @author    Evan Prodromou <evan@controlyourself.ca>
25  * @copyright 2008-2009 Control Yourself, Inc.
26  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
27  * @link      http://laconi.ca/
28  */
29
30 if (!defined('LACONICA')) {
31     exit(1);
32 }
33
34 /**
35  * Action for displaying the public stream
36  *
37  * @category Public
38  * @package  Laconica
39  * @author   Evan Prodromou <evan@controlyourself.ca>
40  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
41  * @link     http://laconi.ca/
42  *
43  * @see      PublicrssAction
44  * @see      PublicxrdsAction
45  */
46
47 class PublicAction extends Action
48 {
49     /**
50      * page of the stream we're on; default = 1
51      */
52
53     var $page = null;
54
55     /**
56      * Read and validate arguments
57      *
58      * @param array $args URL parameters
59      *
60      * @return boolean success value
61      */
62
63     function prepare($args)
64     {
65         parent::prepare($args);
66         $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
67         return true;
68     }
69
70     /**
71      * handle request
72      *
73      * Show the public stream, using recipe method showPage()
74      *
75      * @param array $args arguments, mostly unused
76      *
77      * @return void
78      */
79
80     function handle($args)
81     {
82         parent::handle($args);
83
84         header('X-XRDS-Location: '. common_local_url('publicxrds'));
85
86         $this->showPage();
87     }
88
89     /**
90      * Title of the page
91      *
92      * @return page title, including page number if over 1
93      */
94
95     function title()
96     {
97         if ($this->page > 1) {
98             return sprintf(_('Public timeline, page %d'), $this->page);
99         } else {
100             return _('Public timeline');
101         }
102     }
103
104     /**
105      * Output <head> elements for RSS and Atom feeds
106      *
107      * @return void
108      */
109
110     function showFeeds()
111     {
112         $this->element('link', array('rel' => 'alternate',
113                                      'href' => common_local_url('publicrss'),
114                                      'type' => 'application/rss+xml',
115                                      'title' => _('Public Stream Feed')));
116     }
117
118     /**
119      * Extra head elements
120      *
121      * We include a <meta> element linking to the publicxrds page, for OpenID
122      * client-side authentication.
123      *
124      * @return void
125      */
126
127     function extraHead()
128     {
129         // for client side of OpenID authentication
130         $this->element('meta', array('http-equiv' => 'X-XRDS-Location',
131                                      'content' => common_local_url('publicxrds')));
132     }
133
134     /**
135      * Show tabset for this page
136      *
137      * Uses the PublicGroupNav widget
138      *
139      * @return void
140      * @see PublicGroupNav
141      */
142
143     function showLocalNav()
144     {
145         $nav = new PublicGroupNav($this);
146         $nav->show();
147     }
148
149     /**
150      * Fill the content area
151      *
152      * Shows a list of the notices in the public stream, with some pagination
153      * controls.
154      *
155      * @return void
156      */
157
158     function showContent()
159     {
160         $notice = Notice::publicStream(($this->page-1)*NOTICES_PER_PAGE,
161                                        NOTICES_PER_PAGE + 1);
162
163         if (!$notice) {
164             $this->server_error(_('Could not retrieve public stream.'));
165             return;
166         }
167
168         $nl = new NoticeList($notice);
169
170         $cnt = $nl->show();
171
172         $this->pagination($this->page > 1, $cnt > NOTICES_PER_PAGE,
173                           $this->page, 'public');
174     }
175
176     /**
177      * Makes a list of exported feeds for this page
178      *
179      * @return void
180      *
181      * @todo I18N
182      */
183
184     function showExportData()
185     {
186         $fl = new FeedList($this);
187         $fl->show(array(0 => array('href' => common_local_url('publicrss'),
188                                    'type' => 'rss',
189                                    'version' => 'RSS 1.0',
190                                    'item' => 'publicrss'),
191                         1 => array('href' => common_local_url('publicatom'),
192                                    'type' => 'atom',
193                                    'version' => 'Atom 1.0',
194                                    'item' => 'publicatom')));
195     }
196 }