diff --git a/www/pages/firmendaten.php b/www/pages/firmendaten.php index 6d9acea9..dbd7ffc9 100644 --- a/www/pages/firmendaten.php +++ b/www/pages/firmendaten.php @@ -13,6 +13,9 @@ */ ?> sprachebevorzugen speichern - * @param $language + * Sprache in firmendaten_werte speichern, wenn sie geändert wurde. + * Falls der Wert in der Tabelle noch nicht existiert, wird er angelegt. + * + * @param string $newLanguage Sprache (wird in ISO 639 Alpha-3 Code umgewandelt) */ - private function savePreferredLanguage($language){ - -/* THIS NEEDS TO BE REIMPLEMENTED - $lang = $this->app->erp->Firmendaten('preferredLanguage'); - if($lang != $language){ - $this->app->erp->FirmendatenSet('preferredLanguage',$language); - $this->app->DB->Update("UPDATE `user` SET sprachebevorzugen = '".$language."'"); + private function savePreferredLanguage(string $newLanguage): void + { + $newLanguage = \Xentral\Components\I18n\Bootstrap::findLanguage( + $newLanguage + )[Xentral\Components\I18n\Iso639\Key::DEFAULT] ?? $this->getPreferredLanguage(); + + if ($newLanguage != ($oldLanguage = $this->app->erp->Firmendaten('preferredLanguage'))) { + if ($oldLanguage) { + $this->app->erp->FirmendatenSet('preferredLanguage', $newLanguage); + } else { + // Workaround, weil \erpAPI::AddNeuenFirmendatenWert() nicht funktioniert + /** @var Database $db */ + $db = $this->app->Container->get('Database'); + $insert= $db->insert()->into('firmendaten_werte')->cols( + [ + 'name' => 'preferredLanguage', + 'typ' => 'varchar', + 'typ1' => '64', + 'typ2' => '', + 'wert' => $newLanguage, + 'default_value' => $this->getPreferredLanguage(), + 'default_null' => 0, + 'darf_null' => 0, + ] + ); + $db->perform($insert->getStatement(), $insert->getBindValues()); + /* + $this->app->erp->AddNeuenFirmendatenWert( + 'preferredLanguage', + 'varchar', + '64', + '', + $newLanguage, + $this->getPreferredLanguage(), + 0, + 0 + ); + */ + } } -*/ } - + + + /** - * Bevorzugte Sprache aus firmendaten_werte - * @return string Sprache + * Bevorzugte Sprache aus firmendaten_werte zurückgeben. + * Wenn die Sprache nicht gesetzt ist, die Default-Sprache zurückgeben. + * + * @return string Sprache als ISO 639 Alpha-3 Code */ - private function getPreferredLanguage(){ - - $lang = $this->app->erp->Firmendaten('preferredLanguage'); - if(!empty($lang)) { - return $lang; - } - -// $this->app->erp->AddNeuenFirmendatenWert('preferredLanguage','varchar','64','','deutsch','deutsch',0,0); - return 'deutsch'; + private function getPreferredLanguage(): string + { + /** @var \Xentral\Components\I18n\Localization $localization */ + $localization = $this->app->Container->get('Localization'); + return \Xentral\Components\I18n\Bootstrap::findLanguage( + $this->app->erp->Firmendaten('preferredLanguage') ?? $localization->getLanguage() + )[Xentral\Components\I18n\Iso639\Key::DEFAULT]; } - + + + /** - * Liefert einen String aus HTML-Optionen zurück - * @param string $select Wert aus der Datenbank + * Liefert einen String aus HTML-Optionen zurück. + * + * @param string $select Gewählter Wert + * * @return string */ - private function languageSelectOptions($select='deutsch'){ - + private function languageSelectOptions(string $select) + { + $select=\Xentral\Components\I18n\Bootstrap::findLanguage($select)[Xentral\Components\I18n\Iso639\Key::DEFAULT]; $out = ''; - $sprachen = $this->getLanguages(); - - foreach($sprachen as $sprache) { - $selected = (($select==$sprache) ? 'selected' : ''); - $out .= ""; + foreach ($this->getLanguages() as $sprache) { + if($language=\Xentral\Components\I18n\Bootstrap::findLanguage($sprache)) { + $selected = (($select == $language[Xentral\Components\I18n\Iso639\Key::DEFAULT]) ? ' selected="selected"' : ''); + $out .= ""; + } } return $out; }