diff --git a/application/controllers/api/frontend/v1/Phrasen.php b/application/controllers/api/frontend/v1/Phrasen.php index 7cc652c71..3e13bb61e 100644 --- a/application/controllers/api/frontend/v1/Phrasen.php +++ b/application/controllers/api/frontend/v1/Phrasen.php @@ -32,6 +32,8 @@ class Phrasen extends FHCAPI_Controller 'setLanguage' => self::PERM_ANONYMOUS, 'getLanguage' => self::PERM_ANONYMOUS, 'getAllLanguages' => self::PERM_ANONYMOUS, + 'getPhrases' => self::PERM_ANONYMOUS, + 'getTabulatorPhrases' => self::PERM_ANONYMOUS, ]); $this->load->helper('hlp_language'); @@ -92,4 +94,59 @@ class Phrasen extends FHCAPI_Controller $this->terminateWithSuccess($langs); } + public function getPhrases() + { + $postParams = $this->getPostJSON(); + + $languages = $postParams->languages; + if (!$languages || !count($languages)) { + $this->load->model('system/Sprache_model', 'sprachenModel'); + $activeLanguages = $this->sprachenModel->loadWhere(array('content' => true)); + $activeLanguagesData = $this->getDataOrTerminateWithError($activeLanguages); + $languages = array_map( + function ($languageData) { + return $languageData->sprache; + }, + $activeLanguagesData + ); + } + + $this->load->model('system/Phrase_model', 'phraseModel'); + $phrasesGroupedByCategory = $postParams->phrasesGroupedByCategory; + $result = []; + foreach ($languages as $language) { + $phrases = $this->phraseModel->getPhrasesByCategoryAndPhrasesAndLanguage($phrasesGroupedByCategory, $language); + $result[$language] = $this->getDataOrTerminateWithError($phrases); + } + + $this->terminateWithSuccess($result); + } + + public function getTabulatorPhrases() + { + $languages = json_decode($this->input->get('languages')); + if (!$languages || !count($languages)) { + $this->load->model('system/Sprache_model', 'sprachenModel'); + $activeLanguages = $this->sprachenModel->loadWhere(array('content' => true)); + $activeLanguagesData = $this->getDataOrTerminateWithError($activeLanguages); + $languages = array_map( + function ($languageData) { + return $languageData->sprache; + }, + $activeLanguagesData + ); + } + + $this->load->model('system/Phrase_model', 'phraseModel'); + $result = []; + foreach ($languages as $language) { + $tabulatorPhrases = $this->phraseModel->getPhrasesByCategoryAndLanguage(['tabulator'], $language); + $result[$language] = $this->getDataOrTerminateWithError($tabulatorPhrases); + } + + header('Pragma: private'); + header('Cache-Control: private, max-age=' . (60 * 60 * 24 * 30)); + $this->terminateWithSuccess($result); + } + } \ No newline at end of file diff --git a/public/js/api/factory/phrasen.js b/public/js/api/factory/phrasen.js index a87e4f4be..1f8e772ba 100644 --- a/public/js/api/factory/phrasen.js +++ b/public/js/api/factory/phrasen.js @@ -41,5 +41,24 @@ export default { method: 'get', url: '/api/frontend/v1/phrasen/getAllLanguages' }; - } + }, + getPhrases(phrasesGroupedByCategory, languages = []) { + return { + method: 'post', + url: '/api/frontend/v1/phrasen/getPhrases', + params: { + phrasesGroupedByCategory, + languages, + }, + }; + }, + getTabulatorPhrases(languages = []) { + return { + method: 'get', + url: '/api/frontend/v1/phrasen/getTabulatorPhrases', + params: { + languages: JSON.stringify(languages), + }, + }; + }, }; \ No newline at end of file diff --git a/public/js/components/Cis/Profil/MitarbeiterProfil.js b/public/js/components/Cis/Profil/MitarbeiterProfil.js index bccbf4eb5..9a6d12e3f 100644 --- a/public/js/components/Cis/Profil/MitarbeiterProfil.js +++ b/public/js/components/Cis/Profil/MitarbeiterProfil.js @@ -36,7 +36,6 @@ export default { return { showModal: false, editDataFilter: null, - arePhrasesPreloaded: false, // tabulator options funktionen_table_options: { persistenceID: "filterTableMaProfilFunktionen", @@ -49,6 +48,7 @@ export default { responsiveLayoutCollapseUseFormatters: false, responsiveLayoutCollapseFormatter: Vue.$collapseFormatter, responsiveLayoutCollapseStartOpen: false, + locale: true, columns: [ { title: @@ -63,7 +63,8 @@ export default { responsive: 0, }, { - title: Vue.computed(() => this.$p.t('ui/bezeichnung')), + title: "placeholder", + titlePhrase: "ui/bezeichnung", field: "Bezeichnung", headerFilter: true, minWidth: 200, @@ -71,7 +72,8 @@ export default { responsive: 0, }, { - title: Vue.computed(() => this.$p.t('lehre/organisationseinheit')), + title: "placeholder", + titlePhrase: "lehre/organisationseinheit", field: "Organisationseinheit", headerFilter: true, minWidth: 200, @@ -79,7 +81,8 @@ export default { responsive: 1, }, { - title: Vue.computed(() => this.$p.t('global/gueltigVon')), + title: "placeholder", + titlePhrase: "global/gueltigVon", field: "Gültig_von", headerFilterFunc: 'dates', headerFilter: dateFilter, @@ -91,7 +94,8 @@ export default { responsive: 4, }, { - title: Vue.computed(() => this.$p.t('global/gueltigBis')), + title: "placeholder", + titlePhrase: "global/gueltigBis", field: "Gültig_bis", headerFilterFunc: 'dates', headerFilter: dateFilter, @@ -103,7 +107,8 @@ export default { responsive: 3, }, { - title: Vue.computed(() => this.$p.t('profil/wochenstunden')), + title: "placeholder", + titlePhrase: "profil/wochenstunden", field: "Wochenstunden", headerFilter: true, minWidth: 200, @@ -124,6 +129,7 @@ export default { responsiveLayoutCollapseFormatter: Vue.$collapseFormatter, data: [{betriebsmittel: "", Nummer: "", Ausgegeben_am: ""}], responsiveLayoutCollapseStartOpen: false, + locale: true, columns: [ { title: @@ -138,7 +144,8 @@ export default { responsive: 0, }, { - title: Vue.computed(() => this.$p.t('profil/entlehnteBetriebsmittel')), + title: "placeholder", + titlePhrase: "profil/entlehnteBetriebsmittel", field: "betriebsmittel", headerFilter: true, minWidth: 200, @@ -146,7 +153,8 @@ export default { responsive: 0, }, { - title: Vue.computed(() => this.$p.t('profil/inventarnummer')), + title: "placeholder", + titlePhrase: "profil/inventarnummer", field: "Nummer", headerFilter: true, resizable: true, @@ -155,7 +163,8 @@ export default { responsive: 2, }, { - title: Vue.computed(() => this.$p.t('profil/ausgabedatum')), + title: "placeholder", + titlePhrase: "profil/ausgabedatum", field: "Ausgegeben_am", headerFilterFunc: 'dates', headerFilter: dateFilter, @@ -230,10 +239,6 @@ export default { } }); }, - setTableColumnTitles() { // reevaluates computed phrasen - if(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setColumns(this.betriebsmittel_table_options.columns); - if(this.$refs.funktionenTable) this.$refs.funktionenTable.tabulator.setColumns(this.funktionen_table_options.columns); - }, datetimeFormatterParams: function() { const params = { inputFormat:"yyyy-MM-dd", @@ -316,10 +321,6 @@ export default { }, created() { - // preload phrasen - this.$p.loadCategory(["ui","lehre","global","profil"]).then(() => { - this.arePhrasesPreloaded = true; - }); //? sorts the profil Updates: pending -> accepted -> rejected this.data.profilUpdates?.sort(this.sortProfilUpdates); }, @@ -330,9 +331,6 @@ export default { 'data.mittel'(newVal) { if(this.$refs.betriebsmittelTable) this.$refs.betriebsmittelTable.tabulator.setData(newVal); }, - 'language.value'(newVal) { - this.setTableColumnTitles() - } }, template: /*html*/ `