]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/QnA/classes/QnA_Question.php
Added type-hint for entryForm() method + renamed $action back to $out from
[quix0rs-gnu-social.git] / plugins / QnA / classes / QnA_Question.php
index 70558763692bf1192a4115f80cd2ba907cf3aec8..079f09fb6bf46143383d64a343a1f37ba93ba8e6 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 $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)
+    static function fromNotice(Notice $notice)
     {
-        return QnA_Question::staticGet('uri', $notice->uri);
+        return QnA_Question::getKV('uri', $notice->uri);
     }
 
     function asHTML()
@@ -209,24 +179,45 @@ class QnA_Question extends Managed_DataObject
         return self::toString($this->getProfile(), $this);
     }
 
-    static function toHTML($profile, $question)
+    static function toHTML(Profile $profile, $question)
     {
         $notice = $question->getNotice();
 
         $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();
     }
 
@@ -246,7 +237,7 @@ class QnA_Question extends Managed_DataObject
      *
      * @return Notice saved notice
      */
-    static function saveNew($profile, $title, $description, $options = array())
+    static function saveNew(Profile $profile, $title, $description, array $options = array())
     {
         $q = new QnA_Question();
 
@@ -270,7 +261,7 @@ class QnA_Question extends Managed_DataObject
             );
         }
 
-        common_log(LOG_DEBUG, "Saving question: $q->id $q->uri");
+        common_debug("Saving question: $q->id $q->uri");
         $q->insert();
 
         if (Notice::contentTooLong($q->title . ' ' . $q->uri)) {
@@ -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;