annotate core/modules/locale/src/StringBase.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\locale;
Chris@0 4
Chris@18 5 use Drupal\Component\Gettext\PoItem;
Chris@18 6
Chris@0 7 /**
Chris@0 8 * Defines the locale string base class.
Chris@0 9 *
Chris@0 10 * This is the base class to be used for locale string objects and contains
Chris@0 11 * the common properties and methods for source and translation strings.
Chris@0 12 */
Chris@0 13 abstract class StringBase implements StringInterface {
Chris@0 14 /**
Chris@0 15 * The string identifier.
Chris@0 16 *
Chris@0 17 * @var int
Chris@0 18 */
Chris@0 19 public $lid;
Chris@0 20
Chris@0 21 /**
Chris@0 22 * The string locations indexed by type.
Chris@0 23 *
Chris@0 24 * @var string
Chris@0 25 */
Chris@0 26 public $locations;
Chris@0 27
Chris@0 28 /**
Chris@0 29 * The source string.
Chris@0 30 *
Chris@0 31 * @var string
Chris@0 32 */
Chris@0 33 public $source;
Chris@0 34
Chris@0 35 /**
Chris@0 36 * The string context.
Chris@0 37 *
Chris@0 38 * @var string
Chris@0 39 */
Chris@0 40 public $context;
Chris@0 41
Chris@0 42 /**
Chris@0 43 * The string version.
Chris@0 44 *
Chris@0 45 * @var string
Chris@0 46 */
Chris@0 47 public $version;
Chris@0 48
Chris@0 49 /**
Chris@0 50 * The locale storage this string comes from or is to be saved to.
Chris@0 51 *
Chris@0 52 * @var \Drupal\locale\StringStorageInterface
Chris@0 53 */
Chris@0 54 protected $storage;
Chris@0 55
Chris@0 56 /**
Chris@0 57 * Constructs a new locale string object.
Chris@0 58 *
Chris@0 59 * @param object|array $values
Chris@0 60 * Object or array with initial values.
Chris@0 61 */
Chris@0 62 public function __construct($values = []) {
Chris@0 63 $this->setValues((array) $values);
Chris@0 64 }
Chris@0 65
Chris@0 66 /**
Chris@0 67 * {@inheritdoc}
Chris@0 68 */
Chris@0 69 public function getId() {
Chris@0 70 return isset($this->lid) ? $this->lid : NULL;
Chris@0 71 }
Chris@0 72
Chris@0 73 /**
Chris@0 74 * {@inheritdoc}
Chris@0 75 */
Chris@0 76 public function setId($lid) {
Chris@0 77 $this->lid = $lid;
Chris@0 78 return $this;
Chris@0 79 }
Chris@0 80
Chris@0 81 /**
Chris@0 82 * {@inheritdoc}
Chris@0 83 */
Chris@0 84 public function getVersion() {
Chris@0 85 return isset($this->version) ? $this->version : NULL;
Chris@0 86 }
Chris@0 87
Chris@0 88 /**
Chris@0 89 * {@inheritdoc}
Chris@0 90 */
Chris@0 91 public function setVersion($version) {
Chris@0 92 $this->version = $version;
Chris@0 93 return $this;
Chris@0 94 }
Chris@0 95
Chris@0 96 /**
Chris@0 97 * {@inheritdoc}
Chris@0 98 */
Chris@0 99 public function getPlurals() {
Chris@18 100 return explode(PoItem::DELIMITER, $this->getString());
Chris@0 101 }
Chris@0 102
Chris@0 103 /**
Chris@0 104 * {@inheritdoc}
Chris@0 105 */
Chris@0 106 public function setPlurals($plurals) {
Chris@18 107 $this->setString(implode(PoItem::DELIMITER, $plurals));
Chris@0 108 return $this;
Chris@0 109 }
Chris@0 110
Chris@0 111 /**
Chris@0 112 * {@inheritdoc}
Chris@0 113 */
Chris@0 114 public function getStorage() {
Chris@0 115 return isset($this->storage) ? $this->storage : NULL;
Chris@0 116 }
Chris@0 117
Chris@0 118 /**
Chris@0 119 * {@inheritdoc}
Chris@0 120 */
Chris@0 121 public function setStorage($storage) {
Chris@0 122 $this->storage = $storage;
Chris@0 123 return $this;
Chris@0 124 }
Chris@0 125
Chris@0 126 /**
Chris@0 127 * {@inheritdoc}
Chris@0 128 */
Chris@0 129 public function setValues(array $values, $override = TRUE) {
Chris@0 130 foreach ($values as $key => $value) {
Chris@0 131 if (property_exists($this, $key) && ($override || !isset($this->$key))) {
Chris@0 132 $this->$key = $value;
Chris@0 133 }
Chris@0 134 }
Chris@0 135 return $this;
Chris@0 136 }
Chris@0 137
Chris@0 138 /**
Chris@0 139 * {@inheritdoc}
Chris@0 140 */
Chris@0 141 public function getValues(array $fields) {
Chris@0 142 $values = [];
Chris@0 143 foreach ($fields as $field) {
Chris@0 144 if (isset($this->$field)) {
Chris@0 145 $values[$field] = $this->$field;
Chris@0 146 }
Chris@0 147 }
Chris@0 148 return $values;
Chris@0 149 }
Chris@0 150
Chris@0 151 /**
Chris@0 152 * {@inheritdoc}
Chris@0 153 */
Chris@0 154 public function getLocations($check_only = FALSE) {
Chris@0 155 if (!isset($this->locations) && !$check_only) {
Chris@0 156 $this->locations = [];
Chris@0 157 foreach ($this->getStorage()->getLocations(['sid' => $this->getId()]) as $location) {
Chris@0 158 $this->locations[$location->type][$location->name] = $location->lid;
Chris@0 159 }
Chris@0 160 }
Chris@0 161 return isset($this->locations) ? $this->locations : [];
Chris@0 162 }
Chris@0 163
Chris@0 164 /**
Chris@0 165 * {@inheritdoc}
Chris@0 166 */
Chris@0 167 public function addLocation($type, $name) {
Chris@0 168 $this->locations[$type][$name] = TRUE;
Chris@0 169 return $this;
Chris@0 170 }
Chris@0 171
Chris@0 172 /**
Chris@0 173 * {@inheritdoc}
Chris@0 174 */
Chris@0 175 public function hasLocation($type, $name) {
Chris@0 176 $locations = $this->getLocations();
Chris@0 177 return isset($locations[$type]) ? !empty($locations[$type][$name]) : FALSE;
Chris@0 178 }
Chris@0 179
Chris@0 180 /**
Chris@0 181 * {@inheritdoc}
Chris@0 182 */
Chris@0 183 public function save() {
Chris@0 184 if ($storage = $this->getStorage()) {
Chris@0 185 $storage->save($this);
Chris@0 186 }
Chris@0 187 else {
Chris@0 188 throw new StringStorageException('The string cannot be saved because its not bound to a storage: ' . $this->getString());
Chris@0 189 }
Chris@0 190 return $this;
Chris@0 191 }
Chris@0 192
Chris@0 193 /**
Chris@0 194 * {@inheritdoc}
Chris@0 195 */
Chris@0 196 public function delete() {
Chris@0 197 if (!$this->isNew()) {
Chris@0 198 if ($storage = $this->getStorage()) {
Chris@0 199 $storage->delete($this);
Chris@0 200 }
Chris@0 201 else {
Chris@0 202 throw new StringStorageException('The string cannot be deleted because its not bound to a storage: ' . $this->getString());
Chris@0 203 }
Chris@0 204 }
Chris@0 205 return $this;
Chris@0 206 }
Chris@0 207
Chris@0 208 }