diff --git a/login.php b/login.php
index 794a8816..67de1306 100644
--- a/login.php
+++ b/login.php
@@ -245,7 +245,21 @@ function _addAnchor($url, $type, $vars, $url_anchor = null)
if (!empty($GLOBALS['conf']['user']['select_view'])) {
$js_code['HordeLogin.pre_sel'] = $vars->get('horde_select_view', $_COOKIE['default_horde_view'] ?? 'auto');
$loginparams['horde_select_view'] = [
- 'type' => 'horde_select_view',
+ 'type' => 'select',
+ 'label' => _("Mode"),
+ 'value' => [
+ 'auto' => [ 'name' => _("Automatic") ],
+ 'disabled' => null,
+ 'basic' => [ 'name' => _("Basic") ],
+ 'dynamic' => [ 'name' => _("Dynamic") ],
+ 'smartmobile' => [ 'name' => _("Mobile (Smartphone/Tablet)") ],
+ 'mobile' => [ 'name' => _("Mobile (Minimal)") ],
+ 'mobile_nojs' => [ 'name' => _("Mobile (No JavaScript)") ],
+ ],
+ 'div' => [
+ 'id' => 'horde_select_view_div',
+ 'style' => 'display:none',
+ ],
];
}
diff --git a/src/Login.php b/src/Login.php
index 7df660fa..8ecd5cd7 100644
--- a/src/Login.php
+++ b/src/Login.php
@@ -39,9 +39,8 @@ public function buildLoginParams(): array
if ($this->secondFactorSupported) {
$loginparams['horde_secondfactor'] = [
'label' => _("Second Factor"),
- 'type' => 'password',
- // 'value' => $this->vars->horde_secondfactor,
- 'extra' => [ 'autocomplete' => 'off' ],
+ 'type' => 'text',
+ 'extra' => [ 'autocomplete' => 'one-time-code' ],
];
}
return $loginparams;
diff --git a/templates/login/login.inc b/templates/login/login.inc
index 4fd282c2..1b46a7d2 100644
--- a/templates/login/login.inc
+++ b/templates/login/login.inc
@@ -12,50 +12,137 @@
- $val): ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ $val) {
+ $type = $val['type'] ?? '';
+ $label = $val['label'] ?? '';
+ $value = $val['value'] ?? '';
+ $extra = $val['extra'] ?? '';
+
+ switch ($type) {
+ case 'text':
+ if (empty($extra)) {
+ // default
+ $extra = [
+ 'autocapitalize' => 'off',
+ 'autocorrect' => 'off',
+ ];
+ }
+ break;
+ case 'password':
+ $value = '';
+ break;
+ }
+
+ $div = $val['div'] ?? '';
+ if (!empty($div)) {
+ $parms = [ 'div' ];
+ if (!is_array($div)) {
+ $div = [ $div ];
+ }
+ foreach ($div as $k => $v) {
+ $addParm($k, $v);
+ }
+ $div = $parms;
+ }
+
+ $parms = [];
+
+ if ($type == 'select') {
+ $addParm($type);
+ } else {
+ $addParm('input');
+ $addParm('type' , $type);
+ }
+
+ if (!empty($extra)) {
+ if (!is_array($extra)) {
+ $extra = [ $extra ];
+ }
+ foreach ($extra as $k => $v) {
+ $addParm($k, $v);
+ }
+ }
+
+ $addParm('id', $key);
+ $addParm('name', $key);
+
+ if (is_string($value)) {
+ $addParm('value', htmlspecialchars($value));;
+ }
+
+ if (!empty($div)) {
+ $addLine('<' . implode(' ', $div) . '>');
+ ++$indent;
+ }
+
+ if ($label != '') {
+ $addLine('' . Horde::label($key, $label) . '
');
+ }
+
+ $addLine('');
+ ++$indent;
+
+ if ($type == 'select') {
+ $addLine('<' . implode(' ', $parms) . '>');
+ ++$indent;
+ foreach ($value as $k2 => $v2) {
+ $parms = [];
+ $addParm('option');;
+ if (is_null($v2)) {
+ $addParm('value', '');
+ $addParm('disabled', 'disabled');
+ $value = '- - - - - - - - - -';
+ } else {
+ $addParm('value', $k2);
+ if (!empty($v2['selected'])) {
+ $addParm('selected', 'selected');
+ }
+ if (!empty($v2['hidden'])) {
+ $addParm('style', 'display:none');
+ }
+ $value = $v2['name'];
+ }
+ $addLine('<' . implode(' ', $parms) . '>' . htmlspecialchars($value) . '');
+ }
+ --$indent;
+ $addLine('');
+ } else {
+ if ($type != 'hidden') {
+ $addParm('style' , 'direction:ltr');
+ }
+ $addLine('<' . implode(' ', $parms) . ' />');
+ }
+
+ --$indent;
+ $addLine('
');
+
+ if ($key == 'horde_pass') {
+ $addLine('' . _("Warning: Your Caps Lock key is on!") . '
');
+ }
+
+ if (!empty($div)) {
+ --$indent;
+ $addLine('');
+ }
+ }
+ print implode("\n", $lines);
+?>
isLocked('language')): ?>