From f69f713360930ecf5adfa6bc40ee9db867c34bc1 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Sun, 26 Oct 2014 14:48:02 +0100 Subject: [PATCH] PollListItem freed from noticeListItemAdapter clutches 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 | 7 +- lib/microappplugin.php | 9 ++- plugins/Poll/PollPlugin.php | 32 +++++++-- plugins/Poll/lib/polllistitem.php | 111 ------------------------------ 4 files changed, 37 insertions(+), 122 deletions(-) delete mode 100644 plugins/Poll/lib/polllistitem.php diff --git a/lib/activityhandlerplugin.php b/lib/activityhandlerplugin.php index b105bf21f2..68907af0fb 100644 --- a/lib/activityhandlerplugin.php +++ b/lib/activityhandlerplugin.php @@ -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()); + } } diff --git a/lib/microappplugin.php b/lib/microappplugin.php index e034bb9b31..d9a00f7ee5 100644 --- a/lib/microappplugin.php +++ b/lib/microappplugin.php @@ -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(); diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index ff98bcfb30..45f95b4906 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -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 index 875fa9c7d9..0000000000 --- a/plugins/Poll/lib/polllistitem.php +++ /dev/null @@ -1,111 +0,0 @@ -. - * - * @category Poll - * @package StatusNet - * @author Evan Prodromou - * @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 - * @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')); - } -}