+
+ /**
+ * Show an Ajax-y error message
+ *
+ * Goes back to the browser, where it's shown in a popup.
+ *
+ * @param string $msg Message to show
+ *
+ * @return void
+ */
+ function ajaxErrorMsg($msg)
+ {
+ $this->startHTML('text/xml;charset=utf-8', true);
+ $this->elementStart('head');
+ // TRANS: Page title after an AJAX error occurs on the post answer page.
+ $this->element('title', null, _m('Ajax Error'));
+ $this->elementEnd('head');
+ $this->elementStart('body');
+ $this->element('p', array('id' => 'error'), $msg);
+ $this->elementEnd('body');
+ $this->endHTML();
+ }
+
+ /**
+ * Show an Ajax-y answer form
+ *
+ * Goes back to the browser, where it's shown in a popup.
+ *
+ * @param string $msg Message to show
+ *
+ * @return void
+ */
+ function ajaxShowForm()
+ {
+ common_debug('ajaxShowForm()');
+ $this->startHTML('text/xml;charset=utf-8', true);
+ $this->elementStart('head');
+ // TRANS: Title for form to send answer to a question.
+ $this->element('title', null, _m('TITLE','Your answer'));
+ $this->elementEnd('head');
+ $this->elementStart('body');
+
+ $form = new QnanewanswerForm($this, $this->question);
+ $form->show();
+
+ $this->elementEnd('body');
+ $this->endHTML();
+ }
+
+ /**
+ * @param string $msg An error message, if any
+ *
+ * @return void
+ */
+ function showForm($msg = null)
+ {
+ common_debug("show form - msg = $msg");
+ if ($this->boolean('ajax')) {
+ if ($msg) {
+ $this->ajaxErrorMsg($msg);
+ } else {
+ $this->ajaxShowForm();
+ }
+ return;
+ }
+
+ $this->msg = $msg;
+ $this->showPage();
+ }
+}
+
+class NoticeAnswerListItem extends NoticeListItem
+{
+ protected $question;
+ protected $answer;
+
+ /**
+ * constructor
+ *
+ * Also initializes the profile attribute.
+ *
+ * @param Notice $notice The notice we'll display
+ */
+ function __construct($notice, $out=null, $question, $answer)
+ {
+ parent::__construct($notice, $out);
+ $this->question = $question;
+ $this->answer = $answer;
+
+ }
+
+ function show()
+ {
+ if (empty($this->notice)) {
+ common_log(LOG_WARNING, "Trying to show missing notice; skipping.");
+ return;
+ } else if (empty($this->profile)) {
+ common_log(LOG_WARNING, "Trying to show missing profile (" . $this->notice->profile_id . "); skipping.");
+ return;
+ }
+
+ $this->showStart();
+ $this->showNotice();
+ $this->showNoticeInfo();
+ $notice = $this->question->getNotice();
+ $this->out->hidden('inreplyto', $notice->id);
+ $this->showEnd();
+ }
+
+ /**
+ * show the content of the notice
+ *
+ * Shows the content of the notice. This is pre-rendered for efficiency
+ * at save time. Some very old notices might not be pre-rendered, so
+ * they're rendered on the spot.
+ *
+ * @return void
+ */
+ function showContent()
+ {
+ $this->out->elementStart('p', array('class' => 'e-content answer-content'));
+ $this->out->raw($this->notice->getRendered());
+
+ if (!empty($this->answer)) {
+ $form = new QnashowanswerForm($this->out, $this->answer);
+ $form->show();
+ } else {
+ // TRANS: Error message displayed when an answer has no content.
+ $out->text(_m('Answer data is missing.'));
+ }
+
+ $this->out->elementEnd('p');
+ }