"alias", "gosaMailQuota" => "cyrus-userquota", "gosaMailServer" => "kolabHomeServer"); function mailMethodKolab($config) { $this->config= $config->data['SERVERS']['IMAP']; } function updateMailbox($folder) { } function setQuota($folder, $gosaMailQuota) { return (TRUE); } function deleteMailbox($folder) { return (TRUE); } function fixAttributesOnLoad(&$mailObject) { /* Convert attributes and objectClasses */ foreach ($this->attribute_map as $dest => $source){ /* Hickert 11.11.05 : Alternate email addresses were saved, but not displayed again. if (isset($mailObject->attrs[$source])){ $mailObject->attrs[$dest]= $mailObject->attrs[$source]; unset ($mailObject->attrs[$source]); */ if (isset($mailObject->attrs[$source])){ unset($mailObject->attrs[$source]['count']); $mailObject->attrs[$dest]= $mailObject->attrs[$source]; $mailObject->$dest= $mailObject->attrs[$source]; unset ($mailObject->$dest['count']); unset ($mailObject->attrs[$source]); } } /* Adjust server name if needed */ foreach ($mailObject->config->data['SERVERS']['IMAP'] as $srv => $dummy){ if (preg_match("%".$mailObject->attrs['gosaMailServer'][0]."$%", $srv)){ $mailObject->attrs['gosaMailServer']= array(0 => $srv, "count" => 1); break; } } } function fixAttributesOnStore(&$mailObject) { global $config; /* Convert attributes and objectClasses */ foreach ($this->attribute_map as $source => $dest){ if (isset($mailObject->attrs[$source])){ $mailObject->attrs[$dest]= $mailObject->attrs[$source]; unset ($mailObject->attrs[$source]); } } $objectclasses= array(); foreach ($mailObject->attrs['objectClass'] as $oc){ if ($oc != 'kolabInetOrgPerson' && $oc != 'kolabSharedFolder'){ $objectclasses[]= $oc; } } $mailObject->attrs['objectClass']= $objectclasses; if (in_array("posixGroup", $mailObject->attrs['objectClass'])){ /* Add kolabSharedFoleder Class */ $mailObject->attrs['objectClass'][]= 'kolabSharedFolder'; /* Work on acl attribute */ $new_acl= array(); foreach ($mailObject->attrs['acl'] as $uacl){ /* Get user=(mail) & acls */ list($user, $acl) = split(" ", $uacl); /* Add al users which have seperated acls %members% are all users in this group, which have the standard group acl */ if ($user != "%members%"){ $new_acl[$user]= $uacl; } else { /* All groupmembers will be added */ $ldap = $config->get_ldap_link(); $ldap->cd($config->current['BASE']); foreach ($mailObject->members as $member){ /* Get user mail address .... */ $ldap->search("(&(objectClass=person)(|(uid=".$member.")(mail=".$member.")))",array("mail")); $res = $ldap->fetch(); /* Default mail address is set to uid - So if there is no mail address defined the uid is added */ $mail = $member; /* Use mail address if it is available */ if(isset($res['mail'][0])){ $mail = $res['mail'][0]; } /* only append this mail/permission string to acl, if there arn't already some (special) configs for this user */ $found =false; foreach($mailObject->imapacl as $mailA => $acl){ if(strtolower(trim($mailA))==strtolower(trim($mail))){ $found = true; } } /* Skipp user, with no email adress too */ if($member == $mail){ $found = true; } /* Append new user acl */ if(!$found){ $new_acl[$member]= "$mail $acl"; } /* Old line */ // $new_acl[$member]= "$member $acl"; } } } /* Assign new acls */ $mailObject->attrs['acl']= array(); foreach ($new_acl as $key => $value){ $mailObject->attrs['acl'][]= $value; } } else { $mailObject->attrs['objectClass'][]= 'kolabInetOrgPerson'; } /* Remove imap:// tagging */ $mailObject->attrs['kolabHomeServer']= preg_replace('%imap://%', '', $mailObject->attrs['kolabHomeServer']); $mailObject->attrs['gosaMailServer']= $mailObject->attrs['kolabHomeServer']; $mailObject->attrs['kolabDeleteFlag']= array(); } function fixAttributesOnRemove(&$mailObject) { /* Add attribute for object deletion and remove GOsa specific values from entry. */ foreach($this->attribute_map as $kolabAttr){ $mailObject->attrs[$kolabAttr] = array(); } $mailObject->attrs['kolabDeleteFlag']= preg_replace('%imap://%', '', $mailObject->gosaMailServer); } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>