X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2FPoll%2FPollPlugin.php;h=a6292032c51b7cdc41205ff31bec7cd7c10d1bae;hb=8205c56e25da078e84a8e1cb0a27755339ce43b2;hp=f9b5808b1cb20779a287ee49a2ee022b1c67c5ee;hpb=b80ece169161900a8fc865f50fe13e6aa2f1a620;p=quix0rs-gnu-social.git diff --git a/plugins/Poll/PollPlugin.php b/plugins/Poll/PollPlugin.php index f9b5808b1c..a6292032c5 100644 --- a/plugins/Poll/PollPlugin.php +++ b/plugins/Poll/PollPlugin.php @@ -64,6 +64,7 @@ class PollPlugin extends MicroAppPlugin $schema = Schema::get(); $schema->ensureTable('poll', Poll::schemaDef()); $schema->ensureTable('poll_response', Poll_response::schemaDef()); + $schema->ensureTable('user_poll_prefs', User_poll_prefs::schemaDef()); return true; } @@ -80,38 +81,6 @@ class PollPlugin extends MicroAppPlugin return true; } - /** - * Load related modules when needed - * - * @param string $cls Name of the class to be loaded - * - * @return boolean hook value; true means continue processing, false means stop. - */ - function onAutoload($cls) - { - $dir = dirname(__FILE__); - - switch ($cls) - { - case 'ShowpollAction': - case 'NewpollAction': - case 'RespondpollAction': - include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; - return false; - case 'Poll': - case 'Poll_response': - include_once $dir.'/'.$cls.'.php'; - return false; - case 'NewPollForm': - case 'PollResponseForm': - case 'PollResultForm': - include_once $dir.'/'.strtolower($cls).'.php'; - return false; - default: - return true; - } - } - /** * Map URLs to actions * @@ -136,6 +105,9 @@ class PollPlugin extends MicroAppPlugin array('action' => 'respondpoll'), array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')); + $m->connect('settings/poll', + array('action' => 'pollsettings')); + return true; } @@ -227,12 +199,12 @@ class PollPlugin extends MicroAppPlugin if (!$pollUri) { // TRANS: Exception thrown trying to respond to a poll without a poll reference. - throw new Exception(_m('Invalid poll response: no poll reference.')); + throw new Exception(_m('Invalid poll response: No poll reference.')); } - $poll = Poll::staticGet('uri', $pollUri); + $poll = Poll::getKV('uri', $pollUri); if (!$poll) { // TRANS: Exception thrown trying to respond to a non-existing poll. - throw new Exception(_m('Invalid poll response: poll is unknown.')); + throw new Exception(_m('Invalid poll response: Poll is unknown.')); } try { $notice = Poll_response::saveNew($profile, $poll, $selection, $options); @@ -258,7 +230,7 @@ class PollPlugin extends MicroAppPlugin return $this->activityObjectFromNoticePollResponse($notice); default: // TRANS: Exception thrown when performing an unexpected action on a poll. - // TRANS: %s is the unpexpected object type. + // TRANS: %s is the unexpected object type. throw new Exception(sprintf(_m('Unexpected type for poll plugin: %s.'), $notice->object_type)); } } @@ -416,7 +388,7 @@ class PollPlugin extends MicroAppPlugin return $this->showNoticePollResponse($notice, $out); default: // TRANS: Exception thrown when performing an unexpected action on a poll. - // TRANS: %s is the unpexpected object type. + // TRANS: %s is the unexpected object type. throw new Exception(sprintf(_m('Unexpected type for poll plugin: %s.'), $notice->object_type)); } } @@ -444,6 +416,7 @@ class PollPlugin extends MicroAppPlugin $form->show(); } } else { + // TRANS: Error text displayed if no poll data could be found. $out->text(_m('Poll data is missing')); } $out->elementEnd('div'); @@ -481,17 +454,52 @@ class PollPlugin extends MicroAppPlugin return _m('APPTITLE','Poll'); } - function onStartShowThreadedNoticeTail($nli, $notice, &$children) + function onStartAddNoticeReply($nli, $parent, $child) { // Filter out any poll responses - if ($notice->object_type == self::POLL_OBJECT) { - $children = array_filter($children, array($this, 'isNotPollResponse')); + if ($parent->object_type == self::POLL_OBJECT && + $child->object_type == self::POLL_RESPONSE_OBJECT) { + return false; } return true; } - function isNotPollResponse($notice) + // Hide poll responses for @chuck + + function onEndNoticeWhoGets($notice, &$ni) { + if ($notice->object_type == self::POLL_RESPONSE_OBJECT) { + foreach ($ni as $id => $source) { + $user = User::getKV('id', $id); + if (!empty($user)) { + $pollPrefs = User_poll_prefs::getKV('user_id', $user->id); + if (!empty($pollPrefs) && ($pollPrefs->hide_responses)) { + unset($ni[$id]); + } + } + } + } + return true; + } + + /** + * Menu item for personal subscriptions/groups area + * + * @param Action $action action being executed + * + * @return boolean hook return + */ + + function onEndAccountSettingsNav($action) { - return ($notice->object_type != self::POLL_RESPONSE_OBJECT); + $action_name = $action->trimmed('action'); + + $action->menuItem(common_local_url('pollsettings'), + // TRANS: Poll plugin menu item on user settings page. + _m('MENU', 'Polls'), + // TRANS: Poll plugin tooltip for user settings menu item. + _m('Configure poll behavior'), + $action_name === 'pollsettings'); + + return true; } }