19 declare(strict_types=1);
37 if (!isset(self::$data_cache[$object_id])) {
41 return self::$data_cache[$object_id];
46 if ($this->db->tableExists(self::COPAGE_TRANSLATIONS_TABLE)) {
50 $result = $this->db->query(
51 'SELECT title, description, lang_code, lang_default, lang_base' . PHP_EOL
52 .
'FROM ' . self::OBJECT_TRANSLATIONS_TABLE . PHP_EOL
53 .
'WHERE obj_id = ' . $this->db->quote($object_id,
'integer') . PHP_EOL
57 $default_language =
'';
58 $base_language =
null;
59 while ($row = $this->db->fetchAssoc($result)) {
60 $languages[$row[
'lang_code']] =
new Language(
63 $row[
'description'] ??
'',
64 $row[
'lang_default'] === 1,
65 $row[
'lang_base'] === 1
67 if ($row[
'lang_default'] === 1) {
68 $default_language = $row[
'lang_code'];
71 if ($row[
'lang_base'] === 1) {
72 $base_language = $row[
'lang_code'];
89 $master_lang = $this->db->fetchAssoc(
91 'SELECT obj_id, master_lang, fallback_lang' . PHP_EOL
92 .
'FROM ' . self::COPAGE_TRANSLATIONS_TABLE . PHP_EOL
93 .
'WHERE obj_id = ' . $this->db->quote($object_id,
'integer') . PHP_EOL
97 $result = $this->db->query(
98 'SELECT title, description, lang_code, lang_default' . PHP_EOL
99 .
'FROM ' . self::OBJECT_TRANSLATIONS_TABLE . PHP_EOL
100 .
'WHERE obj_id = ' . $this->db->quote($object_id,
'integer') . PHP_EOL
104 $object_translation_default_language =
'';
105 while ($row = $this->db->fetchAssoc($result)) {
106 $languages[$row[
'lang_code']] =
new Language(
109 $row[
'description'] ??
'',
110 $row[
'lang_code'] === ($master_lang[
'fallback_lang'] ??
'')
111 || $row[
'lang_default'] === 1 && $this->
determineDefaultLanguage($row[
'lang_code'], $master_lang) === $row[
'lang_code'],
112 isset($master_lang[
'master_lang']) && $master_lang[
'master_lang'] === $row[
'lang_code']
114 if ($row[
'lang_default'] === 1) {
115 $object_translation_default_language = $row[
'lang_code'];
123 $master_lang[
'master_lang'] ??
null,
132 string $object_translation_default_language,
135 if (empty($base_lang[
'fallback_lang'])) {
136 return $object_translation_default_language;
138 return $base_lang[
'fallback_lang'];
141 public function delete(
int $obj_id):
void 143 $this->db->manipulate(
144 'DELETE FROM ' . self::OBJECT_TRANSLATIONS_TABLE . PHP_EOL
145 .
'WHERE obj_id = ' . $this->db->quote($obj_id,
'integer')
152 $this->
delete($translations->
getObjId());
155 self::$data_cache[$translations->
getObjId()] = $translations;
156 return $translations;
159 $values = array_reduce(
161 function (
string $c,
Language $v) use ($translations):
string {
178 $this->db->manipulate(
179 'INSERT INTO ' . self::OBJECT_TRANSLATIONS_TABLE . PHP_EOL
180 .
'(obj_id, title, description, lang_code, lang_default, lang_base)' . PHP_EOL
181 .
'VALUES ' . $values
184 self::$data_cache[$translations->
getObjId()] = $translations;
185 return $translations;
const COPAGE_TRANSLATIONS_TABLE
determineDefaultLanguage(string $object_translation_default_language, ?array $base_lang)
Class handles translation mode for an object.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
store(Translations $translations)
buildDataForObjectIdForLegacySetup(int $object_id)
__construct(private readonly \ilDBInterface $db)
buildDataForObjectId(int $object_id)
const OBJECT_TRANSLATIONS_TABLE