X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FQnA%2Fclasses%2FQnA_Answer.php;h=d04159f9b9375e529240ffdb49d71ed331c7830c;hb=d6b28c64830f632bb2f4b6f3c9369b9e56ad217a;hp=5727411a802e991424d1aaaf18f17538a04d7f0d;hpb=57198a74647f8350db4de03b0b7ef157091a4359;p=quix0rs-gnu-social.git diff --git a/plugins/QnA/classes/QnA_Answer.php b/plugins/QnA/classes/QnA_Answer.php index 5727411a80..d04159f9b9 100644 --- a/plugins/QnA/classes/QnA_Answer.php +++ b/plugins/QnA/classes/QnA_Answer.php @@ -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,11 +105,11 @@ 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 {$this->notice->uri}"); + throw new Exception("No answer with URI {$notice->uri}"); } return $answer; } @@ -152,12 +121,17 @@ class QnA_Answer extends Managed_DataObject */ function getNotice() { - return Notice::staticGet('uri', $this->uri); + return Notice::getKV('uri', $this->uri); } - function bestUrl() + static function fromNotice(Notice $notice) { - return $this->getNotice()->bestUrl(); + return QnA_Answer::getKV('uri', $notice->uri); + } + + function getUrl() + { + 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,32 +179,49 @@ class QnA_Answer extends Managed_DataObject ); } - static function toHTML($profile, $question, $answer) + static function toHTML(Profile $profile, $question, $answer) { $notice = $question->getNotice(); - $fmt = 'answer by %3$s'; - $fmt .= '%4$s'; + $out = new XMLStringer(); - return sprintf( - $fmt, - htmlspecialchars($notice->bestUrl()), - htmlspecialchars($profile->profileurl), - htmlspecialchars($profile->getBestName()), - htmlspecialchars($answer->content) - ); + $cls = array('qna_answer'); + if (!empty($answer->best)) { + $cls[] = 'best'; + } + + $out->elementStart('p', array('class' => implode(' ', $cls))); + $out->elementStart('span', 'answer-content'); + $out->raw(common_render_text($answer->content)); + $out->elementEnd('span'); + + if (!empty($answer->revisions)) { + $out->elementstart('span', 'answer-revisions'); + $out->text( + htmlspecialchars( + // 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'); + } + + $out->elementEnd('p'); + + return $out->getString(); } 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) @@ -242,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; @@ -261,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 );