]> git.mxchange.org Git - quix0rs-gnu-social.git/blob - actions/conversation.php
Merge remote-tracking branch 'mainline/1.0.x' into people_tags_rebase
[quix0rs-gnu-social.git] / actions / conversation.php
1 <?php
2 /**
3  * Display a conversation in the browser
4  *
5  * PHP version 5
6  *
7  * @category Action
8  * @package  StatusNet
9  * @author   Evan Prodromou <evan@status.net>
10  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
11  * @link     http://status.net/
12  *
13  * StatusNet - the distributed open-source microblogging tool
14  * Copyright (C) 2009, StatusNet, Inc.
15  *
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.
20  *
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.
25  *
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/>.
28  */
29
30 if (!defined('STATUSNET') && !defined('LACONICA')) {
31     exit(1);
32 }
33
34 // XXX: not sure how to do paging yet,
35 // so set a 60-notice limit
36
37 require_once INSTALLDIR.'/lib/noticelist.php';
38
39 /**
40  * Conversation tree in the browser
41  *
42  * @category Action
43  * @package  StatusNet
44  * @author   Evan Prodromou <evan@status.net>
45  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
46  * @link     http://status.net/
47  */
48 class ConversationAction extends Action
49 {
50     var $id      = null;
51     var $page    = null;
52     var $notices = null;
53
54     const MAX_NOTICES = 500;
55
56     /**
57      * Initialization.
58      *
59      * @param array $args Web and URL arguments
60      *
61      * @return boolean false if id not passed in
62      */
63     function prepare($args)
64     {
65         parent::prepare($args);
66         $this->id = $this->trimmed('id');
67         if (empty($this->id)) {
68             return false;
69         }
70         $this->id = $this->id+0;
71         $this->page = $this->trimmed('page');
72         if (empty($this->page)) {
73             $this->page = 1;
74         }
75
76         $cur = common_current_user();
77
78         if (empty($cur)) {
79             $profile = null;
80         } else {
81             $profile = $cur->getProfile();
82         }
83
84         $stream = new ConversationNoticeStream($this->id, $profile);
85
86         $this->notices = $stream->getNotices(0, self::MAX_NOTICES, null, null);
87
88         return true;
89     }
90
91     /**
92      * Handle the action
93      *
94      * @param array $args Web and URL arguments
95      *
96      * @return void
97      */
98     function handle($args)
99     {
100         parent::handle($args);
101         $this->showPage();
102     }
103
104     /**
105      * Returns the page title
106      *
107      * @return string page title
108      */
109     function title()
110     {
111         // TRANS: Title for page with a conversion (multiple notices in context).
112         return _('Conversation');
113     }
114
115     /**
116      * Show content.
117      *
118      * Display a hierarchical unordered list in the content area.
119      * Uses ConversationTree to do most of the heavy lifting.
120      *
121      * @return void
122      */
123     function showContent()
124     {
125         $tnl = new ThreadedNoticeList($this->notices, $this);
126
127         $cnt = $tnl->show();
128     }
129
130     function isReadOnly()
131     {
132         return true;
133     }
134 }