Updates for Roundcube 0.8
This commit is contained in:
parent
b6cabf8100
commit
607fd7b43b
8 changed files with 122 additions and 109 deletions
|
@ -145,7 +145,7 @@ class kolab_calendar
|
|||
public function get_foldername()
|
||||
{
|
||||
$parts = explode('/', $this->imap_folder);
|
||||
return rcube_charset_convert(end($parts), 'UTF7-IMAP');
|
||||
return rcube_charset::convert(end($parts), 'UTF7-IMAP');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -78,7 +78,7 @@ class kolab_driver extends calendar_driver
|
|||
// convert to UTF8 and sort
|
||||
$names = array();
|
||||
foreach ($folders as $folder)
|
||||
$names[$folder->name] = rcube_charset_convert($folder->name, 'UTF7-IMAP');
|
||||
$names[$folder->name] = rcube_charset::convert($folder->name, 'UTF7-IMAP');
|
||||
|
||||
asort($names, SORT_LOCALE_STRING);
|
||||
|
||||
|
@ -160,8 +160,8 @@ class kolab_driver extends calendar_driver
|
|||
}
|
||||
|
||||
// subscribe to new calendar by default
|
||||
$this->rc->imap_connect();
|
||||
$this->rc->imap->subscribe($folder);
|
||||
$storage = $this->rc->get_storage();
|
||||
$storage->subscribe($folder);
|
||||
|
||||
// create ID
|
||||
$id = rcube_kolab::folder_id($folder);
|
||||
|
@ -226,11 +226,11 @@ class kolab_driver extends calendar_driver
|
|||
public function subscribe_calendar($prop)
|
||||
{
|
||||
if ($prop['id'] && ($cal = $this->calendars[$prop['id']])) {
|
||||
$this->rc->imap_connect();
|
||||
$storage = $this->rc->get_storage();
|
||||
if ($prop['active'])
|
||||
return $this->rc->imap->subscribe($cal->get_realname());
|
||||
return $storage->subscribe($cal->get_realname());
|
||||
else
|
||||
return $this->rc->imap->unsubscribe($cal->get_realname());
|
||||
return $storage->unsubscribe($cal->get_realname());
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -246,14 +246,14 @@ class kolab_driver extends calendar_driver
|
|||
*/
|
||||
private function folder_update(&$prop)
|
||||
{
|
||||
$folder = rcube_charset_convert($prop['name'], RCMAIL_CHARSET, 'UTF7-IMAP');
|
||||
$folder = rcube_charset::convert($prop['name'], RCMAIL_CHARSET, 'UTF7-IMAP');
|
||||
$oldfolder = $prop['oldname']; // UTF7
|
||||
$parent = $prop['parent']; // UTF7
|
||||
$delimiter = $_SESSION['imap_delimiter'];
|
||||
$storage = $this->rc->get_storage();
|
||||
$delimiter = $storage->get_hierarchy_delimiter();
|
||||
|
||||
if (strlen($oldfolder)) {
|
||||
$this->rc->imap_connect();
|
||||
$options = $this->rc->imap->mailbox_info($oldfolder);
|
||||
$options = $storage->folder_info($oldfolder);
|
||||
}
|
||||
|
||||
if (!empty($options) && ($options['norename'] || $options['protected'])) {
|
||||
|
@ -285,14 +285,12 @@ class kolab_driver extends calendar_driver
|
|||
}
|
||||
else {
|
||||
// add namespace prefix (when needed)
|
||||
$this->rc->imap_init();
|
||||
$folder = $this->rc->imap->mod_mailbox($folder, 'in');
|
||||
$folder = $storage->mod_folder($folder, 'in');
|
||||
}
|
||||
|
||||
// Check access rights to the parent folder
|
||||
if (strlen($parent) && (!strlen($oldfolder) || $oldfolder != $folder)) {
|
||||
$this->rc->imap_connect();
|
||||
$parent_opts = $this->rc->imap->mailbox_info($parent);
|
||||
$parent_opts = $storage->folder_info($parent);
|
||||
if ($parent_opts['namespace'] != 'personal'
|
||||
&& (empty($parent_opts['rights']) || !preg_match('/[ck]/', implode($parent_opts)))
|
||||
) {
|
||||
|
@ -320,8 +318,8 @@ class kolab_driver extends calendar_driver
|
|||
// TODO: also save 'showalarams' and other properties here
|
||||
|
||||
if ($result && $prop['color']) {
|
||||
if (!($meta_saved = $this->rc->imap->set_metadata($folder, array('/shared/vendor/kolab/color' => $prop['color'])))) // try in shared namespace
|
||||
$meta_saved = $this->rc->imap->set_metadata($folder, array('/private/vendor/kolab/color' => $prop['color'])); // try in private namespace
|
||||
if (!($meta_saved = $storage->set_metadata($folder, array('/shared/vendor/kolab/color' => $prop['color'])))) // try in shared namespace
|
||||
$meta_saved = $storage->set_metadata($folder, array('/private/vendor/kolab/color' => $prop['color'])); // try in private namespace
|
||||
if ($meta_saved)
|
||||
unset($prop['color']); // unsetting will prevent fallback to local user prefs
|
||||
}
|
||||
|
@ -1016,7 +1014,8 @@ class kolab_driver extends calendar_driver
|
|||
|
||||
$hidden_fields[] = array('name' => 'oldname', 'value' => $folder);
|
||||
|
||||
$delim = $_SESSION['imap_delimiter'];
|
||||
$storage = $this->rc->get_storage();
|
||||
$delim = $storage->get_hierarchy_delimiter();
|
||||
$form = array();
|
||||
|
||||
if (strlen($folder)) {
|
||||
|
@ -1024,8 +1023,7 @@ class kolab_driver extends calendar_driver
|
|||
array_pop($path_imap); // pop off name part
|
||||
$path_imap = implode($path_imap, $delim);
|
||||
|
||||
$this->rc->imap_connect();
|
||||
$options = $this->rc->imap->mailbox_info($folder);
|
||||
$options = $storage->folder_info($folder);
|
||||
}
|
||||
else {
|
||||
$path_imap = '';
|
||||
|
@ -1179,7 +1177,8 @@ class kolab_driver extends calendar_driver
|
|||
|
||||
$hidden_fields[] = array('name' => 'oldname', 'value' => $folder);
|
||||
|
||||
$delim = $_SESSION['imap_delimiter'];
|
||||
$storage = $this->rc->get_storage();
|
||||
$delim = $storage->get_hierarchy_delimiter();
|
||||
$form = array();
|
||||
|
||||
if (strlen($folder)) {
|
||||
|
@ -1187,8 +1186,7 @@ class kolab_driver extends calendar_driver
|
|||
array_pop($path_imap); // pop off name part
|
||||
$path_imap = implode($path_imap, $delim);
|
||||
|
||||
$this->rc->imap_connect();
|
||||
$options = $this->rc->imap->mailbox_info($folder);
|
||||
$options = $storage->folder_info($folder);
|
||||
|
||||
// Allow plugins to modify the form content (e.g. with ACL form)
|
||||
$plugin = $this->rc->plugins->exec_hook('calendar_form_kolab',
|
||||
|
|
|
@ -131,7 +131,7 @@ class kolab_addressbook extends rcube_plugin
|
|||
'editable' => $abook->editable,
|
||||
'groups' => $abook->groups,
|
||||
'undelete' => $abook->undelete && $undelete,
|
||||
'realname' => rcube_charset_convert($abook->get_realname(), 'UTF7-IMAP'), // IMAP folder name
|
||||
'realname' => rcube_charset::convert($abook->get_realname(), 'UTF7-IMAP'), // IMAP folder name
|
||||
'class_name' => $abook->get_namespace(),
|
||||
'kolab' => true,
|
||||
);
|
||||
|
@ -258,7 +258,7 @@ class kolab_addressbook extends rcube_plugin
|
|||
// convert to UTF8 and sort
|
||||
$names = array();
|
||||
foreach ($this->folders as $c_folder)
|
||||
$names[$c_folder->name] = rcube_charset_convert($c_folder->name, 'UTF7-IMAP');
|
||||
$names[$c_folder->name] = rcube_charset::convert($c_folder->name, 'UTF7-IMAP');
|
||||
|
||||
asort($names, SORT_LOCALE_STRING);
|
||||
|
||||
|
@ -420,14 +420,14 @@ class kolab_addressbook extends rcube_plugin
|
|||
*/
|
||||
public function book_save()
|
||||
{
|
||||
$storage = $this->rc->get_storage();
|
||||
$folder = trim(get_input_value('_name', RCUBE_INPUT_POST, true, 'UTF7-IMAP'));
|
||||
$oldfolder = trim(get_input_value('_oldname', RCUBE_INPUT_POST, true)); // UTF7-IMAP
|
||||
$path = trim(get_input_value('_parent', RCUBE_INPUT_POST, true)); // UTF7-IMAP
|
||||
$delimiter = $_SESSION['imap_delimiter'];
|
||||
$delimiter = $storage->get_hierarchy_delimiter();
|
||||
|
||||
if (strlen($oldfolder)) {
|
||||
$this->rc->imap_connect();
|
||||
$options = $this->rc->imap->mailbox_info($oldfolder);
|
||||
$options = $storage->folder_info($oldfolder);
|
||||
}
|
||||
|
||||
if (!empty($options) && ($options['norename'] || $options['protected'])) {
|
||||
|
@ -458,14 +458,12 @@ class kolab_addressbook extends rcube_plugin
|
|||
}
|
||||
else {
|
||||
// add namespace prefix (when needed)
|
||||
$this->rc->imap_init();
|
||||
$folder = $this->rc->imap->mod_mailbox($folder, 'in');
|
||||
$folder = $storage->mod_folder($folder, 'in');
|
||||
}
|
||||
|
||||
// Check access rights to the parent folder
|
||||
if (strlen($path) && (!strlen($oldfolder) || $oldfolder != $folder)) {
|
||||
$this->rc->imap_connect();
|
||||
$parent_opts = $this->rc->imap->mailbox_info($path);
|
||||
$parent_opts = $storage->folder_info($path);
|
||||
if ($parent_opts['namespace'] != 'personal'
|
||||
&& (empty($parent_opts['rights']) || !preg_match('/[ck]/', implode($parent_opts)))
|
||||
) {
|
||||
|
@ -552,7 +550,7 @@ class kolab_addressbook extends rcube_plugin
|
|||
'readonly' => false,
|
||||
'editable' => true,
|
||||
'groups' => true,
|
||||
'realname' => rcube_charset_convert($folder, 'UTF7-IMAP'), // IMAP folder name
|
||||
'realname' => rcube_charset::convert($folder, 'UTF7-IMAP'), // IMAP folder name
|
||||
'class_name' => $kolab_folder->get_namespace(),
|
||||
'kolab' => true,
|
||||
), rcube_kolab::folder_id($oldfolder));
|
||||
|
|
|
@ -131,8 +131,9 @@ class rcube_kolab_contacts extends rcube_addressbook
|
|||
|
||||
public function __construct($imap_folder = null)
|
||||
{
|
||||
if ($imap_folder)
|
||||
if ($imap_folder) {
|
||||
$this->imap_folder = $imap_folder;
|
||||
}
|
||||
|
||||
// extend coltypes configuration
|
||||
$format = rcube_kolab::get_format('contact');
|
||||
|
@ -653,8 +654,9 @@ class rcube_kolab_contacts extends rcube_addressbook
|
|||
}
|
||||
|
||||
// store IMAP uids for undelete()
|
||||
if (!$force)
|
||||
if (!$force) {
|
||||
$_SESSION['kolab_delete_uids'] = $imap_uids;
|
||||
}
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ class kolab_auth extends rcube_plugin
|
|||
|
||||
// Hooks related to "Login As" feature
|
||||
$this->add_hook('template_object_loginform', array($this, 'login_form'));
|
||||
$this->add_hook('imap_connect', array($this, 'imap_connect'));
|
||||
$this->add_hook('storage_connect', array($this, 'imap_connect'));
|
||||
$this->add_hook('managesieve_connect', array($this, 'imap_connect'));
|
||||
$this->add_hook('smtp_connect', array($this, 'smtp_connect'));
|
||||
|
||||
|
@ -135,7 +135,7 @@ class kolab_auth extends rcube_plugin
|
|||
} else {
|
||||
$dont_override = $rcmail->config->get('dont_override');
|
||||
if (in_array($setting_name, $dont_override)) {
|
||||
$_dont_override = Array();
|
||||
$_dont_override = array();
|
||||
foreach ($dont_override as $_setting) {
|
||||
if ($_setting != $setting_name) {
|
||||
$_dont_override[] = $_setting;
|
||||
|
|
|
@ -222,15 +222,9 @@ class rcube_kolab
|
|||
static $subscribed; // local cache
|
||||
|
||||
if (!$subscribed) {
|
||||
$rcmail = rcmail::get_instance();
|
||||
// try without connection first (list could be served from cache)
|
||||
$subscribed = $rcmail->imap ? $rcmail->imap->list_mailboxes() : array();
|
||||
|
||||
// now really get the list from the IMAP server
|
||||
if (empty($subscribed) || $subscribed == array('INBOX')) {
|
||||
$rcmail->imap_connect();
|
||||
$subscribed = $rcmail->imap->list_mailboxes();
|
||||
}
|
||||
$rcmail = rcmail::get_instance();
|
||||
$storage = $rcmail->get_storage();
|
||||
$subscribed = $storage->list_folders();
|
||||
}
|
||||
|
||||
return in_array($folder, $subscribed);
|
||||
|
@ -390,10 +384,9 @@ class rcube_kolab
|
|||
*/
|
||||
public static function object_name($folder, &$folder_ns=null)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
$rcmail->imap_init();
|
||||
|
||||
$namespace = $rcmail->imap->get_namespace();
|
||||
$rcmail = rcmail::get_instance();
|
||||
$storage = $rcmail->get_storage();
|
||||
$namespace = $storage->get_namespace();
|
||||
$found = false;
|
||||
|
||||
if (!empty($namespace['shared'])) {
|
||||
|
@ -444,9 +437,9 @@ class rcube_kolab
|
|||
}
|
||||
|
||||
if (empty($delim))
|
||||
$delim = $rcmail->imap->get_hierarchy_delimiter();
|
||||
$delim = $storage->get_hierarchy_delimiter();
|
||||
|
||||
$folder = rcube_charset_convert($folder, 'UTF7-IMAP');
|
||||
$folder = rcube_charset::convert($folder, 'UTF7-IMAP');
|
||||
$folder = str_replace($delim, ' » ', $folder);
|
||||
|
||||
if ($prefix)
|
||||
|
@ -467,10 +460,9 @@ class rcube_kolab
|
|||
*/
|
||||
public static function folder_namespace($folder)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
$rcmail->imap_init();
|
||||
|
||||
$namespace = $rcmail->imap->get_namespace();
|
||||
$rcmail = rcmail::get_instance();
|
||||
$storage = $rcmail->get_storage();
|
||||
$namespace = $storage->get_namespace();
|
||||
|
||||
if (!empty($namespace)) {
|
||||
foreach ($namespace as $nsname => $nsvalue) {
|
||||
|
@ -498,10 +490,13 @@ class rcube_kolab
|
|||
*/
|
||||
public static function folder_selector($type, $attrs, $current = '')
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
$storage = $rcmail->get_storage();
|
||||
|
||||
// get all folders of specified type
|
||||
$folders = self::get_folders($type);
|
||||
|
||||
$delim = $_SESSION['imap_delimiter'];
|
||||
$delim = $storage->get_hierarchy_delimiter();
|
||||
$names = array();
|
||||
$len = strlen($current);
|
||||
|
||||
|
@ -528,12 +523,12 @@ class rcube_kolab
|
|||
}
|
||||
}
|
||||
|
||||
$names[$name] = rcube_charset_convert($name, 'UTF7-IMAP');
|
||||
$names[$name] = rcube_charset::convert($name, 'UTF7-IMAP');
|
||||
}
|
||||
|
||||
// Make sure parent folder is listed (might be skipped e.g. if it's namespace root)
|
||||
if ($p_len && !isset($names[$parent])) {
|
||||
$names[$parent] = rcube_charset_convert($parent, 'UTF7-IMAP');
|
||||
$names[$parent] = rcube_charset::convert($parent, 'UTF7-IMAP');
|
||||
}
|
||||
|
||||
// Sort folders list
|
||||
|
|
|
@ -41,7 +41,7 @@ class kolab_folders extends rcube_plugin
|
|||
$this->rc = rcmail::get_instance();
|
||||
|
||||
// Folder listing hooks
|
||||
$this->add_hook('mailboxes_list', array($this, 'mailboxes_list'));
|
||||
$this->add_hook('storage_folders', array($this, 'mailboxes_list'));
|
||||
|
||||
// Folder manager hooks
|
||||
$this->add_hook('folder_form', array($this, 'folder_form'));
|
||||
|
@ -72,7 +72,6 @@ class kolab_folders extends rcube_plugin
|
|||
$folderdata = $this->get_folder_type_list($args['root'].$args['name'], true);
|
||||
|
||||
if (!is_array($folderdata)) {
|
||||
$args['folders'] = false;
|
||||
return $args;
|
||||
}
|
||||
|
||||
|
@ -91,9 +90,11 @@ class kolab_folders extends rcube_plugin
|
|||
return $args;
|
||||
}
|
||||
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
// Get folders list
|
||||
if ($args['mode'] == 'LIST') {
|
||||
$args['folders'] = $this->rc->imap->conn->listMailboxes($args['root'], $args['name']);
|
||||
$args['folders'] = $storage->conn->listMailboxes($args['root'], $args['name']);
|
||||
}
|
||||
else {
|
||||
$args['folders'] = $this->list_subscribed($args['root'], $args['name']);
|
||||
|
@ -200,16 +201,21 @@ class kolab_folders extends rcube_plugin
|
|||
$ctype = 'mail';
|
||||
}
|
||||
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
// Don't allow changing type of shared folder, according to ACL
|
||||
if (strlen($mbox)) {
|
||||
$options = $this->rc->imap->mailbox_info($mbox);
|
||||
$options = $storage->folder_info($mbox);
|
||||
if ($options['namespace'] != 'personal' && !in_array('a', $options['rights'])) {
|
||||
if (in_array($ctype, $this->types))
|
||||
if (in_array($ctype, $this->types)) {
|
||||
$value = $this->gettext('foldertype'.$ctype);
|
||||
else
|
||||
}
|
||||
else {
|
||||
$value = $ctype;
|
||||
if ($subtype)
|
||||
}
|
||||
if ($subtype) {
|
||||
$value .= ' ('. ($subtype == 'default' ? $this->gettext('default') : $subtype) .')';
|
||||
}
|
||||
|
||||
$args['form']['props']['fieldsets']['settings']['content']['foldertype'] = array(
|
||||
'label' => $this->gettext('folderctype'),
|
||||
|
@ -298,13 +304,15 @@ class kolab_folders extends rcube_plugin
|
|||
|
||||
$ctype .= $subtype ? '.'.$subtype : '';
|
||||
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
// Create folder
|
||||
if (!strlen($old_mbox)) {
|
||||
// By default don't subscribe to non-mail folders
|
||||
if ($subscribe)
|
||||
$subscribe = (bool) preg_match('/^mail/', $ctype);
|
||||
|
||||
$result = $this->rc->imap->create_mailbox($mbox, $subscribe);
|
||||
$result = $storage->create_folder($mbox, $subscribe);
|
||||
// Set folder type
|
||||
if ($result) {
|
||||
$this->set_folder_type($mbox, $ctype);
|
||||
|
@ -313,7 +321,7 @@ class kolab_folders extends rcube_plugin
|
|||
// Rename folder
|
||||
else {
|
||||
if ($old_mbox != $mbox) {
|
||||
$result = $this->rc->imap->rename_mailbox($old_mbox, $mbox);
|
||||
$result = $storage->rename_folder($old_mbox, $mbox);
|
||||
}
|
||||
else {
|
||||
$result = true;
|
||||
|
@ -348,9 +356,11 @@ class kolab_folders extends rcube_plugin
|
|||
*/
|
||||
function metadata_support()
|
||||
{
|
||||
return $this->rc->imap->get_capability('METADATA') ||
|
||||
$this->rc->imap->get_capability('ANNOTATEMORE') ||
|
||||
$this->rc->imap->get_capability('ANNOTATEMORE2');
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
return $storage->get_capability('METADATA') ||
|
||||
$storage->get_capability('ANNOTATEMORE') ||
|
||||
$storage->get_capability('ANNOTATEMORE2');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -362,7 +372,8 @@ class kolab_folders extends rcube_plugin
|
|||
*/
|
||||
function get_folder_type($folder)
|
||||
{
|
||||
$folderdata = $this->rc->imap->get_metadata($folder, array(kolab_folders::CTYPE_KEY));
|
||||
$storage = $this->rc->get_storage();
|
||||
$folderdata = $storage->get_metadata($folder, array(kolab_folders::CTYPE_KEY));
|
||||
|
||||
return explode('.', $folderdata[$folder][kolab_folders::CTYPE_KEY]);
|
||||
}
|
||||
|
@ -377,7 +388,9 @@ class kolab_folders extends rcube_plugin
|
|||
*/
|
||||
function set_folder_type($folder, $type='mail')
|
||||
{
|
||||
return $this->rc->imap->set_metadata($folder, array(kolab_folders::CTYPE_KEY => $type));
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
return $storage->set_metadata($folder, array(kolab_folders::CTYPE_KEY => $type));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -390,23 +403,23 @@ class kolab_folders extends rcube_plugin
|
|||
*/
|
||||
private function list_subscribed($root='', $name='*')
|
||||
{
|
||||
$imap = $this->rc->imap;
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
// Code copied from rcube_imap::_list_mailboxes()
|
||||
// Server supports LIST-EXTENDED, we can use selection options
|
||||
// #1486225: Some dovecot versions returns wrong result using LIST-EXTENDED
|
||||
if (!$this->rc->config->get('imap_force_lsub') && $imap->get_capability('LIST-EXTENDED')) {
|
||||
// This will also set mailbox options, LSUB doesn't do that
|
||||
$a_folders = $imap->conn->listMailboxes($root, $name,
|
||||
$a_folders = $storage->conn->listMailboxes($root, $name,
|
||||
NULL, array('SUBSCRIBED'));
|
||||
|
||||
// remove non-existent folders
|
||||
if (is_array($a_folders) && $name = '*') {
|
||||
foreach ($a_folders as $idx => $folder) {
|
||||
if ($imap->conn->data['LIST'] && ($opts = $imap->conn->data['LIST'][$folder])
|
||||
if ($storage->conn->data['LIST'] && ($opts = $storage->conn->data['LIST'][$folder])
|
||||
&& in_array('\\NonExistent', $opts)
|
||||
) {
|
||||
$imap->conn->unsubscribe($folder);
|
||||
$storage->conn->unsubscribe($folder);
|
||||
unset($a_folders[$idx]);
|
||||
}
|
||||
}
|
||||
|
@ -414,17 +427,17 @@ class kolab_folders extends rcube_plugin
|
|||
}
|
||||
// retrieve list of folders from IMAP server using LSUB
|
||||
else {
|
||||
$a_folders = $imap->conn->listSubscribed($root, $name);
|
||||
$a_folders = $storage->conn->listSubscribed($root, $name);
|
||||
|
||||
// unsubscribe non-existent folders, remove from the list
|
||||
if (is_array($a_folders) && $name == '*') {
|
||||
foreach ($a_folders as $idx => $folder) {
|
||||
if ($imap->conn->data['LIST'] && ($opts = $imap->conn->data['LIST'][$folder])
|
||||
if ($storage->conn->data['LIST'] && ($opts = $storage->conn->data['LIST'][$folder])
|
||||
&& in_array('\\Noselect', $opts)
|
||||
) {
|
||||
// Some servers returns \Noselect for existing folders
|
||||
if (!$imap->mailbox_exists($folder)) {
|
||||
$imap->conn->unsubscribe($folder);
|
||||
if (!$storage->folder_exists($folder)) {
|
||||
$storage->conn->unsubscribe($folder);
|
||||
unset($a_folders[$idx]);
|
||||
}
|
||||
}
|
||||
|
@ -445,15 +458,17 @@ class kolab_folders extends rcube_plugin
|
|||
*/
|
||||
function get_folder_type_list($mbox, $create_defaults = false)
|
||||
{
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
// Use mailboxes. prefix so the cache will be cleared by core
|
||||
// together with other mailboxes-related cache data
|
||||
$cache_key = 'mailboxes.folder-type.'.$mbox;
|
||||
|
||||
// get cached metadata
|
||||
$metadata = $this->rc->imap->get_cache($cache_key);
|
||||
$metadata = $storage->get_cache($cache_key);
|
||||
|
||||
if (!is_array($metadata)) {
|
||||
$metadata = $this->rc->imap->get_metadata($mbox, kolab_folders::CTYPE_KEY);
|
||||
$metadata = $storage->get_metadata($mbox, kolab_folders::CTYPE_KEY);
|
||||
$need_update = true;
|
||||
}
|
||||
|
||||
|
@ -473,7 +488,7 @@ class kolab_folders extends rcube_plugin
|
|||
|
||||
// write mailboxlist to cache
|
||||
if ($need_update) {
|
||||
$this->rc->imap->update_cache($cache_key, $metadata);
|
||||
$storage->update_cache($cache_key, $metadata);
|
||||
}
|
||||
|
||||
return $metadata;
|
||||
|
@ -488,6 +503,7 @@ class kolab_folders extends rcube_plugin
|
|||
*/
|
||||
function get_default_folder($type)
|
||||
{
|
||||
$storage = $this->rc->get_storage();
|
||||
$folderdata = $this->get_folder_type_list('*');
|
||||
|
||||
if (!is_array($folderdata)) {
|
||||
|
@ -495,7 +511,7 @@ class kolab_folders extends rcube_plugin
|
|||
}
|
||||
|
||||
$type .= '.default';
|
||||
$namespace = $this->rc->imap->get_namespace();
|
||||
$namespace = $storage->get_namespace();
|
||||
|
||||
// get all folders of specified type
|
||||
$folderdata = array_intersect($folderdata, array($type));
|
||||
|
@ -552,7 +568,8 @@ class kolab_folders extends rcube_plugin
|
|||
*/
|
||||
private function create_default_folders(&$folderdata, $cache_key = null)
|
||||
{
|
||||
$namespace = $this->rc->imap->get_namespace();
|
||||
$storage = $this->rc->get_storage();
|
||||
$namespace = $storage->get_namespace();
|
||||
$defaults = array();
|
||||
$need_update = false;
|
||||
|
||||
|
@ -573,7 +590,7 @@ class kolab_folders extends rcube_plugin
|
|||
$opt_name = 'kolab_folders_' . $type . '_' . $subtype;
|
||||
if ($folder = $this->rc->config->get($opt_name)) {
|
||||
// convert configuration value to UTF7-IMAP charset
|
||||
$folder = rcube_charset_convert($folder, RCMAIL_CHARSET, 'UTF7-IMAP');
|
||||
$folder = rcube_charset::convert($folder, RCMAIL_CHARSET, 'UTF7-IMAP');
|
||||
// and namespace prefix if needed
|
||||
if ($prefix && strpos($folder, $prefix) === false && $folder != 'INBOX') {
|
||||
$folder = $prefix . $folder;
|
||||
|
@ -621,8 +638,8 @@ class kolab_folders extends rcube_plugin
|
|||
list($type1, $type2) = explode('.', $type);
|
||||
|
||||
// create folder
|
||||
if ($type1 != 'mail' || !$this->rc->imap->mailbox_exists($foldername)) {
|
||||
$this->rc->imap->create_mailbox($foldername, $type1 == 'mail');
|
||||
if ($type1 != 'mail' || !$storage->folder_exists($foldername)) {
|
||||
$storage->create_folder($foldername, $type1 == 'mail');
|
||||
}
|
||||
|
||||
// set type
|
||||
|
@ -637,7 +654,8 @@ class kolab_folders extends rcube_plugin
|
|||
|
||||
// update cache
|
||||
if ($need_update && $cache_key) {
|
||||
$this->rc->imap->update_cache($cache_key, $folderdata);
|
||||
$storage->update_cache($cache_key, $folderdata);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -64,11 +64,12 @@ class kolab_zpush extends rcube_plugin
|
|||
*/
|
||||
public function init_imap()
|
||||
{
|
||||
$this->rc->imap_connect();
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
$this->cache = $this->rc->get_cache('zpush', 'db', 900);
|
||||
$this->cache->expunge();
|
||||
|
||||
if ($meta = $this->rc->imap->get_metadata(self::ROOT_MAILBOX, self::ACTIVESYNC_KEY)) {
|
||||
if ($meta = $storage->get_metadata(self::ROOT_MAILBOX, self::ACTIVESYNC_KEY)) {
|
||||
// clear cache if device config changed
|
||||
if (($oldmeta = $this->cache->read('devicemeta')) && $oldmeta != $meta)
|
||||
$this->cache->remove();
|
||||
|
@ -85,13 +86,13 @@ class kolab_zpush extends rcube_plugin
|
|||
*/
|
||||
public function json_command()
|
||||
{
|
||||
$cmd = get_input_value('cmd', RCUBE_INPUT_GPC);
|
||||
$imei = get_input_value('id', RCUBE_INPUT_GPC);
|
||||
$storage = $this->rc->get_storage();
|
||||
$cmd = get_input_value('cmd', RCUBE_INPUT_GPC);
|
||||
$imei = get_input_value('id', RCUBE_INPUT_GPC);
|
||||
|
||||
switch ($cmd) {
|
||||
case 'load':
|
||||
$result = array();
|
||||
$this->init_imap();
|
||||
$devices = $this->list_devices();
|
||||
if ($device = $devices[$imei]) {
|
||||
$result['id'] = $imei;
|
||||
|
@ -113,7 +114,6 @@ class kolab_zpush extends rcube_plugin
|
|||
break;
|
||||
|
||||
case 'save':
|
||||
$this->init_imap();
|
||||
$devices = $this->list_devices();
|
||||
$syncmode = intval(get_input_value('syncmode', RCUBE_INPUT_POST));
|
||||
$devicealias = get_input_value('devicealias', RCUBE_INPUT_POST, true);
|
||||
|
@ -132,13 +132,13 @@ class kolab_zpush extends rcube_plugin
|
|||
$this->root_meta['DEVICE'][$imei]['LAXPIC'] = $laxpic;
|
||||
$this->root_meta['FOLDER'][$imei]['S'] = intval($subsciptions[self::ROOT_MAILBOX]);
|
||||
|
||||
$err = !$this->rc->imap->set_metadata(self::ROOT_MAILBOX,
|
||||
$err = !$storage->set_metadata(self::ROOT_MAILBOX,
|
||||
array(self::ACTIVESYNC_KEY => $this->serialize_metadata($this->root_meta)));
|
||||
|
||||
// update cached meta data
|
||||
if (!$err) {
|
||||
$this->cache->remove('devicemeta');
|
||||
$this->cache->write('devicemeta', $this->rc->imap->get_metadata(self::ROOT_MAILBOX, self::ACTIVESYNC_KEY));
|
||||
$this->cache->write('devicemeta', $storage->get_metadata(self::ROOT_MAILBOX, self::ACTIVESYNC_KEY));
|
||||
}
|
||||
}
|
||||
// iterate over folders list and update metadata if necessary
|
||||
|
@ -153,12 +153,12 @@ class kolab_zpush extends rcube_plugin
|
|||
unset($meta['TYPE']);
|
||||
|
||||
// read metadata first
|
||||
$folderdata = $this->rc->imap->get_metadata($folder, array(self::ACTIVESYNC_KEY));
|
||||
$folderdata = $storage->get_metadata($folder, array(self::ACTIVESYNC_KEY));
|
||||
if ($asyncdata = $folderdata[$folder][self::ACTIVESYNC_KEY])
|
||||
$metadata = $this->unserialize_metadata($asyncdata);
|
||||
$metadata['FOLDER'] = $meta;
|
||||
|
||||
$err |= !$this->rc->imap->set_metadata($folder, array(self::ACTIVESYNC_KEY => $this->serialize_metadata($metadata)));
|
||||
$err |= !$storage->set_metadata($folder, array(self::ACTIVESYNC_KEY => $this->serialize_metadata($metadata)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -184,9 +184,9 @@ class kolab_zpush extends rcube_plugin
|
|||
unset($this->root_meta['DEVICE'][$imei], $this->root_meta['FOLDER'][$imei]);
|
||||
|
||||
// update annotation and cached meta data
|
||||
if ($success = $this->rc->imap->set_metadata(self::ROOT_MAILBOX, array(self::ACTIVESYNC_KEY => $this->serialize_metadata($this->root_meta)))) {
|
||||
if ($success = $storage->set_metadata(self::ROOT_MAILBOX, array(self::ACTIVESYNC_KEY => $this->serialize_metadata($this->root_meta)))) {
|
||||
$this->cache->remove('devicemeta');
|
||||
$this->cache->write('devicemeta', $this->rc->imap->get_metadata(self::ROOT_MAILBOX, self::ACTIVESYNC_KEY));
|
||||
$this->cache->write('devicemeta', $storage->get_metadata(self::ROOT_MAILBOX, self::ACTIVESYNC_KEY));
|
||||
|
||||
// remove device annotation in every folder
|
||||
foreach ($this->folders_meta() as $folder => $meta) {
|
||||
|
@ -199,12 +199,12 @@ class kolab_zpush extends rcube_plugin
|
|||
unset($meta[$imei], $meta['TYPE']);
|
||||
|
||||
// read metadata first and update FOLDER property
|
||||
$folderdata = $this->rc->imap->get_metadata($folder, array(self::ACTIVESYNC_KEY));
|
||||
$folderdata = $storage->get_metadata($folder, array(self::ACTIVESYNC_KEY));
|
||||
if ($asyncdata = $folderdata[$folder][self::ACTIVESYNC_KEY])
|
||||
$metadata = $this->unserialize_metadata($asyncdata);
|
||||
$metadata['FOLDER'] = $meta;
|
||||
|
||||
if ($this->rc->imap->set_metadata($folder, array(self::ACTIVESYNC_KEY => $this->serialize_metadata($metadata)))) {
|
||||
if ($storage->set_metadata($folder, array(self::ACTIVESYNC_KEY => $this->serialize_metadata($metadata)))) {
|
||||
$this->folders_meta[$folder] = $metadata;
|
||||
$this->folders_meta[$folder]['TYPE'] = $type;
|
||||
}
|
||||
|
@ -236,12 +236,12 @@ class kolab_zpush extends rcube_plugin
|
|||
*/
|
||||
public function config_view()
|
||||
{
|
||||
require_once($this->home . '/kolab_zpush_ui.php');
|
||||
require_once $this->home . '/kolab_zpush_ui.php';
|
||||
|
||||
$this->init_imap();
|
||||
$storage = $this->rc->get_storage();
|
||||
|
||||
// checks if IMAP server supports any of METADATA, ANNOTATEMORE, ANNOTATEMORE2
|
||||
if (!($this->rc->imap->get_capability('METADATA') || $this->rc->imap->get_capability('ANNOTATEMORE') || $this->rc->imap->get_capability('ANNOTATEMORE2'))) {
|
||||
if (!($storage->get_capability('METADATA') || $storage->get_capability('ANNOTATEMORE') || $storage->get_capability('ANNOTATEMORE2'))) {
|
||||
$this->rc->output->show_message($this->gettext('notsupported'), 'error');
|
||||
}
|
||||
|
||||
|
@ -286,9 +286,11 @@ class kolab_zpush extends rcube_plugin
|
|||
}
|
||||
// fetch folder data from server
|
||||
else {
|
||||
$this->folders = $this->rc->imap->list_folders();
|
||||
$storage = $this->rc->get_storage();
|
||||
$this->folders = $storage->list_folders();
|
||||
|
||||
foreach ($this->folders as $folder) {
|
||||
$folderdata = $this->rc->imap->get_metadata($folder, array(self::ACTIVESYNC_KEY, self::CTYPE_KEY));
|
||||
$folderdata = $storage->get_metadata($folder, array(self::ACTIVESYNC_KEY, self::CTYPE_KEY));
|
||||
$foldertype = explode('.', $folderdata[$folder][self::CTYPE_KEY]);
|
||||
|
||||
if ($asyncdata = $folderdata[$folder][self::ACTIVESYNC_KEY]) {
|
||||
|
|
Loading…
Add table
Reference in a new issue