Fix setting of Junk and NonJunk flags by markasjunk plugin (#1489285)

Added possibility to register flag mappings by a plugin.
pull/111/head
Aleksander Machniak 11 years ago
parent b5c413a4cf
commit 05da1577aa

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail 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 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 bugs when invoking contact creation form when read-only addressbook is selected (#1489296)
- Fix identity selection on reply (#1489291) - Fix identity selection on reply (#1489291)

@ -19,6 +19,7 @@ class markasjunk extends rcube_plugin
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
$this->register_action('plugin.markasjunk', array($this, 'request_action')); $this->register_action('plugin.markasjunk', array($this, 'request_action'));
$this->add_hook('storage_init', array($this, 'storage_init'));
if ($rcmail->action == '' || $rcmail->action == 'show') { if ($rcmail->action == '' || $rcmail->action == 'show') {
$skin_path = $this->local_skin_path(); $skin_path = $this->local_skin_path();
@ -38,19 +39,31 @@ class markasjunk extends rcube_plugin
} }
} }
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() function request_action()
{ {
$this->add_texts('localization'); $this->add_texts('localization');
$GLOBALS['IMAP_FLAGS']['JUNK'] = 'Junk';
$GLOBALS['IMAP_FLAGS']['NONJUNK'] = 'NonJunk';
$uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST); $uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST);
$mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST);
$rcmail = rcmail::get_instance(); $rcmail = rcmail::get_instance();
$rcmail->storage->unset_flag($uids, 'NONJUNK'); $storage = $rcmail->get_storage();
$rcmail->storage->set_flag($uids, 'JUNK');
$storage->unset_flag($uids, 'NONJUNK');
$storage->set_flag($uids, 'JUNK');
if (($junk_mbox = $rcmail->config->get('junk_mbox')) && $mbox != $junk_mbox) { if (($junk_mbox = $rcmail->config->get('junk_mbox')) && $mbox != $junk_mbox) {
$rcmail->output->command('move_messages', $junk_mbox); $rcmail->output->command('move_messages', $junk_mbox);

@ -13,11 +13,10 @@
<email>roundcube@gmail.com</email> <email>roundcube@gmail.com</email>
<active>yes</active> <active>yes</active>
</lead> </lead>
<date>2010-03-29</date> <date>2013-08-29</date>
<time>13:20:00</time>
<version> <version>
<release>1.1</release> <release>1.2</release>
<api>1.1</api> <api>1.2</api>
</version> </version>
<stability> <stability>
<release>stable</release> <release>stable</release>

@ -70,7 +70,7 @@ class rcube_imap extends rcube_storage
protected $search_sort_field = ''; protected $search_sort_field = '';
protected $search_threads = false; protected $search_threads = false;
protected $search_sorted = false; protected $search_sorted = false;
protected $options = array('auth_method' => 'check'); protected $options = array('auth_type' => 'check');
protected $caching = false; protected $caching = false;
protected $messages_caching = false; protected $messages_caching = false;
protected $threading = false; protected $threading = false;
@ -391,10 +391,10 @@ class rcube_imap extends rcube_storage
public function check_permflag($flag) public function check_permflag($flag)
{ {
$flag = strtoupper($flag); $flag = strtoupper($flag);
$imap_flag = $this->conn->flags[$flag];
$perm_flags = $this->get_permflags($this->folder); $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);
} }
@ -410,17 +410,7 @@ class rcube_imap extends rcube_storage
if (!strlen($folder)) { if (!strlen($folder)) {
return array(); 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()) { if (!$this->check_connection()) {
return array(); return array();
} }
@ -435,10 +425,7 @@ class rcube_imap extends rcube_storage
if (!is_array($permflags)) { if (!is_array($permflags)) {
$permflags = array(); $permflags = array();
} }
/*
// Store permflags as string to limit cached object size
$this->update_cache($cache_key, implode(' ', $permflags));
*/
return $permflags; return $permflags;
} }

@ -704,21 +704,10 @@ class rcube_imap_generic
*/ */
function connect($host, $user, $password, $options=null) function connect($host, $user, $password, $options=null)
{ {
// set options // configure
if (is_array($options)) { $this->set_prefs($options);
$this->prefs = $options;
}
// set auth method
if (!empty($this->prefs['auth_type'])) {
$auth_method = strtoupper($this->prefs['auth_type']);
} else {
$auth_method = 'CHECK';
}
if (!empty($this->prefs['disabled_caps'])) {
$this->prefs['disabled_caps'] = array_map('strtoupper', (array)$this->prefs['disabled_caps']);
}
$auth_method = $this->prefs['auth_type'];
$result = false; $result = false;
// initialize connection // initialize connection
@ -895,6 +884,36 @@ class rcube_imap_generic
return false; return false;
} }
/**
* 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';
}
// disabled capabilities
if (!empty($this->prefs['disabled_caps'])) {
$this->prefs['disabled_caps'] = array_map('strtoupper', (array)$this->prefs['disabled_caps']);
}
// 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 * Checks connection status
* *

@ -39,7 +39,7 @@ abstract class rcube_storage
protected $default_charset = 'ISO-8859-1'; protected $default_charset = 'ISO-8859-1';
protected $default_folders = array('INBOX'); protected $default_folders = array('INBOX');
protected $search_set; protected $search_set;
protected $options = array('auth_method' => 'check'); protected $options = array('auth_type' => 'check');
protected $page_size = 10; protected $page_size = 10;
protected $threading = false; protected $threading = false;

Loading…
Cancel
Save