]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Make ShowmessageAction not be a subclass of MailboxAction
authorEvan Prodromou <evan@status.net>
Tue, 8 Feb 2011 16:33:36 +0000 (11:33 -0500)
committerEvan Prodromou <evan@status.net>
Tue, 8 Feb 2011 16:33:36 +0000 (11:33 -0500)
The ShowmessageAction was using the MailboxAction to do its display of
a single direct message. Since we redid the nickname management, this
was breaking (MailboxAction requires a nickname argument,
ShowmessageAction does not, and nickname validation that used to
quietly fail now throws an exception).

I've moved the message list processing to its own widget class, so the
need to subclass MailboxAction has disappeared. I've rewritten this
action to use the MessageListItem widget, and it works fine now.

actions/showmessage.php

index d737f85d3a0b2ba3b4bb0531f5344f023c5eb4ed..1c867af1190ccbff3ff58d88a8cb4da00c91a7b9 100644 (file)
@@ -30,20 +30,17 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
     exit(1);
 }
 
-require_once INSTALLDIR.'/lib/mailbox.php';
-
 /**
  * Show a single message
  *
- * // XXX: It is totally weird how this works!
- *
  * @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/
  */
-class ShowmessageAction extends MailboxAction
+
+class ShowmessageAction extends Action
 {
     /**
      * Message object to show
@@ -82,22 +79,20 @@ class ShowmessageAction extends MailboxAction
 
         $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)
     {
-        Action::handle($args);
-
-        if ($this->user && ($this->user->id == $this->message->from_profile ||
-            $this->user->id == $this->message->to_profile)) {
-                $this->showPage();
-        } else {
-            // TRANS: Client error displayed requesting a single direct message the requesting user was not a party in.
-            $this->clientError(_('Only the sender and recipient ' .
-                'may read this message.'), 403);
-            return;
-        }
+        $this->showPage();
     }
 
     function title()
@@ -121,42 +116,18 @@ class ShowmessageAction extends MailboxAction
         }
     }
 
-    function getMessages()
-    {
-        $message     = new Message();
-        $message->id = $this->message->id;
-        $message->find();
-        return $message;
-    }
 
-    function getMessageProfile()
+    function showContent()
     {
-        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;
-        }
+        $this->elementStart('ul', 'notices messages');
+        $ml = new ShowMessageListItem($this, $this->message, $this->user);
+        $ml->show();
+        $this->elementEnd('ul');
     }
 
-    /**
-     * Don't show local navigation
-     *
-     * @return void
-     */
-    function showLocalNavBlock()
-    {
-    }
-
-    /**
-     * Don't show page notice
-     *
-     * @return void
-     */
-    function showPageNoticeBlock()
+    function isReadOnly($args)
     {
+        return true;
     }
 
     /**
@@ -164,22 +135,30 @@ class ShowmessageAction extends MailboxAction
      *
      * @return void
      */
-    function showAside()
-    {
+
+    function showAside() {
     }
+}
 
-    /**
-     * Don't show any instructions
-     *
-     * @return string
-     */
-    function getInstructions()
+class ShowMessageListItem extends MessageListItem
+{
+    var $user;
+
+    function __construct($out, $message, $user)
     {
-        return '';
+        parent::__construct($out, $message);
+        $this->user = $user;
     }
 
-    function isReadOnly($args)
+    function getMessageProfile()
     {
-        return true;
+        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;
+        }
     }
 }