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 }
|