Esempio n. 1
0
 function countResponses()
 {
     $pr = new Poll_response();
     $pr->poll_id = $this->id;
     $pr->groupBy('selection');
     $pr->selectAdd('count(profile_id) as votes');
     $pr->find();
     $raw = array();
     while ($pr->fetch()) {
         // Votes list 1-based
         // Array stores 0-based
         $raw[$pr->selection - 1] = $pr->votes;
     }
     $counts = array();
     foreach (array_keys($this->getOptions()) as $key) {
         if (isset($raw[$key])) {
             $counts[$key] = $raw[$key];
         } else {
             $counts[$key] = 0;
         }
     }
     return $counts;
 }
Esempio n. 2
0
 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->getUrl();
     $response = Poll_response::getByNotice($notice);
     if ($response) {
         $poll = $response->getPoll();
         if ($poll) {
             // Stash data to be formatted later by
             // $this->activityObjectOutputAtom() or
             // $this->activityObjectOutputJson()...
             $object->pollSelection = intval($response->selection);
             $object->pollUri = $poll->uri;
         }
     }
     return $object;
 }
Esempio n. 3
0
 /**
  * Save a new poll notice
  *
  * @param Profile $profile
  * @param Poll    $poll the poll being responded to
  * @param int     $selection (1-based)
  * @param array   $opts (poll responses)
  *
  * @return Notice saved notice
  */
 static function saveNew($profile, $poll, $selection, $options = null)
 {
     if (empty($options)) {
         $options = array();
     }
     if (!$poll->isValidSelection($selection)) {
         // TRANS: Client exception thrown when responding to a poll with an invalid option.
         throw new ClientException(_m('Invalid poll selection.'));
     }
     $opts = $poll->getOptions();
     $answer = $opts[$selection - 1];
     $pr = new Poll_response();
     $pr->id = UUID::gen();
     $pr->profile_id = $profile->id;
     $pr->poll_id = $poll->id;
     $pr->selection = $selection;
     if (array_key_exists('created', $options)) {
         $pr->created = $options['created'];
     } else {
         $pr->created = common_sql_now();
     }
     if (array_key_exists('uri', $options)) {
         $pr->uri = $options['uri'];
     } else {
         $pr->uri = common_local_url('showpollresponse', array('id' => $pr->id));
     }
     common_log(LOG_DEBUG, "Saving poll response: {$pr->id} {$pr->uri}");
     $pr->insert();
     // TRANS: Notice content voting for a poll.
     // TRANS: %s is the chosen option in the poll.
     $content = sprintf(_m('voted for "%s"'), $answer);
     $link = '<a href="' . htmlspecialchars($poll->uri) . '">' . htmlspecialchars($answer) . '</a>';
     // TRANS: Rendered version of the notice content voting for a poll.
     // TRANS: %s a link to the poll with the chosen option as link description.
     $rendered = sprintf(_m('voted for "%s"'), $link);
     $tags = array();
     $options = array_merge(array('urls' => array(), 'rendered' => $rendered, 'tags' => $tags, 'reply_to' => $poll->getNotice()->id, 'object_type' => PollPlugin::POLL_RESPONSE_OBJECT), $options);
     if (!array_key_exists('uri', $options)) {
         $options['uri'] = $pr->uri;
     }
     $saved = Notice::saveNew($profile->id, $content, array_key_exists('source', $options) ? $options['source'] : 'web', $options);
     return $saved;
 }
Esempio n. 4
0
 /**
  * Add a new Poll
  *
  * @return void
  */
 function respondPoll()
 {
     try {
         $notice = Poll_response::saveNew($this->user->getProfile(), $this->poll, $this->selection);
     } catch (ClientException $ce) {
         $this->error = $ce->getMessage();
         $this->showPage();
         return;
     }
     if ($this->boolean('ajax')) {
         $this->startHTML('text/xml;charset=utf-8');
         $this->elementStart('head');
         // TRANS: Page title after sending a poll response.
         $this->element('title', null, _m('Poll results'));
         $this->elementEnd('head');
         $this->elementStart('body');
         $form = new PollResultForm($this->poll, $this);
         $form->show();
         $this->elementEnd('body');
         $this->endHTML();
     } else {
         common_redirect($this->poll->getUrl(), 303);
     }
 }