summaryrefslogtreecommitdiffstats
path: root/modules-available
diff options
context:
space:
mode:
authorSimon Rettberg2025-05-20 15:11:24 +0200
committerSimon Rettberg2025-05-20 15:11:24 +0200
commit9f1904985868385f8e4f3acc3e168f521fd0b36b (patch)
tree4f2493a72d403d7e33c1dbda26e040f016c2574c /modules-available
parent[inc/User] Fix types (diff)
downloadslx-admin-9f1904985868385f8e4f3acc3e168f521fd0b36b.tar.gz
slx-admin-9f1904985868385f8e4f3acc3e168f521fd0b36b.tar.xz
slx-admin-9f1904985868385f8e4f3acc3e168f521fd0b36b.zip
[locationinfo] URLpanel: Browser accept-language and screen rotation
Add configuration options to specify screen rotation and languages the browser will request from web servers via Accept-Language header.
Diffstat (limited to 'modules-available')
-rw-r--r--modules-available/locationinfo/inc/locationinfohooks.inc.php23
-rw-r--r--modules-available/locationinfo/lang/de/template-tags.json2
-rw-r--r--modules-available/locationinfo/lang/en/template-tags.json2
-rw-r--r--modules-available/locationinfo/page.inc.php11
-rw-r--r--modules-available/locationinfo/templates/page-config-panel-url.html35
5 files changed, 71 insertions, 2 deletions
diff --git a/modules-available/locationinfo/inc/locationinfohooks.inc.php b/modules-available/locationinfo/inc/locationinfohooks.inc.php
index 99efd70e..b87d36ae 100644
--- a/modules-available/locationinfo/inc/locationinfohooks.inc.php
+++ b/modules-available/locationinfo/inc/locationinfohooks.inc.php
@@ -22,6 +22,9 @@ class LocationInfoHooks
public static function configHook(string $machineUuid, string $panelUuid): void
{
$type = InfoPanel::getConfig($panelUuid, $data);
+ if (!is_array($data)) {
+ $data = [];
+ }
if ($type === null)
return; // TODO: Invalid panel - what should we do?
if ($type === 'URL') {
@@ -78,11 +81,28 @@ class LocationInfoHooks
ConfigHolder::add('SLX_BROWSER_ZOOM', $data['zoom-factor']);
}
} else {
- // Not URL panel
+ // Not URL panel, but predefined (room or summary)
ConfigHolder::add('SLX_BROWSER_URL', 'http://' . $_SERVER['SERVER_ADDR'] . '/panel/' . $panelUuid);
ConfigHolder::add('SLX_AUTOLOGIN', 'ON', 1000);
ConfigHolder::add('SLX_ADDONS', '', 1000);
}
+ // Common options
+ if (!empty($data['language'])) {
+ ConfigHolder::add('SLX_BROWSER_LANG', $data['language'], 1000);
+ }
+ if (!empty($data['screen-rotation'])) {
+ $rotation = ConfigHolder::get('SLX_FORCE_RESOLUTION');
+ if (empty($rotation)) {
+ $rotation = ':' . $data['screen-rotation'];
+ } else {
+ // Patch existing config, but only elements that don't already have an explicit rotation appended
+ $rotation = trim(preg_replace('/(\s[^:\s]+)\s/',
+ '$1:' . $data['screen-rotation'],
+ str_replace([' ', "\t"], ' ', " $rotation ")));
+ }
+ ConfigHolder::add('SLX_FORCE_RESOLUTION', $rotation, 1000);
+ }
+
$al = ConfigHolder::get('SLX_AUTOLOGIN');
if (!empty($al) && $al !== 'OFF' && $al != 0) {
ConfigHolder::add('SLX_SHUTDOWN_TIMEOUT', '', 1000);
@@ -90,6 +110,7 @@ class LocationInfoHooks
ConfigHolder::add('SLX_LOGOUT_TIMEOUT', '', 1000);
ConfigHolder::add('SLX_SCREEN_STANDBY_TIMEOUT', '', 1000);
ConfigHolder::add('SLX_SYSTEM_STANDBY_TIMEOUT', '', 1000);
+ ConfigHolder::add('SLX_MINIMAL_GUI', 'ON');
}
/**
diff --git a/modules-available/locationinfo/lang/de/template-tags.json b/modules-available/locationinfo/lang/de/template-tags.json
index 95e8804d..579b4315 100644
--- a/modules-available/locationinfo/lang/de/template-tags.json
+++ b/modules-available/locationinfo/lang/de/template-tags.json
@@ -11,6 +11,7 @@
"lang_bookmarks": "Lesezeichen",
"lang_bookmarksTooltip": "F\u00fcge Lesezeichen hinzu, die der Browser erhalten soll",
"lang_browser": "Browser",
+ "lang_browserLanguageTooltip": "Die Sprache oder Sprachen, die der Browser mit seinen Request-Headern vom Server anfordert. Es k\u00f6nnen mehrere Sprachen mit absteigender Priorit\u00e4t mit Komma getrennt angegeben werden, z.B. de-DE,fr-CH,en-US",
"lang_browserTooltip": "Welcher Browser soll genutzt werden",
"lang_calendarUpdate": "Kalender Update",
"lang_calupdateTooltip": "Zeit nachdem der Kalender aktualisiert wird (in Minuten)",
@@ -112,6 +113,7 @@
"lang_saturday": "Samstag",
"lang_scale": "Kalenderbreite",
"lang_scaleTooltip": "[10-90] Legt die Kalenderbreite fest (in Prozent)",
+ "lang_screenRotationTooltip": "Falls der Bildschirm gedreht ist (Portrait oder \u00fcberkopf), geben Sie hier die entsprechend n\u00f6tige Rotation des Bildschirminhaltes an. Falls Sie bereits in den Konfigurationsvariablen eines Clients, oder in dessen zugeh\u00f6rigem Raum eine feste Aufl\u00f6sung mit Rotation angegeben haben (SLX_FORCE_RESOLUTION), so wird die hier angegebene Einstellung ignoriert.",
"lang_sec": "sek",
"lang_serverLogHead": "Fehlerprotokoll",
"lang_serverTable": "Backend-Server verwalten",
diff --git a/modules-available/locationinfo/lang/en/template-tags.json b/modules-available/locationinfo/lang/en/template-tags.json
index 31c1a355..b2504356 100644
--- a/modules-available/locationinfo/lang/en/template-tags.json
+++ b/modules-available/locationinfo/lang/en/template-tags.json
@@ -11,6 +11,7 @@
"lang_bookmarks": "Bookmarks",
"lang_bookmarksTooltip": "Add bookmarks to the browser",
"lang_browser": "Browser",
+ "lang_browserLanguageTooltip": "Language or languages the browser will request from servers. You can specify a comma-separated list in order of Priority, like de-DE,fr-CH,en-US",
"lang_browserTooltip": "Which browser shall be used",
"lang_calendarUpdate": "Calendar Update",
"lang_calupdateTooltip": "Time the calendar queries for updates (in minutes)",
@@ -112,6 +113,7 @@
"lang_saturday": "Saturday",
"lang_scale": "Calendar width",
"lang_scaleTooltip": "[10-90] Defines the calendar width (in percent)",
+ "lang_screenRotationTooltip": "If the screen is mounted in portrait mode or upside down, you can specify the required rotation of screen contents here. In case you already specified a rotation for a client or location via its configuration variables (SLX_FORCE_RESOLUTION), then the setting you specify here will be ignored.",
"lang_sec": "sec",
"lang_serverLogHead": "Error log",
"lang_serverTable": "Manage backend servers",
diff --git a/modules-available/locationinfo/page.inc.php b/modules-available/locationinfo/page.inc.php
index 1a58131f..decaa8f2 100644
--- a/modules-available/locationinfo/page.inc.php
+++ b/modules-available/locationinfo/page.inc.php
@@ -347,6 +347,11 @@ class Page_LocationInfo extends Page
}
$bookmarkString = substr($bookmarkString, 0, -1);
+ $rotation = strtolower(Request::post('screen-rotation', '', 'string'));
+ if (!in_array($rotation, ['', 'left', 'right', 'inverted'])) {
+ $rotation = '';
+ }
+
$conf = array(
'url' => Request::post('url', 'https://www.bwlehrpool.de/', 'string'),
'insecure-ssl' => Request::post('insecure-ssl', 0, 'int'),
@@ -359,7 +364,9 @@ class Page_LocationInfo extends Page
'hw-video' => Request::post('hw-video', '0', 'bool'),
'bookmarks' => $bookmarkString ?: '',
'allow-tty' => Request::post('allow-tty', '', 'string'),
- 'zoom-factor' => Request::post('zoom-factor', 100, 'int'),
+ 'zoom-factor' => max(0, Request::post('zoom-factor', 100, 'int')),
+ 'language' => str_replace(['_', ' '], ['-', ''], Request::post('language', '', 'string')),
+ 'screen-rotation' => $rotation,
);
return array('config' => $conf, 'locationids' => []);
}
@@ -1007,6 +1014,8 @@ class Page_LocationInfo extends Page
'panelname' => $panel['panelname'],
'url' => $config['url'],
'zoom-factor' => $config['zoom-factor'],
+ 'language' => $config['language'],
+ 'screen-rotation' => $config['screen-rotation'],
'ssl_checked' => $config['insecure-ssl'] ? 'checked' : '',
'reloadminutes' => (int)$config['reload-minutes'],
'whitelist' => str_replace("\n", "\r\n", $config['whitelist']),
diff --git a/modules-available/locationinfo/templates/page-config-panel-url.html b/modules-available/locationinfo/templates/page-config-panel-url.html
index 36881014..a0485709 100644
--- a/modules-available/locationinfo/templates/page-config-panel-url.html
+++ b/modules-available/locationinfo/templates/page-config-panel-url.html
@@ -140,6 +140,40 @@
<div class="list-group-item">
<div class="row">
<div class="col-sm-4">
+ <label for="screen-rotation">{{lang_rotation}}</label>
+ </div>
+ <div class="col-sm-8">
+ <select class="form-control" id="screen-rotation" name="screen-rotation">
+ <option value="">{{lang_rotation0}}</option>
+ <option value="left">{{lang_rotation1}}</option>
+ <option value="right">{{lang_rotation3}}</option>
+ <option value="inverted">{{lang_rotation2}}</option>
+ </select>
+ </div>
+ <div class="col-sm-12 small text-muted spacebottop">
+ {{lang_screenRotationTooltip}}
+ </div>
+ </div>
+ </div>
+
+ <div class="list-group-item">
+ <div class="row">
+ <div class="col-sm-4">
+ <label for="language">{{lang_language}}</label>
+ </div>
+ <div class="col-sm-8">
+ <input class="form-control" id="language" type="text" placeholder="de-DE,en-US"
+ name="language" value="{{language}}" pattern="[a-zA-Z0-9,_ -]*">
+ </div>
+ <div class="col-sm-12 small text-muted spacebottop">
+ {{lang_browserLanguageTooltip}}
+ </div>
+ </div>
+ </div>
+
+ <div class="list-group-item">
+ <div class="row">
+ <div class="col-sm-4">
<label for="browser">{{lang_browser}}</label>
</div>
<div class="col-sm-8">
@@ -278,6 +312,7 @@
document.addEventListener("DOMContentLoaded", function () {
// load value to dropdown menus
$('#browser option[value="{{browser}}"]').prop("selected", true);
+ $('#screen-rotation option[value="{{screen-rotation}}"]').prop("selected", true);
browserChange();
var $zv = $('#zoom-value');
var $zf = $('#zoom-factor');