64 Commits
2.0 ... 4.4

Author SHA1 Message Date
Boris Gulay
ad97f4bfd0 Use identity from field. Thanx Daniel Haag.
Closes #44.
2022-01-17 19:30:39 +03:00
Mickael
181ac6b27c Merged in Mickael/ident_switchphp-solve-the-issue-that-do-1642283330232 (pull request #4)
ident_switch.php - Solve the issue that don't set the good configuration variable for the smtp_host on the latest version + dev of roundcube

Approved-by: Boris Gulay
2022-01-17 15:55:00 +00:00
Mickael
ae7b905824 ident_switch.php - Solve the issue that don't set the good configuration variable for the smtp_host on the latest version + dev of roundcube 2022-01-15 21:48:55 +00:00
Boris Gulay
ca790d72de Add Slovenian translation. Thanx to Marko Ambrožič 2021-02-03 00:28:03 +03:00
Boris Gulay
af54e4b099 Remove version 2020-12-17 21:35:31 +03:00
Boris Gulay
da17fb896b Bump up version 2020-12-17 00:15:05 +03:00
Boris Gulay
afc4f54594 Merge branch 'master' of bitbucket.org:BoresExpress/ident_switch 2020-12-16 23:57:08 +03:00
Boris Gulay
7795a0fbf9 Fix SQlite scripts. Thanx to T S. Closes #76 2020-12-16 23:56:28 +03:00
Boris Gulay
6fa82d6ba5 Fix missing comma 2020-06-06 23:27:58 +03:00
Boris Gulay
fff6c6b95a Update readme 2020-06-01 17:28:54 +03:00
Boris Gulay
92d0f40e3c Add version to composer.json 2020-06-01 17:28:20 +03:00
Boris Gulay
33555a94d4 Remove debug logging 2020-06-01 17:21:12 +03:00
Boris Gulay
5f6f2eb095 Render selector with only one query 2020-06-01 17:20:12 +03:00
Boris Gulay
2e09a92bc3 ender account selector in a modern way 2020-06-01 16:50:15 +03:00
Boris Gulay
072ef65fdf Add option to disable SMTP auth
Closes #61
2020-06-01 16:34:19 +03:00
Boris Gulay
cb7936bf71 Handle hosts with protocol correctly.
Closes #68
2020-05-31 15:43:39 +03:00
Boris Gulay
46f58d694f Fix IMAP delimiter translation 2020-05-31 14:42:50 +03:00
Boris Gulay
07d1366825 Migrate to VSCode 2020-05-31 14:42:37 +03:00
Boris Gulay
b8a751c4ff Merge branch 'master' of bitbucket.org:BoresExpress/ident_switch 2020-04-21 21:30:44 +03:00
Boris Gulay
312026b059 Quote all identifier for MySQL/MariaDB. Closes #54 2020-04-21 21:30:21 +03:00
Boris Gulay
f54d9c9618 Quote all identifier for MySQL/MariaDB. Closes # 54 2020-04-21 21:29:42 +03:00
Boris Gulay
8176ab9c26 Add Postgres migration for special folders 2019-12-26 22:56:17 +03:00
Christian Landvogt
dbb50903d9 Merged in landch/ident_switch/special_folders (pull request #3)
Special folders

Approved-by: Boris Gulay <boris@gulay.name>
2019-12-26 19:48:02 +00:00
Christian Landvogt
fa0d0c1684 adjust MySQL database - postgres and sqlite are missing! 2019-12-13 12:37:42 +01:00
Christian Landvogt
0342dd4975 display identity label at folder selection 2019-12-13 12:35:01 +01:00
Christian Landvogt
98e0f16836 fix special folder not updated for main identity 2019-12-13 12:20:06 +01:00
Christian Landvogt
f1d2e3193a save special folders from normal dialog 2019-12-13 12:16:16 +01:00
Christian Landvogt
f30f72099b load and set special folders from db 2019-12-13 10:49:50 +01:00
Christian Landvogt
67fc6b8b66 fix imap delimiter switching 2019-12-13 09:35:08 +01:00
Boris Gulay
abc3c9ea5f Fix SMTP settings do not apply.
Closes #40, closes #51.
Thanx to sooslaca, J.P.
2019-11-24 18:51:36 +03:00
Boris Gulay
148052a6d0 Add delimiter to account setup. Closes #50 2019-11-24 18:48:25 +03:00
Boris Gulay
7bb10e55d7 Update french translation. Thanx Alban 2019-10-18 00:21:42 +03:00
Boris Gulay
ac32196fc0 Better string handling. 2019-09-04 23:30:47 +03:00
Boris Gulay
ebc4324ecd Fixed login problem when server requires TLS.
Closes #47
Closes #45
2019-09-04 23:21:46 +03:00
Boris Gulay
c0a92bb436 Fixed issue in German translation. Thanx bJBM 2019-07-30 23:16:43 +03:00
Boris Gulay
652d1aaa1f Fix field names in CHECK. Thanx Tina Rosenstein 2019-07-30 23:14:30 +03:00
Boris Gulay
6f86e64442 Make preconfig work for SMTP host and port too.
Closes # 37
2019-04-16 00:20:06 +03:00
Boris Gulay
080a2ee591 Fixed non-html chars ware stripped from password.
Closes #17
2019-04-14 19:19:30 +03:00
Boris Gulay
4a20b77edb Fix incorrect field names in CHECKs (#42) 2019-04-14 17:51:01 +03:00
Boris Gulay
89791e1f49 Fix sqlite scripts. Closes #35. 2019-02-03 19:48:43 +03:00
Boris Gulay
c2380e630b Better image for settings 2019-01-12 15:55:13 +03:00
Boris Gulay
a062f5ebb5 Readme rewritten.
It's now sexy, contains images and explains settings!
2019-01-12 15:51:30 +03:00
Boris Gulay
f164ccfd05 SQLite script updates for new SMTP feature. 2019-01-10 23:55:33 +03:00
Boris Gulay
34fd9ca6f6 Update German translation. 2019-01-10 00:25:13 +03:00
Boris Gulay
6ba63dfe50 Updated MySQL scripts to work with new SMTP feature.
Closes #34
Closes #26
2019-01-08 15:26:04 +03:00
Boris Gulay
e79ec4e45b English translation updated 2018-12-29 15:07:21 +03:00
Boris Gulay
f1bd9679da Added SMTP server TLS connection. 2018-12-22 17:31:58 +03:00
Boris Gulay
68164414c2 Fix saving label. 2018-12-22 16:55:30 +03:00
Boris Gulay
d8ea3d5539 Fix setting flags on form load. 2018-12-22 16:50:46 +03:00
Boris Gulay
a4dc73c6a7 Fix password saving. 2018-12-22 16:36:55 +03:00
Boris Gulay
f796334126 Add ability to specify SMTP server directly.
Closes #32.
Closes #30.
2018-12-22 13:31:25 +03:00
Boris Gulay
d65ad79709 Added support for new Elastic skin in v1.4. Thanx to Estudio Nexos.
Closes #33
2018-12-06 20:07:52 +03:00
Boris Gulay
43a9ed178e Made git another way 2018-12-06 19:55:02 +03:00
Boris Gulay
cc68ab1521 JS optimizations. 2018-11-10 18:32:44 +03:00
Boris Gulay
ea21509f2a Added initial script for SQLite. Thanx to Gergely Papp. Closes #29. 2018-10-12 17:32:58 +03:00
Boris Gulay
24a9584d6f Fixed typo in field name. Closes #25 (thanx Dariusz Bijoś) 2018-08-27 22:24:48 +03:00
Boris Gulay
bcea012af0 Finally works correct for SMTP too. Closes #24. 2018-07-16 20:30:48 +03:00
Boris Gulay
a437a107ba Drop NOT NULL for username column.
Someone please check MySQL script!
2018-07-16 18:55:12 +03:00
Boris Gulay
8b2798e412 Show account selection only for MAIL task.
Optimize JS scripts.
2018-03-17 23:03:42 +03:00
Boris Gulay
c28305509f Fix identity form.
Closes #22.
2018-03-17 22:10:00 +03:00
Boris Gulay
8a8bca1ae5 Make identity selection work with classic skin. 2018-03-17 17:47:32 +03:00
Boris Gulay
28d7841af5 Fix description of compatibility for v1.3 branch. 2018-03-17 17:16:18 +03:00
Boris Gulay
707abf2a81 Initial release for Roundcube 1.3.
Fixed compatibility with new jQuery (combobox not displayed). Closes #20.
Pumped up Roundcube version requirement.
2018-03-17 17:09:16 +03:00
Boris Gulay
c90efaa00b Readme updated. 2018-03-12 23:21:38 +03:00
32 changed files with 1288 additions and 429 deletions

8
.gitattributes vendored Normal file
View File

@@ -0,0 +1,8 @@
* text=auto
*.sql text
*.php text
*.inc text
*.js text
*.md text
*.php.dist text

1
.gitignore vendored
View File

@@ -1 +1,2 @@
*.swp *.swp
.vscode

View File

@@ -1,11 +1,37 @@
# ident_switch # ident_switch
ident_switch plugin for Roundcube ident_switch plugin for Roundcube
This plugin allows users to switch between different accounts (including remote) in single Roundcube session. This plugin allows users to switch between different accounts (including remote) in single Roundcube session like this:
![Screenshot example](https://i.imgur.com/rRIqtA8.jpg)
*Inspired by identities_imap plugin that is no longer supported.* *Inspired by identities_imap plugin that is no longer supported.*
### Where to start ### ### Where to start ###
* In settigs interface create new identity. * In settings interface create new identity.
* For all identities except default you will see new section of settings - IMAP. Enter data required to connect to remote server. Don't forget to check Enabled check box. * For all identities except default you will see new section of settings - "Plugin ident_switch" (see screenshot below). Enter data required to connect to remote server. Don't forget to check Enabled check box.
* After you have created at least one identity with active IMAP settings you will see combobox in the top right corner instead of plain text field with account name. It will allows you to switch to another account. * After you have created at least one identity with active plugin you will see combobox in the top right corner instead of plain text field with account name. It will allows you to switch to another account.
### Settings ###
![Plugin settings](https://i.imgur.com/rFaHUbR.jpg)
* **Enabled** - enables plugin (i.e. account switcing) for this identity.
* **Label** - text that will be displayed in drop down list for this identity. If left blank email will be used.
* **IMAP**
* **Server host name** - host name for imap server. If left blank 'localhost' will be used.
* **Port** - port on server to connect to. If left blank 143 will be used.
* **Secure connection** - enabled secure connection (TLS) *for both IMAP and SMTP*.
* **Username** - login used *for IMAP and SMTP servers*.
* **Password** - password used *for IMAP and SMTP servers*. It's stored encrypted in database.
* **SMTP**
* **Server host name** - host name for imap server. If left blank 'localhost' will be used.
* **Port** - port on server to connect to. If left blank 587 will be used.
### Version compatibility ###
* Versions 1.X (not supported any more) - for Roundcube v1.1
* Versions 2.X (not supported any more) - for Roundcube v1.2
* Versions 3.X (not supported any more) - for Roundcube v1.3
* Versions 4.x - for Roundcube v1.3 and 1.4.
Please specify version like "~2.0" in your composer.json file for ident_switch requirement. In this case you will stay inside compatible branch until you manually update your Roundcube installation.

View File

@@ -1,38 +1,54 @@
CREATE TABLE IF NOT EXISTS ident_switch CREATE TABLE IF NOT EXISTS `ident_switch`
( (
id `id`
int(10) UNSIGNED int(10) UNSIGNED
NOT NULL NOT NULL
AUTO_INCREMENT, AUTO_INCREMENT,
user_id `user_id`
int(10) UNSIGNED int(10) UNSIGNED
NOT NULL, NOT NULL,
iid `iid`
int(10) UNSIGNED int(10) UNSIGNED
NOT NULL, NOT NULL,
username `username`
varchar(64)
NOT NULL,
password
varchar(64), varchar(64),
host `password`
varchar(64), varchar(64),
port `imap_host`
varchar(64),
`imap_port`
int int
CHECK(port > 0 AND port <= 65535), CHECK(`imap_port` > 0 AND `imap_port` <= 65535),
delimiter `imap_delimiter`
char(1), char(1),
label `label`
varchar(32), varchar(32),
flags `flags`
int int
NOT NULL NOT NULL
DEFAULT 0, DEFAULT 0,
UNIQUE KEY user_id_label (user_id, label), `smtp_host`
CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, varchar(64),
CONSTRAINT fk_identity_id FOREIGN KEY (iid) REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE, `smtp_port`
PRIMARY KEY(id), int
INDEX IX_ident_switch_user_id (user_id), CHECK(`smtp_port` > 0 AND `smtp_port` <= 65535),
INDEX IX_ident_switch_iid (iid) `smtp_auth`
smallint
NOT NULL
DEFAULT 1,
`drafts_mbox`
varchar(64),
`sent_mbox`
varchar(64),
`junk_mbox`
varchar(64),
`trash_mbox`
varchar(64),
UNIQUE KEY `user_id_label` (`user_id`, `label`),
CONSTRAINT `fk_user_id` FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_identity_id` FOREIGN KEY (`iid`) REFERENCES `identities`(`identity_id`) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY(`id`),
INDEX `IX_ident_switch_user_id`(`user_id`),
INDEX `IX_ident_switch_iid`(`iid`)
); );

View File

@@ -1,5 +1,5 @@
ALTER TABLE ALTER TABLE
ident_switch `ident_switch`
MODIFY MODIFY
username `username`
varchar(64); varchar(64);

6
SQL/mysql/2018071600.sql Normal file
View File

@@ -0,0 +1,6 @@
ALTER TABLE
`ident_switch`
MODIFY
`username`
varchar(64)
NULL;

29
SQL/mysql/2018121800.sql Normal file
View File

@@ -0,0 +1,29 @@
ALTER TABLE
`ident_switch`
CHANGE
`host`
`imap_host` varchar(64);
ALTER TABLE
`ident_switch`
CHANGE
`port`
`imap_port` int;
ALTER TABLE
`ident_switch`
ADD COLUMN
`smtp_host`
varchar(64);
ALTER TABLE
`ident_switch`
ADD COLUMN
`smtp_port`
int
CHECK(`smtp_port` > 0 AND `smtp_port` <= 65535);
ALTER TABLE
`ident_switch`
DROP COLUMN
`delimiter`;

5
SQL/mysql/2019112000.sql Normal file
View File

@@ -0,0 +1,5 @@
ALTER TABLE
`ident_switch`
ADD COLUMN
`imap_delimiter`
char(1);

14
SQL/mysql/2019121300.sql Normal file
View File

@@ -0,0 +1,14 @@
ALTER TABLE
`ident_switch`
ADD COLUMN
`drafts_mbox`
varchar(64),
ADD COLUMN
`sent_mbox`
varchar(64),
ADD COLUMN
`junk_mbox`
varchar(64),
ADD COLUMN
`trash_mbox`
varchar(64);

7
SQL/mysql/2020060100.sql Normal file
View File

@@ -0,0 +1,7 @@
ALTER TABLE
`ident_switch`
ADD COLUMN
`smtp_auth`
smallint
NOT NULL
DEFAULT 1;

View File

@@ -13,16 +13,15 @@ CREATE TABLE ident_switch
REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE
UNIQUE, UNIQUE,
username username
varchar(64) varchar(64),
NOT NULL,
password password
varchar(64), varchar(64),
host imap_host
varchar(64), varchar(64),
port imap_port
integer integer
CHECK(port > 0 AND port <= 65535), CHECK(imap_port > 0 AND imap_port <= 65535),
delimiter imap_delimiter
char(1), char(1),
label label
varchar(32), varchar(32),
@@ -30,6 +29,23 @@ CREATE TABLE ident_switch
integer integer
NOT NULL NOT NULL
DEFAULT(0), DEFAULT(0),
smtp_host
varchar(64),
smtp_port
integer
CHECK(smtp_port > 0 AND smtp_port <= 65535),
smtp_auth
smallint
NOT NULL
DEFAULT(1),
drafts_mbox
varchar(64),
sent_mbox
varchar(64),
junk_mbox
varchar(64),
trash_mbox
varchar(64),
UNIQUE (user_id, label) UNIQUE (user_id, label)
); );

View File

@@ -0,0 +1,5 @@
ALTER TABLE
ident_switch
ALTER COLUMN
username
DROP NOT NULL;

View File

@@ -0,0 +1,31 @@
ALTER TABLE
ident_switch
RENAME COLUMN
host
TO
imap_host;
ALTER TABLE
ident_switch
RENAME COLUMN
port
TO
imap_port;
ALTER TABLE
ident_switch
ADD COLUMN
smtp_host
varchar(64);
ALTER TABLE
ident_switch
ADD COLUMN
smtp_port
integer
CHECK(smtp_port > 0 AND smtp_port <= 65535);
ALTER TABLE
ident_switch
DROP COLUMN
delimiter;

View File

@@ -0,0 +1,5 @@
ALTER TABLE
ident_switch
ADD COLUMN
imap_delimiter
char(1);

View File

@@ -0,0 +1,14 @@
ALTER TABLE
ident_switch
ADD COLUMN
drafts_mbox
varchar(64),
ADD COLUMN
sent_mbox
varchar(64),
ADD COLUMN
junk_mbox
varchar(64),
ADD COLUMN
trash_mbox
varchar(64);

View File

@@ -0,0 +1,7 @@
ALTER TABLE
ident_switch
ADD COLUMN
smtp_auth
smallint
NOT NULL
DEFAULT(1);

52
SQL/sqlite.initial.sql Normal file
View File

@@ -0,0 +1,52 @@
CREATE TABLE ident_switch
(
id
integer
PRIMARY KEY,
user_id
integer
NOT NULL
REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
iid
integer
NOT NULL
REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE
UNIQUE,
username
varchar(64),
password
varchar(64),
imap_host
varchar(64),
imap_port
integer
CHECK(imap_port > 0 AND imap_port <= 65535),
imap_delimiter
char(1),
label
varchar(32),
flags
integer
NOT NULL
DEFAULT(0),
smtp_host
varchar(64),
smtp_port
integer
CHECK(smtp_port > 0 AND smtp_port <= 65535),
smtp_auth
smallint
NOT NULL
DEFAULT 1,
drafts_mbox
varchar(64),
sent_mbox
varchar(64),
junk_mbox
varchar(64),
trash_mbox
varchar(64),
UNIQUE (user_id, label)
);
CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id);
CREATE INDEX IX_ident_switch_iid on ident_switch(iid);

76
SQL/sqlite/2018121800.sql Normal file
View File

@@ -0,0 +1,76 @@
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE ident_switch RENAME TO ident_switch_old;
CREATE TABLE ident_switch
(
id
integer
PRIMARY KEY,
user_id
integer
NOT NULL
REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
iid
integer
NOT NULL
REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE
UNIQUE,
username
varchar(64),
password
varchar(64),
imap_host
varchar(64),
imap_port
integer
CHECK(imap_port > 0 AND imap_port <= 65535),
label
varchar(32),
flags
integer
NOT NULL
DEFAULT(0),
smtp_host
varchar(64),
smtp_port
integer
CHECK(smtp_port > 0 AND smtp_port <= 65535),
UNIQUE (user_id, label)
);
CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id);
CREATE INDEX IX_ident_switch_iid on ident_switch(iid);
INSERT OR ROLLBACK INTO
ident_switch (
id,
user_id,
iid,
username,
password,
imap_host,
imap_port,
label,
flags,
smtp_host
)
SELECT
id,
user_id,
iid,
username,
password,
host,
port,
label,
flags,
host,
FROM
ident_switch_old;
DROP TABLE
ident_switch_old;
COMMIT;
PRAGMA foreign_keys=on;

92
SQL/sqlite/2020121600.sql Normal file
View File

@@ -0,0 +1,92 @@
PRAGMA foreign_keys=off;
BEGIN TRANSACTION;
ALTER TABLE ident_switch RENAME TO ident_switch_old;
CREATE TABLE ident_switch
(
id
integer
PRIMARY KEY,
user_id
integer
NOT NULL
REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
iid
integer
NOT NULL
REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE
UNIQUE,
username
varchar(64),
password
varchar(64),
imap_host
varchar(64),
imap_port
integer
CHECK(imap_port > 0 AND imap_port <= 65535),
imap_delimiter
char(1),
label
varchar(32),
flags
integer
NOT NULL
DEFAULT(0),
smtp_host
varchar(64),
smtp_port
integer
CHECK(smtp_port > 0 AND smtp_port <= 65535),
smtp_auth
smallint
NOT NULL
DEFAULT 1,
drafts_mbox
varchar(64),
sent_mbox
varchar(64),
junk_mbox
varchar(64),
trash_mbox
varchar(64),
UNIQUE (user_id, label)
);
CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id);
CREATE INDEX IX_ident_switch_iid on ident_switch(iid);
INSERT OR ROLLBACK INTO
ident_switch (
id,
user_id,
iid,
username,
password,
imap_host,
imap_port,
label,
flags,
smtp_host,
smtp_port
)
SELECT
id,
user_id,
iid,
username,
password,
imap_host,
imap_port,
label,
flags,
smtp_host,
smtp_port
FROM
ident_switch_old;
DROP TABLE
ident_switch_old;
COMMIT;
PRAGMA foreign_keys=on;

View File

@@ -8,7 +8,7 @@
"authors": [ "authors": [
{ {
"name": "Boris Gulay", "name": "Boris Gulay",
"email": "boris@boressoft.ru", "email": "boris@gulay.name",
"role": "Developer" "role": "Developer"
} }
], ],
@@ -20,7 +20,8 @@
], ],
"require": { "require": {
"php": ">=5.3.0", "php": ">=5.3.0",
"roundcube/plugin-installer": ">=0.1.3" "roundcube/plugin-installer": ">=0.1.3",
"ext-ctype": "*"
}, },
"conflict": { "conflict": {
"elm/identity_smtp": "*" "elm/identity_smtp": "*"
@@ -30,7 +31,7 @@
}, },
"extra": { "extra": {
"roundcube": { "roundcube": {
"min-version": "1.1", "min-version": "1.3",
"sql-dir": "SQL" "sql-dir": "SQL"
} }
} }

35
ident_switch-form.js Normal file
View File

@@ -0,0 +1,35 @@
/*
* This is part of identity_imap plugin
*/
$(function() {
$("INPUT[name='_ident_switch.form.common.enabled']").change();
plugin_switchIdent_processPreconfig();
});
function plugin_switchIdent_processPreconfig() {
var disFld = $("INPUT[name='_ident_switch.form.common.readonly']");
disFld.parentsUntil("TABLE", "TR").hide();
var disVal = disFld.val();
if (disVal > 0) {
$("INPUT[name='_ident_switch.form.imap.host']").prop("disabled", true);
$("SELECT[name='_ident_switch.form.imap.tls']").prop("disabled", true);
$("INPUT[name='_ident_switch.form.imap.port']").prop("disabled", true);
$("INPUT[name='_ident_switch.form.smtp.host']").prop("disabled", true);
$("SELECT[name='_ident_switch.form.smtp.tls']").prop("disabled", true);
$("INPUT[name='_ident_switch.form.smtp.port']").prop("disabled", true);
}
if (2 == disVal) {
$("INPUT[name='_ident_switch.form.imap.username']").prop("disabled", true);
$("INPUT[name='_ident_switch.form.smtp.username']").prop("disabled", true);
}
}
function plugin_switchIdent_enabled_onChange(e) {
var $enFld = $("INPUT[name='_ident_switch.form.common.enabled'], INPUT[name='_ident_switch.form.imap.host'], INPUT[name='_ident_switch.form.smtp.host']");
$("INPUT[name!='_ident_switch.form.common.enabled']", $enFld.parents("FIELDSET")).prop("disabled", !$enFld.is(":checked"));
plugin_switchIdent_processPreconfig();
}

1
ident_switch-form.min.js vendored Normal file
View File

@@ -0,0 +1 @@
$(function(){$("INPUT[name='_ident_switch.form.common.enabled']").change();plugin_switchIdent_processPreconfig()});function plugin_switchIdent_processPreconfig(){var a=$("INPUT[name='_ident_switch.form.common.readonly']");a.parentsUntil("TABLE","TR").hide();var b=a.val();if(b>0){$("INPUT[name='_ident_switch.form.imap.host']").prop("disabled",true);$("SELECT[name='_ident_switch.form.imap.tls']").prop("disabled",true);$("INPUT[name='_ident_switch.form.imap.port']").prop("disabled",true);$("INPUT[name='_ident_switch.form.smtp.host']").prop("disabled",true);$("SELECT[name='_ident_switch.form.smtp.tls']").prop("disabled",true);$("INPUT[name='_ident_switch.form.smtp.port']").prop("disabled",true)}if(2==b){$("INPUT[name='_ident_switch.form.imap.username']").prop("disabled",true);$("INPUT[name='_ident_switch.form.smtp.username']").prop("disabled",true)}}function plugin_switchIdent_enabled_onChange(a){var b=$("INPUT[name='_ident_switch.form.common.enabled'], INPUT[name='_ident_switch.form.imap.host'], INPUT[name='_ident_switch.form.smtp.host']");$("INPUT[name!='_ident_switch.form.common.enabled']",b.parents("FIELDSET")).prop("disabled",!b.is(":checked"));plugin_switchIdent_processPreconfig()};

71
ident_switch-switch.js Normal file
View File

@@ -0,0 +1,71 @@
/*
* This is part of identity_imap plugin
*/
$(function() {
$sw = $('#plugin-ident_switch-account');
isOk = false;
switch (rcmail.env['skin']) {
case 'larry':
isOk = plugin_switchIdent_addCbLarry($sw);
break;
case 'classic':
isOk = plugin_switchIdent_addCbClassic($sw);
break;
case 'elastic':
isOk = plugin_switchIdent_addCbElastic($sw);
break;
}
if (isOk)
$sw.show();
});
function plugin_switchIdent_addCbLarry($sw) {
var $truName = $('.topright .username');
if ($truName.length > 0) {
if ($sw.length > 0) {
$sw.prependTo('.topright');
$truName.hide();
return true;
}
}
return false;
}
function plugin_switchIdent_addCbClassic($sw) {
var $taskBar = $('#taskbar');
if ($taskBar.length > 0) {
$taskBar.prepend($sw);
return true;
}
return false;
}
function plugin_switchIdent_addCbElastic($sw) {
var $taskBar = $('.header-title.username');
$sw.css("background-color", "transparent").css("border","none");
$sw.css("background-position-x","left 0.75rem").css("padding","0 0 0 2rem");
$sw.css("font-weight","bold").css("box-shadow","none");
if ($taskBar.length > 0) {
$taskBar.prepend($sw);
return true;
}
return false;
}
function plugin_switchIdent_switch(val) {
rcmail.env.unread_counts = {};
console.log(rcmail.env.unread_counts);
rcmail.http_post('plugin.ident_switch.switch', { '_ident-id': val, '_mbox': rcmail.env.mailbox });
}
function plugin_switchIdent_fixIdent(iid) {
if (parseInt(iid) > 0)
$("#_from").val(iid);
}

1
ident_switch-switch.min.js vendored Normal file
View File

@@ -0,0 +1 @@
$(function(){$sw=$("#plugin-ident_switch-account");isOk=false;switch(rcmail.env.skin){case"larry":isOk=plugin_switchIdent_addCbLarry($sw);break;case"classic":isOk=plugin_switchIdent_addCbClassic($sw);break;case"elastic":isOk=plugin_switchIdent_addCbElastic($sw);break}if(isOk){$sw.show()}});function plugin_switchIdent_addCbLarry(b){var a=$(".topright .username");if(a.length>0){if(b.length>0){b.prependTo(".topright");a.hide();return true}}return false}function plugin_switchIdent_addCbClassic(b){var a=$("#taskbar");if(a.length>0){a.prepend(b);return true}return false}function plugin_switchIdent_addCbElastic(b){var a=$(".header-title.username");b.css("background-color","transparent").css("border","none");b.css("background-position-x","left 0.75rem").css("padding","0 0 0 2rem");b.css("font-weight","bold").css("box-shadow","none");if(a.length>0){a.prepend(b);return true}return false}function plugin_switchIdent_switch(a){rcmail.env.unread_counts={};console.log(rcmail.env.unread_counts);rcmail.http_post("plugin.ident_switch.switch",{"_ident-id":a,_mbox:rcmail.env.mailbox})}function plugin_switchIdent_fixIdent(a){if(parseInt(a)>0){$("#_from").val(a)}};

View File

@@ -1,61 +0,0 @@
/*
* This is part of identity_imap plugin
*/
$(function() {
var $truName = $('.topright .username');
if ($truName.size() > 0) {
$sw = $('#plugin-ident_switch-account');
if ($sw.size() > 0) {
$sw.prependTo('.topright');
$truName.hide();
$('#plugin-ident_switch-account').show();
}
}
$("INPUT[name='_ident_switch.form.enabled']").change();
$("SELECT[name='_ident_switch.form.secure']").change();
plugin_switchIdent_processPreconfig();
});
function plugin_switchIdent_processPreconfig() {
var disFld = $("INPUT[name='_ident_switch.form.readonly']");
disFld.parentsUntil("TABLE", "TR").hide();
var disVal = disFld.val();
if (disVal > 0) {
$("INPUT[name='_ident_switch.form.host']").prop("disabled", true);
$("SELECT[name='_ident_switch.form.secure']").prop("disabled", true);
$("INPUT[name='_ident_switch.form.port']").prop("disabled", true);
}
if (2 == disVal) {
$("INPUT[name='_ident_switch.form.username']").prop("disabled", true);
}
}
function plugin_switchIdent_enabled_onChange(e) {
var $enFld = $("INPUT[name='_ident_switch.form.enabled']");
$("INPUT[name!='_ident_switch.form.enabled'], SELECT", $enFld.parents("FIELDSET")).prop("disabled", !$enFld.is(":checked"));
plugin_switchIdent_processPreconfig();
}
function plugin_switchIdent_secure_onChange(e) {
var $secSel = $("SELECT[name='_ident_switch.form.secure']");
var $portFld = $("INPUT[name='_ident_switch.form.port']");
if ('SSL' === $secSel.val().toUpperCase())
$portFld.attr("placeholder", 993);
else
$portFld.attr("placeholder", 143);
}
function plugin_switchIdent_switch(val) {
rcmail.http_post('plugin.ident_switch.switch', { '_ident-id': val, '_mbox': rcmail.env.mailbox });
}
function plugin_switchIdent_fixIdent(iid) {
if (parseInt(iid) > 0)
$("#_from").val(iid);
}

10
ident_switch.min.js vendored
View File

@@ -1,10 +0,0 @@
$(function(){var $truName=$('.topright .username');if($truName.size()>0){$sw=$('#plugin-ident_switch-account');if($sw.size()>0){$sw.prependTo('.topright');$truName.hide();$('#plugin-ident_switch-account').show();}}
$("INPUT[name='_ident_switch.form.enabled']").change();$("SELECT[name='_ident_switch.form.secure']").change();plugin_switchIdent_processPreconfig();});function plugin_switchIdent_processPreconfig(){var disFld=$("INPUT[name='_ident_switch.form.readonly']");disFld.parentsUntil("TABLE","TR").hide();var disVal=disFld.val();if(disVal>0){$("INPUT[name='_ident_switch.form.host']").prop("disabled",true);$("SELECT[name='_ident_switch.form.secure']").prop("disabled",true);$("INPUT[name='_ident_switch.form.port']").prop("disabled",true);}
if(2==disVal){$("INPUT[name='_ident_switch.form.username']").prop("disabled",true);}}
function plugin_switchIdent_enabled_onChange(e){var $enFld=$("INPUT[name='_ident_switch.form.enabled']");$("INPUT[name!='_ident_switch.form.enabled'], SELECT",$enFld.parents("FIELDSET")).prop("disabled",!$enFld.is(":checked"));plugin_switchIdent_processPreconfig();}
function plugin_switchIdent_secure_onChange(e){var $secSel=$("SELECT[name='_ident_switch.form.secure']");var $portFld=$("INPUT[name='_ident_switch.form.port']");if('SSL'===$secSel.val().toUpperCase())
$portFld.attr("placeholder",993);else
$portFld.attr("placeholder",143);}
function plugin_switchIdent_switch(val){rcmail.http_post('plugin.ident_switch.switch',{'_ident-id':val,'_mbox':rcmail.env.mailbox});}
function plugin_switchIdent_fixIdent(iid){if(parseInt(iid)>0)
$("#_from").val(iid);}

View File

@@ -17,8 +17,12 @@ class ident_switch extends rcube_plugin
// Flags user in database // Flags user in database
const DB_ENABLED = 1; const DB_ENABLED = 1;
const DB_SECURE_SSL = 2; //const DB_SECURE_SSL = 2; // Not supported any more
const DB_SECURE_TLS = 4; const DB_SECURE_IMAP_TLS = 4;
// SMTP auth values
const SMTP_AUTH_IMAP = 1;
const SMTP_AUTH_NONE = 2;
function init() function init()
{ {
@@ -31,8 +35,18 @@ class ident_switch extends rcube_plugin
$this->add_hook('identity_create_after', array($this, 'on_identity_create_after')); $this->add_hook('identity_create_after', array($this, 'on_identity_create_after'));
$this->add_hook('identity_delete', array($this, 'on_identity_delete')); $this->add_hook('identity_delete', array($this, 'on_identity_delete'));
$this->add_hook('template_object_composeheaders', array($this, 'on_template_object_composeheaders')); $this->add_hook('template_object_composeheaders', array($this, 'on_template_object_composeheaders'));
$this->add_hook('preferences_list', array($this, 'on_special_folders_form'));
$this->add_hook('preferences_save', array($this, 'on_special_folders_update'));
$this->register_action('plugin.ident_switch.switch', array($this, 'on_switch')); $this->register_action('plugin.ident_switch.switch', array($this, 'on_switch'));
$rc = rcmail::get_instance();
foreach (rcube_storage::$folder_types as $type)
{
$key = $type . '_mbox_default' . self::MY_POSTFIX;
if (!$_SESSION[$key])
$_SESSION[$key] = $rc->config->get($type . '_mbox');
}
} }
function on_startup($args) function on_startup($args)
@@ -51,6 +65,14 @@ class ident_switch extends rcube_plugin
} }
} }
foreach (rcube_storage::$folder_types as $type)
{
$defaultKey = $type . '_mbox_default' . self::MY_POSTFIX;
$otherKey = $type . '_mbox' . self::MY_POSTFIX;
$val = $_SESSION[$otherKey] ? $_SESSION[$otherKey] : $_SESSION[$defaultKey];
$rc->config->set($type . '_mbox', $val);
}
return $args; return $args;
} }
@@ -58,100 +80,171 @@ class ident_switch extends rcube_plugin
{ {
$rc = rcmail::get_instance(); $rc = rcmail::get_instance();
// Currently selected identity switch ($rc->task)
$iid = $_SESSION['iid' . self::MY_POSTFIX]; {
case 'mail':
$this->render_switch($rc, $args);
break;
case 'settings':
$this->include_script('ident_switch-form.js');
break;
}
$iid_int = 0;
if (is_int($iid)) return $args;
$iid_int = $iid; }
elseif ($iid === '-1')
$iid_int = -1; private function render_switch($rc, $args)
elseif (ctype_digit($iid)) {
$iid_int = intval($iid); // Currently selected identity
$iid_s = $_SESSION['iid' . self::MY_POSTFIX];
$iid = 0;
if (is_int($iid_s))
$iid = $iid_s;
elseif ($iid_s === '-1')
$iid = -1;
elseif (ctype_digit($iid_s))
$iid = intval($iid_s);
$accNames = array($_SESSION['global_alias'] ? $_SESSION['global_alias'] : $rc->user->data['username']);
$accValues = array(-1);
$accSelected = -1;
// Get list of alternative accounts // Get list of alternative accounts
$sOpt = ''; $sql = "SELECT "
$sql = 'SELECT id, iid, label, username FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE user_id = ? AND flags & ? > 0'; . "isw.id, isw.iid, isw.label, isw.username, ii.email"
. " FROM"
. " {$rc->db->table_name(self::TABLE)} isw"
. " INNER JOIN {$rc->db->table_name('identities')} ii ON isw.iid=ii.identity_id"
. " WHERE isw.user_id = ? AND isw.flags & ? > 0";
$qRec = $rc->db->query($sql, $rc->user->data['user_id'], self::DB_ENABLED); $qRec = $rc->db->query($sql, $rc->user->data['user_id'], self::DB_ENABLED);
while ($r = $rc->db->fetch_assoc($qRec)) while ($r = $rc->db->fetch_assoc($qRec))
{ {
$opts = array('value' => $r['id']); $accValues[] = $r['id'];
if ($iid_int == $r['iid']) if ($iid == $r['iid'])
$opts['selected'] = 'selected'; $accSelected = $r['id'];
// Make label // Make label
$lbl = $r['label']; $lbl = $r['label'];
if (!$lbl) if (!$lbl)
{ {
if (!$r['username']) if (!$r['username'])
{ // Load email from identity $r['username'] = $r['email'];
$sql = 'SELECT email FROM ' . $rc->db->table_name('identities') . ' WHERE identity_id = ?';
$q = $rc->db->query($sql, $r['iid']);
$rIid = $rc->db->fetch_assoc($q);
$r['username'] = $rIid['email'];
}
if (strpos($r['username'], '@') === false) if (strpos($r['username'], '@') === false)
$lbl = $r['username'] . '@' . ($r['host'] ? $r['host'] : 'localhost'); $lbl = $r['username'] . '@' . ($r['host'] ? $r['host'] : 'localhost');
else else
$lbl = $r['username']; $lbl = $r['username'];
} }
$accNames[] = rcube::Q($lbl);
$sOpt .= html::tag(
'option',
$opts,
rcube::Q($lbl)
);
} }
// Render UI if user has extra accounts // Render UI if user has extra accounts
if (!empty($sOpt)) if (count($accValues) > 1)
{ {
// Add main account $this->include_script('ident_switch-switch.js');
$opts = array('value' => -1);
if (!$iid || $iid_int == -1)
$opts['selected'] = 'selected';
$sOpt = html::tag( $select = new html_select(array(
'option',
$opts,
$_SESSION['global_alias'] ? $_SESSION['global_alias'] : $rc->user->data['username']
) . $sOpt;
$this->include_script('ident_switch.js');
$sw = html::tag(
'select',
array(
'id' => 'plugin-ident_switch-account', 'id' => 'plugin-ident_switch-account',
'style' => 'display: none; padding: 0;', 'style' => 'display: none; padding: 0;',
'onchange' => 'plugin_switchIdent_switch(this.value);', 'onchange' => 'plugin_switchIdent_switch(this.value);',
), ));
$sOpt $select->add($accNames, $accValues);
); $rc->output->add_footer($select->show(array($accSelected)));
$rc->output->add_footer($sw);
} }
return $args;
} }
function on_smtp_connect($args) function on_smtp_connect($args)
{ {
$iid = $_SESSION['iid' . self::MY_POSTFIX];
if (!is_numeric($iid) || $iid == -1)
{
self::write_log('no identity switch is selected... trying to find related smtp server from the from header');
$requestFrom = rcube_utils::get_input_value('_from', rcube_utils::INPUT_POST);
if (empty($requestFrom)) {
self::write_log('no _from post parameter found... falling back to original default config');
return $args;
} else {
$iid = intval($requestFrom);
if ($iid == 0) {
self::write_log('falling back to original default config as _from post field is no integer: ' . $_POST['_from']);
return $args;
}
}
}
$rc = rcmail::get_instance(); $rc = rcmail::get_instance();
// TODO: Rewrite with full settings! $sql = 'SELECT smtp_host, flags, smtp_port, username, smtp_auth, password FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE iid = ? AND user_id = ?';
$q = $rc->db->query($sql, $iid ,$rc->user->ID);
if (strcasecmp($rc->user->data['username'], $_SESSION['username']) !== 0) $r = $rc->db->fetch_assoc($q);
if (is_array($r))
{ {
if ($args['smtp_user'] == '%u') if (!$r['username'])
$args['smtp_user'] = $rc->user->data['username']; { // Load email from identity
if ($args['smtp_pass'] == '%p') $sql = 'SELECT email FROM ' . $rc->db->table_name('identities') . ' WHERE identity_id = ?';
$args['smtp_pass'] = $rc->decrypt($_SESSION['password' . self::MY_POSTFIX]); $q = $rc->db->query($sql, $iid);
$rIid = $rc->db->fetch_assoc($q);
$r['username'] = $rIid['email'];
}
$args['smtp_user'] = $r['username'];
$args['smtp_pass'] = $r['smtp_auth'] == self::SMTP_AUTH_IMAP ? $rc->decrypt($r['password']) : '';
$args['smtp_host'] = $r['smtp_host'] ? $r['smtp_host'] : 'localhost'; // Default SMTP host here
$args['smtp_port'] = $r['smtp_port'] ? $r['smtp_port'] : 587; // Default SMTP port here
if ($r['flags'] & self::DB_SECURE_IMAP_TLS)
{
if (strpos($args['smtp_host'], ':') !== false)
self::write_log('SMTP server already contains protocol, ignoring TLS flag.');
else
$args['smtp_host'] = 'tls://' . $args['smtp_host'];
}
} }
return $args; return $args;
} }
private static function get_common_form(&$record)
{
$prefix = 'ident_switch.form.common.';
return array(
$prefix . 'enabled' => array('type' => 'checkbox', 'onchange' => 'plugin_switchIdent_enabled_onChange();'),
$prefix . 'label' => array('type' => 'text', 'size' => 32, 'placeholder' => $record['email']),
$prefix . 'readonly' => array('type' => 'hidden'),
);
}
private static function get_imap_form(&$record)
{
$prefix = 'ident_switch.form.imap.';
return array(
$prefix . 'host' => array('type' => 'text', 'size' => 64, 'placeholder' => 'localhost'),
$prefix . 'port' => array('type' => 'text', 'size' => 5, 'placeholder' => 143),
$prefix . 'tls' => array('type' => 'checkbox'),
$prefix . 'username' => array('type' => 'text', 'size' => 64, 'placeholder' => $record['email']),
$prefix . 'password' => array('type' => 'password', 'size' => 64),
$prefix . 'delimiter' => array('type' => 'text', 'size' => 1, 'placeholder' => '.'),
);
}
private function get_smtp_form(&$record)
{
$prefix = 'ident_switch.form.smtp.';
$authType = new html_select(array('name' => "_{$prefix}auth"));
$authType->add($this->gettext('form.smtp.auth.imap'), self::SMTP_AUTH_IMAP);
$authType->add($this->gettext('form.smtp.auth.none'), self::SMTP_AUTH_NONE);
return array(
$prefix . 'host' => array('type' => 'text', 'size' => 64, 'placeholder' => 'localhost'),
$prefix . 'port' => array('type' => 'text', 'size' => 5, 'placeholder' => 587),
$prefix . 'auth' => array('value' => $authType->show(array($record['ident_switch.form.smtp.auth']))),
);
}
function on_identity_form($args) function on_identity_form($args)
{ {
$rc = rcmail::get_instance(); $rc = rcmail::get_instance();
@@ -162,57 +255,62 @@ class ident_switch extends rcube_plugin
$this->add_texts('localization'); $this->add_texts('localization');
// Create our field set $row = null;
$args['form']['ident_switch'] = array(
'name' => $this->gettext('form.caption'),
'content' => array(
'ident_switch.form.enabled' => array('type' => 'checkbox', 'onchange' => 'plugin_switchIdent_enabled_onChange();'),
'ident_switch.form.label' => array('type' => 'text', 'size' => 32, 'placeholder' => $args['record']['email']),
'ident_switch.form.host' => array('type' => 'text', 'size' => 64, 'placeholder' => 'localhost'),
'ident_switch.form.secure' => array(
'type' => 'select',
'options' => array('ssl' => 'SSL', 'tls' => 'TLS'),
'onchange' => 'plugin_switchIdent_secure_onChange();'
),
'ident_switch.form.port' => array('type' => 'text', 'size' => 5),
'ident_switch.form.username' => array('type' => 'text', 'size' => 64, 'placeholder' => $args['record']['email']),
'ident_switch.form.password' => array('type' => 'password', 'size' => 64),
'ident_switch.form.delimiter' => array('type' => 'text', 'size' => 1, 'placeholder' => '.'),
'ident_switch.form.readonly' => array('type' => 'hidden'),
),
);
// Load data if exists
if (isset($args['record']['identity_id'])) if (isset($args['record']['identity_id']))
{ {
$sql = 'SELECT * FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE iid = ? AND user_id = ?'; $sql = 'SELECT * FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE iid = ? AND user_id = ?';
$q = $rc->db->query($sql, $args['record']['identity_id'], $rc->user->ID); $q = $rc->db->query($sql, $args['record']['identity_id'], $rc->user->ID);
$r = $rc->db->fetch_assoc($q); $row = $rc->db->fetch_assoc($q);
if ($r) }
$record = &$args['record'];
// Load data if exists
if ($row)
{ {
foreach ($r as $k => $v) $dbToForm = array(
$args['record']['ident_switch.form.' . $k] = $v; 'label' => 'common.label',
'imap_host' => 'imap.host',
'imap_port' => 'imap.port',
'imap_delimiter' => 'imap.delimiter',
'username' => 'imap.username',
'password' => 'imap.password',
'smtp_host' => 'smtp.host',
'smtp_port' => 'smtp.port',
'smtp_auth' => 'smtp.auth',
);
foreach ($row as $k => $v)
$record['ident_switch.form.' . $dbToForm[$k]] = $v;
// Parse flags // Parse flags
if ($r['flags'] & self::DB_ENABLED) $record['ident_switch.form.common.enabled'] = !!($row['flags'] & self::DB_ENABLED);
$args['record']['ident_switch.form.enabled'] = true; $record['ident_switch.form.imap.tls'] = !!($row['flags'] & self::DB_SECURE_IMAP_TLS);
if ($r['flags'] & self::DB_SECURE_TLS) // TLS has priority
$args['record']['ident_switch.form.secure'] = 'tls';
elseif ($r['flags'] & self::DB_SECURE_SSL)
$args['record']['ident_switch.form.secure'] = 'ssl';
// Set readonly if needed // Set readonly if needed
$cfg = $this->get_preconfig($args['record']['email']); $cfg = $this->get_preconfig($record['email']);
if (is_array($cfg) && $cfg['readonly']) if (is_array($cfg) && $cfg['readonly'])
{ {
$args['record']['ident_switch.form.readonly'] = 1; $record['ident_switch.form.common.readonly'] = 1;
if (in_array(strtoupper($cfg['user']), array('EMAIL', 'MBOX'))) if (in_array(strtoupper($cfg['user']), array('EMAIL', 'MBOX')))
$args['record']['ident_switch.form.readonly'] = 2; $record['ident_switch.form.common.readonly'] = 2;
} }
} }
else else
$this->apply_preconfig($args['record']); $this->apply_preconfig($record);
}
$args['form']['ident_switch.common'] = array(
'name' => $this->gettext('form.common.caption'),
'content' => ident_switch::get_common_form($record)
);
$args['form']['ident_switch.imap'] = array(
'name' => $this->gettext('form.imap.caption'),
'content' => ident_switch::get_imap_form($record)
);
$args['form']['ident_switch.smtp'] = array(
'name' => $this->gettext('form.smtp.caption'),
'content' => $this->get_smtp_form($record)
);
return $args; return $args;
} }
@@ -225,10 +323,9 @@ class ident_switch extends rcube_plugin
if (strcasecmp($args['record']['email'], $rc->user->data['username']) === 0) if (strcasecmp($args['record']['email'], $rc->user->data['username']) === 0)
return $args; return $args;
// Process boolean fields if (!self::get_field_value('common', 'enabled', false))
if (!rcube_utils::get_input_value('_ident_switch_form_enabled', rcube_utils::INPUT_POST))
{ {
self::sw_imap_off($args['iid']); self::sw_imap_off($args['id']);
return $args; return $args;
} }
@@ -255,8 +352,7 @@ class ident_switch extends rcube_plugin
if (strcasecmp($args['record']['email'], $rc->user->data['username']) === 0) if (strcasecmp($args['record']['email'], $rc->user->data['username']) === 0)
return $args; return $args;
// Process boolean fields if (!self::get_field_value('common', 'enabled', false))
if (!rcube_utils::get_input_value('_ident_switch_form_enabled', rcube_utils::INPUT_POST))
return $args; return $args;
$data = self::check_field_values(); $data = self::check_field_values();
@@ -285,7 +381,7 @@ class ident_switch extends rcube_plugin
unset($_SESSION['createData' . self::MY_POSTFIX]); unset($_SESSION['createData' . self::MY_POSTFIX]);
if (!$data || count($data) == 0) if (!$data || count($data) == 0)
self::write_log('Object with ident_switch values not found in session for ID = ' . $args['id'] . '.'); self::write_log("Object with ident_switch values not found in session for ID = {$args['id']}.");
else else
{ {
$data['id'] = $args['id']; $data['id'] = $args['id'];
@@ -303,7 +399,7 @@ class ident_switch extends rcube_plugin
$q = $rc->db->query($sql, $args['id'], $rc->user->ID); $q = $rc->db->query($sql, $args['id'], $rc->user->ID);
if ($rc->db->affected_rows($q)) if ($rc->db->affected_rows($q))
self::write_log('Deleted associated information for identity with ID = ' . $args['id'] . '.'); self::write_log("Deleted associated information for identity with ID = {$args['id']}.");
return $args; return $args;
} }
@@ -316,44 +412,161 @@ class ident_switch extends rcube_plugin
if (strcasecmp($_SESSION['username'], $rc->user->data['username']) !== 0) if (strcasecmp($_SESSION['username'], $rc->user->data['username']) !== 0)
{ {
if (isset($_SESSION['iid' . self::MY_POSTFIX])) if (isset($_SESSION['iid' . self::MY_POSTFIX]))
$rc->output->add_script('plugin_switchIdent_fixIdent(' . $_SESSION['iid' . self::MY_POSTFIX] . ');', 'docready'); {
$iid = $_SESSION['iid' . self::MY_POSTFIX];
$rc->output->add_script("plugin_switchIdent_fixIdent({$iid});", 'docready');
}
else else
self::write_log('Special session variable with active identity ID not found.'); self::write_log('Special session variable with active identity ID not found.');
} }
} }
} }
function on_special_folders_form($args)
{
$rc = rcmail::get_instance();
if (($args['section'] == 'folders') &&
(strcasecmp($rc->user->data['username'], $_SESSION['username']) !== 0))
{
$no_override = array_flip((array)$rc->config->get('dont_override'));
$onchange = "if ($(this).val() == 'INBOX') $(this).val('')";
$select = $rc->folder_selector(array('noselection' => '---',
'realnames' => true,
'maxlength' => 30,
'folder_filter' => 'mail',
'folder_rights' => 'w'));
$sql = 'SELECT label FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE iid = ? AND user_id = ?';
$q = $rc->db->query($sql, $_SESSION['iid' . self::MY_POSTFIX], $rc->user->ID);
$r = $rc->db->fetch_assoc($q);
$args['blocks']['main']['name'] .= ' (' . ($r['label'] ? rcube::Q($rc->gettext('server')) . ': ' . $r['label'] : 'remote') . ')';
foreach (rcube_storage::$folder_types as $type)
{
if (isset($no_override[$type . '_mbox']))
continue;
$defaultKey = $type . '_mbox_default' . self::MY_POSTFIX;
$otherKey = $type . '_mbox' . self::MY_POSTFIX;
$selected = $_SESSION[$otherKey] ? $_SESSION[$otherKey] : $_SESSION[$defaultKey];
$attr = array('id' => '_' . $type . '_mbox', 'name' => '_' . $type . '_mbox', 'onchange' => $onchange);
$args['blocks']['main']['options'][$type . '_mbox']['content'] = $select->show($selected, $attr);
}
}
return $args;
}
function on_special_folders_update($args)
{
$rc = rcmail::get_instance();
if (($args['section'] == 'folders') &&
(strcasecmp($rc->user->data['username'], $_SESSION['username']) !== 0))
{
$sql = 'SELECT id FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE iid = ? AND user_id = ?';
$q = $rc->db->query($sql, $_SESSION['iid' . self::MY_POSTFIX], $rc->user->ID);
$r = $rc->db->fetch_assoc($q);
if ($r)
{
$sql = 'UPDATE ' .
$rc->db->table_name(self::TABLE) .
' SET drafts_mbox = ?, sent_mbox = ?, junk_mbox = ?, trash_mbox = ?' .
' WHERE id = ?';
$rc->db->query(
$sql,
$args['prefs']['drafts_mbox'],
$args['prefs']['sent_mbox'],
$args['prefs']['junk_mbox'],
$args['prefs']['trash_mbox'],
$r['id']
);
//abuse $plugin['abort'] to prevent RC main from saving prefs
$args['abort'] = true;
$args['result'] = true;
foreach (rcube_storage::$folder_types as $type)
{
if ($args['prefs'][$type . '_mbox']) {
$otherKey = $type . '_mbox' . self::MY_POSTFIX;
$_SESSION[$otherKey] = $args['prefs'][$type . '_mbox'];
}
}
return $args;
}
$args['abort'] = true;
$args['result'] = false;
return $args;
}
foreach (rcube_storage::$folder_types as $type)
{
if ($args['prefs'][$type . '_mbox']) {
$key = $type . '_mbox_default' . self::MY_POSTFIX;
$_SESSION[$key] = $args['prefs'][$type . '_mbox'];
}
}
return $args;
}
private static function check_field_values() private static function check_field_values()
{ {
$retVal = array(); $retVal = array();
$retVal['label'] = self::ntrim(rcube_utils::get_input_value('_ident_switch_form_label', rcube_utils::INPUT_POST)); $retVal['label'] = self::get_field_value('common', 'label');
if (strlen($retVal['label']) > 32) if (strlen($retVal['label']) > 32)
$retVal['err'] = 'label.long'; $retVal['err'] = 'label.long';
else else
{ {
$retVal['host'] = self::ntrim(rcube_utils::get_input_value('_ident_switch_form_host', rcube_utils::INPUT_POST)); $retVal['imap.host'] = self::get_field_value('imap', 'host');
if (strlen($retVal['host']) > 64) if (strlen($retVal['imap.host']) > 64)
$retVal['err'] = 'host.long'; $retVal['err'] = 'host.long';
else else
{ {
$retVal['port'] = self::ntrim(rcube_utils::get_input_value('_ident_switch_form_port', rcube_utils::INPUT_POST)); $retVal['imap.port'] = self::get_field_value('imap', 'port');
if ($retVal['port'] && !ctype_digit($retVal['port'])) if ($retVal['imap.port'] && !ctype_digit($retVal['imap.port']))
$retVal['err'] = 'port.num'; $retVal['err'] = 'port.num';
else else
{ {
if ($retVal['port'] && ($retVal['port'] <= 0 || $retVal['port'] > 65535)) if ($retVal['imap.port'] && ($retVal['imap.port'] <= 0 || $retVal['imap.port'] > 65535))
$retVal['err'] = 'port.range'; $retVal['err'] = 'port.range';
else else
{ {
$retVal['user'] = self::ntrim(rcube_utils::get_input_value('_ident_switch_form_username', rcube_utils::INPUT_POST)); $retVal['imap.delimiter'] = self::get_field_value('imap', 'delimiter');
if (strlen($retVal['user']) > 64) if (strlen($retVal['imap.delimiter']) > 1)
$retVal['err'] = 'delim.long';
else
{
$retVal['imap.user'] = self::get_field_value('imap', 'username');
if (strlen($retVal['imap.user']) > 64)
$retVal['err'] = 'user.long'; $retVal['err'] = 'user.long';
else else
{ {
$retVal['delim'] = self::ntrim(rcube_utils::get_input_value('_ident_switch_form_delimiter', rcube_utils::INPUT_POST)); $retVal['smtp.host'] = self::get_field_value('smtp', 'host');
if (strlen($retVal['delim']) > 1) if (strlen($retVal['smtp.host']) > 64)
$retVal['err'] = 'delim.long'; $retVal['err'] = 'host.long';
else
{
$retVal['smtp.port'] = self::get_field_value('smtp', 'port');
if ($retVal['smtp.port'] && !ctype_digit($retVal['smtp.port']))
$retVal['err'] = 'port.num';
else
{
if ($retVal['smtp.port'] && ($retVal['smtp.port'] <= 0 || $retVal['smtp.port'] > 65535))
$retVal['err'] = 'port.range';
else
{
$retVal['smtp.auth'] = self::get_field_value('smtp', 'auth');
if (!ctype_digit($retVal['smtp.auth']))
$retVal['err'] = 'auth.num';
}
}
}
}
} }
} }
} }
@@ -361,19 +574,30 @@ class ident_switch extends rcube_plugin
} }
// Get also password // Get also password
$retVal['pass'] = rcube_utils::get_input_value('_ident_switch_form_password', rcube_utils::INPUT_POST); $retVal['imap.pass'] = self::get_field_value('imap', 'password', false, true);
// Parse secure settings // Parse secure settings
$retVal['flags'] = self::DB_ENABLED; $retVal['flags'] = self::DB_ENABLED;
$ssl = rcube_utils::get_input_value('_ident_switch_form_secure', rcube_utils::INPUT_POST);
if (strcasecmp($ssl, 'tls') === 0) $tls = self::get_field_value('imap', 'tls', false);
$retVal['flags'] |= self::DB_SECURE_TLS; if ($tls)
elseif (strcasecmp($ssl, 'ssl') === 0) $retVal['flags'] |= self::DB_SECURE_IMAP_TLS;
$retVal['flags'] |= self::DB_SECURE_SSL;
return $retVal; return $retVal;
} }
private static function get_field_value($section, $field, $trim = true, $html = false)
{
$retVal = rcube_utils::get_input_value(
"_ident_switch_form_{$section}_{$field}",
rcube_utils::INPUT_POST,
$html
);
if (!$trim)
return $retVal;
return self::ntrim($retVal);
}
private static function save_field_values($rc, $data) private static function save_field_values($rc, $data)
{ {
@@ -384,31 +608,34 @@ class ident_switch extends rcube_plugin
{ // Record already exists, will update it { // Record already exists, will update it
$sql = 'UPDATE ' . $sql = 'UPDATE ' .
$rc->db->table_name(self::TABLE) . $rc->db->table_name(self::TABLE) .
' SET flags = ?, label = ?, host = ?, port = ?, username = ?, password = ?, delimiter = ?, user_id = ?, iid = ?' . ' SET flags = ?, label = ?, imap_host = ?, imap_port = ?, imap_delimiter = ?, username = ?, password = ?, smtp_host = ?, smtp_port = ?, smtp_auth = ?, user_id = ?, iid = ?' .
' WHERE id = ?'; ' WHERE id = ?';
} }
else if ($data['flags'] & self::DB_ENABLED) else if ($data['flags'] & self::DB_ENABLED)
{ // No record exists, create new one { // No record exists, create new one
$sql = 'INSERT INTO ' . $sql = 'INSERT INTO ' .
$rc->db->table_name(self::TABLE) . $rc->db->table_name(self::TABLE) .
'(flags, label, host, port, username, password, delimiter, user_id, iid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'; '(flags, label, imap_host, imap_port, imap_delimiter, username, password, smtp_host, smtp_port, smtp_auth, user_id, iid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
} }
if ($sql) if ($sql)
{ {
// Do we need to update pwd? // Do we need to update pwd?
if ($data['pass'] != $r['password']) if ($data['imap.pass'] != $r['password'])
$data['pass'] = $rc->encrypt($data['pass']); $data['imap.pass'] = $rc->encrypt($data['imap.pass']);
$rc->db->query( $rc->db->query(
$sql, $sql,
$data['flags'], $data['flags'],
$data['label'], $data['label'],
$data['host'], $data['imap.host'],
$data['port'], $data['imap.port'],
$data['user'], $data['imap.delimiter'],
$data['pass'], $data['imap.user'],
$data['delim'], $data['imap.pass'],
$data['smtp.host'],
$data['smtp.port'],
$data['smtp.auth'],
$rc->user->ID, $rc->user->ID,
$data['id'], $data['id'],
$r['id'] $r['id']
@@ -427,6 +654,9 @@ class ident_switch extends rcube_plugin
$my_postfix_len = strlen(self::MY_POSTFIX); $my_postfix_len = strlen(self::MY_POSTFIX);
$identId = rcube_utils::get_input_value('_ident-id', rcube_utils::INPUT_POST); $identId = rcube_utils::get_input_value('_ident-id', rcube_utils::INPUT_POST);
$rc->session->remove('folders');
$rc->session->remove('unseen_count');
if (-1 == $identId) if (-1 == $identId)
{ // Switch to main account { // Switch to main account
self::write_log('Switching mailbox back to default.'); self::write_log('Switching mailbox back to default.');
@@ -444,10 +674,17 @@ class ident_switch extends rcube_plugin
$_SESSION['username'] = $rc->user->data['username']; $_SESSION['username'] = $rc->user->data['username'];
$_SESSION['password'] = $_SESSION['password' . self::MY_POSTFIX]; $_SESSION['password'] = $_SESSION['password' . self::MY_POSTFIX];
$_SESSION['iid' . self::MY_POSTFIX] = -1; $_SESSION['iid' . self::MY_POSTFIX] = -1;
foreach (rcube_storage::$folder_types as $type)
{
$otherKey = $type . '_mbox' . self::MY_POSTFIX;
if ($_SESSION[$otherKey])
$rc->session->remove($otherKey);
}
} }
else else
{ {
$sql = 'SELECT host, flags, port, username, password, iid FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE id = ? AND user_id = ?'; $sql = 'SELECT imap_host, flags, imap_port, imap_delimiter, drafts_mbox, sent_mbox, junk_mbox, trash_mbox, username, password, iid FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE id = ? AND user_id = ?';
$q = $rc->db->query($sql, $identId ,$rc->user->ID); $q = $rc->db->query($sql, $identId ,$rc->user->ID);
$r = $rc->db->fetch_assoc($q); $r = $rc->db->fetch_assoc($q);
if (is_array($r)) if (is_array($r))
@@ -461,55 +698,67 @@ class ident_switch extends rcube_plugin
$r['username'] = $rIid['email']; $r['username'] = $rIid['email'];
} }
self::write_log('Switching mailbox to one for identity with ID = ' . $r['iid'] . ' (username = \'' . $r['username'] . '\').'); self::write_log("Switching mailbox to one for identity with ID = {$r['iid']} (username = '{$r['username']}').");
$def_port = 143; // Default port here!
$ssl = null;
if ($r['flags'] & self::DB_SECURE_TLS)
{
$ssl = 'tls';
$def_port = 143; // Default TLS port here!
}
elseif ($r['flags'] & self::DB_SECURE_SSL)
{
$ssl = 'ssl';
$def_port = 993; // Default SSL port here!
}
$port = $r['port'];
if (!$port)
$port = $def_port;
// If we are in default account now
// save everything with STORAGE
if ($_SESSION['username'] == $rc->user->data['username']) if ($_SESSION['username'] == $rc->user->data['username'])
{ { // If we are in default account now - save values
foreach ($_SESSION as $k => $v) foreach ($_SESSION as $k => $v)
{ {
if (strncasecmp($k, 'storage', 7) === 0 && substr_compare($k, self::MY_POSTFIX, -$my_postfix_len, $my_postfix_len) !== 0) if (strncasecmp($k, 'storage', 7) === 0 && substr_compare($k, self::MY_POSTFIX, -$my_postfix_len, $my_postfix_len) !== 0)
{ {
if (!$_SESSION[$k . self::MY_POSTFIX]) if (!$_SESSION[$k . self::MY_POSTFIX])
$_SESSION[$k . self::MY_POSTFIX] = $_SESSION[$k]; $_SESSION[$k . self::MY_POSTFIX] = $_SESSION[$k];
$rc->session->remove($k); $rc->session->remove($k);
} }
} }
}
if (!$_SESSION['password' . self::MY_POSTFIX])
$_SESSION['password' . self::MY_POSTFIX] = $_SESSION['password'];
$_SESSION['storage_host'] = $r['host'] ? $r['host'] : 'localhost'; // Default host here! $moreToSave = array('password', 'imap_delimiter');
foreach ($moreToSave as $k)
{
if (!$_SESSION[$k . self::MY_POSTFIX])
$_SESSION[$k . self::MY_POSTFIX] = $_SESSION[$k];
$rc->session->remove($k);
}
}
$def_port = 143; // Default IMAP port here!
$ssl = null;
if ($r['flags'] & self::DB_SECURE_IMAP_TLS)
{
$ssl = 'tls';
$def_port = 143; // Default IMAP TLS port here!
}
$port = $r['imap_port'] ? $r['imap_port'] : $def_port;
$host = $r['imap_host'] ? $r['imap_host'] : 'localhost'; // Default IMAP host here!
$hostProtocol = "{$ssl}://";
if ($ssl && strncasecmp($host, $hostProtocol, strlen($hostProtocol)) !== 0)
$host = $hostProtocol . $host;
$delimiter = $r['imap_delimiter'] ? $r['imap_delimiter'] : '.'; // Default delimiter here
$_SESSION['storage_host'] = $host;
$_SESSION['storage_ssl'] = $ssl; $_SESSION['storage_ssl'] = $ssl;
$_SESSION['storage_port'] = $port; $_SESSION['storage_port'] = $port;
$_SESSION['imap_delimiter'] = $delimiter;
$_SESSION['username'] = $r['username']; $_SESSION['username'] = $r['username'];
$_SESSION['password'] = $r['password']; $_SESSION['password'] = $r['password'];
$_SESSION['iid' . self::MY_POSTFIX] = $r['iid']; $_SESSION['iid' . self::MY_POSTFIX] = $r['iid'];
$rc->session->remove('folders'); foreach (rcube_storage::$folder_types as $type)
{
if ($r[$type . '_mbox']) {
$otherKey = $type . '_mbox' . self::MY_POSTFIX;
$_SESSION[$otherKey] = $r[$type . '_mbox'];
}
}
} }
else else
{ {
// TODO: Show message in browser // TODO: Show message in browser
self::write_log('Requested remote mailbox with ID = ' . $identId . ' not found.'); self::write_log("Requested remote mailbox with ID = {$identId} not found.");
return; return;
} }
} }
@@ -555,21 +804,19 @@ class ident_switch extends rcube_plugin
$cfg = $this->get_preconfig($email); $cfg = $this->get_preconfig($email);
if (is_array($cfg)) if (is_array($cfg))
{ {
self::write_log('Applying predefined configuration for \'' . $email . '\'.'); self::write_log("Applying predefined configuration for '{$email}'.");
if ($cfg['host']) if ($cfg['host'])
{ // Parse and set host and related { // Parse and set host and related
$urlArr = parse_url($cfg['host']); $urlArr = parse_url($cfg['host']);
$record['ident_switch.form.host'] = $urlArr['host'] ? rcube::Q($urlArr['host'], 'url') : ''; $record['ident_switch.form.imap.host'] = $record['ident_switch.form.smtp.host'] = $urlArr['host'] ? rcube::Q($urlArr['host'], 'url') : '';
$record['ident_switch.form.port'] = $urlArr['port'] ? intval($urlArr['port']) : ''; $record['ident_switch.form.imap.port'] = $record['ident_switch.form.smtp.port'] = $urlArr['port'] ? intval($urlArr['port']) : '';
if (strcasecmp('tls', $urlArr['scheme']) === 0) if (strcasecmp('tls', $urlArr['scheme']) === 0)
$record['ident_switch.form.secure'] = 'tls'; $record['ident_switch.form.imap.tls'] = true;
elseif (strcasecmp('ssl', $urlArr['scheme']) === 0)
$record['ident_switch.form.secure'] = 'ssl';
else else
$record['ident_switch.form.secure'] = ''; $record['ident_switch.form.imap.rls'] = false;
} }
$loginSet = false; $loginSet = false;
@@ -578,11 +825,11 @@ class ident_switch extends rcube_plugin
switch (strtoupper($cfg['user'])) switch (strtoupper($cfg['user']))
{ {
case 'EMAIL': case 'EMAIL':
$record['ident_switch.form.username'] = $email; $record['ident_switch.form.imap.username'] = $email;
$loginSet = true; $loginSet = true;
break; break;
case 'MBOX': case 'MBOX':
$record['ident_switch.form.username'] = strstr($email, '@', true); $record['ident_switch.form.imap.username'] = strstr($email, '@', true);
$loginSet = true; $loginSet = true;
break; break;
} }
@@ -590,13 +837,15 @@ class ident_switch extends rcube_plugin
if ($cfg['readonly']) if ($cfg['readonly'])
{ {
$record['ident_switch.form.readonly'] = 1; $record['ident_switch.form.common.readonly'] = 1;
if ($loginSet) if ($loginSet)
$record['ident_switch.form.readonly'] = 2; $record['ident_switch.form.common.readonly'] = 2;
} }
return $cfg['readonly']; return $cfg['readonly'];
} }
return false;
} }
private static function ntrim($str) private static function ntrim($str)

View File

@@ -4,47 +4,64 @@
*/ */
$labels = array(); $labels = array();
// IMAP // Plugin ident_switch
$labels['form.caption'] = 'IMAP'; $labels['form.common.caption'] = 'Plugin ident_switch';
// Enabled // Enabled
$labels['form.enabled'] = 'Aktiviert'; $labels['form.common.enabled'] = 'Aktiviert';
// Label // Label
$labels['form.label'] = 'Bezeichnung'; $labels['form.common.label'] = 'Bezeichnung';
// Value in \'Label\' field is too long (32 chars max).
$labels['err.label.long'] = 'Der Wert in Feld \'Bezeichnung\' ist zu lang (max. 32 Zeichen).';
// IMAP
$labels['form.imap.caption'] = 'IMAP';
// Server host name // Server host name
$labels['form.host']='Servername'; $labels['form.imap.host'] = 'Servername';
// Secure connection (SSL/TLS) // Secure connection (TLS)
$labels['form.secure']='Verbindungssicherheit'; $labels['form.imap.tls'] = 'Sichere Verbindung (TLS)';
// Port // Port
$labels['form.port']='Port'; $labels['form.imap.port'] = 'Port';
// Username // Username
$labels['form.username'] = 'Benutzername'; $labels['form.imap.username'] = 'Benutzername';
// Password // Password
$labels['form.password'] = 'Passwort'; $labels['form.imap.password'] = 'Passwort';
// Folder hierarchy delimiter // Value in \'Username\' field is too long (64 chars max).
$labels['form.delimiter'] = 'Hierachietrennzeichen für Verzeichnisse'; $labels['err.user.long'] = 'Der Wert in Feld \'Benutzername\' ist zu lang (max. 64 Zeichen).';
// Value in \'Label\' field of IMAP section is too long (32 chars max).
$labels['err.label.long'] = 'Der Wert in Feld \'Bezeichnung\' im Abschnitt IMAP ist zu lang (max. 32 Zeichen).';
// Value in \'Server host name\' field of IMAP section is too long (64 chars max). // SMTP
$labels['err.host.long'] = 'Der Wert in Feld \'Servername\' im Abschnitt IMAP ist zu lang (max. 64 Zeichen).'; $labels['form.smtp.caption'] = 'SMTP';
// Value in \'Username\' field of IMAP section is too long (64 chars max). // Server host name
$labels['err.user.long'] = 'Der Wert in Feld \'Benutzername\' im Abschnitt IMAP ist zu lang (max. 64 Zeichen).'; $labels['form.smtp.host'] = 'Servername';
// Value in \'Folder hierarchy delimiter\' field of IMAP section is too long (1 char max). // Secure connection (TLS)
$labels['err.delim.long'] = 'Der Wert in Feld \'Hierachietrennzeichen für Verzeichnisse\' im Abschnitt IMAP ist zu lang (max. 1 Zeichen).'; $labels['form.smtp.tls'] = 'Sichere Verbindung (TLS)';
// Value in \'Port\' field of IMAP section must be a number. // Port
$labels['err.port.num'] = 'Der Wert in Feld \'Port\' im Abschnitt IMAP muss eine Zahl sein.'; $labels['form.smtp.port'] = 'Port';
// Value in \'Port\' field of IMAP section must be between 1 and 65535. // Authorization required
$labels['err.port.range'] = 'Der Wert in Feld \'Port\' im Abschnitt IMAP muss 1 und 65535 liegen.'; $labels['form.smtp.auth'] = 'Genehmigung benötigt';
// Errors
// Value in \'Server host name\' field is too long (64 chars max).
$labels['err.host.long'] = 'Der Wert in Feld \'Servername\' ist zu lang (max. 64 Zeichen).';
// Value in \'Port\' field must be a number.
$labels['err.port.num'] = 'Der Wert in Feld \'Port\' muss eine Zahl sein.';
// Value in \'Port\' field must be between 1 and 65535.
$labels['err.port.range'] = 'Der Wert in Feld \'Port\' muss zwischen 1 und 65535 liegen.';

View File

@@ -4,47 +4,73 @@
*/ */
$labels = array(); $labels = array();
// IMAP // Plugin ident_switch
$labels['form.caption'] = 'IMAP'; $labels['form.common.caption'] = 'Plugin ident_switch';
// Enabled // Enabled
$labels['form.enabled'] = 'Enabled'; $labels['form.common.enabled'] = 'Enabled';
// Label // Label
$labels['form.label'] = 'Label'; $labels['form.common.label'] = 'Label';
// Value in \'Label\' field is too long (32 chars max).
$labels['err.label.long'] = 'Value in \'Label\' field is too long (32 chars max).';
// IMAP
$labels['form.imap.caption'] = 'IMAP';
// Server host name // Server host name
$labels['form.host']='Server host name'; $labels['form.imap.host'] = 'Server host name';
// Secure connection (SSL/TLS) // Secure connection (TLS)
$labels['form.secure']='Connection security'; $labels['form.imap.tls'] = 'Secure connection (TLS)';
// Port // Port
$labels['form.port']='Port'; $labels['form.imap.port'] = 'Port';
// Username
$labels['form.username'] = 'Username';
// Password
$labels['form.password'] = 'Password';
// Folder hierarchy delimiter // Folder hierarchy delimiter
$labels['form.delimiter'] = 'Folder hierarchy delimiter'; $labels['form.imap.delimiter'] = 'Folder hierarchy delimiter';
// Value in \'Label\' field of IMAP section is too long (32 chars max). // Username
$labels['err.label.long'] = 'Value in \'Label\' field of IMAP section is too long (32 chars max).'; $labels['form.imap.username'] = 'Username';
// Value in \'Server host name\' field of IMAP section is too long (64 chars max). // Password
$labels['err.host.long'] = 'Value in \'Server host name\' field of IMAP section is too long (64 chars max).'; $labels['form.imap.password'] = 'Password';
// Value in \'Username\' field of IMAP section is too long (64 chars max). // Value in \'Username\' field is too long (64 chars max).
$labels['err.user.long'] = 'Value in \'Username\' field of IMAP section is too long (64 chars max).'; $labels['err.user.long'] = 'Value in \'Username\' field is too long (64 chars max).';
// Value in \'Folder hierarchy delimiter\' field of IMAP section is too long (1 char max).
$labels['err.delim.long'] = 'Value in \'Folder hierarchy delimiter\' field of IMAP section is too long (1 char max).';
// Value in \'Port\' field of IMAP section must be a number. // SMTP
$labels['err.port.num'] = 'Value in \'Port\' field of IMAP section must be a number.'; $labels['form.smtp.caption'] = 'SMTP';
// Value in \'Port\' field of IMAP section must be between 1 and 65535. // Server host name
$labels['err.port.range'] = 'Value in \'Port\' field of IMAP section must be between 1 and 65535.'; $labels['form.smtp.host'] = 'Server host name';
// Secure connection (TLS)
$labels['form.smtp.tls'] = 'Secure connection (TLS)';
// Port
$labels['form.smtp.port'] = 'Port';
// Authorization
$labels['form.smtp.auth'] = 'Authorization';
// As IMAP
$labels['form.smtp.auth.imap'] = 'As IMAP';
// None
$labels['form.smtp.auth.none'] = 'None';
// Errors
// Value in \'Server host name\' field is too long (64 chars max).
$labels['err.host.long'] = 'Value in \'Server host name\' field is too long (64 chars max).';
// Value in \'Port\' field must be a number.
$labels['err.port.num'] = 'Value in \'Port\' field must be a number.';
// Value in \'Port\' field must be between 1 and 65535.
$labels['err.port.range'] = 'Value in \'Port\' field must be between 1 and 65535.';

View File

@@ -4,47 +4,64 @@
*/ */
$labels = array(); $labels = array();
// IMAP // Plugin ident_switch
$labels['form.caption'] = 'IMAP'; $labels['form.common.caption'] = 'Plugin ident_switch';
// Enabled // Enabled
$labels['form.enabled'] = 'Activé'; $labels['form.common.enabled'] = 'Activer';
// Label // Label
$labels['form.label'] = 'Nom d\'affichage'; $labels['form.common.label'] = 'Nom à afficher';
// Value in \'Label\' field is too long (32 chars max).
$labels['err.label.long'] = 'La valeur du champ \'Nom à afficher\' est trop longue (32 caractères max).';
// IMAP
$labels['form.imap.caption'] = 'IMAP';
// Server host name // Server host name
$labels['form.host']='Nom d\'hôte du serveur'; $labels['form.imap.host'] = 'Serveur';
// Secure connection (SSL/TLS) // Secure connection (TLS)
$labels['form.secure']='Sécurité de la connexion'; $labels['form.imap.tls'] = 'Connexion sécurisée (TLS)';
// Port // Port
$labels['form.port']='Port'; $labels['form.imap.port'] = 'Port';
// Username // Username
$labels['form.username'] = 'Nom d\'utilisateur'; $labels['form.imap.username'] = 'Nom d\'utilisateur';
// Password // Password
$labels['form.password'] = 'Mot de passe'; $labels['form.imap.password'] = 'Mot de passe';
// Folder hierarchy delimiter
$labels['form.delimiter'] = 'Délimiteur de la hiérarchie des dossiers';
// Value in \'Label\' field of IMAP section is too long (32 chars max).
$labels['err.label.long'] = 'La valeur du champ \'Nom d\'affichage\' de la section IMAP est trop longue (32 car. max).';
// Value in \'Server host name\' field of IMAP section is too long (64 chars max).
$labels['err.host.long'] = 'La valeur du champ \'Nom d\'hôte du serveur\' de la section IMAP est trop longue (64 car. max).';
// Value in \'Username\' field of IMAP section is too long (64 chars max). // 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 car. max).'; $labels['err.user.long'] = 'La valeur du champ \'Nom d\'utilisateur\' de la section IMAP est trop longue (64 caractères max).';
// Value in \'Folder hierarchy delimiter\' field of IMAP section is too long (1 char max).
$labels['err.delim.long'] = 'La valeur du champ \'Délimiteur de la hiérarchie des dossiers\' de la section IMAP est trop longue (1 car. max).';
// Value in \'Port\' field of IMAP section must be a number. // SMTP
$labels['err.port.num'] = 'La valeur du champ \'Port\' de la section IMAP doit être un nombre.'; $labels['form.smtp.caption'] = 'SMTP';
// Value in \'Port\' field of IMAP section must be between 1 and 65535. // Server host name
$labels['err.port.range'] = 'La valeur du champ \'Port\' de la section IMAP doit être comprise entre 1 et 65535.'; $labels['form.smtp.host'] = 'Serveur';
// Secure connection (TLS)
$labels['form.smtp.tls'] = 'Connexion sécurisée (TLS)';
// Port
$labels['form.smtp.port'] = 'Port';
// Authorization required
$labels['form.smtp.auth'] = 'Autorisation requise';
// Errors
// Value in \'Server host name\' field is too long (64 chars max).
$labels['err.host.long'] = 'La valeur du champ \'Serveur\' est trop longue (64 caractères max).';
// Value in \'Port\' field must be a number.
$labels['err.port.num'] = 'La valeur du champ \'Port\' doit être un nombre.';
// Value in \'Port\' field must be between 1 and 65535.
$labels['err.port.range'] = 'La valeur du champ \'Port\' doit être comprise entre 1 et 65535.';

View File

@@ -4,47 +4,73 @@
*/ */
$labels = array(); $labels = array();
// IMAP // Plugin ident_switch
$labels['form.caption'] = 'IMAP'; $labels['form.common.caption'] = 'Плагин ident_switch';
// Enabled // Enabled
$labels['form.enabled'] = 'Включено'; $labels['form.common.enabled'] = 'Включено';
// Label // Label
$labels['form.label'] = 'Название'; $labels['form.common.label'] = 'Название';
// Value in \'Label\' field is too long (32 chars max).
$labels['err.label.long'] = '\'Название\' должно быть не длинее 32 символов.';
// IMAP
$labels['form.imap.caption'] = 'IMAP';
// Server host name // Server host name
$labels['form.host'] = 'Адрес сервера'; $labels['form.imap.host'] = 'Адрес сервера';
// Secure connection (SSL/TLS) // Secure connection (TLS)
$labels['form.secure'] = 'Защита подключения'; $labels['form.imap.tls'] = 'Безопасное подключение (TLS)';
// Port // Port
$labels['form.port'] = 'Порт'; $labels['form.imap.port'] = 'Порт';
// Username
$labels['form.username'] = 'Имя пользователя';
// Password
$labels['form.password'] = 'Пароль';
// Folder hierarchy delimiter // Folder hierarchy delimiter
$labels['form.delimiter'] = 'Разделитель в иерархии папок'; $labels['form.imap.delimiter'] = 'Разделитель в иерархии папок';
// Value in \'Label\' field of IMAP section is too long (32 chars max). // Username
$labels['err.label.long'] = '\'Название\' в разделе IMAP должно быть не длинее 32 символов.'; $labels['form.imap.username'] = 'Имя пользователя';
// Value in \'Server host name\' field of IMAP section is too long (64 chars max). // Password
$labels['err.host.long'] = '\'Адрес сервера\' в разделе IMAP должен быть не длинее 64 символов.'; $labels['form.imap.password'] = 'Пароль';
// Value in \'Username\' field of IMAP section is too long (64 chars max). // Value in \'Username\' field is too long (64 chars max).
$labels['err.user.long'] = '\'Имя пользователя\' в секции IMAP должно быть не длинее 64 символов.'; $labels['err.user.long'] = '\'Имя пользователя\' должно быть не длинее 64 символов.';
// Value in \'Folder hierarchy delimiter\' field of IMAP section is too long (1 char max).
$labels['err.delim.long'] = '\'Разделитель в иерархии папок\' в секции IMAP должен быть не длинее 1 символа.';
// Value in \'Port\' field of IMAP section must be a number. // SMTP
$labels['err.port.num'] = '\'Порт\' в секции IMAP должен быть числом.'; $labels['form.smtp.caption'] = 'SMTP';
// Value in \'Port\' field of IMAP section must be between 1 and 65535. // Server host name
$labels['err.port.range'] = '\'Порт\' в секции IMAP должен быть в диапазоне от 1 до 65535.'; $labels['form.smtp.host'] = 'Адрес сервера';
// Secure connection (TLS)
$labels['form.smtp.tls'] = 'Безопасное подключение (TLS)';
// Port
$labels['form.smtp.port'] = 'Порт';
// Authorization
$labels['form.smtp.auth'] = 'Авторизация';
// As IMAP
$labels['form.smtp.auth.imap'] = 'Как IMAP';
// None
$labels['form.smtp.auth.none'] = 'Нет';
// Errors
// Value in \'Server host name\' field is too long (64 chars max).
$labels['err.host.long'] = '\'Адрес сервера\' должен быть не длинее 64 символов.';
// Value in \'Port\' field must be a number.
$labels['err.port.num'] = '\'Порт\' должен быть числом.';
// Value in \'Port\' field must be between 1 and 65535.
$labels['err.port.range'] = '\'Порт\' должен быть в диапазоне от 1 до 65535.';

76
localization/sl_SI.inc Normal file
View File

@@ -0,0 +1,76 @@
<?php
/*
* Localization file for ident_switch plugin
*/
$labels = array();
// Plugin ident_switch
$labels['form.common.caption'] = 'Razširitev ident_switch';
// Enabled
$labels['form.common.enabled'] = 'Omogočeno';
// Label
$labels['form.common.label'] = 'Oznaka';
// Value in \'Label\' field is too long (32 chars max).
$labels['err.label.long'] = 'Število znakov v polju \'Oznaka\' presega maksimalno število znakov (max 32 znakov).';
// IMAP
$labels['form.imap.caption'] = 'IMAP';
// Server host name
$labels['form.imap.host'] = 'Ime oz. naslov IMAP strežnika';
// Secure connection (TLS)
$labels['form.imap.tls'] = 'Varna povezava (TLS)';
// Port
$labels['form.imap.port'] = 'Vrata';
// Folder hierarchy delimiter
$labels['form.imap.delimiter'] = 'Ločilo hierarhije map';
// Username
$labels['form.imap.username'] = 'Uporabniško ime';
// Password
$labels['form.imap.password'] = 'Geslo';
// Value in \'Username\' field is too long (64 chars max).
$labels['err.user.long'] = 'Število znakov v polju \'Uporabniško ime\' presega maksimalno število znakov (max 64 znakov).';
// SMTP
$labels['form.smtp.caption'] = 'SMTP';
// Server host name
$labels['form.smtp.host'] = 'Ime oz. naslov SMTP strežnika';
// Secure connection (TLS)
$labels['form.smtp.tls'] = 'Varna povezava (TLS)';
// Port
$labels['form.smtp.port'] = 'Vrata';
// Authorization
$labels['form.smtp.auth'] = 'Avtorizacija';
// As IMAP
$labels['form.smtp.auth.imap'] = 'Tako kot IMAP';
// None
$labels['form.smtp.auth.none'] = 'Brez';
// Errors
// Value in \'Server host name\' field is too long (64 chars max).
$labels['err.host.long'] = 'Število znakov v polju \'Ime oz. naslov IMAP strežnika\' presega maksimalno število znakov (max 64 znakov).';
// Value in \'Port\' field must be a number.
$labels['err.port.num'] = 'Vrednost \'Vrata\' mora biti številka.';
// Value in \'Port\' field must be between 1 and 65535.
$labels['err.port.range'] = 'Vrednost v polju \'Vrata\' mora biti med 1 in 65535.';