* StatusNet - the distributed open-source microblogging tool
* Copyright (C) 2011, StatusNet, Inc.
*
- * Add a new Poll
+ * Respond to a Poll
*
* PHP version 5
*
}
/**
- * Add a new Poll
+ * Respond to a Poll
*
* @category Poll
* @package StatusNet
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
* @link http://status.net/
*/
-
class RespondPollAction extends Action
{
protected $user = null;
*
* @return string Action title
*/
-
function title()
{
+ // TRANS: Page title for poll response.
return _m('Poll response');
}
*
* @return boolean true
*/
-
function prepare($argarray)
{
parent::prepare($argarray);
+ if ($this->boolean('ajax')) {
+ StatusNet::setApi(true);
+ }
$this->user = common_current_user();
if (empty($this->user)) {
- throw new ClientException(_m("Must be logged in to respond to a poll."),
+ // TRANS: Client exception thrown trying to respond to a poll while not logged in.
+ throw new ClientException(_m("You must be logged in to respond to a poll."),
403);
}
$id = $this->trimmed('id');
$this->poll = Poll::staticGet('id', $id);
if (empty($this->poll)) {
- throw new ClientException(_m("Invalid or missing poll."), 404);
+ // TRANS: Client exception thrown trying to respond to a non-existing poll.
+ throw new ClientException(_m('Invalid or missing poll.'), 404);
}
$selection = intval($this->trimmed('pollselection'));
if ($selection < 1 || $selection > count($this->poll->getOptions())) {
+ // TRANS: Client exception thrown responding to a poll with an invalid answer.
throw new ClientException(_m('Invalid poll selection.'));
}
$this->selection = $selection;
*
* @return void
*/
-
function handle($argarray=null)
{
parent::handle($argarray);
*
* @return void
*/
-
function respondPoll()
{
try {
- $response = new Poll_response();
- $response->poll_id = $this->poll->id;
- $response->profile_id = $this->user->id;
- $response->selection = $this->selection;
- $response->created = common_sql_now();
- $response->insert();
-
+ $notice = Poll_response::saveNew($this->user->getProfile(),
+ $this->poll,
+ $this->selection);
} catch (ClientException $ce) {
$this->error = $ce->getMessage();
$this->showPage();
return;
}
- common_redirect($this->poll->bestUrl(), 303);
+ if ($this->boolean('ajax')) {
+ header('Content-Type: text/xml;charset=utf-8');
+ $this->xw->startDocument('1.0', 'UTF-8');
+ $this->elementStart('html');
+ $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->elementEnd('html');
+ } else {
+ common_redirect($this->poll->bestUrl(), 303);
+ }
}
/**
*
* @return void
*/
-
function showContent()
{
if (!empty($this->error)) {
*
* @return boolean is read only action?
*/
-
function isReadOnly($args)
{
if ($_SERVER['REQUEST_METHOD'] == 'GET' ||