| | |
| | | * It's clickable interface which operates on text scripts and communicates |
| | | * with server using managesieve protocol. Adds Filters tab in Settings. |
| | | * |
| | | * @version 5.0 |
| | | * @version @package_version@ |
| | | * @author Aleksander Machniak <alec@alec.pl> |
| | | * |
| | | * Configuration (see config.inc.php.dist) |
| | | * |
| | | * Copyright (C) 2008-2011, The Roundcube Dev Team |
| | | * Copyright (C) 2011, Kolab Systems AG |
| | | * Copyright (C) 2008-2012, The Roundcube Dev Team |
| | | * Copyright (C) 2011-2012, Kolab Systems AG |
| | | * |
| | | * This program is free software; you can redistribute it and/or modify |
| | | * it under the terms of the GNU General Public License version 2 |
| | |
| | | "x-beenthere", |
| | | ); |
| | | |
| | | const VERSION = '5.2'; |
| | | const VERSION = '6.1'; |
| | | const PROGNAME = 'Roundcube (Managesieve)'; |
| | | const PORT = 4190; |
| | | |
| | | |
| | | function init() |
| | |
| | | $include_path .= ini_get('include_path'); |
| | | set_include_path($include_path); |
| | | |
| | | $host = rcube_parse_host($this->rc->config->get('managesieve_host', 'localhost')); |
| | | $port = $this->rc->config->get('managesieve_port', 2000); |
| | | // Get connection parameters |
| | | $host = $this->rc->config->get('managesieve_host', 'localhost'); |
| | | $port = $this->rc->config->get('managesieve_port'); |
| | | $tls = $this->rc->config->get('managesieve_usetls', false); |
| | | |
| | | $host = rcube_parse_host($host); |
| | | $host = rcube_idn_to_ascii($host); |
| | | |
| | | // remove tls:// prefix, set TLS flag |
| | | if (($host = preg_replace('|^tls://|i', '', $host, 1, $cnt)) && $cnt) { |
| | | $tls = true; |
| | | } |
| | | |
| | | if (empty($port)) { |
| | | $port = getservbyname('sieve', 'tcp'); |
| | | if (empty($port)) { |
| | | $port = self::PORT; |
| | | } |
| | | } |
| | | |
| | | $plugin = $this->rc->plugins->exec_hook('managesieve_connect', array( |
| | | 'user' => $_SESSION['username'], |
| | | 'password' => $this->rc->decrypt($_SESSION['password']), |
| | | 'host' => $host, |
| | | 'port' => $port, |
| | | 'usetls' => $tls, |
| | | 'auth_type' => $this->rc->config->get('managesieve_auth_type'), |
| | | 'usetls' => $this->rc->config->get('managesieve_usetls', false), |
| | | 'disabled' => $this->rc->config->get('managesieve_disabled_extensions'), |
| | | 'debug' => $this->rc->config->get('managesieve_debug', false), |
| | | 'auth_cid' => $this->rc->config->get('managesieve_auth_cid'), |
| | |
| | | // Init plugin and handle managesieve connection |
| | | $error = $this->managesieve_start(); |
| | | |
| | | // filters set add action |
| | | if (!empty($_POST['_newset'])) { |
| | | // get request size limits (#1488648) |
| | | $max_post = max(array( |
| | | ini_get('max_input_vars'), |
| | | ini_get('suhosin.request.max_vars'), |
| | | ini_get('suhosin.post.max_vars'), |
| | | )); |
| | | $max_depth = max(array( |
| | | ini_get('suhosin.request.max_array_depth'), |
| | | ini_get('suhosin.post.max_array_depth'), |
| | | )); |
| | | |
| | | // check request size limit |
| | | if ($max_post && count($_POST, COUNT_RECURSIVE) >= $max_post) { |
| | | rcube::raise_error(array( |
| | | 'code' => 500, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Request size limit exceeded (one of max_input_vars/suhosin.request.max_vars/suhosin.post.max_vars)" |
| | | ), true, false); |
| | | $this->rc->output->show_message('managesieve.filtersaveerror', 'error'); |
| | | } |
| | | // check request depth limits |
| | | else if ($max_depth && count($_POST['_header']) > $max_depth) { |
| | | rcube::raise_error(array( |
| | | 'code' => 500, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Request size limit exceeded (one of suhosin.request.max_array_depth/suhosin.post.max_array_depth)" |
| | | ), true, false); |
| | | $this->rc->output->show_message('managesieve.filtersaveerror', 'error'); |
| | | } |
| | | // filters set add action |
| | | else if (!empty($_POST['_newset'])) { |
| | | $name = get_input_value('_name', RCUBE_INPUT_POST, true); |
| | | $copy = get_input_value('_copy', RCUBE_INPUT_POST, true); |
| | | $from = get_input_value('_from', RCUBE_INPUT_POST); |
| | |
| | | $notifybodies = get_input_value('_action_notifybody', RCUBE_INPUT_POST); |
| | | $notifymessages = get_input_value('_action_notifymessage', RCUBE_INPUT_POST); |
| | | $notifyfrom = get_input_value('_action_notifyfrom', RCUBE_INPUT_POST); |
| | | $notifyimp = get_input_value('_action_notifyimportance', RCUBE_INPUT_POST); |
| | | |
| | | // we need a "hack" for radiobuttons |
| | | foreach ($sizeitems as $item) |
| | |
| | | $this->form['actions'][$i]['body'] = $notifybodies[$idx]; |
| | | $this->form['actions'][$i]['message'] = $notifymessages[$idx]; |
| | | $this->form['actions'][$i]['from'] = $notifyfrom[$idx]; |
| | | $this->form['actions'][$i]['importance'] = $notifyimp[$idx]; |
| | | break; |
| | | } |
| | | |
| | |
| | | $this->rc->output->set_env('blankpage', $attrib['src'] ? |
| | | $this->rc->output->abs_url($attrib['src']) : 'program/resources/blank.gif'); |
| | | |
| | | return html::tag('iframe', $attrib); |
| | | return $this->rc->output->frame($attrib); |
| | | } |
| | | |
| | | function filterset_form($attrib) |
| | |
| | | if (in_array('variables', $this->exts)) { |
| | | $select_action->add(Q($this->gettext('setvariable')), 'set'); |
| | | } |
| | | if (in_array('enotify', $this->exts)) { |
| | | if (in_array('enotify', $this->exts) || in_array('notify', $this->exts)) { |
| | | $select_action->add(Q($this->gettext('notify')), 'notify'); |
| | | } |
| | | $select_action->add(Q($this->gettext('rulestop')), 'stop'); |
| | |
| | | .'<input type="text" name="_action_notifyfrom['.$id.']" id="action_notifyfrom'.$id.'" ' |
| | | .'value="' . Q($action['from']) . '" size="35" ' |
| | | . $this->error_class($id, 'action', 'from', 'action_notifyfrom') .' />'; |
| | | $importance_options = array( |
| | | 3 => 'notifyimportancelow', |
| | | 2 => 'notifyimportancenormal', |
| | | 1 => 'notifyimportancehigh' |
| | | ); |
| | | $select_importance = new html_select(array( |
| | | 'name' => '_action_notifyimportance[' . $id . ']', |
| | | 'id' => '_action_notifyimportance' . $id, |
| | | 'class' => $this->error_class($id, 'action', 'importance', 'action_notifyimportance'))); |
| | | foreach ($importance_options as $io_v => $io_n) { |
| | | $select_importance->add(Q($this->gettext($io_n)), $io_v); |
| | | } |
| | | $out .= '<br /><span class="label">' . Q($this->gettext('notifyimportance')) . '</span><br />'; |
| | | $out .= $select_importance->show($action['importance'] ? $action['importance'] : 2); |
| | | $out .= '</div>'; |
| | | |
| | | // mailbox select |
| | |
| | | if ($active = $this->sieve->get_active()) { |
| | | $this->active = array($active); |
| | | } |
| | | |
| | | // Hide scripts from config |
| | | $exceptions = $this->rc->config->get('managesieve_filename_exceptions'); |
| | | if (!empty($exceptions)) { |
| | | $this->list = array_diff($this->list, (array)$exceptions); |
| | | } |
| | | } |
| | | |
| | | return $this->list; |