From 9240c6a7d9053af43fe16629f0a38440c6369fdc Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 24 Jul 2009 08:06:05 -0400
Subject: [PATCH] - support plugin's config file
---
plugins/managesieve/managesieve.php | 85 +++++++++++++++++++-----------------------
1 files changed, 38 insertions(+), 47 deletions(-)
diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php
index 18001c0..21d974d 100644
--- a/plugins/managesieve/managesieve.php
+++ b/plugins/managesieve/managesieve.php
@@ -7,46 +7,19 @@
* It's clickable interface which operates on text scripts and communicates
* with server using managesieve protocol. Adds Filters tab in Settings.
*
- * @version 1.0
+ * @version 1.3
* @author Aleksander 'A.L.E.C' Machniak <alec@alec.pl>
*
- * Configuration (main.inc.php):
-
-// managesieve server port
-$rcmail_config['managesieve_port'] = 2000;
-
-// managesieve server address
-$rcmail_config['managesieve_host'] = 'localhost';
-
-// use or not TLS for managesieve server connection
-// it's because I've problems with TLS and dovecot's managesieve plugin
-// and it's not needed on localhost
-$rcmail_config['managesieve_usetls'] = false;
-
-// default contents of filters script (eg. default spam filter)
-$rcmail_config['managesieve_default'] = '/etc/dovecot/sieve/global';
-
-// I need this because my dovecot (with listescape plugin) uses
-// ':' delimiter, but creates folders with dot delimiter
-$rcmail_config['managesieve_replace_delimiter'] = '';
-
-// disabled sieve extensions (body, copy, date, editheader, encoded-character,
-// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
-// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
-// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
-// Note: not all extensions are implemented
-$rcmail_config['managesieve_disabled_extensions'] = array();
-
+ * Configuration (see config.inc.php.dist):
*/
class managesieve extends rcube_plugin
{
public $task = 'settings';
- private $sieve;
private $rc;
+ private $sieve;
private $errors;
- private $dir;
private $form;
private $script = array();
private $exts = array();
@@ -58,9 +31,6 @@
function init()
{
- $rcmail = rcmail::get_instance();
- $this->rc = &$rcmail;
-
// add Tab label/title
$this->add_texts('localization/', array('filters','managefilters'));
@@ -74,6 +44,11 @@
function managesieve_start()
{
+ $rcmail = rcmail::get_instance();
+ $this->rc = &$rcmail;
+
+ $this->load_config();
+
// register UI objects
$this->rc->output->add_handlers(array(
'filterslist' => array($this, 'filters_list'),
@@ -309,7 +284,7 @@
$this->errors['tests'][$i]['sizetarget'] = $this->gettext('wrongformat');
break;
case '...':
- $cust_header = $this->strip_value($cust_headers[$idx]);
+ $cust_header = $headers = $this->strip_value($cust_headers[$idx]);
if(preg_match('/^not/', $op))
$this->form['tests'][$i]['not'] = true;
@@ -317,10 +292,22 @@
if ($cust_header == '')
$this->errors['tests'][$i]['header'] = $this->gettext('cannotbeempty');
- elseif (!preg_match('/^[a-z0-9-]+$/i', $cust_header))
- $this->errors['tests'][$i]['header'] = $this->gettext('forbiddenchars');
-
- if ($type == 'exists')
+ else {
+ $headers = preg_split('/[\s,]+/', $cust_header, -1, PREG_SPLIT_NO_EMPTY);
+
+ if (!count($headers))
+ $this->errors['tests'][$i]['header'] = $this->gettext('cannotbeempty');
+ else {
+ foreach ($headers as $hr)
+ if (!preg_match('/^[a-z0-9-]+$/i', $hr))
+ $this->errors['tests'][$i]['header'] = $this->gettext('forbiddenchars');
+ }
+ }
+
+ if (empty($this->errors['tests'][$i]['header']))
+ $cust_header = (is_array($headers) && count($headers) == 1) ? $headers[0] : $headers;
+
+ if ($type == 'exists')
{
$this->form['tests'][$i]['test'] = 'exists';
$this->form['tests'][$i]['arg'] = $cust_header;
@@ -368,7 +355,7 @@
if ($this->form['actions'][$i]['target'] == '')
$this->errors['actions'][$i]['target'] = $this->gettext('cannotbeempty');
- else if (!check_email($this->form['actions'][$i]['target']))
+ else if (!$this->check_email($this->form['actions'][$i]['target']))
$this->errors['actions'][$i]['target'] = $this->gettext('noemailwarning');
break;
case 'vacation':
@@ -383,7 +370,7 @@
$address = trim($address);
if (!$address)
unset($this->form['actions'][$i]['addresses'][$aidx]);
- else if(!check_email($address)) {
+ else if(!$this->check_email($address)) {
$this->errors['actions'][$i]['addresses'] = $this->gettext('noemailwarning');
break;
} else
@@ -600,9 +587,11 @@
// TODO: list arguments
- if ((isset($rule['test']) && $rule['test'] == 'header') && in_array($rule['arg1'], $this->headers))
+ if ((isset($rule['test']) && $rule['test'] == 'header')
+ && !is_array($rule['arg1']) && in_array($rule['arg1'], $this->headers))
$out .= $select_header->show($rule['arg1']);
- elseif ((isset($rule['test']) && $rule['test'] == 'exists') && in_array($rule['arg'], $this->headers))
+ elseif ((isset($rule['test']) && $rule['test'] == 'exists')
+ && !is_array($rule['arg']) && in_array($rule['arg'], $this->headers))
$out .= $select_header->show($rule['arg']);
elseif (isset($rule['test']) && $rule['test'] == 'size')
$out .= $select_header->show('size');
@@ -613,10 +602,12 @@
$out .= '</td><td class="rowtargets">';
- if ((isset($rule['test']) && $rule['test'] == 'header') && !in_array($rule['arg1'], $this->headers))
- $custom = $rule['arg1'];
- elseif ((isset($rule['test']) && $rule['test'] == 'exists') && !in_array($rule['arg'], $this->headers))
- $custom = $rule['arg'];
+ if ((isset($rule['test']) && $rule['test'] == 'header')
+ && (is_array($rule['arg1']) || !in_array($rule['arg1'], $this->headers)))
+ $custom = is_array($rule['arg1']) ? implode(', ', $rule['arg1']) : $rule['arg1'];
+ elseif ((isset($rule['test']) && $rule['test'] == 'exists')
+ && (is_array($rule['arg']) || !in_array($rule['arg'], $this->headers)))
+ $custom = is_array($rule['arg']) ? implode(', ', $rule['arg']) : $rule['arg'];
$out .= '<div id="custom_header' .$id. '" style="display:' .(isset($custom) ? 'inline' : 'none'). '">
<input type="text" name="_custom_header[]" '. $this->error_class($id, 'test', 'header')
@@ -760,7 +751,7 @@
foreach ($a_folders as $folder)
{
- $utf7folder = $folder;
+ $utf7folder = $this->rc->imap->mod_mailbox($folder);
$names = explode($delimiter, rcube_charset_convert($folder, 'UTF7-IMAP'));
$name = $names[sizeof($names)-1];
--
Gitblit v1.9.1