]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/QnA/classes/QnA_Question.php
Merge commit 'refs/merge-requests/51' of https://gitorious.org/social/mainline into...
[quix0rs-gnu-social.git] / plugins / QnA / classes / QnA_Question.php
index 70558763692bf1192a4115f80cd2ba907cf3aec8..b5318386777b50dcd2569007bde40303565fa7ad 100644 (file)
@@ -42,53 +42,19 @@ if (!defined('STATUSNET')) {
  *
  * @see      DB_DataObject
  */
-
 class QnA_Question extends Managed_DataObject
 {
     const OBJECT_TYPE = 'http://activityschema.org/object/question';
 
     public $__table = 'qna_question'; // table name
     public $id;          // char(36) primary key not null -> UUID
-    public $uri;
+    public $uri;         // varchar(191)   not 255 because utf8mb4 takes more space
     public $profile_id;  // int -> profile.id
     public $title;       // text
     public $description; // text
     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
-     *
-     * This is a utility method to get a single instance with a given set of
-     * key-value pairs. Usually used for the primary key for a compound key; thus
-     * the name.
-     *
-     * @param array $kv array of key-value mappings
-     *
-     * @return Bookmark object found, or null for no hits
-     *
-     */
-    function pkeyGet($kv)
-    {
-        return Memcached_DataObject::pkeyGet('QnA_Question', $kv);
-    }
-
     /**
      * The One True Thingy that must be defined and declared.
      */
@@ -105,7 +71,7 @@ class QnA_Question extends Managed_DataObject
                 ),
                 'uri' => array(
                     'type'     => 'varchar',
-                    'length'   => 255,
+                    'length'   => 191,
                     'not null' => true
                 ),
                 'profile_id'  => array('type' => 'int'),
@@ -131,26 +97,28 @@ 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()
+    function getUrl()
     {
-        return $this->getNotice()->bestUrl();
+        return $this->getNotice()->getUrl();
     }
 
     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 +157,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()
@@ -215,18 +185,39 @@ class QnA_Question extends Managed_DataObject
 
         $out = new XMLStringer();
 
+        $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(QnAPlugin::shorten($question->description, $notice));
+            $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();
     }
 
@@ -278,7 +269,6 @@ class QnA_Question extends Managed_DataObject
             $uriLen    = mb_strlen($q->uri);
             $targetLen = $max - ($uriLen + 15);
             $title = mb_substr($q->title, 0, $targetLen) . '…';
-
         }
 
         $content = $title . ' ' . $q->uri;