From 43d5068cda7202a16a3cc527cad6441e9cf528ac Mon Sep 17 00:00:00 2001 From: Ivymaster Date: Mon, 28 Sep 2026 19:01:26 +0200 Subject: [PATCH] Add fix for unconsistent translation options in news administration form --- .../api/frontend/v1/NewsAdministrationAPI.php | 11 ++++++++ .../Cms/NewsAdministration/NewsItemForm.js | 25 ++++++++++++------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/application/controllers/api/frontend/v1/NewsAdministrationAPI.php b/application/controllers/api/frontend/v1/NewsAdministrationAPI.php index ea43ed02e..e15e403cd 100644 --- a/application/controllers/api/frontend/v1/NewsAdministrationAPI.php +++ b/application/controllers/api/frontend/v1/NewsAdministrationAPI.php @@ -587,6 +587,17 @@ class NewsAdministrationAPI extends FHCAPI_Controller } } + $submittedLanguages = array_column($data['translations'], 'sprache'); + $this->db->where('content_id', $existingNews->content_id); + $this->db->where_not_in('sprache', $submittedLanguages); + + if ($this->db->delete('campus.tbl_contentsprache') === false) + { + $error = $this->db->error(); + $this->db->trans_rollback(); + $this->terminateWithError($error, self::ERROR_TYPE_DB); + } + foreach ($data['translations'] as $translation) { $translation['content'] = $this->formatContentURLsToRelative($translation['content']); diff --git a/public/js/components/Cis/Cms/NewsAdministration/NewsItemForm.js b/public/js/components/Cis/Cms/NewsAdministration/NewsItemForm.js index 48949e522..9b93f3737 100644 --- a/public/js/components/Cis/Cms/NewsAdministration/NewsItemForm.js +++ b/public/js/components/Cis/Cms/NewsAdministration/NewsItemForm.js @@ -246,13 +246,13 @@ export default { const remainingLanguages = Object.values(contentFormItems) .map((item) => item.config?.language) .filter(Boolean); + contentFormItems.addLanguage = { ...addLanguageTab, config: { - hasAvailableLanguages: this.availableLanguages.some( - (availableLanguage) => - !remainingLanguages.includes(availableLanguage.value), - ), + languages: this.availableLanguages.filter( + (language) => !remainingLanguages.includes(language.value), + ) }, }; @@ -280,15 +280,18 @@ export default { const addLanguageTab = this.contentFormItems.addLanguage; const contentFormItems = { ...this.contentFormItems }; delete contentFormItems.addLanguage; + + contentFormItems[key] = this.createContentFormItem(language); + const remainingLanguages = Object.values(contentFormItems) + .map((item) => item.config?.language) + .filter(Boolean); contentFormItems.addLanguage = { ...addLanguageTab, config: { - hasAvailableLanguages: this.availableLanguages.some( - (availableLanguage) => - availableLanguage.value !== language && - !this.visibleContentLanguages.includes(availableLanguage.value), - ), + languages: this.availableLanguages.filter( + (language) => !remainingLanguages.includes(language.value), + ) }, }; this.contentFormItems = contentFormItems; @@ -360,6 +363,10 @@ export default { }); contentFormItems.addLanguage = this.createAddLanguageTab(); + if (contentFormItems.addLanguage?.config) { + contentFormItems.addLanguage.config.languages = this.languagesToAdd; + } + this.contentFormItems = contentFormItems; this.activeContentFormKey = Object.keys(contentFormItems).find((key) => key !== 'addLanguage') ??