X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_mail-methods-kolab.inc;h=c0606046b0c9094667c53e70d3b0bd4cc58b6d13;hb=5ac46e680e92e8e585e88560985ca46d8211a4b8;hp=0d51b2d23ccae8f30d98d33d0dc4d0cb4151f4c9;hpb=6cd6e23d05122acac3b3e678c02f2f1643076dd1;p=gosa.git diff --git a/include/class_mail-methods-kolab.inc b/include/class_mail-methods-kolab.inc index 0d51b2d23..c0606046b 100644 --- a/include/class_mail-methods-kolab.inc +++ b/include/class_mail-methods-kolab.inc @@ -17,7 +17,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -require_once("class_mail-methods-cyrus.inc"); class mailMethodKolab extends mailMethodCyrus { @@ -30,56 +29,11 @@ class mailMethodKolab extends mailMethodCyrus "gosaMailQuota" => "cyrus-userquota", "gosaMailServer" => "kolabHomeServer"); - function mailMethodKolab($config) + function mailMethodKolab(&$config) { $this->config= $config->data['SERVERS']['IMAP']; } - /* return all folders of the users mailbox*/ - function getMailboxList($folder, $uid= "") - { - 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]; - - /* 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){ - - /* 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) { } @@ -89,18 +43,17 @@ class mailMethodKolab extends mailMethodCyrus return (TRUE); } - function deleteMailbox($folder) - { - return (TRUE); - } - - /* Get quota and divide it by 1024, because in gosa we display in MB but we get Kb */ function getQuota($folder) { $result= array('quotaUsage' => '', 'gosaMailQuota' => ''); + /* Only use lower case folder names, if folder name is like "@domain.com" */ + if(preg_match("/@/",$folder)){ + $folder = strtolower($folder); + } + error_reporting(0); /* Load quota settings */ @@ -119,7 +72,7 @@ class mailMethodKolab extends mailMethodCyrus return(false); } - error_reporting(E_ALL); + error_reporting(E_ALL | E_STRICT); return ($result); } @@ -131,7 +84,7 @@ class mailMethodKolab extends mailMethodCyrus So overwrite uid to match these folder names. Else we can't read quota settings etc. #FIXME is there a better way to detect if it is 'shared.' or 'shared+' or 'kolab+shared.' or what ever ?*/ if(get_class($mailObject) == "mailgroup"){ - $mailObject->uid = "shared.".$mailObject->uid."@".preg_replace("/^.*@/","",$mailObject->mail); + $mailObject->uid = "shared.".$mailObject->uid."@".preg_replace("/^.*@/","",$mailObject->mail); } /* Convert attributes and objectClasses */ @@ -147,6 +100,12 @@ class mailMethodKolab extends mailMethodCyrus $mailObject->attrs[$dest]= $mailObject->attrs[$source]; $mailObject->$dest= $mailObject->attrs[$source]; + /* Ensure that cleanup will recognize the ampped attributes too */ + if(isset($mailObject->saved_attributes)){ + $mailObject->saved_attributes[$dest] = $mailObject->attrs[$source]; + $mailObject->saved_attributes[$source] = $mailObject->attrs[$source]; + } + unset ($mailObject->$dest['count']); unset ($mailObject->attrs[$source]); } @@ -250,7 +209,7 @@ class mailMethodKolab extends mailMethodCyrus } /* Save shared folder target */ - $mailObject->attrs['gosaSharedFolderTarget']= "kolab+shared.".$mailObject->uid; + $mailObject->attrs['gosaSharedFolderTarget']= "kolab+shared.".$mailObject->mail; /* Kolab shared folder names are like ' shared.uid@server.de ' So overwrite uid to match these folder names. Else we can't read quota settings etc. @@ -283,9 +242,25 @@ class mailMethodKolab extends mailMethodCyrus /* Only add kolab delete Flag in case of an user.mailAccount */ if(!in_array("posixGroup", $mailObject->attrs['objectClass'])){ $mailObject->attrs['kolabDeleteFlag']= preg_replace('%imap://%', '', $mailObject->gosaMailServer); + }else{ + /* Kolab shared folder names are like ' shared.uid@server.de ' + So overwrite uid to match these folder names. Else we can't read quota settings etc. + #FIXME is there a better way to detect if it is 'shared.' or 'shared+' or 'kolab+shared.' or what ever ?*/ + $mailObject->uid = "shared.".$mailObject->uid."@".preg_replace("/^.*@/","",$mailObject->mail); + } } + + function deleteMailbox($folder) + { + /* Remove shared folders and skip removing users. + KolabD is not able to remove shared folders yet, so we do it instead */ + if(preg_match("/^shared/",$folder)){ + return mailMethodCyrus::deleteMailbox($folder); + } + return (TRUE); + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: