Other user uid mapping for Chwala (Bifrost#T216238)

...also use format "Doe, Jane (jane.doe)" consistently everywhere.
This commit is contained in:
Aleksander Machniak 2019-06-19 10:59:46 +00:00
parent de726e8cac
commit 15a38f87e0
2 changed files with 70 additions and 4 deletions

View file

@ -1713,15 +1713,78 @@ class kolab_storage
if (!empty($user)) { if (!empty($user)) {
if ($as_string) { if ($as_string) {
foreach ($name_attr as $attr) { foreach ($name_attr as $attr) {
if ($name = $user[$attr]) { if ($display = $user[$attr]) {
return $name; break;
} }
} }
return $user['displayname'] ?: $user['name']; if (!$display) {
$display = $user['displayname'] ?: $user['name'];
}
if ($display && $display != $folder_id) {
$display = "$display ($folder_id)";
}
return $display;
} }
return $user; return $user;
} }
} }
/**
* Chwala's 'folder_mod' hook handler for mapping other users folder names
*/
public static function folder_mod($args)
{
static $roots;
if ($roots === null) {
self::setup();
$roots = self::$imap->get_namespace('other');
}
// Note: We're working with UTF7-IMAP encoding here
if ($args['dir'] == 'in') {
foreach ((array) $roots as $root) {
if (strpos($args['folder'], $root[0]) === 0) {
// remove root and explode folder
$delim = $root[1];
$folder = explode($delim, substr($args['folder'], strlen($root[0])));
// compare first (user) part with a regexp, it's supposed
// to look like this: "Doe, Jane (uid)", so we can extract the uid
// and replace the folder with it
if (preg_match('~^[^/]+ \(([^)]+)\)$~', $folder[0], $m)) {
$folder[0] = $m[1];
$args['folder'] = $root[0] . implode($delim, $folder);
}
break;
}
}
}
else { // dir == 'out'
foreach ((array) $roots as $root) {
if (strpos($args['folder'], $root[0]) === 0) {
// remove root and explode folder
$delim = $root[1];
$folder = explode($delim, substr($args['folder'], strlen($root[0])));
// Replace uid with "Doe, Jane (uid)"
if ($user = self::folder_id2user($folder[0], true)) {
$user = str_replace($delim, '', $user);
$folder[0] = rcube_charset::convert($user, RCUBE_CHARSET, 'UTF7-IMAP');
$args['folder'] = $root[0] . implode($delim, $folder);
}
break;
}
}
}
return $args;
}
} }

View file

@ -28,7 +28,7 @@
class libkolab extends rcube_plugin class libkolab extends rcube_plugin
{ {
static $http_requests = array(); static $http_requests = array();
static $bonnie_api = false; static $bonnie_api = false;
/** /**
* Required startup method of a Roundcube plugin * Required startup method of a Roundcube plugin
@ -46,6 +46,9 @@ class libkolab extends rcube_plugin
$this->add_hook('storage_connect', array($this, 'storage_connect')); $this->add_hook('storage_connect', array($this, 'storage_connect'));
$this->add_hook('user_delete', array('kolab_storage', 'delete_user_folders')); $this->add_hook('user_delete', array('kolab_storage', 'delete_user_folders'));
// For Chwala
$this->add_hook('folder_mod', array('kolab_storage', 'folder_mod'));
$rcmail = rcube::get_instance(); $rcmail = rcube::get_instance();
try { try {
kolab_format::$timezone = new DateTimeZone($rcmail->config->get('timezone', 'GMT')); kolab_format::$timezone = new DateTimeZone($rcmail->config->get('timezone', 'GMT'));