diff options
Diffstat (limited to 'plugins')
-rwxr-xr-x | plugins/attachment_reminder/attachment_reminder.js | 2 | ||||
-rw-r--r-- | plugins/database_attachments/database_attachments.php | 10 | ||||
-rw-r--r-- | plugins/identity_select/identity_select.php | 68 | ||||
-rw-r--r-- | plugins/identity_select/package.xml | 53 | ||||
-rw-r--r-- | plugins/identity_select/tests/IdentitySelect.php | 22 | ||||
-rw-r--r-- | plugins/managesieve/Changelog | 1 | ||||
-rw-r--r-- | plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php | 1 | ||||
-rw-r--r-- | plugins/managesieve/lib/Roundcube/rcube_sieve_script.php | 3 | ||||
-rw-r--r-- | plugins/managesieve/localization/en_US.inc | 1 | ||||
-rw-r--r-- | plugins/managesieve/tests/src/parser.out | 2 | ||||
-rw-r--r-- | plugins/managesieve/tests/src/parser_enotify_b | 4 | ||||
-rw-r--r-- | plugins/managesieve/tests/src/parser_index | 2 | ||||
-rw-r--r-- | plugins/managesieve/tests/src/parser_notify_b | 4 |
13 files changed, 159 insertions, 14 deletions
diff --git a/plugins/attachment_reminder/attachment_reminder.js b/plugins/attachment_reminder/attachment_reminder.js index 50d661b3b..7ef2072c6 100755 --- a/plugins/attachment_reminder/attachment_reminder.js +++ b/plugins/attachment_reminder/attachment_reminder.js @@ -20,7 +20,7 @@ function rcmail_check_message(msg) { var i, rx, keywords = rcmail.gettext('keywords', 'attachment_reminder').split(",").concat([".doc", ".pdf"]); - $.each(keywords, function(n) { return RegExp.escape(n); }); + keywords = $.map(keywords, function(n) { return RegExp.escape(n); }); rx = new RegExp('(' + keywords.join('|') + ')', 'i'); return msg.search(rx) != -1; diff --git a/plugins/database_attachments/database_attachments.php b/plugins/database_attachments/database_attachments.php index 47e2b5222..5ec351404 100644 --- a/plugins/database_attachments/database_attachments.php +++ b/plugins/database_attachments/database_attachments.php @@ -13,7 +13,9 @@ * @author Aleksander Machniak <alec@alec.pl> * @version @package_version@ */ -require_once('plugins/filesystem_attachments/filesystem_attachments.php'); + +require_once INSTALL_PATH . 'plugins/filesystem_attachments/filesystem_attachments.php'; + class database_attachments extends filesystem_attachments { // Cache object @@ -84,14 +86,10 @@ class database_attachments extends filesystem_attachments */ function remove($args) { - $args['status'] = false; - $cache = $this->get_cache(); $status = $cache->remove($args['id']); - if ($status) { - $args['status'] = true; - } + $args['status'] = true; return $args; } 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 @@ +<?php + +/** + * Identity selection based on additional message headers. + * + * On reply to a message user identity selection is based on + * content of standard headers i.e. 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. + * + * Enable the plugin in config.inc.php and add your desired headers: + * $rcmail_config['identity_select_headers'] = array('Delivered-To'); + * + * @version @package_version@ + * @author Aleksander Machniak <alec@alec.pl> + * @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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<package xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" packagerversion="1.9.0" version="2.0" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0 + http://pear.php.net/dtd/tasks-1.0.xsd + http://pear.php.net/dtd/package-2.0 + http://pear.php.net/dtd/package-2.0.xsd"> + <name>identity_select</name> + <channel>pear.roundcube.net</channel> + <summary>Extended identity selection</summary> + <description> + 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. + </description> + <lead> + <name>Aleksander Machniak</name> + <user>alec</user> + <email>alec@alec.pl</email> + <active>yes</active> + </lead> + <date>2013-08-04</date> + <version> + <release>1.0</release> + <api>1.0</api> + </version> + <stability> + <release>stable</release> + <api>stable</api> + </stability> + <license uri="http://www.gnu.org/licenses/gpl.html">GNU GPLv3+</license> + <notes>-</notes> + <contents> + <dir baseinstalldir="/" name="/"> + <file name="identity_select.php" role="php"> + <tasks:replace from="@name@" to="name" type="package-info"/> + <tasks:replace from="@package_version@" to="version" type="package-info"/> + </file> + </dir> + <!-- / --> + </contents> + <dependencies> + <required> + <php> + <min>5.2.1</min> + </php> + <pearinstaller> + <min>1.7.0</min> + </pearinstaller> + </required> + </dependencies> + <phprelease/> +</package> 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 @@ +<?php + +class IdentitySelect_Plugin extends PHPUnit_Framework_TestCase +{ + + function setUp() + { + include_once dirname(__FILE__) . '/../identity_select.php'; + } + + /** + * Plugin object construction test + */ + function test_constructor() + { + $rcube = rcube::get_instance(); + $plugin = new identity_select($rcube->api); + + $this->assertInstanceOf('identity_select', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog index daee91a70..60b2f1831 100644 --- a/plugins/managesieve/Changelog +++ b/plugins/managesieve/Changelog @@ -4,6 +4,7 @@ - Support date, currendate and index tests - RFC5260 (#1488120) - Split plugin file into two files - Fix handling of &, <, > characters in scripts/filter names (#1489208) +- Support 'keep' action (#1489226) * version 6.2 [2013-02-17] ----------------------------------------------------------- diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php index e92ba04d6..bbbfa9d91 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php @@ -1550,6 +1550,7 @@ class rcube_sieve_engine if (in_array('enotify', $this->exts) || in_array('notify', $this->exts)) { $select_action->add(rcube::Q($this->plugin->gettext('notify')), 'notify'); } + $select_action->add(rcube::Q($this->plugin->gettext('messagekeep')), 'keep'); $select_action->add(rcube::Q($this->plugin->gettext('rulestop')), 'stop'); $select_type = $action['type']; diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php index a614c3b15..371b45d84 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php @@ -260,7 +260,8 @@ class rcube_sieve_script $this->add_index($test, $tests[$i], $exts); } - if (!empty($test['part'])) { + // :all address-part is optional, skip it + if (!empty($test['part']) && $test['part'] != 'all') { $tests[$i] .= ' :' . $test['part']; if ($test['part'] == 'user' || $test['part'] == 'detail') { array_push($exts, 'subaddress'); diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc index 72bbf9d41..a37ea7db9 100644 --- a/plugins/managesieve/localization/en_US.inc +++ b/plugins/managesieve/localization/en_US.inc @@ -49,6 +49,7 @@ $labels['messagesendcopy'] = 'Send message copy to'; $labels['messagereply'] = 'Reply with message'; $labels['messagedelete'] = 'Delete message'; $labels['messagediscard'] = 'Discard with message'; +$labels['messagekeep'] = 'Keep message in Inbox'; $labels['messagesrules'] = 'For incoming mail:'; $labels['messagesactions'] = '...execute the following actions:'; $labels['add'] = 'Add'; diff --git a/plugins/managesieve/tests/src/parser.out b/plugins/managesieve/tests/src/parser.out index 366515b06..cb0bad5e7 100644 --- a/plugins/managesieve/tests/src/parser.out +++ b/plugins/managesieve/tests/src/parser.out @@ -39,7 +39,7 @@ if true } fileinto "Test"; # rule:[address test] -if address :all :is "From" "nagios@domain.tld" +if address :is "From" "nagios@domain.tld" { fileinto "domain.tld"; stop; diff --git a/plugins/managesieve/tests/src/parser_enotify_b b/plugins/managesieve/tests/src/parser_enotify_b index 9a17eaf0c..a3011bac2 100644 --- a/plugins/managesieve/tests/src/parser_enotify_b +++ b/plugins/managesieve/tests/src/parser_enotify_b @@ -1,6 +1,6 @@ require ["enotify","envelope","variables"]; # rule:[from] -if envelope :all :matches "from" "*" +if envelope :matches "from" "*" { set "env_from" " [really: ${1}]"; } @@ -10,7 +10,7 @@ if header :matches "Subject" "*" set "subject" "${1}"; } # rule:[from notify] -if address :all :matches "from" "*" +if address :matches "from" "*" { set "from_addr" "${1}"; notify :message "${from_addr}${env_from}: ${subject}" "mailto:alm@example.com"; diff --git a/plugins/managesieve/tests/src/parser_index b/plugins/managesieve/tests/src/parser_index index 78aba9a55..ca9f86d56 100644 --- a/plugins/managesieve/tests/src/parser_index +++ b/plugins/managesieve/tests/src/parser_index @@ -12,7 +12,7 @@ if header :index 2 :contains ["From","To"] "test@domain.tld" stop; } # rule:[index-address] -if address :index 1 :all :is "From" "nagios@domain.tld" +if address :index 1 :is "From" "nagios@domain.tld" { fileinto "domain.tld"; stop; diff --git a/plugins/managesieve/tests/src/parser_notify_b b/plugins/managesieve/tests/src/parser_notify_b index 9a3ca803c..ab90ed48c 100644 --- a/plugins/managesieve/tests/src/parser_notify_b +++ b/plugins/managesieve/tests/src/parser_notify_b @@ -1,6 +1,6 @@ require ["envelope","notify","variables"]; # rule:[from] -if envelope :all :matches "from" "*" +if envelope :matches "from" "*" { set "env_from" " [really: ${1}]"; } @@ -10,7 +10,7 @@ if header :matches "Subject" "*" set "subject" "${1}"; } # rule:[from notify] -if address :all :matches "from" "*" +if address :matches "from" "*" { set "from_addr" "${1}"; notify :message "${from_addr}${env_from}: ${subject}" :method "sms:1234567890"; |