From b825f86108a91957f6467176e418cfc257874658 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Sun, 4 Aug 2013 10:41:02 +0200 Subject: Move identity selection based on non-standard headers into (new) identity_select plugin (#1488553) --- plugins/identity_select/identity_select.php | 68 ++++++++++++++++++++++++ plugins/identity_select/package.xml | 53 ++++++++++++++++++ plugins/identity_select/tests/IdentitySelect.php | 22 ++++++++ 3 files changed, 143 insertions(+) create mode 100644 plugins/identity_select/identity_select.php create mode 100644 plugins/identity_select/package.xml create mode 100644 plugins/identity_select/tests/IdentitySelect.php (limited to 'plugins/identity_select') diff --git a/plugins/identity_select/identity_select.php b/plugins/identity_select/identity_select.php new file mode 100644 index 000000000..203776725 --- /dev/null +++ b/plugins/identity_select/identity_select.php @@ -0,0 +1,68 @@ + + * @license GNU GPLv3+ + */ +class identity_select extends rcube_plugin +{ + public $task = 'mail'; + + + function init() + { + $this->add_hook('identity_select', array($this, 'select')); + $this->add_hook('storage_init', array($this, 'storage_init')); + } + + /** + * Adds additional headers to supported headers list + */ + function storage_init($p) + { + $rcmail = rcmail::get_instance(); + + if ($add_headers = (array)$rcmail->config->get('identity_select_headers', array())) { + $p['fetch_headers'] = trim($p['fetch_headers'] . ' ' . strtoupper(join(' ', $add_headers))); + } + + return $p; + } + + /** + * Identity selection + */ + function select($p) + { + if ($p['selected'] !== null) { + return $p; + } + + $rcmail = rcmail::get_instance(); + + foreach ((array)$rcmail->config->get('identity_select_headers', array()) as $header) { + if ($header = $p['message']->headers->get($header, false)) { + foreach ($p['identities'] as $idx => $ident) { + if (in_array($ident['email_ascii'], (array)$header)) { + $p['selected'] = $idx; + break 2; + } + } + } + } + + return $p; + } +} diff --git a/plugins/identity_select/package.xml b/plugins/identity_select/package.xml new file mode 100644 index 000000000..425c28830 --- /dev/null +++ b/plugins/identity_select/package.xml @@ -0,0 +1,53 @@ + + + identity_select + pear.roundcube.net + Extended identity selection + + On reply to a message user identity selection is based on + content of standard headers like From, To, Cc and Return-Path. + Here you can add header(s) set by your SMTP server (e.g. + Delivered-To, Envelope-To, X-Envelope-To, X-RCPT-TO) to make + identity selection more accurate. + + + Aleksander Machniak + alec + alec@alec.pl + yes + + 2013-08-04 + + 1.0 + 1.0 + + + stable + stable + + GNU GPLv3+ + - + + + + + + + + + + + + + 5.2.1 + + + 1.7.0 + + + + + diff --git a/plugins/identity_select/tests/IdentitySelect.php b/plugins/identity_select/tests/IdentitySelect.php new file mode 100644 index 000000000..3d7269711 --- /dev/null +++ b/plugins/identity_select/tests/IdentitySelect.php @@ -0,0 +1,22 @@ +api); + + $this->assertInstanceOf('identity_select', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} -- cgit v1.2.3