public $content; // text -> response text
public $created; // datetime
- /**
- * Get an instance by key
- *
- * This is a utility method to get a single instance with a given key value.
- *
- * @param string $k Key to use to lookup
- * @param mixed $v Value to lookup
- *
- * @return QnA_Answer object found, or null for no hits
- *
- */
- function staticGet($k, $v=null)
- {
- return Memcached_DataObject::staticGet('QnA_Answer', $k, $v);
- }
-
- /**
- * Get an instance by compound key
- *
- * This is a utility method to get a single instance with a given set of
- * key-value pairs. Usually used for the primary key for a compound key; thus
- * the name.
- *
- * @param array $kv array of key-value mappings
- *
- * @return QA_Answer object found, or null for no hits
- *
- */
- function pkeyGet($kv)
- {
- return Memcached_DataObject::pkeyGet('QnA_Answer', $kv);
- }
-
/**
* The One True Thingy that must be defined and declared.
*/
*
* @return QnA_Answer found response or null
*/
- function getByNotice($notice)
+ static function getByNotice($notice)
{
- $answer = self::staticGet('uri', $notice->uri);
+ $answer = self::getKV('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;
}
*/
function getNotice()
{
- return Notice::staticGet('uri', $this->uri);
+ return Notice::getKV('uri', $this->uri);
+ }
+
+ static function fromNotice($notice)
+ {
+ return QnA_Answer::getKV('uri', $notice->uri);
}
function bestUrl()
*/
function getQuestion()
{
- $question = QnA_Question::staticGet('id', $this->question_id);
+ $question = QnA_Question::getKV('id', $this->question_id);
if (empty($question)) {
- throw new Exception("No question with ID {$this->question_id}");
+ // TRANS: Exception thown when getting a question with a non-existing ID.
+ // TRANS: %s is the non-existing question ID.
+ throw new Exception(sprintf(_m('No question with ID %s'),$this->question_id));
}
return $question;
}
function getProfile()
{
- $profile = Profile::staticGet('id', $this->profile_id);
+ $profile = Profile::getKV('id', $this->profile_id);
if (empty($profile)) {
- throw new Exception("No profile with ID {$this->profile_id}");
+ // TRANS: Exception thown when getting a profile with a non-existing ID.
+ // TRANS: %s is the non-existing profile ID.
+ throw new Exception(sprintf(_m('No profile with ID %s'),$this->profile_id));
}
return $profile;
}
{
$notice = $question->getNotice();
- $fmt = '<p class="qna_answer">';
- $fmt .= '<span class="answer_author"><a href="%1$s">answer</a> by <a href="%2$s">%3$s</a></span>';
- $fmt .= '<span class="answer_content">%4$s</span>';
+ $out = new XMLStringer();
+
+ $cls = array('qna_answer');
+ if (!empty($answer->best)) {
+ $cls[] = 'best';
+ }
+
+ $out->elementStart('p', array('class' => implode(' ', $cls)));
+ $out->elementStart('span', 'answer-content');
+ $out->raw(common_render_text($answer->content));
+ $out->elementEnd('span');
+
if (!empty($answer->revisions)) {
- $fmt .= '<span class="answer_revisions">'
- . $answer->revisions
- . _m('revisions')
- . '</span>';
+ $out->elementstart('span', 'answer-revisions');
+ $out->text(
+ htmlspecialchars(
+ // Notification of how often an answer was revised.
+ // TRANS: %s is the number of answer revisions.
+ sprintf(_m('%s revision','%s revisions',$answer->revisions), $answer->revisions)
+ )
+ );
+ $out->elementEnd('span');
}
- $fmt .= '</p>';
- return sprintf(
- $fmt,
- htmlspecialchars($notice->bestUrl()),
- htmlspecialchars($profile->profileurl),
- htmlspecialchars($profile->getBestName()),
- htmlspecialchars($answer->content)
- );
+ $out->elementEnd('p');
+
+ return $out->getString();
}
static function toString($profile, $question, $answer)
{
+ // @todo FIXME: unused variable?
$notice = $question->getNotice();
- $fmt = _m(
- '%1$s answered the question "%2$s": %3$s'
- );
-
return sprintf(
- $fmt,
+ // TRANS: Text for a question that was answered.
+ // TRANS: %1$s is the user that answered, %2$s is the question title,
+ // TRANS: %2$s is the answer content.
+ _m('%1$s answered the question "%2$s": %3$s'),
htmlspecialchars($profile->getBestName()),
htmlspecialchars($question->title),
htmlspecialchars($answer->content)
$answer->insert();
$content = sprintf(
+ // TRANS: Text for a question that was answered.
+ // TRANS: %s is the question title.
_m('answered "%s"'),
$question->title
);