diff options
author | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
---|---|---|
committer | Yaco <franco@reevo.org> | 2020-06-04 11:01:00 -0300 |
commit | fc7369835258467bf97eb64f184b93691f9a9fd5 (patch) | |
tree | daabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/extensions/Translate/Message.php |
first commit
Diffstat (limited to 'www/wiki/extensions/Translate/Message.php')
-rw-r--r-- | www/wiki/extensions/Translate/Message.php | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/Message.php b/www/wiki/extensions/Translate/Message.php new file mode 100644 index 00000000..9bc0ba4b --- /dev/null +++ b/www/wiki/extensions/Translate/Message.php @@ -0,0 +1,203 @@ +<?php +/** + * Classes for message objects TMessage and ThinMessage. + * + * @file + * @author Niklas Laxström + * @copyright Copyright © 2008-2010, Niklas Laxström + * @license GPL-2.0-or-later + */ + +/** + * Interface for message objects used by MessageCollection. + */ +abstract class TMessage { + /** @var string Message display key. */ + protected $key; + /** @var string Message definition. */ + protected $definition; + /** @var string Committed in-file translation. */ + protected $infile; + /** @var string[] Message tags. */ + protected $tags = []; + /** @var array Message properties. */ + protected $props = []; + /** @var string[] Message reviewers. */ + protected $reviewers = []; + + /** + * Creates new message object. + * + * @param string $key Unique key identifying this message. + * @param string $definition The authoritave definition of this message. + */ + public function __construct( $key, $definition ) { + $this->key = $key; + $this->definition = $definition; + } + + /** + * Get the message key. + * @return string + */ + public function key() { + return $this->key; + } + + /** + * Get the message definition. + * @return string + */ + public function definition() { + return $this->definition; + } + + /** + * Get the message translation. + * @return string|null + */ + abstract public function translation(); + + /** + * Set the committed translation. + * @param string $text + */ + public function setInfile( $text ) { + $this->infile = $text; + } + + /** + * Returns the committed translation. + * @return string|null + */ + public function infile() { + return $this->infile; + } + + /** + * Add a tag for this message. + * @param string $tag + */ + public function addTag( $tag ) { + $this->tags[] = $tag; + } + + /** + * Check if this message has a given tag. + * @param string $tag + * @return bool + */ + public function hasTag( $tag ) { + return in_array( $tag, $this->tags, true ); + } + + /** + * Return all tags for this message; + * @return array of strings + */ + public function getTags() { + return $this->tags; + } + + public function setProperty( $key, $value ) { + $this->props[$key] = $value; + } + + public function appendProperty( $key, $value ) { + if ( !isset( $this->props[$key] ) ) { + $this->props[$key] = []; + } + $this->props[$key][] = $value; + } + + public function getProperty( $key ) { + return $this->props[$key] ?? null; + } + + /** + * Get all the available property names. + * @return array + * @since 2013-01-17 + */ + public function getPropertyNames() { + return array_keys( $this->props ); + } +} + +/** + * %Message object which is based on database result row. Hence the name thin. + * Needs fields rev_user_text and those that are needed for loading revision + * text. + */ +class ThinMessage extends TMessage { + // This maps properties to fields in the database result row + protected static $propertyMap = [ + 'last-translator-text' => 'rev_user_text', + 'last-translator-id' => 'rev_user', + ]; + + /** + * @var stdClass Database Result Row + */ + protected $row; + + /** + * Set the database row this message is based on. + * @param array $row Database Result Row + */ + public function setRow( $row ) { + $this->row = $row; + } + + public function translation() { + if ( !isset( $this->row ) ) { + return $this->infile(); + } + + return Revision::getRevisionText( $this->row ); + } + + // Re-implemented + public function getProperty( $key ) { + if ( !isset( self::$propertyMap[$key] ) ) { + return parent::getProperty( $key ); + } + + $field = self::$propertyMap[$key]; + if ( !isset( $this->row->$field ) ) { + return null; + } + + return $this->row->$field; + } + + // Re-implemented + public function getPropertyNames() { + return array_merge( parent::getPropertyNames(), array_keys( self::$propertyMap ) ); + } +} + +/** + * %Message object where you can directly set the translation. + * Hence the name fat. Authors are not supported. + */ +class FatMessage extends TMessage { + /** @var string Stored translation. */ + protected $translation; + + /** + * Set the current translation of this message. + * @param string $text + */ + public function setTranslation( $text ) { + $this->translation = $text; + } + + public function translation() { + if ( $this->translation === null ) { + return $this->infile; + } + + return $this->translation; + } +} |