diff --git a/plugins/QnA/actions/qnanewanswer.php b/plugins/QnA/actions/qnanewanswer.php index 10b1046c3e..781ded36e6 100644 --- a/plugins/QnA/actions/qnanewanswer.php +++ b/plugins/QnA/actions/qnanewanswer.php @@ -50,7 +50,7 @@ class QnanewanswerAction extends Action protected $complete = null; protected $question = null; - protected $answerText = null; + protected $content = null; /** * Returns the title of the action @@ -155,7 +155,7 @@ class QnanewanswerAction extends Action $this->element('title', null, _m('Answers')); $this->elementEnd('head'); $this->elementStart('body'); - $form = new QnA_Answer($this->question, $this); + $form = new QnaanswerForm($this->question, $this); $form->show(); $this->elementEnd('body'); $this->elementEnd('html'); diff --git a/plugins/QnA/actions/qnashowanswer.php b/plugins/QnA/actions/qnashowanswer.php index 9721f22da3..d90b5c7ac6 100644 --- a/plugins/QnA/actions/qnashowanswer.php +++ b/plugins/QnA/actions/qnashowanswer.php @@ -103,9 +103,11 @@ class QnashowanswerAction extends ShownoticeAction function title() { + $question = $this->answer->getQuestion(); + return sprintf(_('%s\'s answer to "%s"'), $this->user->nickname, - $this->answer->title); + $question->title); } /** diff --git a/plugins/QnA/actions/qnashowquestion.php b/plugins/QnA/actions/qnashowquestion.php index 6719125354..d128eeec2f 100644 --- a/plugins/QnA/actions/qnashowquestion.php +++ b/plugins/QnA/actions/qnashowquestion.php @@ -95,6 +95,11 @@ class QnashowquestionAction extends ShownoticeAction return true; } + function showContent() + { + $this->raw($this->question->asHTML()); + } + /** * Title of the page * diff --git a/plugins/QnA/classes/QnA_Answer.php b/plugins/QnA/classes/QnA_Answer.php index 57c08afe4e..349bbb0196 100644 --- a/plugins/QnA/classes/QnA_Answer.php +++ b/plugins/QnA/classes/QnA_Answer.php @@ -52,7 +52,7 @@ class QnA_Answer extends Managed_DataObject 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 /** @@ -112,6 +112,7 @@ class QnA_Answer extends Managed_DataObject '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'), @@ -172,7 +173,7 @@ class QnA_Answer extends Managed_DataObject } return question; } - + function getProfile() { $profile = Profile::staticGet('id', $this->profile_id); @@ -186,7 +187,8 @@ class QnA_Answer extends Managed_DataObject { return self::toHTML( $this->getProfile(), - $this->getQuestion() + $this->getQuestion(), + $this ); } @@ -194,65 +196,43 @@ class QnA_Answer extends Managed_DataObject { 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 = $question->getNotice(); - $notice = $event->getNotice(); + $fmt = 'answer by %3s'; + $fmt .= '%4s'; - switch ($response) { - case 'Y': - $fmt = _("%2s is attending %4s."); - break; - case 'N': - $fmt = _("%2s is not attending %4s."); - break; - case '?': - $fmt = _("%2s might attend %4s."); - break; - default: - throw new Exception("Unknown response code {$response}"); - break; - } - - return sprintf($fmt, - htmlspecialchars($profile->profileurl), - htmlspecialchars($profile->getBestName()), - htmlspecialchars($notice->bestUrl()), - htmlspecialchars($event->title)); + return sprintf( + $fmt, + htmlspecialchars($notice->bestUrl()), + htmlspecialchars($profile->profileurl), + htmlspecialchars($profile->getBestName()), + htmlspecialchars($answer->content) + ); } - static function toString($profile, $event, $response) + static function toString($profile, $question, $answer) { - $fmt = null; + $notice = $question->getNotice(); - $notice = $event->getNotice(); + $fmt = _( + '%1s answered the question "%2s": %3s' + ); - 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; - } - - return sprintf($fmt, - $profile->getBestName(), - $event->title); + return sprintf( + $fmt, + htmlspecialchars($profile->getBestName()), + htmlspecialchars($question->title), + htmlspecialchars($answer->content) + ); } - /** * Save a new answer notice * @@ -274,7 +254,7 @@ class QnA_Answer extends Managed_DataObject $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', diff --git a/plugins/QnA/classes/QnA_Question.php b/plugins/QnA/classes/QnA_Question.php index 5230923590..1022f2c3a6 100644 --- a/plugins/QnA/classes/QnA_Question.php +++ b/plugins/QnA/classes/QnA_Question.php @@ -146,6 +146,15 @@ class QnA_Question extends Managed_DataObject return $this->getNotice()->bestUrl(); } + function getProfile() + { + $profile = Profile::staticGet('id', $this->profile_id); + if (empty($profile)) { + throw new Exception("No profile with ID {$this->profile_id}"); + } + return $profile; + } + /** * Get the answer from a particular user to this question, if any. * @@ -166,6 +175,18 @@ class QnA_Question extends Managed_DataObject } } + function getAnswers() + { + $a = new QnA_Answer(); + $a->question_id = $this->id; + $cnt = $a->find(); + if (!empty($cnt)) { + return $a; + } else { + return null; + } + } + function countAnswers() { $a = new QnA_Answer(); @@ -178,6 +199,70 @@ class QnA_Question extends Managed_DataObject return QnA_Question::staticGet('uri', $notice->uri); } + function asHTML() + { + return self::toHTML( + $this->getProfile(), + $this, + $this->getAnswers() + ); + } + + function asString() + { + return self::toString( + $this->getProfile(), + $this, + $this->getAnswers() + ); + } + + static function toHTML($profile, $question, $answer) + { + $notice = $question->getNotice(); + + $fmt = '
'; + $fmt .= '%2s'; + $fmt .= '%3s'; + $fmt .= 'asked by %5s'; + $fmt .= '
'; + + $q = sprintf( + $fmt, + htmlspecialchars($notice->bestUrl()), + htmlspecialchars($question->title), + htmlspecialchars($question->description), + htmlspecialchars($profile->profileurl), + htmlspecialchars($profile->getBestName()) + ); + + $ans = array(); + + $ans[] = '
'; + + while($answer->fetch()) { + $ans[] = $answer->asHTML(); + } + + $ans[] .= '
'; + + return $q . implode($ans); + } + + static function toString($profile, $question, $answers) + { + $fmt = _( + '%1s asked the question "%2s": %3s' + ); + + return sprintf( + $fmt, + htmlspecialchars($profile->getBestName()), + htmlspecialchars($question->title), + htmlspecialchars($question->description) + ); + } + /** * Save a new question notice *