]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
More plumbing
authorZach Copley <zach@status.net>
Wed, 30 Mar 2011 17:33:15 +0000 (10:33 -0700)
committerZach Copley <zach@status.net>
Wed, 30 Mar 2011 17:33:15 +0000 (10:33 -0700)
plugins/QnA/actions/qnanewanswer.php
plugins/QnA/actions/qnashowanswer.php
plugins/QnA/actions/qnashowquestion.php
plugins/QnA/classes/QnA_Answer.php
plugins/QnA/classes/QnA_Question.php

index 10b1046c3e854de9e11399d704a9add7bb68265f..781ded36e6b96427c972b1b35e89114519f268ab 100644 (file)
@@ -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');
index 9721f22da343dec32ee6623a50cdafe078f6fe1e..d90b5c7ac68ee0be9ea5719cc97db77ac96c71f4 100644 (file)
@@ -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);
     }
 
     /**
index 671912535407a1822bca4b9a3c4e1706bbe45710..d128eeec2fcdef171fc144db3dbcff3c11df8ba8 100644 (file)
@@ -95,6 +95,11 @@ class QnashowquestionAction extends ShownoticeAction
         return true;
     }
 
+    function showContent()
+    {
+        $this->raw($this->question->asHTML());
+    }
+
     /**
      * Title of the page
      *
index 57c08afe4ed22c07a2e38e46ac26fdedc8ed54e8..349bbb0196dc92548268a5ed924e65592411c8bf 100644 (file)
@@ -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 = $event->getNotice();
+        $notice = $question->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;
-        }
+        $fmt   = '<span class="answer_author"><a href="%1s">answer</a> by <a href="%2s">%3s</a></span>';
+        $fmt  .= '<span class="answer_content">%4s</span>';
 
-        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 = $event->getNotice();
+        $notice = $question->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;
-        }
+        $fmt = _(
+            '%1s answered the question "%2s": %3s'
+        );
 
-        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',
index 523092359097740b76231318e5aef7ecaf103124..1022f2c3a639873b41c330da185da657a132f170 100644 (file)
@@ -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 =  '<div class="qna_question">';
+        $fmt .= '<span class="question_title"><a href="%1s">%2s</a></span>';
+        $fmt .= '<span class="question_description">%3s</span>';
+        $fmt .= '<span class="question_author">asked by <a href="%4s">%5s</a></span>';
+        $fmt .= '</div>';
+
+        $q = sprintf(
+            $fmt,
+            htmlspecialchars($notice->bestUrl()),
+            htmlspecialchars($question->title),
+            htmlspecialchars($question->description),
+            htmlspecialchars($profile->profileurl),
+            htmlspecialchars($profile->getBestName())
+        );
+
+        $ans = array();
+
+        $ans[] = '<div class="qna_answers">';
+
+        while($answer->fetch()) {
+            $ans[] = $answer->asHTML();
+        }
+
+        $ans[] .= '</div>';
+
+        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
      *