diff --git a/ident_switch-form.js b/ident_switch-form.js index b5e44dc..870ef50 100644 --- a/ident_switch-form.js +++ b/ident_switch-form.js @@ -43,9 +43,14 @@ $(function() { }); }); - // Delimiter blur handler - $("INPUT[name='_ident_switch.form.imap.delimiter']").on('blur', function() { - plugin_switchIdent_clearIfDefault($(this)); + // Delimiter mode handler + $("SELECT[name='_ident_switch.form.imap.delimiter_mode']").on('change', function() { + if ($(this).val() === 'manual') { + $('#ident-switch-delimiter-input').show(); + } else { + $('#ident-switch-delimiter-input').hide(); + $("INPUT[name='_ident_switch.form.imap.delimiter']").val(''); + } }); }); @@ -113,6 +118,9 @@ function plugin_switchIdent_processPreconfig() { $("SELECT[name='_ident_switch.form.smtp.security']").prop("disabled", true); $("INPUT[name='_ident_switch.form.smtp.port']").prop("disabled", true); + $("SELECT[name='_ident_switch.form.imap.delimiter_mode']").prop("disabled", true); + $("INPUT[name='_ident_switch.form.imap.delimiter']").prop("disabled", true); + $("INPUT[name='_ident_switch.form.sieve.host']").prop("disabled", true); $("SELECT[name='_ident_switch.form.sieve.security']").prop("disabled", true); $("INPUT[name='_ident_switch.form.sieve.port']").prop("disabled", true); diff --git a/lib/IdentSwitchForm.php b/lib/IdentSwitchForm.php index 4e1d45b..72cf30e 100644 --- a/lib/IdentSwitchForm.php +++ b/lib/IdentSwitchForm.php @@ -54,7 +54,7 @@ class IdentSwitchForm $prefix . 'port' => ['type' => 'text', 'size' => 5, 'placeholder' => 993], $prefix . 'username' => ['type' => 'text', 'size' => 64, 'placeholder' => $record['email'] ?? ''], $prefix . 'password' => ['type' => 'password', 'size' => 64], - $prefix . 'delimiter' => ['type' => 'text', 'size' => 1, 'placeholder' => 'Auto'], + $prefix . 'delimiter' => ['value' => $this->build_delimiter_field($prefix, $record)], ]; } @@ -169,6 +169,31 @@ class IdentSwitchForm return $select->show($current) . $warning; } + /** + * Build the delimiter field with Auto/Manual mode select. + * + * @param string $prefix Form field prefix (e.g. 'ident_switch.form.imap.'). + * @param array $record Identity record data. + * @return string Rendered HTML select + text input. + */ + private function build_delimiter_field(string $prefix, array &$record): string + { + $delimValue = $record[$prefix . 'delimiter'] ?? ''; + $mode = ($delimValue !== '' && $delimValue !== null) ? 'manual' : 'auto'; + + $select = new html_select(['name' => "_{$prefix}delimiter_mode"]); + $select->add($this->plugin->gettext('form.imap.delimiter.auto'), 'auto'); + $select->add($this->plugin->gettext('form.imap.delimiter.manual'), 'manual'); + + $hidden = $mode === 'auto' ? ' style="display:none"' : ''; + $input = new html_inputfield(['name' => "_{$prefix}delimiter", 'size' => 1]); + + return $select->show($mode) + . ' ' + . $input->show($delimValue) + . ''; + } + /** * Parse scheme prefix from a host string. * @@ -531,10 +556,15 @@ class IdentSwitchForm return $retVal; } - $retVal['imap.delimiter'] = self::get_field_value('imap', 'delimiter'); - if (strlen($retVal['imap.delimiter'] ?? '') > 1) { - $retVal['err'] = 'delim.long'; - return $retVal; + $delimMode = self::get_field_value('imap', 'delimiter_mode'); + if ($delimMode === 'manual') { + $retVal['imap.delimiter'] = self::get_field_value('imap', 'delimiter'); + if (strlen($retVal['imap.delimiter'] ?? '') > 1) { + $retVal['err'] = 'delim.long'; + return $retVal; + } + } else { + $retVal['imap.delimiter'] = null; } $retVal['imap.user'] = self::get_field_value('imap', 'username'); diff --git a/localization/de_DE.inc b/localization/de_DE.inc index 517d11e..8cf2b45 100644 --- a/localization/de_DE.inc +++ b/localization/de_DE.inc @@ -37,6 +37,8 @@ $labels['form.imap.password'] = 'Passwort'; // Folder hierarchy delimiter $labels['form.imap.delimiter'] = 'Ordnerhierarchie-Trennzeichen'; +$labels['form.imap.delimiter.auto'] = 'Automatisch erkennen'; +$labels['form.imap.delimiter.manual'] = 'Manuell'; // Value in \'Username\' field is too long (64 chars max). $labels['err.user.long'] = 'Der Wert in Feld \'Benutzername\' ist zu lang (max. 64 Zeichen).'; diff --git a/localization/en_US.inc b/localization/en_US.inc index 14bfcaf..4fbd724 100644 --- a/localization/en_US.inc +++ b/localization/en_US.inc @@ -31,6 +31,8 @@ $labels['form.imap.port'] = 'Port'; // Folder hierarchy delimiter $labels['form.imap.delimiter'] = 'Folder hierarchy delimiter'; +$labels['form.imap.delimiter.auto'] = 'Auto-detect'; +$labels['form.imap.delimiter.manual'] = 'Manual'; // Username $labels['form.imap.username'] = 'Username'; diff --git a/localization/fr_FR.inc b/localization/fr_FR.inc index 57ffc6b..4c704cc 100644 --- a/localization/fr_FR.inc +++ b/localization/fr_FR.inc @@ -37,6 +37,8 @@ $labels['form.imap.password'] = 'Mot de passe'; // Folder hierarchy delimiter $labels['form.imap.delimiter'] = 'Délimiteur de hiérarchie des dossiers'; +$labels['form.imap.delimiter.auto'] = 'Auto-détection'; +$labels['form.imap.delimiter.manual'] = 'Manuel'; // Value in \'Username\' field of IMAP section is too long (64 chars max). $labels['err.user.long'] = 'La valeur du champ \'Nom d\'utilisateur\' de la section IMAP est trop longue (64 caractères max).'; diff --git a/localization/it_IT.inc b/localization/it_IT.inc index 856b384..1d374bc 100644 --- a/localization/it_IT.inc +++ b/localization/it_IT.inc @@ -31,6 +31,8 @@ $labels['form.imap.port'] = 'Porta'; // Folder hierarchy delimiter $labels['form.imap.delimiter'] = 'Delimitatore gerarchico delle cartelle'; +$labels['form.imap.delimiter.auto'] = 'Rilevamento automatico'; +$labels['form.imap.delimiter.manual'] = 'Manuale'; // Username $labels['form.imap.username'] = 'Username'; diff --git a/localization/nl_NL.inc b/localization/nl_NL.inc index 9eacbae..953cb0b 100644 --- a/localization/nl_NL.inc +++ b/localization/nl_NL.inc @@ -31,6 +31,8 @@ $labels['form.imap.port'] = 'Poortnummer'; // Folder hierarchy delimiter $labels['form.imap.delimiter'] = 'Map hiërarchie scheidingsteken'; +$labels['form.imap.delimiter.auto'] = 'Automatisch detecteren'; +$labels['form.imap.delimiter.manual'] = 'Handmatig'; // Username $labels['form.imap.username'] = 'Gebruikersnaam'; diff --git a/localization/ru_RU.inc b/localization/ru_RU.inc index 8406f5f..92c374f 100644 --- a/localization/ru_RU.inc +++ b/localization/ru_RU.inc @@ -31,6 +31,8 @@ $labels['form.imap.port'] = 'Порт'; // Folder hierarchy delimiter $labels['form.imap.delimiter'] = 'Разделитель в иерархии папок'; +$labels['form.imap.delimiter.auto'] = 'Автоопределение'; +$labels['form.imap.delimiter.manual'] = 'Вручную'; // Username $labels['form.imap.username'] = 'Имя пользователя'; diff --git a/localization/sl_SI.inc b/localization/sl_SI.inc index 1f6d5d3..9ef9800 100644 --- a/localization/sl_SI.inc +++ b/localization/sl_SI.inc @@ -31,6 +31,8 @@ $labels['form.imap.port'] = 'Vrata'; // Folder hierarchy delimiter $labels['form.imap.delimiter'] = 'Ločilo hierarhije map'; +$labels['form.imap.delimiter.auto'] = 'Samodejno zaznavanje'; +$labels['form.imap.delimiter.manual'] = 'Ročno'; // Username $labels['form.imap.username'] = 'Uporabniško ime';