X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_mail-methods-cyrus.inc;h=6c822691b210e6088d12add1a88827abdec59e29;hb=ff88fc805eb2455b20fb6d2f9fef799f1b0787fd;hp=edb4d794121010a2f0db43bf3a7d7eac18b1853e;hpb=bee81f37faf6950148fa318c24fe7802cc7ae219;p=gosa.git diff --git a/include/class_mail-methods-cyrus.inc b/include/class_mail-methods-cyrus.inc index edb4d7941..6c822691b 100644 --- a/include/class_mail-methods-cyrus.inc +++ b/include/class_mail-methods-cyrus.inc @@ -23,9 +23,22 @@ class mailMethodCyrus extends mailMethod var $mbox= "-"; var $config; var $gosaMailServer= ""; +var $uattrib= "uid"; function mailMethodCyrus($config) { + /* Check if the mail account identification attribute + is overridden in the configuration file + */ + if(isset($config->current['MAIL_ATTRIB']) && !empty($config->current['MAIL_ATTRIB'])){ + $new_uattrib= strtolower($config->current['MAIL_ATTRIB']); + if(in_array($new_uattrib,array("mail","uid"))){ + $this->uattrib = $new_uattrib; + }else{ + trigger_error(sprintf("Unsupported MAIL_ATTRIB in gosa configuration specified, use 'mail' or 'uid', instead of '%s'.", $new_uattrib)); + } + } + $this->config= $config->data['SERVERS']['IMAP']; } @@ -70,43 +83,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']= (int) ($quota_value["STORAGE"]['usage'] / 1024); - $result['gosaMailQuota']= (int) ($quota_value["STORAGE"]['limit'] / 1024); + 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 icompatible */ - $result['quotaUsage']= (int) ($quota_value['usage'] / 1024); - $result['gosaMailQuota']= (int) ($quota_value['limit'] / 1024); + 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){ - return(false); + /* 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", mb_convert_encoding($val, "UTF-8", "UTF7-IMAP")); } } + /* 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 */ @@ -124,7 +170,7 @@ class mailMethodCyrus extends mailMethod function setQuota($folder, $gosaMailQuota) { /* Workaround for the php imap extension */ - if ($gosaMailQuota == ""){ + if (($gosaMailQuota == "") || ($gosaMailQuota== "2147483647")){ $gosaMailQuota= "2147483647"; }elseif($gosaMailQuota > 0){ $gosaMailQuota = $gosaMailQuota *1024;