2015-08-17 17:00:26 -07:00
< ? php
/**
* @ file
* Contains \Drupal\locale\StringBase .
*/
namespace Drupal\locale ;
/**
* Defines the locale string base class .
*
* This is the base class to be used for locale string objects and contains
* the common properties and methods for source and translation strings .
*/
abstract class StringBase implements StringInterface {
/**
* The string identifier .
*
* @ var integer
*/
public $lid ;
/**
* The string locations indexed by type .
*
* @ var string
*/
public $locations ;
/**
* The source string .
*
* @ var string
*/
public $source ;
/**
* The string context .
*
* @ var string
*/
public $context ;
/**
* The string version .
*
* @ var string
*/
public $version ;
/**
* The locale storage this string comes from or is to be saved to .
*
* @ var \Drupal\locale\StringStorageInterface
*/
protected $storage ;
/**
* Constructs a new locale string object .
*
* @ param object | array $values
* Object or array with initial values .
*/
public function __construct ( $values = array ()) {
$this -> setValues (( array ) $values );
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function getId () {
return isset ( $this -> lid ) ? $this -> lid : NULL ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function setId ( $lid ) {
$this -> lid = $lid ;
return $this ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function getVersion () {
return isset ( $this -> version ) ? $this -> version : NULL ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function setVersion ( $version ) {
$this -> version = $version ;
return $this ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function getPlurals () {
return explode ( LOCALE_PLURAL_DELIMITER , $this -> getString ());
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function setPlurals ( $plurals ) {
$this -> setString ( implode ( LOCALE_PLURAL_DELIMITER , $plurals ));
return $this ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function getStorage () {
return isset ( $this -> storage ) ? $this -> storage : NULL ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function setStorage ( $storage ) {
$this -> storage = $storage ;
return $this ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function setValues ( array $values , $override = TRUE ) {
foreach ( $values as $key => $value ) {
if ( property_exists ( $this , $key ) && ( $override || ! isset ( $this -> $key ))) {
$this -> $key = $value ;
}
}
return $this ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function getValues ( array $fields ) {
$values = array ();
foreach ( $fields as $field ) {
if ( isset ( $this -> $field )) {
$values [ $field ] = $this -> $field ;
}
}
return $values ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function getLocations ( $check_only = FALSE ) {
if ( ! isset ( $this -> locations ) && ! $check_only ) {
$this -> locations = array ();
foreach ( $this -> getStorage () -> getLocations ( array ( 'sid' => $this -> getId ())) as $location ) {
$this -> locations [ $location -> type ][ $location -> name ] = $location -> lid ;
}
}
return isset ( $this -> locations ) ? $this -> locations : array ();
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function addLocation ( $type , $name ) {
$this -> locations [ $type ][ $name ] = TRUE ;
return $this ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function hasLocation ( $type , $name ) {
$locations = $this -> getLocations ();
return isset ( $locations [ $type ]) ? ! empty ( $locations [ $type ][ $name ]) : FALSE ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function save () {
if ( $storage = $this -> getStorage ()) {
$storage -> save ( $this );
}
else {
2015-08-27 12:03:05 -07:00
throw new StringStorageException ( 'The string cannot be saved because its not bound to a storage: ' . $this -> getString ());
2015-08-17 17:00:26 -07:00
}
return $this ;
}
/**
2015-11-04 11:11:27 -08:00
* { @ inheritdoc }
2015-08-17 17:00:26 -07:00
*/
public function delete () {
if ( ! $this -> isNew ()) {
if ( $storage = $this -> getStorage ()) {
$storage -> delete ( $this );
}
else {
2015-08-27 12:03:05 -07:00
throw new StringStorageException ( 'The string cannot be deleted because its not bound to a storage: ' . $this -> getString ());
2015-08-17 17:00:26 -07:00
}
}
return $this ;
}
}