]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/QnA/classes/QnA_Question.php
The overloaded DB_DataObject function staticGet is now called getKV
[quix0rs-gnu-social.git] / plugins / QnA / classes / QnA_Question.php
index 3f1a33d33cc3c95acaa64e68fb376b6e35fd4d3c..58a9cd5e183fd24fc25523f6ba002c7dfd94d794 100644 (file)
@@ -42,7 +42,6 @@ if (!defined('STATUSNET')) {
  *
  * @see      DB_DataObject
  */
-
 class QnA_Question extends Managed_DataObject
 {
     const OBJECT_TYPE = 'http://activityschema.org/object/question';
@@ -56,22 +55,6 @@ class QnA_Question extends Managed_DataObject
     public $closed;      // int (boolean) whether a question is closed
     public $created;     // datetime
 
-    /**
-     * Get an instance by key
-     *
-     * This is a utility method to get a single instance with a given key value.
-     *
-     * @param string $k Key to use to lookup
-     * @param mixed  $v Value to lookup
-     *
-     * @return QnA_Question object found, or null for no hits
-     *
-     */
-    function staticGet($k, $v=null)
-    {
-        return Memcached_DataObject::staticGet('QnA_Question', $k, $v);
-    }
-
     /**
      * Get an instance by compound key
      *
@@ -131,14 +114,14 @@ class QnA_Question extends Managed_DataObject
      *
      * @return Question found question or null
      */
-    function getByNotice($notice)
+    static function getByNotice($notice)
     {
-        return self::staticGet('uri', $notice->uri);
+        return self::getKV('uri', $notice->uri);
     }
 
     function getNotice()
     {
-        return Notice::staticGet('uri', $this->uri);
+        return Notice::getKV('uri', $this->uri);
     }
 
     function bestUrl()
@@ -148,9 +131,11 @@ class QnA_Question extends Managed_DataObject
 
     function getProfile()
     {
-        $profile = Profile::staticGet('id', $this->profile_id);
+        $profile = Profile::getKV('id', $this->profile_id);
         if (empty($profile)) {
-            throw new Exception("No profile with ID {$this->profile_id}");
+            // TRANS: Exception trown when getting a profile for a non-existing ID.
+            // TRANS: %s is the provided profile ID.
+            throw new Exception(sprintf(_m('No profile with ID %s'),$this->profile_id));
         }
         return $profile;
     }
@@ -189,14 +174,16 @@ class QnA_Question extends Managed_DataObject
 
     function countAnswers()
     {
-        $a              = new QnA_Answer();
+        $a = new QnA_Answer();
+
         $a->question_id = $this->id;
-        return $a-count();
+
+        return $a->count();
     }
 
     static function fromNotice($notice)
     {
-        return QnA_Question::staticGet('uri', $notice->uri);
+        return QnA_Question::getKV('uri', $notice->uri);
     }
 
     function asHTML()
@@ -214,9 +201,39 @@ class QnA_Question extends Managed_DataObject
         $notice = $question->getNotice();
 
         $out = new XMLStringer();
-        $out->elementStart('span', 'question_description');
-        $out->raw(QnAPlugin::shorten($question->description, $notice));
-        $out->elementEnd('span');
+
+        $cls = array('qna_question');
+
+        if (!empty($question->closed)) {
+            $cls[] = 'closed';
+        }
+
+        $out->elementStart('p', array('class' => implode(' ', $cls)));
+
+        if (!empty($question->description)) {
+            $out->elementStart('span', 'question-description');
+            $out->raw(common_render_text($question->description));
+            $out->elementEnd('span');
+        }
+
+        $cnt = $question->countAnswers();
+
+        if (!empty($cnt)) {
+            $out->elementStart('span', 'answer-count');
+            // TRANS: Number of given answers to a question.
+            // TRANS: %s is the number of given answers.
+            $out->text(sprintf(_m('%s answer','%s answers',$cnt), $cnt));
+            $out->elementEnd('span');
+        }
+
+        if (!empty($question->closed)) {
+            $out->elementStart('span', 'question-closed');
+            // TRANS: Notification that a question cannot be answered anymore because it is closed.
+            $out->text(_m('This question is closed.'));
+            $out->elementEnd('span');
+        }
+
+        $out->elementEnd('p');
 
         return $out->getString();
     }
@@ -264,15 +281,16 @@ class QnA_Question extends Managed_DataObject
         common_log(LOG_DEBUG, "Saving question: $q->id $q->uri");
         $q->insert();
 
-        // TRANS: Notice content creating a question.
-        // TRANS: %1$s is the title of the question, %2$s is a link to the question.
-        $content  = sprintf(
-            _m('question: %1$s %2$s'),
-            $title,
-            $q->uri
-        );
+        if (Notice::contentTooLong($q->title . ' ' . $q->uri)) {
+            $max       = Notice::maxContent();
+            $uriLen    = mb_strlen($q->uri);
+            $targetLen = $max - ($uriLen + 15);
+            $title = mb_substr($q->title, 0, $targetLen) . '…';
+        }
+
+        $content = $title . ' ' . $q->uri;
 
-        $link = '<a href="' . htmlspecialchars($q->uri) . '">' . htmlspecialchars($title) . '</a>';
+        $link = '<a href="' . htmlspecialchars($q->uri) . '">' . htmlspecialchars($q->title) . '</a>';
         // TRANS: Rendered version of the notice content creating a question.
         // TRANS: %s a link to the question as link description.
         $rendered = sprintf(_m('Question: %s'), $link);