Aleksander Machniak
2013-08-29 c1a0b072424568957eb686a049d8419e4d96c476
Fix setting of Junk and NonJunk flags by markasjunk plugin (#1489285)
Added possibility to register flag mappings by a plugin.

Conflicts:

plugins/markasjunk/markasjunk.php
program/lib/Roundcube/rcube_imap_generic.php
6 files modified
106 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
plugins/markasjunk/markasjunk.php 35 ●●●●● patch | view | raw | blame | history
plugins/markasjunk/package.xml 7 ●●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_imap.php 21 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_imap_generic.php 40 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_storage.php 2 ●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix setting of Junk and NonJunk flags by markasjunk plugin (#1489285)
- Fix lack of Reply-To address in header of forwarded message body (#1489298)
- Fix bugs when invoking contact creation form when read-only addressbook is selected (#1489296)
- Fix identity selection on reply (#1489291)
plugins/markasjunk/markasjunk.php
@@ -19,6 +19,7 @@
    $rcmail = rcmail::get_instance();
    $this->register_action('plugin.markasjunk', array($this, 'request_action'));
    $this->add_hook('storage_init', array($this, 'storage_init'));
    if ($rcmail->action == '' || $rcmail->action == 'show') {
      $skin_path = $this->local_skin_path();
@@ -38,24 +39,36 @@
    }
  }
  function storage_init($args)
  {
    $flags = array(
      'JUNK'    => 'Junk',
      'NONJUNK' => 'NonJunk',
    );
    // register message flags
    $args['message_flags'] = array_merge((array)$args['message_flags'], $flags);
    return $args;
  }
  function request_action()
  {
    $this->add_texts('localization');
    $GLOBALS['IMAP_FLAGS']['JUNK'] = 'Junk';
    $GLOBALS['IMAP_FLAGS']['NONJUNK'] = 'NonJunk';
    $uids = get_input_value('_uid', RCUBE_INPUT_POST);
    $mbox = get_input_value('_mbox', RCUBE_INPUT_POST);
    $rcmail = rcmail::get_instance();
    $rcmail->storage->unset_flag($uids, 'NONJUNK');
    $rcmail->storage->set_flag($uids, 'JUNK');
    $uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
    $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
    $rcmail  = rcmail::get_instance();
    $storage = $rcmail->get_storage();
    $storage->unset_flag($uids, 'NONJUNK');
    $storage->set_flag($uids, 'JUNK');
    if (($junk_mbox = $rcmail->config->get('junk_mbox')) && $mbox != $junk_mbox) {
      $rcmail->output->command('move_messages', $junk_mbox);
    }
    $rcmail->output->command('display_message', $this->gettext('reportedasjunk'), 'confirmation');
    $rcmail->output->send();
  }
plugins/markasjunk/package.xml
@@ -13,11 +13,10 @@
        <email>roundcube@gmail.com</email>
        <active>yes</active>
    </lead>
    <date>2010-03-29</date>
    <time>13:20:00</time>
    <date>2013-08-29</date>
    <version>
        <release>1.1</release>
        <api>1.1</api>
        <release>1.2</release>
        <api>1.2</api>
    </version>
    <stability>
        <release>stable</release>
program/lib/Roundcube/rcube_imap.php
@@ -70,7 +70,7 @@
    protected $search_sort_field = '';
    protected $search_threads = false;
    protected $search_sorted = false;
    protected $options = array('auth_method' => 'check');
    protected $options = array('auth_type' => 'check');
    protected $caching = false;
    protected $messages_caching = false;
    protected $threading = false;
@@ -398,10 +398,10 @@
    public function check_permflag($flag)
    {
        $flag       = strtoupper($flag);
        $imap_flag  = $this->conn->flags[$flag];
        $perm_flags = $this->get_permflags($this->folder);
        $imap_flag  = $this->conn->flags[$flag];
        return in_array_nocase($imap_flag, $perm_flags);
        return $imap_flag && !empty($perm_flags) && in_array_nocase($imap_flag, $perm_flags);
    }
@@ -417,17 +417,7 @@
        if (!strlen($folder)) {
            return array();
        }
/*
        Checking PERMANENTFLAGS is rather rare, so we disable caching of it
        Re-think when we'll use it for more than only MDNSENT flag
        $cache_key = 'mailboxes.permanentflags.' . $folder;
        $permflags = $this->get_cache($cache_key);
        if ($permflags !== null) {
            return explode(' ', $permflags);
        }
*/
        if (!$this->check_connection()) {
            return array();
        }
@@ -442,10 +432,7 @@
        if (!is_array($permflags)) {
            $permflags = array();
        }
/*
        // Store permflags as string to limit cached object size
        $this->update_cache($cache_key, implode(' ', $permflags));
*/
        return $permflags;
    }
program/lib/Roundcube/rcube_imap_generic.php
@@ -702,18 +702,11 @@
     */
    function connect($host, $user, $password, $options=null)
    {
        // set options
        if (is_array($options)) {
            $this->prefs = $options;
        }
        // set auth method
        if (!empty($this->prefs['auth_type'])) {
            $auth_method = strtoupper($this->prefs['auth_type']);
        } else {
            $auth_method = 'CHECK';
        }
        // configure
        $this->set_prefs($options);
        $result = false;
        $auth_method = $this->prefs['auth_type'];
        $result      = false;
        // initialize connection
        $this->error    = '';
@@ -892,6 +885,31 @@
    }
    /**
     * Initializes environment
     */
    protected function set_prefs($prefs)
    {
        // set preferences
        if (is_array($prefs)) {
            $this->prefs = $prefs;
        }
        // set auth method
        if (!empty($this->prefs['auth_type'])) {
            $this->prefs['auth_type'] = strtoupper($this->prefs['auth_type']);
        }
        else {
            $this->prefs['auth_type'] = 'CHECK';
        }
        // additional message flags
        if (!empty($this->prefs['message_flags'])) {
            $this->flags = array_merge($this->flags, $this->prefs['message_flags']);
            unset($this->prefs['message_flags']);
        }
    }
    /**
     * Checks connection status
     *
     * @return bool True if connection is active and user is logged in, False otherwise.
program/lib/Roundcube/rcube_storage.php
@@ -39,7 +39,7 @@
    protected $default_charset = 'ISO-8859-1';
    protected $default_folders = array('INBOX');
    protected $search_set;
    protected $options = array('auth_method' => 'check');
    protected $options = array('auth_type' => 'check');
    protected $page_size = 10;
    protected $threading = false;