ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
Translations.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
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 }
getEffectiveCOPageLang(string $lang, string $parent_type)
Class handles translation mode for an object.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists.
__construct(private readonly int $obj_id, private array $languages, private string $default_language, private ?string $base_language, private readonly bool $migration_missing=false)
$lang
Definition: xapiexit.php:25