]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/QnA/classes/QnA_Answer.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / plugins / QnA / classes / QnA_Answer.php
index c8dcd43162fd9d8c6c9ec6117ed03d811fa93500..d04159f9b9375e529240ffdb49d71ed331c7830c 100644 (file)
@@ -48,6 +48,7 @@ class QnA_Answer extends Managed_DataObject
 
     public $__table = 'qna_answer'; // table name
     public $id;          // char(36) primary key not null -> UUID
+    public $uri;         // varchar(191)   not 255 because utf8mb4 takes more space
     public $question_id; // char(36) -> question.id UUID
     public $profile_id;  // int -> question.id
     public $best;        // (boolean) int -> whether the question asker has marked this as the best answer
@@ -55,39 +56,6 @@ class QnA_Answer extends Managed_DataObject
     public $content;     // text -> response text
     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_Answer object found, or null for no hits
-     *
-     */
-    function staticGet($k, $v=null)
-    {
-        return Memcached_DataObject::staticGet('QnA_Answer', $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 QA_Answer object found, or null for no hits
-     *
-     */
-    function pkeyGet($kv)
-    {
-        return Memcached_DataObject::pkeyGet('QnA_Answer', $kv);
-    }
-
     /**
      * The One True Thingy that must be defined and declared.
      */
@@ -99,24 +67,25 @@ class QnA_Answer extends Managed_DataObject
                 'id' => array(
                     'type'     => 'char',
                     'length'   => 36,
-                    'not null' => true, 'description' => 'UUID of the response'),
-                    'uri'      => array(
-                        'type'        => 'varchar',
-                        'length'      => 255,
-                        'not null'    => true,
-                        'description' => 'UUID to the answer notice'
-                    ),
-                    'question_id' => array(
-                        'type'        => 'char',
-                        'length'      => 36,
-                        'not null'    => true,
-                        'description' => 'UUID of question being responded to'
-                    ),
-                    'content'    => array('type' => 'text'), // got a better name?
-                    'best'       => array('type' => 'int', 'size' => 'tiny'),
-                    'revisions'  => array('type' => 'int'),
-                    'profile_id' => array('type' => 'int'),
-                    'created'    => array('type' => 'datetime', 'not null' => true),
+                    'not null' => true, 'description' => 'UUID of the response',
+                ),
+                'uri'      => array(
+                    'type'        => 'varchar',
+                    'length'      => 191,
+                    'not null'    => true,
+                    'description' => 'UUID to the answer notice',
+                ),
+                'question_id' => array(
+                    'type'        => 'char',
+                    'length'      => 36,
+                    'not null'    => true,
+                    'description' => 'UUID of question being responded to',
+                ),
+                'content'    => array('type' => 'text'), // got a better name?
+                'best'       => array('type' => 'int', 'size' => 'tiny'),
+                'revisions'  => array('type' => 'int'),
+                'profile_id' => array('type' => 'int'),
+                'created'    => array('type' => 'datetime', 'not null' => true),
             ),
             'primary key' => array('id'),
             'unique keys' => array(
@@ -136,9 +105,9 @@ class QnA_Answer extends Managed_DataObject
      *
      * @return QnA_Answer found response or null
      */
-    function getByNotice($notice)
+    static function getByNotice(Notice $notice)
     {
-        $answer = self::staticGet('uri', $notice->uri);
+        $answer = self::getKV('uri', $notice->uri);
         if (empty($answer)) {
             throw new Exception("No answer with URI {$notice->uri}");
         }
@@ -152,12 +121,17 @@ class QnA_Answer extends Managed_DataObject
      */
     function getNotice()
     {
-        return Notice::staticGet('uri', $this->uri);
+        return Notice::getKV('uri', $this->uri);
+    }
+
+    static function fromNotice(Notice $notice)
+    {
+        return QnA_Answer::getKV('uri', $notice->uri);
     }
 
-    function bestUrl()
+    function getUrl()
     {
-        return $this->getNotice()->bestUrl();
+        return $this->getNotice()->getUrl();
     }
 
     /**
@@ -167,18 +141,22 @@ class QnA_Answer extends Managed_DataObject
      */
     function getQuestion()
     {
-        $question = QnA_Question::staticGet('id', $this->question_id);
+        $question = QnA_Question::getKV('id', $this->question_id);
         if (empty($question)) {
-            throw new Exception("No question with ID {$this->question_id}");
+            // TRANS: Exception thown when getting a question with a non-existing ID.
+            // TRANS: %s is the non-existing question ID.
+            throw new Exception(sprintf(_m('No question with ID %s'),$this->question_id));
         }
         return $question;
     }
 
     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 thown when getting a profile with a non-existing ID.
+            // TRANS: %s is the non-existing profile ID.
+            throw new Exception(sprintf(_m('No profile with ID %s'),$this->profile_id));
         }
         return $profile;
     }
@@ -201,7 +179,7 @@ class QnA_Answer extends Managed_DataObject
         );
     }
 
-    static function toHTML($profile, $question, $answer)
+    static function toHTML(Profile $profile, $question, $answer)
     {
         $notice = $question->getNotice();
 
@@ -214,14 +192,16 @@ class QnA_Answer extends Managed_DataObject
 
         $out->elementStart('p', array('class' => implode(' ', $cls)));
         $out->elementStart('span', 'answer-content');
-        $out->raw(QnAPlugin::shorten($answer->content, $notice));
+        $out->raw(common_render_text($answer->content));
         $out->elementEnd('span');
 
         if (!empty($answer->revisions)) {
             $out->elementstart('span', 'answer-revisions');
             $out->text(
                 htmlspecialchars(
-                    sprintf(_m('%s revisions'), $answer->revisions)
+                    // Notification of how often an answer was revised.
+                    // TRANS: %s is the number of answer revisions.
+                    sprintf(_m('%s revision','%s revisions',$answer->revisions), $answer->revisions)
                 )
             );
             $out->elementEnd('span');
@@ -234,14 +214,14 @@ class QnA_Answer extends Managed_DataObject
 
     static function toString($profile, $question, $answer)
     {
+        // @todo FIXME: unused variable?
         $notice = $question->getNotice();
 
-        $fmt = _m(
-            '%1$s answered the question "%2$s": %3$s'
-        );
-
         return sprintf(
-            $fmt,
+            // TRANS: Text for a question that was answered.
+            // TRANS: %1$s is the user that answered, %2$s is the question title,
+            // TRANS: %2$s is the answer content.
+            _m('%1$s answered the question "%2$s": %3$s'),
             htmlspecialchars($profile->getBestName()),
             htmlspecialchars($question->title),
             htmlspecialchars($answer->content)
@@ -257,12 +237,8 @@ class QnA_Answer extends Managed_DataObject
      *
      * @return Notice saved notice
      */
-    static function saveNew($profile, $question, $text, $options = null)
+    static function saveNew(Profile $profile, $question, $text, array $options = array())
     {
-        if (empty($options)) {
-            $options = array();
-        }
-
         $answer              = new QnA_Answer();
         $answer->id          = UUID::gen();
         $answer->profile_id  = $profile->id;
@@ -276,10 +252,12 @@ class QnA_Answer extends Managed_DataObject
             array('id' => $answer->id)
         );
 
-        common_log(LOG_DEBUG, "Saving answer: $answer->id, $answer->uri");
+        common_debug("Saving answer: $answer->id, $answer->uri");
         $answer->insert();
 
         $content  = sprintf(
+            // TRANS: Text for a question that was answered.
+            // TRANS: %s is the question title.
             _m('answered "%s"'),
             $question->title
         );