const POLL_OBJECT = 'http://activityschema.org/object/poll';
const POLL_RESPONSE_OBJECT = 'http://activityschema.org/object/poll-response';
+ var $oldSaveNew = true;
+
/**
* Database schema setup
*
$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;
}
*/
function onEndShowStyles($action)
{
- $action->cssLink($this->path('poll.css'));
+ $action->cssLink($this->path('css/poll.css'));
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
*
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;
}
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
*
*
* @return boolean hook value
*/
- function deleteRelated($notice)
+ function deleteRelated(Notice $notice)
{
$p = Poll::getByNotice($notice);
*
* @return Notice resulting notice
*/
- function saveNoticeFromActivity($activity, $profile, $options=array())
+ function saveNoticeFromActivity(Activity $activity, Profile $profile, array $options=array())
{
// @fixme
common_log(LOG_DEBUG, "XXX activity: " . var_export($activity, true));
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);
}
}
- function activityObjectFromNotice($notice)
+ function activityObjectFromNotice(Notice $notice)
{
assert($this->isMyNotice($notice));
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));
}
}
- function activityObjectFromNoticePollResponse($notice)
+ function activityObjectFromNoticePollResponse(Notice $notice)
{
$object = new ActivityObject();
$object->id = $notice->uri;
$object->type = self::POLL_RESPONSE_OBJECT;
$object->title = $notice->content;
$object->summary = $notice->content;
- $object->link = $notice->bestUrl();
+ $object->link = $notice->getUrl();
$response = Poll_response::getByNotice($notice);
if ($response) {
return $object;
}
- function activityObjectFromNoticePoll($notice)
+ function activityObjectFromNoticePoll(Notice $notice)
{
$object = new ActivityObject();
$object->id = $notice->uri;
$object->type = self::POLL_OBJECT;
$object->title = $notice->content;
$object->summary = $notice->content;
- $object->link = $notice->bestUrl();
+ $object->link = $notice->getUrl();
$poll = Poll::getByNotice($notice);
if ($poll) {
}
}
+ function entryForm($out)
+ {
+ return new NewPollForm($out);
+ }
- /**
- * @fixme WARNING WARNING WARNING parent class closes the final div that we
- * open here, but we probably shouldn't open it here. Check parent class
- * and Bookmark plugin for if that's right.
- */
- function showNotice($notice, $out)
+ // @fixme is this from parent?
+ function tag()
{
- 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 unpexpected object type.
- throw new Exception(sprintf(_m('Unexpected type for poll plugin: %s.'), $notice->object_type));
- }
+ return 'poll';
}
- function showNoticePoll($notice, $out)
+ function appTitle()
{
- $user = common_current_user();
+ // TRANS: Application title.
+ return _m('APPTITLE','Poll');
+ }
- // @hack we want regular rendering, then just add stuff after that
- $nli = new NoticeListItem($notice, $out);
- $nli->showNotice();
+ function onStartAddNoticeReply($nli, $parent, $child)
+ {
+ // Filter out any poll responses
+ if ($parent->object_type == self::POLL_OBJECT &&
+ $child->object_type == self::POLL_RESPONSE_OBJECT) {
+ return false;
+ }
+ return true;
+ }
- $out->elementStart('div', array('class' => 'entry-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);
+ // 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]);
+ }
}
- $form->show();
}
- } else {
- $out->text(_('Poll data is missing'));
}
- $out->elementEnd('div');
-
- // @fixme
- $out->elementStart('div', array('class' => 'entry-content'));
+ return true;
}
- function showNoticePollResponse($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' => 'entry-content'));
- }
+ /**
+ * Menu item for personal subscriptions/groups area
+ *
+ * @param Action $action action being executed
+ *
+ * @return boolean hook return
+ */
- function entryForm($out)
+ function onEndAccountSettingsNav($action)
{
- return new NewPollForm($out);
- }
+ $action_name = $action->trimmed('action');
- // @fixme is this from parent?
- function tag()
- {
- return 'poll';
- }
+ $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');
- function appTitle()
- {
- // TRANS: Application title.
- return _m('APPTITLE','Poll');
+ return true;
}
}