Code

Added external resolution hook to environment
[gosa.git] / include / class_mail-methods-kolab.inc
index 346e75a07d17df563554ec82d9e8ea079e9eb02f..acb1210b3b88f25070238105c7ac01cb1f71439f 100644 (file)
@@ -44,10 +44,6 @@ class mailMethodKolab extends mailMethodCyrus
     return (TRUE);
   }
 
-  function setSharedFolderPermissions($folder, $permissions)
-  {
-  }
-
   function deleteMailbox($folder)
   {
     return (TRUE);
@@ -58,17 +54,21 @@ class mailMethodKolab extends mailMethodCyrus
   {
     /* 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]);
       }
     }
-    // without this line gosaMailQuota is in MB instead of KB 
-    if(isset($mailObject->attrs['gosaMailQuota'][0])){
-      $mailObject->gosaMailQuota=$mailObject->attrs['gosaMailQuota'][0];
-    }  
-    
-    
 
     /* Adjust server name if needed */
     foreach ($mailObject->config->data['SERVERS']['IMAP'] as $srv => $dummy){
@@ -82,6 +82,7 @@ class mailMethodKolab extends mailMethodCyrus
 
   function fixAttributesOnStore(&$mailObject)
   {
+    global $config;
     /* Convert attributes and objectClasses */
     foreach ($this->attribute_map as $source => $dest){
       if (isset($mailObject->attrs[$source])){
@@ -91,15 +92,83 @@ class mailMethodKolab extends mailMethodCyrus
     }
     $objectclasses= array();
     foreach ($mailObject->attrs['objectClass'] as $oc){
-      if ($oc !=  'kolabInetOrgPerson'){
+      if ($oc !=  'kolabInetOrgPerson' && $oc !=  'kolabSharedFolder'){
         $objectclasses[]= $oc;
       }
     }
-
-    $mailObject->attrs['gosaMailQuota'] = ( $mailObject->gosaMailQuota/1024);
-
     $mailObject->attrs['objectClass']= $objectclasses;
-    $mailObject->attrs['objectClass'][]= 'kolabInetOrgPerson';
+    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']);
@@ -107,12 +176,13 @@ class mailMethodKolab extends mailMethodCyrus
     $mailObject->attrs['kolabDeleteFlag']= array();
   }
 
-
   function fixAttributesOnRemove(&$mailObject)
   {
     /* Add attribute for object deletion and remove GOsa specific
        values from entry. */
-    unset ($mailObject->attrs['mail']);
+    foreach($this->attribute_map as $kolabAttr){
+      $mailObject->attrs[$kolabAttr] = array();
+    }  
     $mailObject->attrs['kolabDeleteFlag']= preg_replace('%imap://%', '', $mailObject->gosaMailServer);
   }