35 Commits
4.0 ... 4.3.3

Author SHA1 Message Date
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
23 changed files with 666 additions and 234 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

2
.gitignore vendored
View File

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

View File

@@ -32,6 +32,6 @@ This plugin allows users to switch between different accounts (including remote)
* Versions 1.X (not supported any more) - for Roundcube v1.1 * Versions 1.X (not supported any more) - for Roundcube v1.1
* Versions 2.X (not supported any more) - for Roundcube v1.2 * Versions 2.X (not supported any more) - for Roundcube v1.2
* Versions 3.X (not supported any more) - for Roundcube v1.3 * Versions 3.X (not supported any more) - for Roundcube v1.3
* Versions 4.x - for Roundcube v1.3 and upcoming 1.4. * 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. 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,40 +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), varchar(64),
password `password`
varchar(64), varchar(64),
imap_host `imap_host`
varchar(64), varchar(64),
imap_port `imap_port`
int int
CHECK(port > 0 AND port <= 65535), CHECK(`imap_port` > 0 AND `imap_port` <= 65535),
label `imap_delimiter`
char(1),
`label`
varchar(32), varchar(32),
flags `flags`
int int
NOT NULL NOT NULL
DEFAULT 0, DEFAULT 0,
smtp_host `smtp_host`
varchar(64), varchar(64),
smtp_port `smtp_port`
int int
CHECK(port > 0 AND port <= 65535), CHECK(`smtp_port` > 0 AND `smtp_port` <= 65535),
UNIQUE KEY user_id_label (user_id, label), `smtp_auth`
CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, smallint
CONSTRAINT fk_identity_id FOREIGN KEY (iid) REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE, NOT NULL
PRIMARY KEY(id), DEFAULT 1,
INDEX IX_ident_switch_user_id (user_id), `drafts_mbox`
INDEX IX_ident_switch_iid (iid) 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);

View File

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

View File

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

@@ -1,41 +1,55 @@
CREATE TABLE ident_switch CREATE TABLE ident_switch
( (
id id
serial serial
PRIMARY KEY, PRIMARY KEY,
user_id user_id
integer integer
NOT NULL NOT NULL
REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE,
iid iid
integer integer
NOT NULL NOT NULL
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),
password password
varchar(64), varchar(64),
imap_host imap_host
varchar(64), varchar(64),
imap_port imap_port
integer integer
CHECK(port > 0 AND port <= 65535), CHECK(imap_port > 0 AND imap_port <= 65535),
label imap_delimiter
varchar(32), char(1),
flags label
integer varchar(32),
NOT NULL flags
DEFAULT(0), integer
smtp_host NOT NULL
varchar(64), DEFAULT(0),
smtp_port smtp_host
integer varchar(64),
CHECK(port > 0 AND port <= 65535), smtp_port
UNIQUE (user_id, label) integer
); CHECK(smtp_port > 0 AND smtp_port <= 65535),
smtp_auth
CREATE INDEX smallint
IX_ident_switch_user_id NOT NULL
ON DEFAULT(1),
ident_switch(user_id); 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);

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);

View File

@@ -1,7 +1,7 @@
CREATE TABLE ident_switch CREATE TABLE ident_switch
( (
id id
serial integer
PRIMARY KEY, PRIMARY KEY,
user_id user_id
integer integer
@@ -21,17 +21,31 @@ CREATE TABLE ident_switch
imap_port imap_port
integer integer
CHECK(imap_port > 0 AND imap_port <= 65535), CHECK(imap_port > 0 AND imap_port <= 65535),
imap_delimiter
char(1),
label label
varchar(32), varchar(32),
flags flags
integer integer
NOT NULL NOT NULL
DEFAULT(0), DEFAULT(0),
smtp_host smtp_host
varchar(64), varchar(64),
smtp_port smtp_port
integer integer
CHECK(smtp_port > 0 AND smtp_port <= 65535), 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)
); );
CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id); CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id);

View File

