]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/QnA/QnAPlugin.php
Fix i18n issues.
[quix0rs-gnu-social.git] / plugins / QnA / QnAPlugin.php
index ba3b6e329a8bb9717c518d6238ce9b5821036391..9a05eeb0b2f60631ba72216ae50014b804e59d90 100644 (file)
@@ -82,13 +82,15 @@ class QnAPlugin extends MicroAppPlugin
         case 'QnanewanswerAction':
         case 'QnashowquestionAction':
         case 'QnashowanswerAction':
+        case 'QnareviseanswerAction':
         case 'QnavoteAction':
             include_once $dir . '/actions/'
                 . strtolower(mb_substr($cls, 0, -6)) . '.php';
             return false;
         case 'QnaquestionForm':
         case 'QnaanswerForm':
-        case 'QnavoteForm';
+        case 'QnareviseanswerForm':
+        case 'QnavoteForm':
             include_once $dir . '/lib/' . strtolower($cls).'.php';
             break;
         case 'QnA_Question':
@@ -119,9 +121,8 @@ class QnAPlugin extends MicroAppPlugin
             array('action' => 'qnanewquestion')
         );
         $m->connect(
-            'main/qna/newanswer/:id',
-            array('action' => 'qnanewanswer'),
-            array('id' => $UUIDregex)
+            'main/qna/newanswer',
+            array('action' => 'qnanewanswer')
         );
         $m->connect(
             'question/vote/:id',
@@ -201,24 +202,23 @@ class QnAPlugin extends MicroAppPlugin
 
         switch ($activity->verb) {
         case ActivityVerb::POST:
-            $notice = Question::saveNew(
+            $notice = QnA_Question::saveNew(
                 $actor,
-                $questionObj->title
-               // null,
-               // $questionObj->summary,
-               // $options
+                $questionObj->title,
+                $questionObj->summary,
+                $options
             );
             break;
-        case Answer::NORMAL:
+        case Answer::ObjectType:
             $question = QnA_Question::staticGet('uri', $questionObj->id);
             if (empty($question)) {
                 // FIXME: save the question
                 throw new Exception("Answer to unknown question.");
             }
-            $notice = QnA_Answer::saveNew($actor, $question, $activity->verb, $options);
+            $notice = QnA_Answer::saveNew($actor, $question, $options);
             break;
         default:
-            throw new Exception("Unknown verb for question");
+            throw new Exception("Unknown object type received by QnA Plugin");
         }
 
         return $notice;
@@ -292,127 +292,67 @@ class QnAPlugin extends MicroAppPlugin
      * @param Notice $notice
      * @param HTMLOutputter $out
      */
-
     function showNotice($notice, $out)
     {
         switch ($notice->object_type) {
         case QnA_Question::OBJECT_TYPE:
-            $this->showQuestionNotice($notice, $out);
-            break;
+            return $this->showNoticeQuestion($notice, $out);
         case QnA_Answer::OBJECT_TYPE:
-            $this->showAnswerNotice($notice, $out);
-            break;
+            return $this->showNoticeAnswer($notice, $out);
+        default:
+            // TRANS: Exception thrown when performing an unexpected action on a question.
+            // TRANS: %s is the unpexpected object type.
+            throw new Exception(
+                sprintf(
+                    _m('Unexpected type for QnA plugin: %s.'),
+                    $notice->object_type
+                )
+            );
         }
-
-        // bad craziness
-        $out->elementStart('div', array('class' => 'question'));
-
-        $profile = $notice->getProfile();
-        $avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
-
-        $out->element(
-            'img',
-            array(
-                'src'    => ($avatar)
-                    ? $avatar->displayUrl()
-                    : Avatar::defaultImage(AVATAR_MINI_SIZE),
-                'class'  => 'avatar photo question-avatar',
-                'width'  => AVATAR_MINI_SIZE,
-                'height' => AVATAR_MINI_SIZE,
-                'alt'    => $profile->getBestName()
-            )
-        );
-
-        $out->raw(' '); // avoid   for AJAX XML compatibility
-
-        // hack for belongsOnTimeline; JS needs to be able to find the author
-        $out->elementStart('span', 'vcard author');
-        $out->element(
-            'a',
-            array(
-                'class' => 'url',
-                'href'  => $profile->profileurl,
-                'title' => $profile->getBestName()
-            ),
-            $profile->nickname
-        );
-
-        $out->elementEnd('span');
     }
 
-    function showAnswerNotice($notice, $out)
+    function showNoticeQuestion($notice, $out)
     {
-        $answer = QnA_Answer::fromNotice($notice);
-
-        assert(!empty($answer));
-
-        $out->elementStart('div', 'answer');
-        $out->raw($answer->asHTML());
-        $out->elementEnd('div');
-    }
-
-    function showQuestionNotice($notice, $out)
-    {
-        $profile  = $notice->getProfile();
-        $question = QnA_Question::fromNotice($notice);
-
-        assert(!empty($question));
-        assert(!empty($profile));
-
-        $out->elementStart('div', 'question-notice');
-
-        $out->elementStart('h3');
+        $user = common_current_user();
 
-        if (!empty($question->url)) {
-            $out->element(
-                'a',
-                array(
-                    'href'  => $question->url,
-                    'class' => 'question-title'
-                ),
-                $question->title
-            );
+        // @hack we want regular rendering, then just add stuff after that
+        $nli = new NoticeListItem($notice, $out);
+        $nli->showNotice();
+
+        $out->elementStart('div', array('class' => 'entry-content question-content'));
+        $question = QnA_Question::getByNotice($notice);
+
+        if ($question) {
+            if ($user) {
+                $profile = $user->getProfile();
+                $answer = $question->getAnswer($profile);
+                if ($answer) {
+                    // User has already answer; show the results.
+                    $form = new QnareviseanswerForm($answer, $out);
+                } else {
+                    $form = new QnaanswerForm($question, $out);
+                }
+                $form->show();
+            }
         } else {
-            $out->text($question->title);
+            $out->text(_m('Question data is missing'));
         }
-
-        if (!empty($question->location)) {
-            $out->elementStart('div', 'question-location');
-            $out->element('strong', null, _('Location: '));
-            $out->element('span', 'location', $question->location);
-            $out->elementEnd('div');
-        }
-
-        if (!empty($question->description)) {
-            $out->elementStart('div', 'question-description');
-            $out->element('strong', null, _('Description: '));
-            $out->element('span', 'description', $question->description);
-            $out->elementEnd('div');
-        }
-
-        //$answers = $question->getAnswers();
-
-        $out->elementStart('div', 'question-answers');
-        $out->element('strong', null, _('Answer: '));
-        $out->element('span', 'question-answer');
-
         $out->elementEnd('div');
 
-        $user = common_current_user();
-
-        if (!empty($user)) {
-
-            $answer = $question->getAnswer($user->getProfile());
-
-            if (empty($answer)) {
-                $form = new QnaanswerForm($question, $out);
-                $form->show();
-            }
+        // @fixme
+        $out->elementStart('div', array('class' => 'entry-content'));
+    }
 
+    function showNoticeAnswer($notice, $out)
+    {
+        $user = common_current_user();
 
-        }
+        // @hack we want regular rendering, then just add stuff after that
+        $nli = new NoticeListItem($notice, $out);
+        $nli->showNotice();
 
-        $out->elementEnd('div');
+        // @fixme
+        $out->elementStart('div', array('class' => 'entry-content'));
     }
 
     /**