%PDF- %PDF-
| Direktori : /www/varak.net/wiki.varak.net/extensions/Translate/ |
| Current File : /www/varak.net/wiki.varak.net/extensions/Translate/Message.php |
<?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 isset( $this->props[$key] ) ? $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;
}
}