X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_mail-methods-cyrus.inc;h=8fecaa217ab5bf0400083b7dd5b0444bc23e9a79;hb=67f6e5cf3fb83f779420c6b9a1451b9f7b6b7c65;hp=2c5c532cb96e60ebccc4efc55ecd2a6dded10dcc;hpb=23c6115c65a63970b01c54675c20afc99e8110a0;p=gosa.git diff --git a/include/class_mail-methods-cyrus.inc b/include/class_mail-methods-cyrus.inc index 2c5c532cb..8fecaa217 100644 --- a/include/class_mail-methods-cyrus.inc +++ b/include/class_mail-methods-cyrus.inc @@ -23,6 +23,7 @@ class mailMethodCyrus extends mailMethod var $mbox= "-"; var $config; var $gosaMailServer= ""; +var $uattrib= "uid"; function mailMethodCyrus($config) { @@ -31,11 +32,25 @@ class mailMethodCyrus extends mailMethod function connect($gosaMailServer) { + $cfg=array(); + /* Connect to IMAP server. I don't want to see these warning here... */ $this->gosaMailServer= $gosaMailServer; - $cfg= $this->config[$gosaMailServer]; - + if (!isset($this->config[$gosaMailServer])){ + print_red(_("Warning: Account has an invalid mailserver string!")); + } else { + $cfg= $this->config[$gosaMailServer]; + } /* For some reason, hiding errors with @ does not wor here... */ + if(!isset($cfg['connect'])) $cfg['connect']=""; + if(!isset($cfg['admin'])) $cfg['admin']=""; + if(!isset($cfg['password'])) $cfg['password']=""; + + /* Setting connect timeout to 10 seconds, + else the GOsa UI may freeze for 60 seconds. + (PHP default is 'default_socket_timeout = 60') */ + imap_timeout(1, 10 ); + $this->mbox = @imap_open($cfg['connect'], $cfg['admin'], $cfg['password'], OP_HALFOPEN); /* Mailbox reachable? */ @@ -61,41 +76,76 @@ class mailMethodCyrus extends mailMethod if(is_array($quota_value)) { if (isset($quota_value["STORAGE"]) && is_array($quota_value["STORAGE"])){ /* use for PHP >= 4.3 */ - $result['quotaUsage']= $quota_value["STORAGE"]['usage']; - $result['gosaMailQuota']= $quota_value["STORAGE"]['limit']; + if($quota_value["STORAGE"]['limit'] == 2147483647){ + $result['quotaUsage']= (int) ($quota_value["STORAGE"]['usage'] / 1024); + $result['gosaMailQuota']= (int) ($quota_value["STORAGE"]['limit'] ); + }else{ + $result['quotaUsage']= (int) ($quota_value["STORAGE"]['usage'] / 1024); + $result['gosaMailQuota']= (int) ($quota_value["STORAGE"]['limit'] / 1024); + } } else { - /* backward compatible */ - $result['quotaUsage']= $quota_value['usage']; - $result['gosaMailQuota']= $quota_value['limit']; + /* backward icompatible */ + if($quota_value['usage'] == 2147483647){ + $result['quotaUsage']= (int) ($quota_value['usage'] / 1024); + $result['gosaMailQuota']= (int) ($quota_value['limit'] ); + }else{ + $result['quotaUsage']= (int) ($quota_value['usage'] / 1024); + $result['gosaMailQuota']= (int) ($quota_value['limit'] / 1024); + } } + }elseif(!$quota_value){ + /* If there is no quota defined for this account, the function imap_get_quota returns false. */ + return(array("quotaUsage"=>"","gosaMailQuota"=>"")); } + error_reporting (E_ALL); - return ($result); } + + /* return all folders of the users mailbox*/ function getMailboxList($folder, $uid= "") { - /* Initialize depending on group or user mode */ - if ($uid != ""){ - $result= array("INBOX"); - } else { - $result= array(); + global $config; + $result = array(); + + /* Get domain an mail address if uid is an mail address */ + $domain = ""; + if(preg_match("/@/",$folder)){ + $domain = "@".preg_replace("/^.*@/","",$folder); + $folder = preg_replace("/@.*$/","",$folder); } /* Get list of mailboxes for combo box */ $cfg= $this->config[$this->gosaMailServer]; - $list = imap_listmailbox($this->mbox, $cfg["connect"], $folder.".*"); + + /* Create search pattern + (user/kekse*@domain.de + user.kekse*@domain.de + user.kekse* ) + depending on given folder name) */ + $q = $folder."*".$domain; + $list = imap_listmailbox($this->mbox, $cfg["connect"], $q); + + /* Create list of returned folder names */ if (is_array($list)){ foreach ($list as $val){ - $result[]=preg_replace ("/.*user\.".$uid."\./", - "INBOX.", imap_utf7_decode ($val)); + + /* Cut domain name */ + $val = preg_replace("/@.*$/","",$val); + $result[]=preg_replace ("/^.*".normalizePreg($folder)."/","INBOX", imap_utf7_decode ($val)); } } + /* Append "INBOX" to the folder array if result is empty and request comes from user dialog */ + if(empty($result) && !empty($uid)){ + $result[] = "INBOX"; + } + return ($result); } + function updateMailbox($folder) { /* Check if mailbox exists */ @@ -113,10 +163,13 @@ class mailMethodCyrus extends mailMethod function setQuota($folder, $gosaMailQuota) { /* Workaround for the php imap extension */ - if ($gosaMailQuota == ""){ - $gosaMailQuota= "0"; + if (($gosaMailQuota == "") || ($gosaMailQuota== "2147483647")){ + $gosaMailQuota= "2147483647"; + }elseif($gosaMailQuota > 0){ + $gosaMailQuota = $gosaMailQuota *1024; } - + + /* Write mail quota */ if (!imap_set_quota($this->mbox, $folder, $gosaMailQuota)){ print_red(sprintf(_("Can't write IMAP quota. Server says '%s'."), imap_last_error())); @@ -128,12 +181,6 @@ class mailMethodCyrus extends mailMethod function setSharedFolderPermissions($folder, $permissions) { - /* Show warning message in case of missing imap_getacl */ - if (!function_exists('imap_getacl')){ - print_red (_("Warning: imap_getacl is not implemented, wouldn't modify acl informations.")); - return; - } - /* Get list of subfolders */ $folders= $this->getMailboxList($folder, ""); $folders[]= $folder; @@ -144,10 +191,14 @@ class mailMethodCyrus extends mailMethod if (function_exists('imap_getacl')){ /* Remove all acl's for this folder */ - $users= imap_getacl ($this->mbox, $subfolder); - foreach ($users as $userid => $perms){ - imap_setacl ($this->mbox, $subfolder, $userid, ""); + $users= @imap_getacl ($this->mbox, $subfolder); + if(is_array($users)){ + foreach ($users as $userid => $perms){ + imap_setacl ($this->mbox, $subfolder, $userid, ""); + } } + } else { + print_red (_("Warning: imap_getacl is not implemented, can't remove acl informations.")); } /* Set permissions for this folder */