@@ -1,25 +1,76 @@
ALTER TABLE PRAGMA foreign_keys=off;
ident_switch BEGIN TRANSACTION;
RENAME COLUMN
host
TO
imap_host;
ALTER TABLE ALTER TABLE ident_switch RENAME TO ident_switch_old;
ident_switch
RENAME COLUMN
port
TO
imap_port;
ALTER TABLE CREATE TABLE ident_switch
ident_switch (
ADD COLUMN id
smtp_host integer
varchar(64); PRIMARY KEY,
user_id
ALTER TABLE integer
ident_switch NOT NULL
ADD COLUMN 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 smtp_port
int; 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

@@ -5,6 +5,7 @@
"homepage": "https://bitbucket.org/BoresExpress/ident_switch", "homepage": "https://bitbucket.org/BoresExpress/ident_switch",
"keywords": ["identity", "imap", "mail", "switch"], "keywords": ["identity", "imap", "mail", "switch"],
"license": "GPL-3.0+", "license": "GPL-3.0+",
"version": "4.3.2",
"authors": [ "authors": [
{ {
"name": "Boris Gulay", "name": "Boris Gulay",

View File

@@ -20,6 +20,10 @@ class ident_switch extends rcube_plugin
//const DB_SECURE_SSL = 2; // Not supported any more //const DB_SECURE_SSL = 2; // Not supported any more
const DB_SECURE_IMAP_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()
{ {
$this->add_hook('startup', array($this, 'on_startup')); $this->add_hook('startup', array($this, 'on_startup'));
@@ -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;
} }
@@ -84,80 +106,64 @@ class ident_switch extends rcube_plugin
$iid = -1; $iid = -1;
elseif (ctype_digit($iid_s)) elseif (ctype_digit($iid_s))
$iid = intval($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 == $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
$opts = array('value' => -1);
if ($iid <= 0)
$opts['selected'] = 'selected';
$sOpt = html::tag(
'option',
$opts,
$_SESSION['global_alias'] ? $_SESSION['global_alias'] : $rc->user->data['username']
) . $sOpt;
$this->include_script('ident_switch-switch.js'); $this->include_script('ident_switch-switch.js');
$sw = html::tag(
'select', $select = new html_select(array(
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);', ));
), $select->add($accNames, $accValues);
$sOpt $rc->output->add_footer($select->show(array($accSelected)));
);
$rc->output->add_footer($sw);
} }
} }
function on_smtp_connect($args) function on_smtp_connect($args)
{ {
$iid = $_SESSION['iid' . self::MY_POSTFIX]; $iid = $_SESSION['iid' . self::MY_POSTFIX];
if (!is_integer($iid) || $iid == -1) if (!is_numeric($iid) || $iid == -1)
return $args; return $args;
$rc = rcmail::get_instance(); $rc = rcmail::get_instance();
$sql = 'SELECT smtp_host, flags, smtp_port, username, password FROM ' . $rc->db->table_name(self::TABLE) . ' WHERE iid = ? AND user_id = ?'; $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); $q = $rc->db->query($sql, $iid ,$rc->user->ID);
$r = $rc->db->fetch_assoc($q); $r = $rc->db->fetch_assoc($q);
if (is_array($r)) if (is_array($r))
@@ -172,7 +178,7 @@ class ident_switch extends rcube_plugin
} }
$args['smtp_user'] = $r['username']; $args['smtp_user'] = $r['username'];
$args['smtp_pass'] = $rc->decrypt($r['password']); $args['smtp_pass'] = $r['smtp_auth'] == self::SMTP_AUTH_IMAP ? $rc->decrypt($r['password']) : '';
$args['smtp_server'] = $r['smtp_host'] ? $r['smtp_host'] : 'localhost'; // Default SMTP host here $args['smtp_server'] = $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 $args['smtp_port'] = $r['smtp_port'] ? $r['smtp_port'] : 587; // Default SMTP port here
@@ -183,8 +189,6 @@ class ident_switch extends rcube_plugin
else else
$args['smtp_server'] = 'tls://' . $args['smtp_server']; $args['smtp_server'] = 'tls://' . $args['smtp_server'];
} }
self::write_log(print_r($args, true));
} }
return $args; return $args;
@@ -209,15 +213,22 @@ class ident_switch extends rcube_plugin
$prefix . 'tls' => array('type' => 'checkbox'), $prefix . 'tls' => array('type' => 'checkbox'),
$prefix . 'username' => array('type' => 'text', 'size' => 64, 'placeholder' => $record['email']), $prefix . 'username' => array('type' => 'text', 'size' => 64, 'placeholder' => $record['email']),
$prefix . 'password' => array('type' => 'password', 'size' => 64), $prefix . 'password' => array('type' => 'password', 'size' => 64),
$prefix . 'delimiter' => array('type' => 'text', 'size' => 1, 'placeholder' => '.'),
); );
} }
private static function get_smtp_form(&$record) private function get_smtp_form(&$record)
{ {
$prefix = 'ident_switch.form.smtp.'; $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( return array(
$prefix . 'host' => array('type' => 'text', 'size' => 64, 'placeholder' => 'localhost'), $prefix . 'host' => array('type' => 'text', 'size' => 64, 'placeholder' => 'localhost'),
$prefix . 'port' => array('type' => 'text', 'size' => 5, 'placeholder' => 587), $prefix . 'port' => array('type' => 'text', 'size' => 5, 'placeholder' => 587),
$prefix . 'auth' => array('value' => $authType->show(array($record['ident_switch.form.smtp.auth']))),
); );
} }
@@ -248,10 +259,12 @@ class ident_switch extends rcube_plugin
'label' => 'common.label', 'label' => 'common.label',
'imap_host' => 'imap.host', 'imap_host' => 'imap.host',
'imap_port' => 'imap.port', 'imap_port' => 'imap.port',
'imap_delimiter' => 'imap.delimiter',
'username' => 'imap.username', 'username' => 'imap.username',
'password' => 'imap.password', 'password' => 'imap.password',
'smtp_host' => 'smtp.host', 'smtp_host' => 'smtp.host',
'smtp_port' => 'smtp.port' 'smtp_port' => 'smtp.port',
'smtp_auth' => 'smtp.auth',
); );
foreach ($row as $k => $v) foreach ($row as $k => $v)
@@ -283,7 +296,7 @@ class ident_switch extends rcube_plugin
); );
$args['form']['ident_switch.smtp'] = array( $args['form']['ident_switch.smtp'] = array(
'name' => $this->gettext('form.smtp.caption'), 'name' => $this->gettext('form.smtp.caption'),
'content' => ident_switch::get_smtp_form($record) 'content' => $this->get_smtp_form($record)
); );
return $args; return $args;
@@ -355,7 +368,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'];
@@ -373,7 +386,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;
} }
@@ -386,13 +399,106 @@ 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()
{ {
@@ -417,23 +523,35 @@ class ident_switch extends rcube_plugin
$retVal['err'] = 'port.range'; $retVal['err'] = 'port.range';
else else
{ {
$retVal['imap.user'] = self::get_field_value('imap', 'username'); $retVal['imap.delimiter'] = self::get_field_value('imap', 'delimiter');
if (strlen($retVal['imap.user']) > 64) if (strlen($retVal['imap.delimiter']) > 1)
$retVal['err'] = 'user.long'; $retVal['err'] = 'delim.long';
else else
{ {
$retVal['smtp.host'] = self::get_field_value('smtp', 'host'); $retVal['imap.user'] = self::get_field_value('imap', 'username');
if (strlen($retVal['smtp.host']) > 64) if (strlen($retVal['imap.user']) > 64)
$retVal['err'] = 'host.long'; $retVal['err'] = 'user.long';
else else
{ {
$retVal['smtp.port'] = self::get_field_value('smtp', 'port'); $retVal['smtp.host'] = self::get_field_value('smtp', 'host');
if ($retVal['smtp.port'] && !ctype_digit($retVal['smtp.port'])) if (strlen($retVal['smtp.host']) > 64)
$retVal['err'] = 'port.num'; $retVal['err'] = 'host.long';
else else
{ {
if ($retVal['smtp.port'] && ($retVal['smtp.port'] <= 0 || $retVal['smtp.port'] > 65535)) $retVal['smtp.port'] = self::get_field_value('smtp', 'port');
$retVal['err'] = 'port.range'; 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';
}
}
} }
} }
} }
@@ -443,7 +561,7 @@ class ident_switch extends rcube_plugin
} }
// Get also password // Get also password
$retVal['imap.pass'] = self::get_field_value('imap', 'password', false); $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;
@@ -455,11 +573,12 @@ class ident_switch extends rcube_plugin
return $retVal; return $retVal;
} }
private static function get_field_value($section, $field, $trim = true) private static function get_field_value($section, $field, $trim = true, $html = false)
{ {
$retVal = rcube_utils::get_input_value( $retVal = rcube_utils::get_input_value(
'_ident_switch_form_' . $section . '_' . $field, "_ident_switch_form_{$section}_{$field}",
rcube_utils::INPUT_POST rcube_utils::INPUT_POST,
$html
); );
if (!$trim) if (!$trim)
return $retVal; return $retVal;
@@ -476,14 +595,14 @@ 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 = ?, imap_host = ?, imap_port = ?, username = ?, password = ?, smtp_host = ?, smtp_port = ?, 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, imap_host, imap_port, username, password, smtp_host, smtp_port, 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)
@@ -498,10 +617,12 @@ class ident_switch extends rcube_plugin
$data['label'], $data['label'],
$data['imap.host'], $data['imap.host'],
$data['imap.port'], $data['imap.port'],
$data['imap.delimiter'],
$data['imap.user'], $data['imap.user'],
$data['imap.pass'], $data['imap.pass'],
$data['smtp.host'], $data['smtp.host'],
$data['smtp.port'], $data['smtp.port'],
$data['smtp.auth'],
$rc->user->ID, $rc->user->ID,
$data['id'], $data['id'],
$r['id'] $r['id']
@@ -520,6 +641,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.');
@@ -537,10 +661,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 imap_host, flags, imap_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))
@@ -554,7 +685,30 @@ 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']}').");
if ($_SESSION['username'] == $rc->user->data['username'])
{ // If we are in default account now - save values
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 (!$_SESSION[$k . self::MY_POSTFIX])
$_SESSION[$k . self::MY_POSTFIX] = $_SESSION[$k];
$rc->session->remove($k);
}
}
$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! $def_port = 143; // Default IMAP port here!
$ssl = null; $ssl = null;
@@ -565,36 +719,33 @@ class ident_switch extends rcube_plugin
} }
$port = $r['imap_port'] ? $r['imap_port'] : $def_port; $port = $r['imap_port'] ? $r['imap_port'] : $def_port;
// If we are in default account now $host = $r['imap_host'] ? $r['imap_host'] : 'localhost'; // Default IMAP host here!
// save everything with STORAGE $hostProtocol = "{$ssl}://";
if ($_SESSION['username'] == $rc->user->data['username']) if ($ssl && strncasecmp($host, $hostProtocol, strlen($hostProtocol)) !== 0)
{ $host = $hostProtocol . $host;
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 (!$_SESSION[$k . self::MY_POSTFIX])
$_SESSION[$k . self::MY_POSTFIX] = $_SESSION[$k];
$rc->session->remove($k);
}
}
}
if (!$_SESSION['password' . self::MY_POSTFIX])
$_SESSION['password' . self::MY_POSTFIX] = $_SESSION['password'];
$_SESSION['storage_host'] = $r['imap_host'] ? $r['imap_host'] : 'localhost'; // Default IMAP host here! $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;
} }
} }
@@ -640,14 +791,14 @@ 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.imap.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.imap.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.imap.tls'] = true; $record['ident_switch.form.imap.tls'] = true;

