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