commit ef4e68395be724ca65805d10e52cc261f9b5b09a
parent 572ea0aba8c5c5b7854bcf89ddd6cabe8c38c6a7
Author: dankert <openrat@jandankert.de>
Date: Wed, 9 Mar 2022 01:57:45 +0100
Fix: Do not write the language to a cookie.
Diffstat:
7 files changed, 44 insertions(+), 37 deletions(-)
diff --git a/Dockerfile b/Dockerfile
@@ -17,6 +17,8 @@ ENV DB_TYPE="mysql" \
CMS_OPERATOR="" \
CMS_LOG_LEVEL="info" \
CMS_PRODUCTION="true" \
+ CMS_TIMEZONE="" \
+ CMS_LANGUAGE="" \
DOCROOT="/var/www/localhost/cms"
# Configuring apache webserver
@@ -107,6 +109,10 @@ publish:\n\
application:\n\
name: "${env:CMS_NAME}"\n\
operator: "${env:CMS_OPERATOR}"\n\
+ui:\n\
+ timezone: "${env:CMS_TIMEZONE}"\n\
+i18n:\n\
+ default: "${env:CMS_LANGUAGE}"\n\
\n\
' >> /etc/openrat.yml
diff --git a/README.md b/README.md
@@ -87,16 +87,18 @@ Be sure to replace the variables.
The following environment variables could be set in the docker container:
-| Name | Description | Default |
-| ----------- | ----------- | ------- |
-|DB_TYPE|database type|mysql
-|DB_HOST|database hostname|localhost
-|DB_NAME|database schema|cms
-|DB_USER|database user|
-|DB_PASS|database password|
-|CMS_MOTD|Message of the day|Welcome to dockerized CMS
-|CMS_NAME|Software name|OpenRat CMS (Docker)
-|CMS_OPERATOR|Name of your company|Docker-Host
+| Name | Description | Default |
+|--------------|----------------------| ------- |
+| DB_TYPE | database type |mysql
+| DB_HOST | database hostname |localhost
+| DB_NAME | database schema |cms
+| DB_USER | database user |cms
+| DB_PASS | database password |\<empty\>
+| CMS_MOTD | Message of the day |Welcome to dockerized CMS
+| CMS_NAME | Software name |OpenRat CMS (Docker)
+| CMS_OPERATOR | Name of your company |Docker-Host
+| CMS_TIMEZONE | Timezone |UTC
+| CMS_LANGUAGE | Language |Browser
### Local installation
diff --git a/modules/cms/Dispatcher.class.php b/modules/cms/Dispatcher.class.php
@@ -285,22 +285,26 @@ class Dispatcher
// Sprache lesen
$languages = [];
- if ( Cookie::has( Action::COOKIE_LANGUAGE))
- $languages[] = Cookie::get(Action::COOKIE_LANGUAGE);
- $i18nConfig = (new Config($conf))->subset('i18n');
+ if ( $user = Session::getUser() )
+ $languages[] = $user->language; // user language has precedence.
+ else {
+ $i18nConfig = (new Config($conf))->subset('i18n');
- if ( $i18nConfig->is('use_http',true ) )
- // Die vom Browser angeforderten Sprachen ermitteln
- $languages = array_merge( $languages,Http::getLanguages() );
+ $languages[] = $i18nConfig->get('default','en');
+
+ if ( $i18nConfig->is('use_http',true ) )
+ // Die vom Browser angeforderten Sprachen ermitteln
+ $languages = array_merge( $languages,Http::getLanguages() );
+ }
+
+ // Default-Sprache hinzufuegen.
+ // Wird dann verwendet, wenn die vom Browser angeforderten Sprachen
+ // nicht vorhanden sind
+ $languages[] = 'en'; // last fallback.
- // Default-Sprache hinzufuegen.
- // Wird dann verwendet, wenn die vom Browser angeforderten Sprachen
- // nicht vorhanden sind
- $languages[] = $i18nConfig->get('default','en');
- $languages[] = 'en'; // last fallback.
- foreach ($languages as $l) {
+ foreach ($languages as $l) {
if (!in_array($l, Messages::$AVAILABLE_LANGUAGES))
continue; // language is not available.
diff --git a/modules/cms/action/Action.class.php b/modules/cms/action/Action.class.php
@@ -296,11 +296,6 @@ abstract class Action
/**
- * Language ISO code.
- */
- const COOKIE_LANGUAGE = 'or_language';
-
- /**
* Last used username.
*/
const COOKIE_USERNAME = 'or_username';
diff --git a/modules/cms/action/ProfileAction.class.php b/modules/cms/action/ProfileAction.class.php
@@ -67,13 +67,12 @@ class ProfileAction extends BaseAction
*/
protected function setLanguage($languageISOcode )
{
+ // Overwrite configuration
$conf = Session::getConfig();
$language = new Language();
$conf['language'] = $language->getLanguage($languageISOcode);
$conf['language']['language_code'] = $languageISOcode;
-
- Session::setConfig($conf);
- $this->setCookie( Action::COOKIE_LANGUAGE,$languageISOcode);
+ Session::setConfig($conf);
}
diff --git a/modules/cms/action/profile/ProfileEditAction.class.php b/modules/cms/action/profile/ProfileEditAction.class.php
@@ -53,7 +53,7 @@ class ProfileEditAction extends ProfileAction implements Method {
$this->user->hotp = $this->request->has('hotp' );
$this->user->totp = $this->request->has('totp' );
-
+ // Overwrite user in session with new settings.
Session::setUser( $this->user );
$this->user->persist();
diff --git a/modules/cms/output/UIOutput.class.php b/modules/cms/output/UIOutput.class.php
@@ -83,8 +83,10 @@ class UIOutput extends BaseOutput
$user = Session::getUser(); // the user timezone has precedence.
if ( $user && $user->timezone ) // user is set and a timezone is set
return( $user->timezone );
- else
- return Configuration::subset('ui')->get('timezone');
+ elseif ( $configuredTimezone = Configuration::subset('ui')->get('timezone') )
+ return $configuredTimezone; // Timezone from configuration
+
+ return null;
}
@@ -106,15 +108,14 @@ class UIOutput extends BaseOutput
$templateFile = Startup::MODULE_DIR . 'cms/ui/themes/default/html/views/' . $action.'/'.$subaction . '.php';
- if ( DEVELOPMENT ) {
+ self::setTimezone();
+
+ if ( DEVELOPMENT ) {
header('X-OR-Template: '.$templateFile );
echo "<!-- \n".var_export($outputData,true)."\n-->";
}
-
- self::setTimezone();
-
$engine = new TemplateRunner();
//$engine->request = $request;
$engine->executeTemplate( $templateFile, $outputData );