View File

@@ -64,4 +64,4 @@ $labels['err.host.long'] = 'Der Wert in Feld \'Servername\' ist zu lang (max. 64
$labels['err.port.num'] = 'Der Wert in Feld \'Port\' muss eine Zahl sein.'; $labels['err.port.num'] = 'Der Wert in Feld \'Port\' muss eine Zahl sein.';
// Value in \'Port\' field must be between 1 and 65535. // Value in \'Port\' field must be between 1 and 65535.
$labels['err.port.range'] = 'Der Wert in Feld \'Port\' muss 1 und 65535 liegen.'; $labels['err.port.range'] = 'Der Wert in Feld \'Port\' muss zwischen 1 und 65535 liegen.';

View File

@@ -29,6 +29,9 @@ $labels['form.imap.tls'] = 'Secure connection (TLS)';
// Port // Port
$labels['form.imap.port'] = 'Port'; $labels['form.imap.port'] = 'Port';
// Folder hierarchy delimiter
$labels['form.imap.delimiter'] = 'Folder hierarchy delimiter';
// Username // Username
$labels['form.imap.username'] = 'Username'; $labels['form.imap.username'] = 'Username';
@@ -51,8 +54,14 @@ $labels['form.smtp.tls'] = 'Secure connection (TLS)';
// Port // Port
$labels['form.smtp.port'] = 'Port'; $labels['form.smtp.port'] = 'Port';
// Authorization required // Authorization
$labels['form.smtp.auth'] = 'Authorization required'; $labels['form.smtp.auth'] = 'Authorization';
// As IMAP
$labels['form.smtp.auth.imap'] = 'As IMAP';
// None
$labels['form.smtp.auth.none'] = 'None';
// Errors // Errors

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

@@ -29,6 +29,9 @@ $labels['form.imap.tls'] = 'Безопасное подключение (TLS)';
// Port // Port
$labels['form.imap.port'] = 'Порт'; $labels['form.imap.port'] = 'Порт';
// Folder hierarchy delimiter
$labels['form.imap.delimiter'] = 'Разделитель в иерархии папок';
// Username // Username
$labels['form.imap.username'] = 'Имя пользователя'; $labels['form.imap.username'] = 'Имя пользователя';
@@ -51,8 +54,14 @@ $labels['form.smtp.tls'] = 'Безопасное подключение (TLS)';
// Port // Port
$labels['form.smtp.port'] = 'Порт'; $labels['form.smtp.port'] = 'Порт';
// Authorization required // Authorization
$labels['form.smtp.auth'] = 'Требуется авторизация'; $labels['form.smtp.auth'] = 'Авторизация';
// As IMAP
$labels['form.smtp.auth.imap'] = 'Как IMAP';
// None
$labels['form.smtp.auth.none'] = 'Нет';
// Errors // Errors