RETROTEC-AG/OpenXE#17 Locale des GUI-Users ermitteln

Sprache in den Grundeinstellungen speichern
This commit is contained in:
Roland Rusch 2023-08-24 17:59:34 +02:00
parent 484b96b481
commit a18a139e64
1 changed files with 78 additions and 33 deletions

View File

@ -13,6 +13,9 @@
*/ */
?> ?>
<?php <?php
use Xentral\Components\Database\Database;
class Firmendaten { class Firmendaten {
/** @var Application */ /** @var Application */
var $app; var $app;
@ -2543,50 +2546,92 @@ class Firmendaten {
} }
} }
} }
/** /**
* Sprache in firmendaten_werte und user->sprachebevorzugen speichern * Sprache in firmendaten_werte speichern, wenn sie geändert wurde.
* @param $language * 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){ private function savePreferredLanguage(string $newLanguage): void
{
/* THIS NEEDS TO BE REIMPLEMENTED $newLanguage = \Xentral\Components\I18n\Bootstrap::findLanguage(
$lang = $this->app->erp->Firmendaten('preferredLanguage'); $newLanguage
if($lang != $language){ )[Xentral\Components\I18n\Iso639\Key::DEFAULT] ?? $this->getPreferredLanguage();
$this->app->erp->FirmendatenSet('preferredLanguage',$language);
$this->app->DB->Update("UPDATE `user` SET sprachebevorzugen = '".$language."'"); 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 * Bevorzugte Sprache aus firmendaten_werte zurückgeben.
* @return string Sprache * Wenn die Sprache nicht gesetzt ist, die Default-Sprache zurückgeben.
*
* @return string Sprache als ISO 639 Alpha-3 Code
*/ */
private function getPreferredLanguage(){ private function getPreferredLanguage(): string
{
$lang = $this->app->erp->Firmendaten('preferredLanguage'); /** @var \Xentral\Components\I18n\Localization $localization */
if(!empty($lang)) { $localization = $this->app->Container->get('Localization');
return $lang; return \Xentral\Components\I18n\Bootstrap::findLanguage(
} $this->app->erp->Firmendaten('preferredLanguage') ?? $localization->getLanguage()
)[Xentral\Components\I18n\Iso639\Key::DEFAULT];
// $this->app->erp->AddNeuenFirmendatenWert('preferredLanguage','varchar','64','','deutsch','deutsch',0,0);
return 'deutsch';
} }
/** /**
* Liefert einen String aus HTML-Optionen zurück * Liefert einen String aus HTML-Optionen zurück.
* @param string $select Wert aus der Datenbank *
* @param string $select Gewählter Wert
*
* @return string * @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 = ''; $out = '';
$sprachen = $this->getLanguages(); foreach ($this->getLanguages() as $sprache) {
if($language=\Xentral\Components\I18n\Bootstrap::findLanguage($sprache)) {
foreach($sprachen as $sprache) { $selected = (($select == $language[Xentral\Components\I18n\Iso639\Key::DEFAULT]) ? ' selected="selected"' : '');
$selected = (($select==$sprache) ? 'selected' : ''); $out .= "<option value=\"{$language[Xentral\Components\I18n\Iso639\Key::DEFAULT]}\"{$selected}>{$language[Xentral\Components\I18n\Iso639\Key::NAME_deu]}</option>";
$out .= "<option value=\"$sprache\" $selected>$sprache</option>"; }
} }
return $out; return $out;
} }