- $out: XMLOutputter to append custom output
- $group: the group being shown
+StartShowConversation: start the listing of a conversation
+- $action: Action object (used mainly as HTMLOutputter)
+- $conv: Conversation object, has functions to retrieve relevant notices
+- $scoped: Profile for scoping (null if not logged in)
+
+EndShowConversation: after the listing of a conversation
+- $action: Action object (used mainly as HTMLOutputter)
+- $conv: Conversation object, has functions to retrieve relevant notices
+- $scoped: Profile for scoping (null if not logged in)
+
StartShowThreadedNoticeTail: when showing the replies etc. to a notice
- $nli: parent noticelistitem
- $notice: parent notice
* @category Action
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
+ * @author Mikael Nordfeldth <mmn@hethane.se>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
-
-// XXX: not sure how to do paging yet,
-// so set a 60-notice limit
-
-require_once INSTALLDIR.'/lib/noticelist.php';
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
* Conversation tree in the browser
*
+ * Will always try to show the entire conversation, since that's how our
+ * ConversationNoticeStream works.
+ *
* @category Action
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
+ * @author Mikael Nordfeldth <mmn@hethane.se>
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
* @link http://status.net/
*/
class ConversationAction extends ManagedAction
{
- var $id = null;
+ var $conv = null;
var $page = null;
var $notices = null;
- const MAX_NOTICES = 500;
-
/**
* Initialization.
*
protected function prepare(array $args=array())
{
parent::prepare($args);
- $this->id = $this->trimmed('id');
- if (empty($this->id)) {
- return false;
- }
- $this->id = $this->id+0;
- $this->page = $this->trimmed('page');
- if (empty($this->page)) {
- $this->page = 1;
- }
-
- $stream = new ConversationNoticeStream($this->id, $this->scoped);
+ $convId = $this->int('id');
- $this->notices = $stream->getNotices(0, self::MAX_NOTICES);
+ $this->conv = Conversation::getKV('id', $convId);
+ if (!$this->conv instanceof Conversation) {
+ throw new ClientException('Could not find specified conversation');
+ }
return true;
}
/**
* Show content.
*
- * Display a hierarchical unordered list in the content area.
- * Uses ConversationTree to do most of the heavy lifting.
+ * NoticeList extended classes do most heavy lifting. Plugins can override.
*
* @return void
*/
function showContent()
{
- $user = common_current_user();
-
- if (!empty($user) && $user->conversationTree()) {
- $nl = new ConversationTree($this->notices, $this);
- } else {
- $nl = new FullThreadedNoticeList($this->notices, $this, $this->scoped);
+ if (Event::handle('StartShowConversation', array($this, $this->conv, $this->scoped))) {
+ $notices = $this->conv->getNotices();
+ $nl = new FullThreadedNoticeList($notices, $this, $this->scoped);
+ $cnt = $nl->show();
}
-
- $cnt = $nl->show();
+ Event::handle('EndShowConversation', array($this, $this->conv, $this->scoped));
}
function isReadOnly()
return array(new Feed(Feed::JSON,
common_local_url('apiconversation',
array(
- 'id' => $this->id,
+ 'id' => $this->conv->id,
'format' => 'as')),
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
new Feed(Feed::RSS2,
common_local_url('apiconversation',
array(
- 'id' => $this->id,
+ 'id' => $this->conv->id,
'format' => 'rss')),
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.
new Feed(Feed::ATOM,
common_local_url('apiconversation',
array(
- 'id' => $this->id,
+ 'id' => $this->conv->id,
'format' => 'atom')),
// TRANS: Title for link to notice feed.
// TRANS: %s is a user nickname.