Aleksander Machniak
2014-02-26 1edb6bbc255c63e26d447ede8fd4f1385e72579b
Fix filter creation from an email when preview frame is disabled (#1489647)
3 files modified
79 ■■■■■ changed files
plugins/managesieve/Changelog 1 ●●●● patch | view | raw | blame | history
plugins/managesieve/managesieve.js 16 ●●●● patch | view | raw | blame | history
plugins/managesieve/managesieve.php 62 ●●●●● patch | view | raw | blame | history
plugins/managesieve/Changelog
@@ -7,6 +7,7 @@
- Fix issue in displaying filter form when managesieve_kolab_master=true
  and sieve variables extension is supported by the server (#1489599)
- Fix wrong action folder selection if managesieve_domains is not empty (#1489617)
- Fix filter creation from an email when preview frame is disabled (#1489647)
* version 7.1 [2013-11-22]
-----------------------------------------------------------
plugins/managesieve/managesieve.js
@@ -801,9 +801,17 @@
/*********           Mail UI methods             *********/
/*********************************************************/
rcube_webmail.prototype.managesieve_create = function()
rcube_webmail.prototype.managesieve_create = function(force)
{
  if (!rcmail.env.sieve_headers || !rcmail.env.sieve_headers.length)
  if (!force && this.env.action != 'show' && !$('#'+this.env.contentframe).is(':visible')) {
    var uid = this.message_list.get_single_selection(),
      lock = this.set_busy(true, 'loading');
    this.http_post('plugin.managesieve-action', {_uid: uid}, lock);
    return;
  }
  if (!this.env.sieve_headers || !this.env.sieve_headers.length)
    return;
  var i, html, buttons = {}, dialog = $("#sievefilterform");
@@ -816,9 +824,9 @@
  // build dialog window content
  html = '<fieldset><legend>'+this.gettext('managesieve.usedata')+'</legend><ul>';
  for (i in rcmail.env.sieve_headers)
  for (i in this.env.sieve_headers)
    html += '<li><input type="checkbox" name="headers[]" id="sievehdr'+i+'" value="'+i+'" checked="checked" />'
      +'<label for="sievehdr'+i+'">'+rcmail.env.sieve_headers[i][0]+':</label> '+rcmail.env.sieve_headers[i][1]+'</li>';
      +'<label for="sievehdr'+i+'">'+this.env.sieve_headers[i][0]+':</label> '+this.env.sieve_headers[i][1]+'</li>';
  html += '</ul></fieldset>';
  dialog.html(html);
plugins/managesieve/managesieve.php
@@ -137,30 +137,12 @@
        $this->mail_headers_done = true;
        $headers = $args['headers'];
        $ret     = array();
        if ($headers->subject)
            $ret[] = array('Subject', rcube_mime::decode_header($headers->subject));
        // @TODO: List-Id, others?
        foreach (array('From', 'To') as $h) {
            $hl = strtolower($h);
            if ($headers->$hl) {
                $list = rcube_mime::decode_address_list($headers->$hl);
                foreach ($list as $item) {
                    if ($item['mailto']) {
                        $ret[] = array($h, $item['mailto']);
                    }
                }
            }
        }
        $headers = $this->parse_headers($args['headers']);
        if ($this->rc->action == 'preview')
            $this->rc->output->command('parent.set_env', array('sieve_headers' => $ret));
            $this->rc->output->command('parent.set_env', array('sieve_headers' => $headers));
        else
            $this->rc->output->set_env('sieve_headers', $ret);
            $this->rc->output->set_env('sieve_headers', $headers);
        return $args;
    }
@@ -170,6 +152,18 @@
     */
    function managesieve_actions()
    {
        // handle fetching email headers for the new filter form
        if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_GPC)) {
            $mailbox = $this->rc->get_storage()->get_folder();
            $message = new rcube_message($uid, $mailbox);
            $headers = $this->parse_headers($message->headers);
            $this->rc->output->set_env('sieve_headers', $headers);
            $this->rc->output->command('managesieve_create', true);
            $this->rc->output->send();
        }
        // handle other action
        $this->init_ui();
        $engine = $this->get_engine();
        $engine->actions();
@@ -210,4 +204,30 @@
        return $this->engine;
    }
    /**
     * Extract mail headers for new filter form
     */
    private function parse_headers($headers)
    {
        $result = array();
        if ($headers->subject)
            $result[] = array('Subject', rcube_mime::decode_header($headers->subject));
        // @TODO: List-Id, others?
        foreach (array('From', 'To') as $h) {
            $hl = strtolower($h);
            if ($headers->$hl) {
                $list = rcube_mime::decode_address_list($headers->$hl);
                foreach ($list as $item) {
                    if ($item['mailto']) {
                        $result[] = array($h, $item['mailto']);
                    }
                }
            }
        }
        return $result;
    }
}