ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
Translations.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
26use ILIAS\Refinery\Factory as Refinery;
27
53{
58 public function __construct(
59 private readonly int $obj_id,
60 private array $languages,
61 private string $default_language,
62 private ?string $base_language,
63 private readonly bool $migration_missing = false
64 ) {
65 }
66
70 public function migrationMissing(): bool
71 {
72 return $this->migration_missing;
73 }
74 public function getObjId(): int
75 {
76 return $this->obj_id;
77 }
78
79 public function getDefaultLanguage(): string
80 {
81 return $this->default_language;
82 }
83
84 public function withDefaultLanguage(string $default_language): self
85 {
86 $clone = clone $this;
87 $clone->languages[$clone->default_language] = $clone->languages[$clone->default_language]->withDefault(false);
88 $clone->languages[$default_language] = $clone->languages[$default_language]->withDefault(true);
89 $clone->default_language = $default_language;
90 return $clone;
91 }
92
93 public function getBaseLanguage(): string
94 {
95 return $this->base_language ?? '';
96 }
97
98 public function withBaseLanguage(string $base_language): self
99 {
100 $clone = clone $this;
101 if ($clone->base_language !== null) {
102 $clone->languages[$clone->base_language] = $clone->languages[$clone->base_language]->withBase(false);
103 }
104 $clone->languages[$base_language] = $clone->languages[$base_language]->withBase(true);
105 $clone->base_language = $base_language;
106 return $clone;
107 }
108
112 public function getLanguages(): array
113 {
114 return $this->languages;
115 }
116
117 public function getLaguageForCode(string $lang_code): ?Language
118 {
119 return $this->languages[$lang_code] ?? null;
120 }
121
122 public function withLanguage(Language $lang): self
123 {
124 $clone = $this;
125 $clone->languages[$lang->getLanguageCode()] = $lang;
126 if ($lang->isBase() && $this->base_language !== $lang->getLanguageCode()) {
127 if ($this->base_language !== null) {
128 $clone->languages[$clone->base_language] = $clone->languages[$clone->base_language]->withBase(false);
129 }
130 $clone->base_language = $lang->getLanguageCode();
131 }
132
133 if ($lang->isDefault() && $this->default_language !== $lang->getLanguageCode()) {
134 if ($this->default_language !== '') {
135 $clone->languages[$clone->default_language] = $this->languages[$clone->default_language]->withDefault(false);
136 }
137 $clone->default_language = $lang->getLanguageCode();
138 }
139
140 return $clone;
141 }
142
143 public function withoutLanguage(string $lang): self
144 {
145 if ($lang === $this->base_language) {
146 return $this;
147 }
148
149 $clone = $this;
150 unset($clone->languages[$lang]);
151 return $clone;
152 }
153
154 public function withResetLanguages(): self
155 {
156 $clone = clone $this;
157 $clone->languages = [];
158 return $clone;
159 }
160
161 public function getDefaultTitle(): string
162 {
163 if ($this->default_language !== ''
164 && array_key_exists($this->default_language, $this->languages)) {
165 return $this->languages[$this->default_language]->getTitle();
166 }
167
168 if ($this->languages === []) {
169 return \ilObject::_lookupTitle($this->getObjId());
170 }
171 return '';
172 }
173
174 public function withDefaultTitle(string $title): self
175 {
176 if ($this->default_language === ''
177 || !isset($this->languages[$this->default_language])) {
178 return $this;
179 }
180
181 $clone = clone $this;
182 $clone->languages[$clone->default_language] = $clone->languages[$clone->default_language]->withTitle($title);
183 return $clone;
184 }
185
186 public function getDefaultDescription(): string
187 {
188 if ($this->default_language !== ''
189 && array_key_exists($this->default_language, $this->languages)) {
190 return $this->languages[$this->default_language]->getDescription();
191 }
192
193 if ($this->languages === []) {
194 return \ilObject::_lookupTitle($this->getObjId());
195 }
196 return '';
197 }
198
199 public function withDefaultDescription(string $description): self
200 {
201 if ($this->default_language === ''
202 || !isset($this->languages[$this->default_language])) {
203 return $this;
204 }
205
206 $clone = clone $this;
207 $clone->languages[$clone->default_language] = $clone->languages[$clone->default_language]->withDescription($description);
208 return $clone;
209 }
210
211 public function getContentTranslationActivated(): bool
212 {
213 return $this->base_language !== null;
214 }
215
216 public function withDeactivatedContentTranslation(): self
217 {
218 $clone = clone $this;
219 $clone->languages[$clone->base_language] = $clone->languages[$this->base_language]->withBase(false);
220 $clone->base_language = null;
221 return $clone;
222 }
223
224 public function copy(int $obj_id): self
225 {
226 return new self(
227 $obj_id,
228 $this->languages,
229 $this->default_language,
230 $this->base_language
231 );
232 }
233
234 public function getEffectiveCOPageLang(
235 string $lang,
236 string $parent_type
237 ): string {
238 if ($this->base_language === null) {
239 return '-';
240 }
241
242 $page_lang_key = $lang === $this->base_language
243 ? '-'
244 : $lang;
245
246 if (isset($this->languages[$lang])
247 && \ilPageObject::_exists($parent_type, $this->getObjId(), $page_lang_key)) {
248 return $page_lang_key;
249 }
250
251 if (isset($this->languages[$this->default_language])
252 && \ilPageObject::_exists($parent_type, $this->getObjId(), $this->default_language)) {
253 return $this->default_language;
254 }
255 return '-';
256 }
257}
Builds data types.
Definition: Factory.php:36
Class handles translation mode for an object.
getEffectiveCOPageLang(string $lang, string $parent_type)
__construct(private readonly int $obj_id, private array $languages, private string $default_language, private ?string $base_language, private readonly bool $migration_missing=false)
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists.
This describes inputs that can be used in forms.
Definition: FormInput.php:33
This is what a factory for input fields looks like.
Definition: Factory.php:31
if(!file_exists('../ilias.ini.php'))
$lang
Definition: xapiexit.php:25