]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/QnA/QnAPlugin.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / plugins / QnA / QnAPlugin.php
index 4908e93dd0e250caa7326e4911b2a67fcb937d92..2c28bf6055483bef7e6468ba4e85e7ef3469b83a 100644 (file)
@@ -46,6 +46,9 @@ if (!defined('STATUSNET')) {
  */
 class QnAPlugin extends MicroAppPlugin
 {
+
+    var $oldSaveNew = true;
+
     /**
      * Set up our tables (question and answer)
      *
@@ -65,57 +68,19 @@ class QnAPlugin extends MicroAppPlugin
         return true;
     }
 
-    /**
-     * Load related modules when needed
-     *
-     * @param string $cls Name of the class to be loaded
-     *
-     * @return boolean hook value; true means continue processing, false means stop.
-     */
-    function onAutoload($cls)
-    {
-        $dir = dirname(__FILE__);
-
-        switch ($cls)
-        {
-        case 'QnanewquestionAction':
-        case 'QnanewanswerAction':
-        case 'QnashowquestionAction':
-        case 'QnaclosequestionAction':
-        case 'QnashowanswerAction':
-        case 'QnareviseanswerAction':
-        case 'QnavoteAction':
-            include_once $dir . '/actions/'
-                . strtolower(mb_substr($cls, 0, -6)) . '.php';
-            return false;
-        case 'QnanewquestionForm':
-        case 'QnashowquestionForm':
-        case 'QnanewanswerForm':
-        case 'QnashowanswerForm':
-        case 'QnareviseanswerForm':
-        case 'QnavoteForm':
-            include_once $dir . '/lib/' . strtolower($cls).'.php';
-            break;
-        case 'QnA_Question':
-        case 'QnA_Answer':
-        case 'QnA_Vote':
-            include_once $dir . '/classes/' . $cls.'.php';
-            return false;
-            break;
-        default:
-            return true;
-        }
+    public function newFormAction() {
+        return 'qnanewquestion';
     }
 
     /**
      * Map URLs to actions
      *
-     * @param Net_URL_Mapper $m path-to-action mapper
+     * @param URLMapper $m path-to-action mapper
      *
      * @return boolean hook value; true means continue processing, false means stop.
      */
 
-    function onRouterInitialized($m)
+    public function onRouterInitialized(URLMapper $m)
     {
         $UUIDregex = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}';
 
@@ -159,11 +124,11 @@ class QnAPlugin extends MicroAppPlugin
         return true;
     }
 
-    function onPluginVersion(&$versions)
+    function onPluginVersion(array &$versions)
     {
         $versions[] = array(
             'name'        => 'QnA',
-            'version'     => STATUSNET_VERSION,
+            'version'     => GNUSOCIAL_VERSION,
             'author'      => 'Zach Copley',
             'homepage'    => 'http://status.net/wiki/Plugin:QnA',
             'description' =>
@@ -199,7 +164,7 @@ class QnAPlugin extends MicroAppPlugin
      *
      * @return Notice the resulting notice
      */
-    function saveNoticeFromActivity($activity, $actor, $options=array())
+    function saveNoticeFromActivity(Activity $activity, Profile $actor, array $options=array())
     {
         if (count($activity->objects) != 1) {
             // TRANS: Exception thrown when there are too many activity objects.
@@ -225,7 +190,7 @@ class QnAPlugin extends MicroAppPlugin
             );
             break;
         case Answer::ObjectType:
-            $question = QnA_Question::staticGet('uri', $questionObj->id);
+            $question = QnA_Question::getKV('uri', $questionObj->id);
             if (empty($question)) {
                 // FIXME: save the question
                 // TRANS: Exception thrown when answering a non-existing question.
@@ -249,7 +214,7 @@ class QnAPlugin extends MicroAppPlugin
      * @return ActivityObject
      */
 
-    function activityObjectFromNotice($notice)
+    function activityObjectFromNotice(Notice $notice)
     {
         $question = null;
 
@@ -280,7 +245,7 @@ class QnAPlugin extends MicroAppPlugin
         $obj->id      = $question->uri;
         $obj->type    = QnA_Question::OBJECT_TYPE;
         $obj->title   = $question->title;
-        $obj->link    = $notice->bestUrl();
+        $obj->link    = $notice->getUrl();
 
         // XXX: probably need other stuff here
 
@@ -295,7 +260,7 @@ class QnAPlugin extends MicroAppPlugin
      * @return boolean hook value
      */
 
-    function onStartOpenNoticeListItemElement($nli)
+    function onStartOpenNoticeListItemElement(NoticeListItem $nli)
     {
         $type = $nli->notice->object_type;
 
@@ -303,12 +268,12 @@ class QnAPlugin extends MicroAppPlugin
         {
         case QnA_Question::OBJECT_TYPE:
             $id = (empty($nli->repeat)) ? $nli->notice->id : $nli->repeat->id;
-            $class = 'hentry notice question';
+            $class = 'h-entry notice question';
             if ($nli->notice->scope != 0 && $nli->notice->scope != 1) {
                 $class .= ' limited-scope';
             }
 
-            $question = QnA_Question::staticGet('uri', $nli->notice->uri);
+            $question = QnA_Question::getKV('uri', $nli->notice->uri);
 
             if (!empty($question->closed)) {
                 $class .= ' closed';
@@ -326,9 +291,9 @@ class QnAPlugin extends MicroAppPlugin
         case QnA_Answer::OBJECT_TYPE:
             $id = (empty($nli->repeat)) ? $nli->notice->id : $nli->repeat->id;
 
-            $cls = array('hentry', 'notice', 'answer');
+            $cls = array('h-entry', 'notice', 'answer');
 
-            $answer = QnA_Answer::staticGet('uri', $nli->notice->uri);
+            $answer = QnA_Answer::getKV('uri', $nli->notice->uri);
 
             if (!empty($answer) && !empty($answer->best)) {
                 $cls[] = 'best';
@@ -351,57 +316,6 @@ class QnAPlugin extends MicroAppPlugin
         return true;
     }
 
-    /**
-     * Custom HTML output for our notices
-     *
-     * @param Notice $notice
-     * @param HTMLOutputter $out
-     */
-    function showNotice($notice, $out)
-    {
-        switch ($notice->object_type) {
-        case QnA_Question::OBJECT_TYPE:
-            return $this->showNoticeQuestion($notice, $out);
-        case QnA_Answer::OBJECT_TYPE:
-            return $this->showNoticeAnswer($notice, $out);
-        default:
-            throw new Exception(
-                // TRANS: Exception thrown when performing an unexpected action on a question.
-                // TRANS: %s is the unpexpected object type.
-                sprintf(_m('Unexpected type for QnA plugin: %s.'),
-                        $notice->object_type
-                )
-            );
-        }
-    }
-
-    function showNoticeQuestion($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->elementStart('div', array('class' => 'entry-content question-description'));
-
-        $question = QnA_Question::getByNotice($notice);
-
-        if (!empty($question)) {
-
-            $form = new QnashowquestionForm($out, $question);
-            $form->show();
-
-        } else {
-            // TRANS: Error message displayed when question data is not present.
-            $out->text(_m('Question data is missing.'));
-        }
-        $out->elementEnd('div');
-
-        // @fixme
-        $out->elementStart('div', array('class' => 'entry-content'));
-    }
-
     /**
      * Output the HTML for this kind of object in a list
      *
@@ -411,7 +325,7 @@ class QnAPlugin extends MicroAppPlugin
      *
      * @todo FIXME: WARNING WARNING WARNING this closes a 'div' that is implicitly opened in BookmarkPlugin's showNotice implementation
      */
-    function onStartShowNoticeItem($nli)
+    function onStartShowNoticeItem(NoticeListItem $nli)
     {
         if (!$this->isMyNotice($nli->notice)) {
             return true;
@@ -420,15 +334,12 @@ class QnAPlugin extends MicroAppPlugin
         $out = $nli->out;
         $notice = $nli->notice;
 
-        $this->showNotice($notice, $out);
+        $nli->showNotice($notice, $out);
 
         $nli->showNoticeLink();
         $nli->showNoticeSource();
         $nli->showNoticeLocation();
-        $nli->showContext();
-        $nli->showRepeat();
-
-        $out->elementEnd('div');
+        $nli->showPermalink();
 
         $nli->showNoticeOptions();
 
@@ -436,7 +347,7 @@ class QnAPlugin extends MicroAppPlugin
             $user = common_current_user();
             $question = QnA_Question::getByNotice($notice);
 
-            if (!empty($user)) {
+            if (!empty($user) and !empty($question)) {
                 $profile = $user->getProfile();
                 $answer = $question->getAnswer($profile);
 
@@ -465,30 +376,8 @@ class QnAPlugin extends MicroAppPlugin
         return false;
     }
 
-    function showNoticeAnswer($notice, $out)
-    {
-        $user = common_current_user();
-
-        $answer   = QnA_Answer::getByNotice($notice);
-        $question = $answer->getQuestion();
-
-        $nli = new NoticeListItem($notice, $out);
-        $nli->showNotice();
-
-        $out->elementStart('div', array('class' => 'entry-content answer-content'));
-
-        if (!empty($answer)) {
-            $form = new QnashowanswerForm($out, $answer);
-            $form->show();
-        } else {
-            // TRANS: Error message displayed when answer data is not present.
-            $out->text(_m('Answer data is missing.'));
-        }
-
-        $out->elementEnd('div');
-
-        // @todo FIXME
-        $out->elementStart('div', array('class' => 'entry-content'));
+    function adaptNoticeListItem($nli) {
+        return new QnAListItem($nli);
     }
 
     static function shorten($content, $notice)
@@ -503,7 +392,7 @@ class QnAPlugin extends MicroAppPlugin
             $ellipsis = _m('…');
             $short = mb_substr($content, 0, $max - 1);
             $short .= sprintf('<a href="%1$s" rel="more" title="%2$s">%3$s</a>',
-                              $notice->uri,
+                              $notice->getUrl(),
                               // TRANS: Title for link that is an ellipsis in English.
                               _m('more...'),
                               $ellipsis);
@@ -530,32 +419,32 @@ class QnAPlugin extends MicroAppPlugin
      *
      * @param Notice $notice
      */
-    function deleteRelated($notice)
+    function deleteRelated(Notice $notice)
     {
         switch ($notice->object_type) {
         case QnA_Question::OBJECT_TYPE:
-            common_log(LOG_DEBUG, "Deleting question from notice...");
+            common_debug("Deleting question from notice...");
             $question = QnA_Question::fromNotice($notice);
             $question->delete();
             break;
         case QnA_Answer::OBJECT_TYPE:
-            common_log(LOG_DEBUG, "Deleting answer from notice...");
+            common_debug("Deleting answer from notice...");
             $answer = QnA_Answer::fromNotice($notice);
-            common_log(LOG_DEBUG, "to delete: $answer->id");
+            common_debug("to delete: $answer->id");
             $answer->delete();
             break;
         default:
-            common_log(LOG_DEBUG, "Not deleting related, wtf...");
+            common_debug("Not deleting related, wtf...");
         }
     }
 
-    function onEndShowScripts($action)
+    function onEndShowScripts(Action $action)
     {
         $action->script($this->path('js/qna.js'));
         return true;
     }
 
-    function onEndShowStyles($action)
+    function onEndShowStyles(Action $action)
     {
         $action->cssLink($this->path('css/qna.css'));
         return true;