Move some methods to kolab_core plugin (will be used by calendar plugin)
This commit is contained in:
parent
54946cf2ca
commit
12f5ac34f0
2 changed files with 103 additions and 72 deletions
|
@ -148,60 +148,7 @@ class rcube_kolab_contacts extends rcube_addressbook
|
||||||
*/
|
*/
|
||||||
public function get_name()
|
public function get_name()
|
||||||
{
|
{
|
||||||
$folder = $this->imap_folder;
|
$folder = rcube_kolab::object_name($this->imap_folder, $this->namespace);
|
||||||
$namespace = $_SESSION['imap_namespace']; // from rcube_imap class
|
|
||||||
$found = false;
|
|
||||||
|
|
||||||
if (!empty($namespace['shared'])) {
|
|
||||||
foreach ($namespace['shared'] as $ns) {
|
|
||||||
if (strlen($ns[0]) && strpos($folder, $ns[0]) === 0) {
|
|
||||||
$prefix = '';
|
|
||||||
$folder = substr($folder, strlen($ns[0]));
|
|
||||||
$delim = $ns[1];
|
|
||||||
$found = true;
|
|
||||||
$this->namespace = 'shared';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!$found && !empty($namespace['other'])) {
|
|
||||||
foreach ($namespace['other'] as $ns) {
|
|
||||||
if (strlen($ns[0]) && strpos($folder, $ns[0]) === 0) {
|
|
||||||
// remove namespace prefix
|
|
||||||
$folder = substr($folder, strlen($ns[0]));
|
|
||||||
$delim = $ns[1];
|
|
||||||
// get username
|
|
||||||
$pos = strpos($folder, $delim);
|
|
||||||
$prefix = '('.substr($folder, 0, $pos).') ';
|
|
||||||
$found = true;
|
|
||||||
$this->namespace = 'other';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!$found && !empty($namespace['personal'])) {
|
|
||||||
foreach ($namespace['personal'] as $ns) {
|
|
||||||
if (strlen($ns[0]) && strpos($folder, $ns[0]) === 0) {
|
|
||||||
// remove namespace prefix
|
|
||||||
$folder = substr($folder, strlen($ns[0]));
|
|
||||||
$prefix = '';
|
|
||||||
$delim = $ns[1];
|
|
||||||
$found = true;
|
|
||||||
$this->namespace = 'personal';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($delim))
|
|
||||||
$delim = $_SESSION['imap_delimiter']; // from rcube_imap class
|
|
||||||
|
|
||||||
$folder = rcube_charset_convert($folder, 'UTF7-IMAP');
|
|
||||||
$folder = str_replace($delim, ' » ', $folder);
|
|
||||||
|
|
||||||
if ($prefix)
|
|
||||||
$folder = $prefix . ' ' . $folder;
|
|
||||||
|
|
||||||
return $folder;
|
return $folder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,26 +182,11 @@ class rcube_kolab_contacts extends rcube_addressbook
|
||||||
*/
|
*/
|
||||||
public function get_namespace()
|
public function get_namespace()
|
||||||
{
|
{
|
||||||
if ($this->namespace) {
|
if ($this->namespace === null) {
|
||||||
return $this->namespace;
|
$this->namespace = rcube_kolab::folder_namespace($this->imap_folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
$folder = $this->imap_folder;
|
return $this->namespace;
|
||||||
$namespace = $_SESSION['imap_namespace']; // from rcube_imap class
|
|
||||||
|
|
||||||
if (!empty($namespace)) {
|
|
||||||
foreach ($namespace as $nsname => $nsvalue) {
|
|
||||||
if (in_array($nsname, array('personal', 'other', 'shared')) && !empty($nsvalue)) {
|
|
||||||
foreach ($nsvalue as $ns) {
|
|
||||||
if (strlen($ns[0]) && strpos($folder, $ns[0]) === 0) {
|
|
||||||
return $this->namespace = $nsname;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->namespace = 'personal';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -222,4 +222,103 @@ class rcube_kolab
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for human-readable name of Kolab object (folder)
|
||||||
|
* See http://wiki.kolab.org/UI-Concepts/Folder-Listing for reference
|
||||||
|
*
|
||||||
|
* @param string $folder IMAP folder name (UTF7-IMAP)
|
||||||
|
* @param string $namespace Will be set to namespace name of the folder
|
||||||
|
*
|
||||||
|
* @return string Name of the folder-object
|
||||||
|
*/
|
||||||
|
public static function object_name($folder, &$namespace=null)
|
||||||
|
{
|
||||||
|
$rcmail = rcmail::get_instance();
|
||||||
|
$rcmail->imap_init();
|
||||||
|
|
||||||
|
$namespace = $rcmail->imap->get_namespace();
|
||||||
|
$found = false;
|
||||||
|
|
||||||
|
if (!empty($namespace['shared'])) {
|
||||||
|
foreach ($namespace['shared'] as $ns) {
|
||||||
|
if (strlen($ns[0]) && strpos($folder, $ns[0]) === 0) {
|
||||||
|
$prefix = '';
|
||||||
|
$folder = substr($folder, strlen($ns[0]));
|
||||||
|
$delim = $ns[1];
|
||||||
|
$found = true;
|
||||||
|
$namespace = 'shared';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$found && !empty($namespace['other'])) {
|
||||||
|
foreach ($namespace['other'] as $ns) {
|
||||||
|
if (strlen($ns[0]) && strpos($folder, $ns[0]) === 0) {
|
||||||
|
// remove namespace prefix
|
||||||
|
$folder = substr($folder, strlen($ns[0]));
|
||||||
|
$delim = $ns[1];
|
||||||
|
// get username
|
||||||
|
$pos = strpos($folder, $delim);
|
||||||
|
$prefix = '('.substr($folder, 0, $pos).') ';
|
||||||
|
$found = true;
|
||||||
|
$namespace = 'other';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$found && !empty($namespace['personal'])) {
|
||||||
|
foreach ($namespace['personal'] as $ns) {
|
||||||
|
if (strlen($ns[0]) && strpos($folder, $ns[0]) === 0) {
|
||||||
|
// remove namespace prefix
|
||||||
|
$folder = substr($folder, strlen($ns[0]));
|
||||||
|
$prefix = '';
|
||||||
|
$delim = $ns[1];
|
||||||
|
$found = true;
|
||||||
|
$namespace = 'personal';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($delim))
|
||||||
|
$delim = $rcmail->imap->get_hierarchy_delimiter();
|
||||||
|
|
||||||
|
$folder = rcube_charset_convert($folder, 'UTF7-IMAP');
|
||||||
|
$folder = str_replace($delim, ' » ', $folder);
|
||||||
|
|
||||||
|
if ($prefix)
|
||||||
|
$folder = $prefix . ' ' . $folder;
|
||||||
|
|
||||||
|
return $folder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Getter for the name of the namespace to which the IMAP folder belongs
|
||||||
|
*
|
||||||
|
* @param string $folder IMAP folder name (UTF7-IMAP)
|
||||||
|
*
|
||||||
|
* @return string Name of the namespace (personal, other, shared)
|
||||||
|
*/
|
||||||
|
public static function folder_namespace($folder)
|
||||||
|
{
|
||||||
|
$rcmail = rcmail::get_instance();
|
||||||
|
$rcmail->imap_init();
|
||||||
|
|
||||||
|
$namespace = $rcmail->imap->get_namespace();
|
||||||
|
|
||||||
|
if (!empty($namespace)) {
|
||||||
|
foreach ($namespace as $nsname => $nsvalue) {
|
||||||
|
if (in_array($nsname, array('personal', 'other', 'shared')) && !empty($nsvalue)) {
|
||||||
|
foreach ($nsvalue as $ns) {
|
||||||
|
if (strlen($ns[0]) && strpos($folder, $ns[0]) === 0) {
|
||||||
|
return $namespace = $nsname;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'personal';
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue