public $profile_id; // int -> question.id
public $best; // (boolean) int -> whether the question asker has marked this as the best answer
public $revisions; // int -> count of revisions to this answer
- public $text; // text -> response text
+ public $content; // text -> response text
public $created; // datetime
/**
'not null' => true,
'description' => 'UUID of question being responded to'
),
+ 'content' => array('type' => 'text'), // got a better name?
'best' => array('type' => 'int', 'size' => 'tiny'),
'revisions' => array('type' => 'int'),
'profile_id' => array('type' => 'int'),
{
$answer = self::staticGet('uri', $notice->uri);
if (empty($answer)) {
- throw new Exception("No answer with URI {$this->notice->uri}");
+ throw new Exception("No answer with URI {$notice->uri}");
}
return $answer;
}
return Notice::staticGet('uri', $this->uri);
}
+ static function fromNotice($notice)
+ {
+ return QnA_Answer::staticGet('uri', $notice->uri);
+ }
+
function bestUrl()
{
return $this->getNotice()->bestUrl();
*/
function getQuestion()
{
- $question = self::staticGet('id', $this->question_id);
+ $question = QnA_Question::staticGet('id', $this->question_id);
if (empty($question)) {
throw new Exception("No question with ID {$this->question_id}");
}
- return question;
+ return $question;
}
-
+
function getProfile()
{
$profile = Profile::staticGet('id', $this->profile_id);
{
return self::toHTML(
$this->getProfile(),
- $this->getQuestion()
+ $this->getQuestion(),
+ $this
);
}
{
return self::toString(
$this->getProfile(),
- $this->getQuestion()
+ $this->getQuestion(),
+ $this
);
}
- static function toHTML($profile, $event, $response)
+ static function toHTML($profile, $question, $answer)
{
- $fmt = null;
-
- $notice = $event->getNotice();
-
- switch ($response) {
- case 'Y':
- $fmt = _("<span class='automatic event-rsvp'><a href='%1s'>%2s</a> is attending <a href='%3s'>%4s</a>.</span>");
- break;
- case 'N':
- $fmt = _("<span class='automatic event-rsvp'><a href='%1s'>%2s</a> is not attending <a href='%3s'>%4s</a>.</span>");
- break;
- case '?':
- $fmt = _("<span class='automatic event-rsvp'><a href='%1s'>%2s</a> might attend <a href='%3s'>%4s</a>.</span>");
- break;
- default:
- throw new Exception("Unknown response code {$response}");
- break;
+ $notice = $question->getNotice();
+
+ $out = new XMLStringer();
+
+ $cls = array('qna_answer');
+ if (!empty($answer->best)) {
+ $cls[] = 'best';
}
- return sprintf($fmt,
- htmlspecialchars($profile->profileurl),
- htmlspecialchars($profile->getBestName()),
- htmlspecialchars($notice->bestUrl()),
- htmlspecialchars($event->title));
- }
+ $out->elementStart('p', array('class' => implode(' ', $cls)));
+ $out->elementStart('span', 'answer-content');
+ $out->raw(QnAPlugin::shorten($answer->content, $notice));
+ $out->elementEnd('span');
- static function toString($profile, $event, $response)
- {
- $fmt = null;
-
- $notice = $event->getNotice();
-
- switch ($response) {
- case 'Y':
- $fmt = _("%1s is attending %2s.");
- break;
- case 'N':
- $fmt = _("%1s is not attending %2s.");
- break;
- case '?':
- $fmt = _("%1s might attend %2s.>");
- break;
- default:
- throw new Exception("Unknown response code {$response}");
- break;
+ if (!empty($answer->revisions)) {
+ $out->elementstart('span', 'answer-revisions');
+ $out->text(
+ htmlspecialchars(
+ sprintf(_m('%s revisions'), $answer->revisions)
+ )
+ );
+ $out->elementEnd('span');
}
- return sprintf($fmt,
- $profile->getBestName(),
- $event->title);
+ $out->elementEnd('p');
+
+ return $out->getString();
}
+ static function toString($profile, $question, $answer)
+ {
+ $notice = $question->getNotice();
+
+ $fmt = _m(
+ '%1$s answered the question "%2$s": %3$s'
+ );
+
+ return sprintf(
+ $fmt,
+ htmlspecialchars($profile->getBestName()),
+ htmlspecialchars($question->title),
+ htmlspecialchars($answer->content)
+ );
+ }
/**
* Save a new answer notice
$answer->question_id = $question->id;
$answer->revisions = 0;
$answer->best = 0;
- $answer->text = $text;
+ $answer->content = $text;
$answer->created = common_sql_now();
$answer->uri = common_local_url(
'qnashowanswer',