Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c194661fa3 | ||
|
|
e539c60e9b | ||
|
|
bea25d8396 | ||
|
|
b4506a0a3e |
@@ -86,3 +86,5 @@ CREATE TABLE IF NOT EXISTS `ident_switch`
|
|||||||
INDEX `IX_ident_switch_iid`(`iid`),
|
INDEX `IX_ident_switch_iid`(`iid`),
|
||||||
INDEX `IX_ident_switch_parent_id`(`parent_id`)
|
INDEX `IX_ident_switch_parent_id`(`parent_id`)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
INSERT INTO `system` (`name`, `value`) VALUES ('ident_switch-version', '2026021000');
|
||||||
|
|||||||
@@ -85,3 +85,5 @@ CREATE TABLE ident_switch
|
|||||||
CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id);
|
CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id);
|
||||||
CREATE INDEX IX_ident_switch_iid ON ident_switch(iid);
|
CREATE INDEX IX_ident_switch_iid ON ident_switch(iid);
|
||||||
CREATE INDEX IX_ident_switch_parent_id ON ident_switch(parent_id);
|
CREATE INDEX IX_ident_switch_parent_id ON ident_switch(parent_id);
|
||||||
|
|
||||||
|
INSERT INTO system (name, value) VALUES ('ident_switch-version', '2026021000');
|
||||||
|
|||||||
@@ -84,3 +84,5 @@ CREATE TABLE ident_switch
|
|||||||
CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id);
|
CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id);
|
||||||
CREATE INDEX IX_ident_switch_iid ON ident_switch(iid);
|
CREATE INDEX IX_ident_switch_iid ON ident_switch(iid);
|
||||||
CREATE INDEX IX_ident_switch_parent_id ON ident_switch(parent_id);
|
CREATE INDEX IX_ident_switch_parent_id ON ident_switch(parent_id);
|
||||||
|
|
||||||
|
INSERT INTO system (name, value) VALUES ('ident_switch-version', '2026021000');
|
||||||
|
|||||||
@@ -56,10 +56,13 @@ function plugin_switchIdent_init() {
|
|||||||
$("INPUT[name='_ident_switch.form.sieve.host']").attr('placeholder', initialImapHost);
|
$("INPUT[name='_ident_switch.form.sieve.host']").attr('placeholder', initialImapHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Re-apply preconfig from current email (handles form re-render after create abort
|
// Disable mode select until a valid email is entered
|
||||||
// where PHP record may lack email, so readonly was not set server-side)
|
var $modeSelect = $("SELECT[name='_ident_switch.form.common.mode']");
|
||||||
if (initialEmail && initialEmail.indexOf('@') > 0) {
|
if (initialEmail && initialEmail.indexOf('@') > 0) {
|
||||||
|
$modeSelect.prop('disabled', false);
|
||||||
plugin_switchIdent_onEmailChange(initialEmail);
|
plugin_switchIdent_onEmailChange(initialEmail);
|
||||||
|
} else {
|
||||||
|
$modeSelect.prop('disabled', true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,6 +281,9 @@ function plugin_switchIdent_onEmailChange(email) {
|
|||||||
var domain = email.substring(atPos + 1).toLowerCase();
|
var domain = email.substring(atPos + 1).toLowerCase();
|
||||||
if (!domain) return;
|
if (!domain) return;
|
||||||
|
|
||||||
|
// Enable mode select now that we have a valid email
|
||||||
|
$("SELECT[name='_ident_switch.form.common.mode']").prop('disabled', false);
|
||||||
|
|
||||||
// Update label and username placeholders to match current email
|
// Update label and username placeholders to match current email
|
||||||
$("INPUT[name='_ident_switch.form.common.label']").attr('placeholder', email);
|
$("INPUT[name='_ident_switch.form.common.label']").attr('placeholder', email);
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ function plugin_switchIdent_addCbLarry($wrapper, $sw) {
|
|||||||
|
|
||||||
$sw.css({
|
$sw.css({
|
||||||
'font-weight': 'bold',
|
'font-weight': 'bold',
|
||||||
'max-width': '200px',
|
|
||||||
'text-overflow': 'ellipsis'
|
'text-overflow': 'ellipsis'
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -104,7 +103,6 @@ function plugin_switchIdent_addCbElastic($wrapper, $sw) {
|
|||||||
'font-weight': 'bold',
|
'font-weight': 'bold',
|
||||||
'color': 'inherit',
|
'color': 'inherit',
|
||||||
'box-shadow': 'none',
|
'box-shadow': 'none',
|
||||||
'max-width': '200px',
|
|
||||||
'text-overflow': 'ellipsis',
|
'text-overflow': 'ellipsis',
|
||||||
'padding': '0 1.2em 0 0.25em'
|
'padding': '0 1.2em 0 0.25em'
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -27,6 +27,32 @@
|
|||||||
background-size: 10px 6px;
|
background-size: 10px 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Prevent flash of original username before JS prepends the switcher.
|
||||||
|
* The JS hides these elements at DOMReady, but the CSS rules below hide them
|
||||||
|
* earlier (during initial render) — only loaded when the switcher will actually
|
||||||
|
* be shown, so users without secondary accounts keep the default username display.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Elastic skin: switcher is prepended inside .header-title.username.
|
||||||
|
Hide the original username via visibility on the parent (affects the text
|
||||||
|
node), then re-show the wrapper. Unlike color/font-size, this preserves the
|
||||||
|
parent's flex/line-height context, keeping the wrapper vertically centered. */
|
||||||
|
.header-title.username {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.header-title.username > *:not(.ident-switch-wrapper) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.header-title.username > .ident-switch-wrapper {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Larry skin: switcher is prepended next to .username inside #topline .topright */
|
||||||
|
#topline .topright > .username {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
/* Unread badge */
|
/* Unread badge */
|
||||||
.ident-switch-badge {
|
.ident-switch-badge {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|||||||
@@ -158,10 +158,6 @@ class ident_switch extends rcube_plugin
|
|||||||
default => null,
|
default => null,
|
||||||
};
|
};
|
||||||
|
|
||||||
if ($rc->task === 'mail') {
|
|
||||||
$this->include_stylesheet('ident_switch.css');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $args;
|
return $args;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,7 +184,9 @@ class ident_switch extends rcube_plugin
|
|||||||
$iid = intval($iid_s);
|
$iid = intval($iid_s);
|
||||||
}
|
}
|
||||||
|
|
||||||
$accNames = [$_SESSION['global_alias'] ?? $rc->user->data['username']];
|
$primaryIdentity = $rc->user->get_identity();
|
||||||
|
$primaryName = !empty($primaryIdentity['name']) ? $primaryIdentity['name'] : null;
|
||||||
|
$accNames = [$_SESSION['global_alias'] ?? $primaryName ?? $rc->user->data['username']];
|
||||||
$accValues = [-1];
|
$accValues = [-1];
|
||||||
$accSelected = -1;
|
$accSelected = -1;
|
||||||
$iidMap = [0 => -1]; // primary account: iid 0 → select value -1
|
$iidMap = [0 => -1]; // primary account: iid 0 → select value -1
|
||||||
@@ -216,6 +214,7 @@ class ident_switch extends rcube_plugin
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->include_stylesheet('ident_switch.css');
|
||||||
$this->include_script('ident_switch-switch.js');
|
$this->include_script('ident_switch-switch.js');
|
||||||
|
|
||||||
// Pass config to JS environment
|
// Pass config to JS environment
|
||||||
|
|||||||
@@ -177,6 +177,9 @@ class IdentSwitchChecker
|
|||||||
$host = 'tls://' . $host;
|
$host = 'tls://' . $host;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$primaryIdentity = $rc->user->get_identity();
|
||||||
|
$primaryName = !empty($primaryIdentity['name']) ? $primaryIdentity['name'] : null;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'iid' => 0,
|
'iid' => 0,
|
||||||
'imap_host' => $host,
|
'imap_host' => $host,
|
||||||
@@ -185,7 +188,7 @@ class IdentSwitchChecker
|
|||||||
'username' => $rc->user->data['username'],
|
'username' => $rc->user->data['username'],
|
||||||
'password' => $_SESSION['password' . $postfix],
|
'password' => $_SESSION['password' . $postfix],
|
||||||
'email' => $rc->user->data['username'],
|
'email' => $rc->user->data['username'],
|
||||||
'label' => $_SESSION['global_alias'] ?? $rc->user->data['username'],
|
'label' => $_SESSION['global_alias'] ?? $primaryName ?? $rc->user->data['username'],
|
||||||
'notify_basic' => null,
|
'notify_basic' => null,
|
||||||
'notify_sound' => null,
|
'notify_sound' => null,
|
||||||
'notify_desktop' => null,
|
'notify_desktop' => null,
|
||||||
|
|||||||
Reference in New Issue
Block a user