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')); - } -}