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;
@ -2544,49 +2547,91 @@ 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
{
$newLanguage = \Xentral\Components\I18n\Bootstrap::findLanguage(
$newLanguage
)[Xentral\Components\I18n\Iso639\Key::DEFAULT] ?? $this->getPreferredLanguage();
/* THIS NEEDS TO BE REIMPLEMENTED if ($newLanguage != ($oldLanguage = $this->app->erp->Firmendaten('preferredLanguage'))) {
$lang = $this->app->erp->Firmendaten('preferredLanguage'); if ($oldLanguage) {
if($lang != $language){ $this->app->erp->FirmendatenSet('preferredLanguage', $newLanguage);
$this->app->erp->FirmendatenSet('preferredLanguage',$language); } else {
$this->app->DB->Update("UPDATE `user` SET sprachebevorzugen = '".$language."'"); // Workaround, weil \erpAPI::AddNeuenFirmendatenWert() nicht funktioniert
} /** @var Database $db */
*/ $db = $this->app->Container->get('Database');
} $insert= $db->insert()->into('firmendaten_werte')->cols(
[
/** 'name' => 'preferredLanguage',
* Bevorzugte Sprache aus firmendaten_werte 'typ' => 'varchar',
* @return string Sprache '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
);
*/ */
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';
}
/** /**
* Liefert einen String aus HTML-Optionen zurück * Bevorzugte Sprache aus firmendaten_werte zurückgeben.
* @param string $select Wert aus der Datenbank * Wenn die Sprache nicht gesetzt ist, die Default-Sprache zurückgeben.
*
* @return string Sprache als ISO 639 Alpha-3 Code
*/
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 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;
} }