]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
PollListItem freed from noticeListItemAdapter clutches
authorMikael Nordfeldth <mmn@hethane.se>
Sun, 26 Oct 2014 13:48:02 +0000 (14:48 +0100)
committerMikael Nordfeldth <mmn@hethane.se>
Sun, 26 Oct 2014 13:48:02 +0000 (14:48 +0100)
In the future, use events for formatting microapp notices, more specifically
through the plugin's function "showNoticeContent" or similar, which is called
from MicroAppPlugin, which is extended from ActivityHandlerPlugin.

lib/activityhandlerplugin.php
lib/microappplugin.php
plugins/Poll/PollPlugin.php
plugins/Poll/lib/polllistitem.php [deleted file]

index b105bf21f23493c7111815de35207072efb93f4a..68907af0fb4970e77206bcc99c6c0bd4f7e501ad 100644 (file)
@@ -606,7 +606,12 @@ abstract class ActivityHandlerPlugin extends Plugin
             return true;
         }
 
-        $out->text($stored->getContent());
+        $this->showNoticeContent($stored, $out, $scoped);
         return false;
     }
+
+    protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
+    {
+        $out->text($stored->getContent());
+    }
 }
index e034bb9b31fbbd37530dcd0d2d137b26f44969a9..d9a00f7ee568f0166e9ce84e63e6cb54a32c1315 100644 (file)
@@ -97,11 +97,10 @@ abstract class MicroAppPlugin extends ActivityHandlerPlugin
             return true;
         }
 
-        $adapter = $this->adaptNoticeListItem($nli);
-
-        if (empty($adapter)) {
-            throw new ServerException('Could not adapt NoticeListItem');
-        }
+        // Legacy use was creating a "NoticeListItemAdapter", but
+        // nowadays we solve that using event handling for microapps.
+        // This section will remain until all plugins are fixed.
+        $adapter = $this->adaptNoticeListItem($nli) ?: $nli;
 
         $adapter->showNotice();
         $adapter->showNoticeAttachments();
index ff98bcfb307e745050fc1bd36550f70650378281..45f95b49062058b348be01b3c2b03186b2d48089 100644 (file)
@@ -137,11 +137,6 @@ class PollPlugin extends MicroAppPlugin
         return array(self::POLL_OBJECT, self::POLL_RESPONSE_OBJECT);
     }
 
-
-    function adaptNoticeListItem($nli) {
-        return new PollListItem($nli);
-    }
-
     /**
      * When a notice is deleted, delete the related Poll
      *
@@ -445,4 +440,31 @@ class PollPlugin extends MicroAppPlugin
 
         return true;
     }
+
+    protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
+    {
+        if ($stored->object_type == self::POLL_RESPONSE_OBJECT) {
+            parent::showNoticeContent($stored, $out, $scoped);
+            return;
+        }
+
+        // If the stored notice is a POLL_OBJECT
+        $poll = Poll::getByNotice($stored);
+        if ($poll instanceof Poll and $scoped instanceof Profile) {
+            $response = $poll->getResponse($scoped);
+            if ($response instanceof Poll_response) {
+                // User has already responded; show the results.
+                $form = new PollResultForm($poll, $out);
+            } else {
+                $form = new PollResponseForm($poll, $out);
+            }
+            $form->show();
+        } elseif (!$scoped instanceof Profile) {
+            // TRANS: No current user's profile, so we can't take a reply.
+            $out->text(_m('You must be logged in to respond to this poll.'));
+        } else {
+            // TRANS: Error text displayed if no poll data could be found.
+            $out->text(_m('Poll data is missing'));
+        }
+    }
 }
diff --git a/plugins/Poll/lib/polllistitem.php b/plugins/Poll/lib/polllistitem.php
deleted file mode 100644 (file)
index 875fa9c..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2011, StatusNet, Inc.
- *
- * Adapter to show polls in a nicer way
- *
- * PHP version 5
- *
- * 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.
- *
- * 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/>.
- *
- * @category  Poll
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-if (!defined('STATUSNET')) {
-    // This check helps protect against security problems;
-    // your code file can't be executed directly from the web.
-    exit(1);
-}
-
-/**
- * An adapter to show polls in a nicer way
- *
- * @category  Poll
- * @package   StatusNet
- * @author    Evan Prodromou <evan@status.net>
- * @copyright 2011 StatusNet, Inc.
- * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link      http://status.net/
- */
-
-class PollListItem extends NoticeListItemAdapter
-{
-    // @fixme which domain should we use for these namespaces?
-    const POLL_OBJECT          = 'http://activityschema.org/object/poll';
-    const POLL_RESPONSE_OBJECT = 'http://activityschema.org/object/poll-response';
-
-    function showNotice(Notice $notice, $out)
-    {
-        switch ($notice->object_type) {
-        case self::POLL_OBJECT:
-            return $this->showNoticePoll($notice, $out);
-        case self::POLL_RESPONSE_OBJECT:
-            return $this->showNoticePollResponse($notice, $out);
-        default:
-            // TRANS: Exception thrown when performing an unexpected action on a poll.
-            // TRANS: %s is the unexpected object type.
-            throw new Exception(sprintf(_m('Unexpected type for poll plugin: %s.'), $notice->object_type));
-        }
-    }
-
-    function showNoticePoll(Notice $notice, $out)
-    {
-        $user = common_current_user();
-
-        // @hack we want regular rendering, then just add stuff after that
-        $nli = new NoticeListItem($notice, $out);
-        $nli->showNotice();
-
-        $out->elementStart('div', array('class' => 'e-content poll-content'));
-        $poll = Poll::getByNotice($notice);
-        if ($poll) {
-            if ($user) {
-                $profile = $user->getProfile();
-                $response = $poll->getResponse($profile);
-                if ($response) {
-                    // User has already responded; show the results.
-                    $form = new PollResultForm($poll, $out);
-                } else {
-                    $form = new PollResponseForm($poll, $out);
-                }
-                $form->show();
-            }
-        } else {
-            // TRANS: Error text displayed if no poll data could be found.
-            $out->text(_m('Poll data is missing'));
-        }
-        $out->elementEnd('div');
-
-        // @fixme
-        $out->elementStart('div', array('class' => 'e-content'));
-    }
-
-    function showNoticePollResponse(Notice $notice, $out)
-    {
-        $user = common_current_user();
-
-        // @hack we want regular rendering, then just add stuff after that
-        $nli = new NoticeListItem($notice, $out);
-        $nli->showNotice();
-
-        // @fixme
-        $out->elementStart('div', array('class' => 'e-content'));
-    }
-}