<?php
-/*
- * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
+/**
+ * StatusNet, the distributed open-source microblogging tool
*
- * This program is free software: you can redistribute it and/or modify
+ * Show a single message
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
* 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.
*
* 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/>.
+ *
+ * @category Personal
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2008-2009 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ exit(1);
+}
+
+/**
+ * Show a single message
+ *
+ * @category Personal
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
*/
-if (!defined('LACONICA')) { exit(1); }
-
-require_once(INSTALLDIR.'/lib/mailbox.php');
-
-class ShowmessageAction extends MailboxAction {
-
- function handle($args) {
-
- Action::handle($args);
-
- $id = $this->trimmed('id');
-
- $message = Message::staticGet('id', $id);
-
- if (!$message) {
- $this->client_error(_('No such message.'), 404);
- return;
- }
-
- $cur = common_current_user();
-
- if (!$cur ||
- $cur->id != $message->from_profile &&
- $cur->id != $message->to_profile)
- {
- $this->client_error(_('Only the sender and recipient may read this message.'), 404);
- return;
- }
-
- $this->show_page($cur, 1);
- }
-
- function get_message() {
- $id = $this->trimmed('id');
- $message = Message::staticGet('id', $id);
- return $message;
- }
-
- function get_title($user, $page) {
- $message = $this->get_message();
- if (!$message) {
- return NULL;
- }
-
- if ($user->id == $message->from_profile) {
- $to = $message->getTo();
- $title = sprintf(_("Message to %1\$s on %2\$s"),
- $to->nickname,
- common_exact_date($message->created));
- } else if ($user->id == $message->to_profile) {
- $from = $message->getFrom();
- $title = sprintf(_("Message from %1\$s on %2\$s"),
- $from->nickname,
- common_exact_date($message->created));
- }
- return $title;
- }
-
- function get_messages($user, $page) {
- $message = new Message();
- $message->id = $this->trimmed('message');
- $message->fetch();
- return $message;
- }
-
- function get_message_profile($message) {
- $user = common_current_user();
- if ($user->id == $message->from_profile) {
- return $message->getTo();
- } else if ($user->id == $message->to_profile) {
- return $message->getFrom();
- } else {
- # This shouldn't happen
- return NULL;
- }
- }
-
- function get_instructions() {
- return '';
- }
+class ShowmessageAction extends Action
+{
+ /**
+ * Message object to show
+ */
+ var $message = null;
+
+ /**
+ * The current user
+ */
+
+ var $user = null;
+
+ /**
+ * Load attributes based on database arguments
+ *
+ * Loads all the DB stuff
+ *
+ * @param array $args $_REQUEST array
+ *
+ * @return success flag
+ */
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $this->page = 1;
+
+ $id = $this->trimmed('message');
+ $this->message = Message::staticGet('id', $id);
+
+ if (!$this->message) {
+ // TRANS: Client error displayed requesting a single message that does not exist.
+ $this->clientError(_('No such message.'), 404);
+ return false;
+ }
+
+ $this->user = common_current_user();
+
+ if (empty($this->user) ||
+ ($this->user->id != $this->message->from_profile &&
+ $this->user->id != $this->message->to_profile)) {
+ // TRANS: Client error displayed requesting a single direct message the requesting user was not a party in.
+ throw new ClientException(_('Only the sender and recipient ' .
+ 'may read this message.'), 403);
+ }
+
+ return true;
+ }
+
+ function handle($args)
+ {
+ $this->showPage();
+ }
+
+ function title()
+ {
+ if ($this->user->id == $this->message->from_profile) {
+ $to = $this->message->getTo();
+ // @todo FIXME: Might be nice if the timestamp could be localised.
+ // TRANS: Page title for single direct message display when viewing user is the sender.
+ // TRANS: %1$s is the addressed user's nickname, $2$s is a timestamp.
+ return sprintf(_('Message to %1$s on %2$s'),
+ $to->nickname,
+ common_exact_date($this->message->created));
+ } else if ($this->user->id == $this->message->to_profile) {
+ $from = $this->message->getFrom();
+ // @todo FIXME: Might be nice if the timestamp could be localised.
+ // TRANS: Page title for single message display.
+ // TRANS: %1$s is the sending user's nickname, $2$s is a timestamp.
+ return sprintf(_('Message from %1$s on %2$s'),
+ $from->nickname,
+ common_exact_date($this->message->created));
+ }
+ }
+
+
+ function showContent()
+ {
+ $this->elementStart('ul', 'notices messages');
+ $ml = new ShowMessageListItem($this, $this->message, $this->user);
+ $ml->show();
+ $this->elementEnd('ul');
+ }
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
+ /**
+ * Don't show aside
+ *
+ * @return void
+ */
+
+ function showAside() {
+ }
+}
+
+class ShowMessageListItem extends MessageListItem
+{
+ var $user;
+
+ function __construct($out, $message, $user)
+ {
+ parent::__construct($out, $message);
+ $this->user = $user;
+ }
+
+ function getMessageProfile()
+ {
+ if ($this->user->id == $this->message->from_profile) {
+ return $this->message->getTo();
+ } else if ($this->user->id == $this->message->to_profile) {
+ return $this->message->getFrom();
+ } else {
+ // This shouldn't happen
+ return null;
+ }
+ }
}
-
\ No newline at end of file