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

showmessage.php 4.73 KB
Newer Older
Evan Prodromou's avatar
Evan Prodromou committed
1
<?php
2
/**
3
 * StatusNet, the distributed open-source microblogging tool
Evan Prodromou's avatar
Evan Prodromou committed
4
 *
5 6 7 8 9
 * Show a single message
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
Evan Prodromou's avatar
Evan Prodromou committed
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/>.
21 22
 *
 * @category  Personal
23
 * @package   StatusNet
24
 * @author    Evan Prodromou <evan@status.net>
25
 * @copyright 2008-2009 StatusNet, Inc.
26
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
27
 * @link      http://status.net/
Evan Prodromou's avatar
Evan Prodromou committed
28
 */
29 30
if (!defined('STATUSNET') && !defined('LACONICA')) {
    exit(1);
31
}
Evan Prodromou's avatar
Evan Prodromou committed
32

33 34 35 36
/**
 * Show a single message
 *
 * @category Personal
37
 * @package  StatusNet
38
 * @author   Evan Prodromou <evan@status.net>
39
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
40
 * @link     http://status.net/
41
 */
42 43

class ShowmessageAction extends Action
44
{
45 46 47 48
    /**
     * Message object to show
     */
    var $message = null;
49

50 51 52
    /**
     * The current user
     */
53

54
    var $user = null;
Evan Prodromou's avatar
Evan Prodromou committed
55

56 57 58 59 60 61 62 63 64 65 66 67
    /**
     * 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);
68

69
        $this->page = 1;
70

71 72
        $id            = $this->trimmed('message');
        $this->message = Message::staticGet('id', $id);
Evan Prodromou's avatar
Evan Prodromou committed
73

74
        if (!$this->message) {
75
            // TRANS: Client error displayed requesting a single message that does not exist.
76
            $this->clientError(_('No such message.'), 404);
77
            return false;
78
        }
79 80 81

        $this->user = common_current_user();

82 83 84 85 86 87 88 89
        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);
        }

90 91 92 93 94
        return true;
    }

    function handle($args)
    {
95
        $this->showPage();
96
    }
97

98
    function title()
99
    {
100 101
        if ($this->user->id == $this->message->from_profile) {
            $to = $this->message->getTo();
102 103 104 105
            // @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'),
106
                             $to->nickname,
107 108 109
                             common_exact_date($this->message->created));
        } else if ($this->user->id == $this->message->to_profile) {
            $from = $this->message->getFrom();
110 111 112 113
            // @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'),
114
                             $from->nickname,
115
                             common_exact_date($this->message->created));
116 117
        }
    }
118 119


120
    function showContent()
121
    {
122 123 124 125
        $this->elementStart('ul', 'notices messages');
        $ml = new ShowMessageListItem($this, $this->message, $this->user);
        $ml->show();
        $this->elementEnd('ul');
126
    }
127

128
    function isReadOnly($args)
129
    {
130
        return true;
131
    }
132 133 134 135 136 137

    /**
     * Don't show aside
     *
     * @return void
     */
138 139

    function showAside() {
140
    }
141
}
142

143 144 145 146 147
class ShowMessageListItem extends MessageListItem
{
    var $user;

    function __construct($out, $message, $user)
148
    {
149 150
        parent::__construct($out, $message);
        $this->user = $user;
151
    }
152

153
    function getMessageProfile()
154
    {
155 156 157 158 159 160 161 162
        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;
        }
163 164
    }
}