forked from GNUsocial/gnu-social
[Poll] Refactoring and minor bug fixes
This commit is contained in:
@@ -42,7 +42,6 @@ if (!defined('STATUSNET')) {
|
||||
*
|
||||
* @see DB_DataObject
|
||||
*/
|
||||
|
||||
class Poll extends Managed_DataObject
|
||||
{
|
||||
public $__table = 'poll'; // table name
|
||||
@@ -80,14 +79,14 @@ class Poll extends Managed_DataObject
|
||||
*
|
||||
* @param Notice $notice Notice to check for
|
||||
*
|
||||
* @return Poll found poll or null
|
||||
* @return get_called_class found poll or null
|
||||
*/
|
||||
static function getByNotice($notice)
|
||||
public static function getByNotice($notice)
|
||||
{
|
||||
return self::getKV('uri', $notice->uri);
|
||||
}
|
||||
|
||||
function getOptions()
|
||||
public function getOptions()
|
||||
{
|
||||
return explode("\n", $this->options);
|
||||
}
|
||||
@@ -95,10 +94,10 @@ class Poll extends Managed_DataObject
|
||||
/**
|
||||
* Is this a valid selection index?
|
||||
*
|
||||
* @param numeric $selection (1-based)
|
||||
* @param int $selection (1-based)
|
||||
* @return boolean
|
||||
*/
|
||||
function isValidSelection($selection)
|
||||
public function isValidSelection($selection)
|
||||
{
|
||||
if ($selection != intval($selection)) {
|
||||
return false;
|
||||
@@ -109,12 +108,12 @@ class Poll extends Managed_DataObject
|
||||
return true;
|
||||
}
|
||||
|
||||
function getNotice()
|
||||
public function getNotice()
|
||||
{
|
||||
return Notice::getKV('uri', $this->uri);
|
||||
}
|
||||
|
||||
function getUrl()
|
||||
public function getUrl()
|
||||
{
|
||||
return $this->getNotice()->getUrl();
|
||||
}
|
||||
@@ -123,16 +122,16 @@ class Poll extends Managed_DataObject
|
||||
* Get the response of a particular user to this poll, if any.
|
||||
*
|
||||
* @param Profile $profile
|
||||
* @return Poll_response object or null
|
||||
* @return get_called_class object or null
|
||||
*/
|
||||
function getResponse(Profile $profile)
|
||||
public function getResponse(Profile $profile)
|
||||
{
|
||||
$pr = Poll_response::pkeyGet(array('poll_id' => $this->id,
|
||||
'profile_id' => $profile->id));
|
||||
return $pr;
|
||||
$pr = Poll_response::pkeyGet(array('poll_id' => $this->id,
|
||||
'profile_id' => $profile->id));
|
||||
return $pr;
|
||||
}
|
||||
|
||||
function countResponses()
|
||||
public function countResponses()
|
||||
{
|
||||
$pr = new Poll_response();
|
||||
$pr->poll_id = $this->id;
|
||||
@@ -162,12 +161,14 @@ class Poll extends Managed_DataObject
|
||||
* Save a new poll notice
|
||||
*
|
||||
* @param Profile $profile
|
||||
* @param string $question
|
||||
* @param array $opts (poll responses)
|
||||
* @param string $question
|
||||
* @param array $opts (poll responses)
|
||||
*
|
||||
* @param null $options
|
||||
* @return Notice saved notice
|
||||
* @throws ClientException
|
||||
*/
|
||||
static function saveNew($profile, $question, $opts, $options=null)
|
||||
public static function saveNew($profile, $question, $opts, $options = null)
|
||||
{
|
||||
if (empty($options)) {
|
||||
$options = array();
|
||||
@@ -175,10 +176,10 @@ class Poll extends Managed_DataObject
|
||||
|
||||
$p = new Poll();
|
||||
|
||||
$p->id = UUID::gen();
|
||||
$p->profile_id = $profile->id;
|
||||
$p->question = $question;
|
||||
$p->options = implode("\n", $opts);
|
||||
$p->id = UUID::gen();
|
||||
$p->profile_id = $profile->id;
|
||||
$p->question = $question;
|
||||
$p->options = implode("\n", $opts);
|
||||
|
||||
if (array_key_exists('created', $options)) {
|
||||
$p->created = $options['created'];
|
||||
@@ -189,8 +190,10 @@ class Poll extends Managed_DataObject
|
||||
if (array_key_exists('uri', $options)) {
|
||||
$p->uri = $options['uri'];
|
||||
} else {
|
||||
$p->uri = common_local_url('showpoll',
|
||||
array('id' => $p->id));
|
||||
$p->uri = common_local_url(
|
||||
'showpoll',
|
||||
array('id' => $p->id)
|
||||
);
|
||||
}
|
||||
|
||||
common_log(LOG_DEBUG, "Saving poll: $p->id $p->uri");
|
||||
@@ -198,33 +201,39 @@ class Poll extends Managed_DataObject
|
||||
|
||||
// TRANS: Notice content creating a poll.
|
||||
// TRANS: %1$s is the poll question, %2$s is a link to the poll.
|
||||
$content = sprintf(_m('Poll: %1$s %2$s'),
|
||||
$question,
|
||||
$p->uri);
|
||||
$content = sprintf(
|
||||
_m('Poll: %1$s %2$s'),
|
||||
$question,
|
||||
$p->uri
|
||||
);
|
||||
$link = '<a href="' . htmlspecialchars($p->uri) . '">' . htmlspecialchars($question) . '</a>';
|
||||
// TRANS: Rendered version of the notice content creating a poll.
|
||||
// TRANS: %s is a link to the poll with the question as link description.
|
||||
$rendered = sprintf(_m('Poll: %s'), $link);
|
||||
|
||||
$tags = array('poll');
|
||||
$tags = array('poll');
|
||||
$replies = array();
|
||||
|
||||
$options = array_merge(array('urls' => array(),
|
||||
'rendered' => $rendered,
|
||||
'tags' => $tags,
|
||||
'replies' => $replies,
|
||||
'object_type' => PollPlugin::POLL_OBJECT),
|
||||
$options);
|
||||
$options = array_merge(
|
||||
array('urls' => array(),
|
||||
'rendered' => $rendered,
|
||||
'tags' => $tags,
|
||||
'replies' => $replies,
|
||||
'object_type' => PollPlugin::POLL_OBJECT),
|
||||
$options
|
||||
);
|
||||
|
||||
if (!array_key_exists('uri', $options)) {
|
||||
$options['uri'] = $p->uri;
|
||||
}
|
||||
|
||||
$saved = Notice::saveNew($profile->id,
|
||||
$content,
|
||||
array_key_exists('source', $options) ?
|
||||
$options['source'] : 'web',
|
||||
$options);
|
||||
$saved = Notice::saveNew(
|
||||
$profile->id,
|
||||
$content,
|
||||
array_key_exists('source', $options) ?
|
||||
$options['source'] : 'web',
|
||||
$options
|
||||
);
|
||||
|
||||
return $saved;
|
||||
}
|
||||
|
||||
@@ -83,9 +83,9 @@ class Poll_response extends Managed_DataObject
|
||||
*
|
||||
* @param Notice $notice Notice to check for
|
||||
*
|
||||
* @return Poll_response found response or null
|
||||
* @return get_called_class found response or null
|
||||
*/
|
||||
static function getByNotice($notice)
|
||||
public static function getByNotice($notice)
|
||||
{
|
||||
return self::getKV('uri', $notice->uri);
|
||||
}
|
||||
@@ -93,40 +93,41 @@ class Poll_response extends Managed_DataObject
|
||||
/**
|
||||
* Get the notice that belongs to this response...
|
||||
*
|
||||
* @return Notice
|
||||
* @return get_called_class
|
||||
*/
|
||||
function getNotice()
|
||||
public function getNotice()
|
||||
{
|
||||
return Notice::getKV('uri', $this->uri);
|
||||
}
|
||||
|
||||
function getUrl()
|
||||
public function getUrl()
|
||||
{
|
||||
return $this->getNotice()->getUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return Poll
|
||||
* @return get_called_class
|
||||
*/
|
||||
function getPoll()
|
||||
public function getPoll()
|
||||
{
|
||||
return Poll::getKV('id', $this->poll_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
*
|
||||
* @param Poll $poll the poll being responded to
|
||||
* @param int $selection (1-based)
|
||||
* @param null $options
|
||||
* @return Notice saved notice
|
||||
* @throws ClientException
|
||||
*/
|
||||
static function saveNew($profile, $poll, $selection, $options=null)
|
||||
public static function saveNew($profile, $poll, $selection, $options = null)
|
||||
{
|
||||
if (empty($options)) {
|
||||
$options = array();
|
||||
$options = [];
|
||||
}
|
||||
|
||||
if (!$poll->isValidSelection($selection)) {
|
||||
@@ -137,10 +138,10 @@ class Poll_response extends Managed_DataObject
|
||||
$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;
|
||||
$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'];
|
||||
@@ -151,8 +152,10 @@ class Poll_response extends Managed_DataObject
|
||||
if (array_key_exists('uri', $options)) {
|
||||
$pr->uri = $options['uri'];
|
||||
} else {
|
||||
$pr->uri = common_local_url('showpollresponse',
|
||||
array('id' => $pr->id));
|
||||
$pr->uri = common_local_url(
|
||||
'showpollresponse',
|
||||
array('id' => $pr->id)
|
||||
);
|
||||
}
|
||||
|
||||
common_log(LOG_DEBUG, "Saving poll response: $pr->id $pr->uri");
|
||||
@@ -160,31 +163,37 @@ class Poll_response extends Managed_DataObject
|
||||
|
||||
// TRANS: Notice content voting for a poll.
|
||||
// TRANS: %s is the chosen option in the poll.
|
||||
$content = sprintf(_m('voted for "%s"'),
|
||||
$answer);
|
||||
$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();
|
||||
$tags = array();
|
||||
|
||||
$options = array_merge(array('urls' => array(),
|
||||
'rendered' => $rendered,
|
||||
'tags' => $tags,
|
||||
'reply_to' => $poll->getNotice()->id,
|
||||
'object_type' => PollPlugin::POLL_RESPONSE_OBJECT),
|
||||
$options);
|
||||
$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);
|
||||
$saved = Notice::saveNew(
|
||||
$profile->id,
|
||||
$content,
|
||||
array_key_exists('source', $options) ?
|
||||
$options['source'] : 'web',
|
||||
$options
|
||||
);
|
||||
|
||||
return $saved;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user