Code

gotoLpdEnable wasn't saved as "Yes/No" it was saved as 1/0
[gosa.git] / plugins / admin / groups / class_groupMail.inc
index fb5209f60ae50ee3277f0d0231c3e31ef2e9f2a6..b4bdc2962562fe5a5a8d1c9cd3ae86f04cccd983 100644 (file)
 class mailgroup extends plugin
 {
   /* CLI vars */
-  var $cli_summary= "Manage mail groups/shared folders";
-  var $cli_description= "Some longer text\nfor help";
-  var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
-  var $method= "mailMethod";
-
-  /* plugin specific values */
-  var $mail= "";
-  var $uid= "";
-  var $cn= "";
-  var $gosaMailAlternateAddress= array();
-  var $gosaMailForwardingAddress= array();
-  var $gosaMailDeliveryMode= "[L        ]";
-  var $gosaMailServer= "";
-  var $gosaMailQuota= "";
-  var $gosaMailMaxSize= "";
-  var $gosaVacationMessage= "";
-  var $gosaSpamSortLevel= "";
-  var $gosaSpamMailbox= "";
-  var $gosaSharedFolderTarget;
-  var $quotaUsage= 0;
-  var $forward_dialog= FALSE;
-  var $members= array();
-  var $mailusers= array();
-  var $perms= array();
-  var $imapacl= array('anyone' => 'p', '%members%' => 'lrsp', '' => 'p');
-  var $mmethod= "";
+  var $cli_summary        = "Manage mail groups/shared folders";
+  var $cli_description    = "Some longer text\nfor help";
+  var $cli_parameters     = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+
+  var $uid                        = "";       // User id 
+  var $cn                         = "";       // cn
+  var $orig_cn                    = "";       // cn
+
+  var $method                     = "mailMethod"; // Used Mail method 
+  var $mmethod                    = "";           // Contains the gosa.conf MAILMETHOD
+  var $mail                       = "";           // Default mail address 
+
+  var $gosaMailAlternateAddress   = array();  // Set default Alternate Mail Adresses to empty array
+  var $gosaMailForwardingAddress  = array();  // Forwarding also empty
+
+  var $gosaMailServer             = "";       // Selected mailserver 
+  var $gosaMailQuota              = "";       // Defined Quota 
+  var $quotaUsage                 = 0;        // Currently used quota
+
+  var $gosaVacationMessage        = "";       // Vocation message 
+
+  var $imapacl                    = array('anyone'    => 'p',     // Set acls for everyone
+      '%members%' => 'lrsp',  // %members% are all group-members
+      ''          => 'p');    // Every user added gets this right
+
+
+  var $gosaSpamSortLevel          = "";     
+  var $gosaSpamMailbox            = "";
+  var $gosaSharedFolderTarget     ;
+
+  var $forward_dialog             = FALSE;    
+
+  var $members                    = array();  // Group members
+
+  var $mailusers                  = array();
+  var $perms                      = array();
+  var $gosaMailDeliveryMode       = "[L        ]";   // 
+  var $gosaMailMaxSize            = "";       // 
+  
+  var $remove_folder_from_imap    = true;
 
   /* Helper */
   var $indexed_acl= array();
   var $indexed_user= array();
 
+  /* Copy & paste */
+  var $CopyPasteVars          = array("quotaUsage","imapacl");
+
   /* attribute list for save action */
-  var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize","gosaMailAlternateAddress","gosaMailForwardingAddress",
-      "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox","acl","gosaSharedFolderTarget",
-      "gosaVacationMessage");
+  var $attributes= array( "mail",   "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize",
+      "gosaMailAlternateAddress", "gosaMailForwardingAddress",
+      "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox",
+      "acl","gosaSharedFolderTarget", "gosaVacationMessage");
+
   var $objectclasses= array("gosaMailAccount");
 
 
-  /* constructor, if 'dn' is set, the node loads the given
-     'dn' from LDAP */
-  function mailgroup ($config, $dn= NULL, $ui= NULL)
+  function mailgroup ($config, $dn= NULL, $parent= NULL)
   {
-    /* Configuration is fine, allways */
-    $this->config= $config;
+    /* Initialise all available attributes ... if possible
+     */
+    plugin::plugin($config, $dn, $parent);
 
-    /* Load bases attributes */
-    plugin::plugin($config, $dn);
+    /* Save initial cn */
+    $this->orig_cn = $this->cn;
 
-    /* Set mailMethod to the one defined in gosa.conf */
+    /* Set mailMethod to the one defined in gosa.conf 
+     */
     if (isset($this->config->current['MAILMETHOD'])){
       $this->mmethod= $this->config->current['MAILMETHOD'];
     }
 
+    /* Check if selected mail method exists 
+     */
     if (class_exists("mailMethod$this->mmethod")){
       $this->method= "mailMethod$this->mmethod";
     } else {
       print_red(sprintf(_("There is no mail method '%s' specified in your gosa.conf available."), $this->mmethod));
     }
 
-    /* Load Mailserver string, only in case of kolab ???? */
-    if(preg_match("/kolab/i",$this->mmethod)){
-      if(isset($this->attrs['gosaMailServer'][0])){
-        $this->gosaMailServer =  $this->attrs['gosaMailServer'][0];
-      }
-    } 
+    /* Load Mailserver  
+     */
+    if(isset($this->attrs['gosaMailServer'][0])){
+      $this->gosaMailServer =  $this->attrs['gosaMailServer'][0];
+    }
 
-    /* Convert cn to uid in case of existing entries */
+    /* Convert cn to uid in case of existing entry
+     */
     if (isset($this->attrs['cn'][0])){
       $this->uid= $this->attrs['cn'][0];
     }
 
-    if ($dn != NULL){
 
-      /* Load attributes containing arrays */
+    /* If this ins't new mailgroup, read all required data from ldap
+     */
+    if (($dn != "new")&&($dn != NULL)){
+
+      /* Load attributes which represent multiple entries  
+       */
       foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){
         $this->$val = array();
         if (isset($this->attrs["$val"]["count"])){
@@ -86,11 +111,16 @@ class mailgroup extends plugin
         }
       }
 
-      /* Only do IMAP actions if gosaMailServer attribute is set */
+      /* Only do IMAP actions if gosaMailServer attribute is set 
+       */
       if (isset ($this->attrs["gosaMailServer"][0])){
+
+        /* Create new instance of our defined mailclass
+         */
         $method= new $this->method($this->config);
+
         if ($method->connect($this->attrs["gosaMailServer"][0])){
-          $quota= $method->getQuota($this->uid);
+        
 
           /* Maybe the entry is not saved in new style, get
              permissions from IMAP and convert them to acl attributes */
@@ -119,30 +149,44 @@ class mailgroup extends plugin
 
             /* Highest count wins as %members%, remove all members
                with the same acl */
-            $this->imapacl['%members%']= $leader;
+            if(!empty($leader)){
+              $this->imapacl['%members%']= $leader;
+            }
             foreach ($this->imapacl as $user => $acl){
               if ($this->acl == $leader && in_array($user, $this->attrs['memberUid'])){
                 unset($this->imapacl[$user]);
               }
             }
 
-          }
+          } // ENDE ! isset ($this->attrs['acl'])
+          
+          /* Adapt attributes if needed */
+          $method->fixAttributesOnLoad($this);
+          
+          /*  get Quota */
+          $quota= $method->getQuota($this->uid);
 
           /* Update quota values */
-          if ($quota['gosaMailQuota'] == 2147483647){
-            $this->quotaUsage= "";
-            $this->gosaMailQuota= "";
-          } else {
-            $this->quotaUsage= $quota['quotaUsage'];
-            $this->gosaMailQuota= $quota['gosaMailQuota'];
+          if(is_array($quota)){
+            if ($quota['gosaMailQuota'] == 2147483647){
+              $this->quotaUsage= "";
+              $this->gosaMailQuota= "";
+            } else {
+              $this->quotaUsage= $quota['quotaUsage'];
+              $this->gosaMailQuota= $quota['gosaMailQuota'];
+            }
+          }else{
+            $this->quotaUsage     = "";
+            $this->gosaMailQuota  = "";
+//            print_red(sprintf(_("Can't get quota information for '%s'."),$this->uid));
           }
           $method->disconnect();
-        }
+        }   // ENDE $method->connect($this->attrs["gosaMailServer"][0])){
+
+      }   // ENDE gosaMailServer
+
+    }   // ENDE dn != "new"
 
-        /* Adapt attributes if needed */
-        $method->fixAttributesOnLoad($this);
-      }
-    }
 
     /* Get global filter config */
     if (!is_global("gmailfilter")){
@@ -158,7 +202,9 @@ class mailgroup extends plugin
     $tmp = array();
     if(preg_match("/kolab/i",$this->mmethod)){
       $ldap = $this->config->get_ldap_link();
+
       if (isset($this->attrs['acl'])){
+
         for ($i= 0; $i<$this->attrs['acl']['count']; $i++){
           list($user, $permission)= split(' ', $this->attrs['acl'][$i]);
 
@@ -168,7 +214,9 @@ class mailgroup extends plugin
           /* Get all user permissions sorted by acl, to detect the most used acl
              This acl is then used for %members%
            */
-          $tmp[$permission][] = $user;
+          if ($user != "anyone" && $user != "%members%"){
+            $tmp[$permission][] = $user;
+          }
 
           /* There is an entry in $this->imapacl like this this ... 
              $this->attrs['imapacl']['anyone'] = "p";
@@ -191,13 +239,19 @@ class mailgroup extends plugin
       foreach($tmp as $acl => $user){
         $tmp2[count($tmp[$acl])]=$acl;
       }
-      /* Most used at last */
+      /* Most used at last 
+       */
       ksort($tmp2);      
+  
+      /* Assign last (most used acl) to %members% acl 
+       */
+      $str = array_pop($tmp2);
+      if(!empty($str)) {
+        $this->imapacl['%members%']=$str;
+      }
 
-      /* Assign last (most used acl) to %members% acl */ 
-      $this->imapacl['%members%']=array_pop($tmp2);
-
-      /* Open ldap connection */
+      /* Open ldap connection 
+       */
       $ldap = $this->config->get_ldap_link();
       $ldap->cd($this->config->current['BASE']);
 
@@ -205,16 +259,18 @@ class mailgroup extends plugin
       foreach($this->imapacl as $mail => $permission){
         $ldap->search("(&(objectClass=person)(mail=".$mail."))",array("uid"));
         $atr = $ldap->fetch();
-        if((isset($atr['uid'][0]))&&(in_array($atr['uid'][0],$this->attrs['memberUid']))&&($permission == $this->imapacl['%members%'])){
-          unset($this->imapacl[$mail]);
+        if((isset($this->attrs['memberUid'])) && (is_array($this->attrs['memberUid']))){
+          if((isset($atr['uid'][0]))&&(in_array($atr['uid'][0],$this->attrs['memberUid']))&&($permission == $this->imapacl['%members%'])){
+            unset($this->imapacl[$mail]);
+          }
         }
       }
-
       /* Append an empty entry, for special acl handling */
       if(count($this->imapacl)==2){
         $this->imapacl[''] ="";
       }
-    }else{
+  
+    }else{ // Not kolab 
       /* Load permissions */ 
       if (isset($this->attrs['acl'])){
         for ($i= 0; $i<$this->attrs['acl']['count']; $i++){
@@ -226,6 +282,12 @@ class mailgroup extends plugin
         }
       }
     }
+
+    /* Load Mailserver  
+     */
+    if(isset($this->attrs['gosaMailServer'][0])){
+      $this->gosaMailServer =  $this->attrs['gosaMailServer'][0];
+    }
     /* Fill translations */
     $this->perms["lrs"]= _("read");
     $this->perms["lrsp"]= _("post");
@@ -234,7 +296,6 @@ class mailgroup extends plugin
     $this->perms["lrswipcd"]= _("write");
   }
 
-
   function execute()
   {
     /* Call parent execute */
@@ -242,6 +303,7 @@ class mailgroup extends plugin
 
     /* Load templating engine */
     $smarty= get_smarty();
+    $display = "";
     if ($_SESSION['js']==FALSE){
       $smarty->assign("javascript", "false");
     } else {
@@ -255,7 +317,8 @@ class mailgroup extends plugin
 
     /* Do we represent a valid account? */
     if (!$this->is_account && $this->parent == NULL){
-      $display= "<img alt=\"\" src=\"images/stop.png\" align=middle>&nbsp;<b>".
+
+      $display.= "<img alt=\"\" src=\"images/stop.png\" align=middle>&nbsp;<b>".
         _("This 'dn' has no valid mail extensions.")."</b>";
       return ($display);
     }
@@ -267,8 +330,23 @@ class mailgroup extends plugin
         $display= $this->show_header(_("Remove mail account"),
             _("This account has mail features enabled. You can disable them by clicking below."));
       } else {
-        $display= $this->show_header(_("Create mail account"),
+        $display.= $this->show_header(_("Create mail account"),
             _("This account has mail features disabled. You can enable them by clicking below."));
+
+        /* Show checkbox that allows us to remove imap entry too*/
+        if($this->initially_was_account){
+        
+          $c = "";
+          if($this->remove_folder_from_imap){
+            $c= " checked ";
+          }
+  
+          $display .= "<h2>Shared folder delete options</h2>
+                       <input class='center' type='checkbox' name='remove_folder_from_imap' value='1' ".$c."  
+                          title='"._("Remove shared folder from mail server database when entry gets removed in LDAP")."'>";
+          $display .= _("Remove the shared folder and all its contents after saving this account"); 
+        }
+
         return ($display);
       }
     }
@@ -418,7 +496,8 @@ class mailgroup extends plugin
       }
 
       $acl= array($this->config->current['BASE'] => ":all");
-      $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $gmailfilter['depselect'], array("sn", "mail", "givenName"), TRUE);
+      $res= get_list("(&(objectClass=gosaMailAccount)$filter)", $acl, $gmailfilter['depselect'],
+                     array("sn", "mail", "givenName"), GL_SUBSEARCH | GL_SIZELIMIT);
       $ldap->cd($gmailfilter['depselect']);
       $ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName"));
       error_reporting (0);
@@ -527,7 +606,6 @@ class mailgroup extends plugin
      */
     if(isset($this->config->current['MAILMETHOD'])&&preg_match("/kolab/i",$this->config->current['MAILMETHOD'])){
       $this->attributes[]="acl";
-      $this->attributes[]="kolabHomeServer";
       $this->objectclasses[] = "kolabSharedFolder";
     }
     /* include global link_info */
@@ -541,24 +619,24 @@ class mailgroup extends plugin
     $this->attrs['gosaMailForwardingAddress']= array();
     $this->attrs['gosaSharedFolderTarget']= array();
 
-    /* Keep uid */
-    unset ($this->attrs['uid']);
-    $ldap->cd($this->dn);
-    $this->cleanup();
-    $ldap->modify ($this->attrs); 
-
-    show_ldap_error($ldap->get_error());
-
     /* Connect to IMAP server for account deletion */
-    if ($this->is_account){
+    if ($this->initially_was_account){
       $method= new $this->method($this->config);
-      if ($method->connect($this->attrs["gosaMailServer"][0])){
+      $method->fixAttributesOnRemove($this);
+      if ($method->connect($this->gosaMailServer) && $this->remove_folder_from_imap){
+
         /* Remove account from IMAP server */
         $method->deleteMailbox($this->uid);
         $method->disconnect();
       }
-      $method->fixAttributesOnRemove($this);
     }
+    /* Keep uid */
+    unset ($this->attrs['uid']);
+
+    $ldap->cd($this->dn);
+    $ldap->modify ($this->attrs); 
+    show_ldap_error($ldap->get_error(), _("Removing group mail settings failed"));
 
     /* Optionally execute a command after we're done */
     $this->handle_post_events("remove");
@@ -568,6 +646,16 @@ class mailgroup extends plugin
   /* Save data to object */
   function save_object()
   {
+
+    /* Check if user wants to remove the shared folder from imap too */
+    if($this->initially_was_account && !$this->is_account){
+      if(isset($_POST['remove_folder_from_imap'])){
+        $this->remove_folder_from_imap = true;
+      }else{
+        $this->remove_folder_from_imap = false;
+      }
+    }
+
     /* Assemble mail delivery mode
        The mode field in ldap consists of values between braces, this must
        be called when 'mail' is set, because checkboxes may not be set when
@@ -631,337 +719,302 @@ I: Only insider delivery */
   }
 
 
-  /*  
-      Backup for function save 
-Änderungen :  fixAttributesOnStore($this) wurde erst nach dem this->cleanup();
-$ldap->modify  
-
-Ausgeführt, deshalb wurden die gemappten Attribute auch nicht 
-gespeichert.
-
-Von        : Fabian Hickert
-Datum      : 15.12.2005
-
-Alter Quellcode :
 
-  /* Save data to LDAP, depending on is_account we save or delete * /
+  /* Save data to LDAP, depending on is_account we save or delete */
   function save()
   {
-  $ldap= $this->config->get_ldap_link();
-
-  /* Call parents save to prepare $this->attrs * /
-  plugin::save();
-
-  /* Save arrays * /
-  $this->attrs['gosaMailAlternateAddress']= $this->gosaMailAlternateAddress;
-  $this->attrs['gosaMailForwardingAddress']= $this->gosaMailForwardingAddress;
-
-  /* Save shared folder target * /
-  $this->attrs['gosaSharedFolderTarget']= "share+".$this->uid;
-
-  /* Save acl's * /
-  $this->attrs['acl']= array();
-  foreach ($this->imapacl as $user => $acl){
-  if ($user == ""){
-  continue;
-  }
-  $this->attrs['acl'][]= "$user $acl";
-  }
-
-  /* Save data to LDAP * /
-  $ldap->cd($this->dn);
-  $this->cleanup();
-  $ldap->modify ($this->attrs); 
-
-  show_ldap_error($ldap->get_error());
-
-  /* Only do IMAP actions if we are not a template * /
-  if (!$this->is_template){
-  $method= new $this->method($this->config);
-  $method->fixAttributesOnStore($this);
-  if ($method->connect($this->gosaMailServer)){
-  $method->updateMailbox($this->uid);
-  $method->setQuota($this->uid, $this->gosaMailQuota);
-
-/* Exchange '%member%' pseudo entry * /
-$memberacl= $this->imapacl['%members%'];
-unset ($this->imapacl['%members%']);
-foreach ($this->members as $user){
-if (!isset($this->imapacl[$user])){
-$this->imapacl[$user]= $memberacl;
-}
-}
-
-$method->setSharedFolderPermissions($this->uid, $this->imapacl);
-$method->disconnect();
-}
-}
-
-/* Optionally execute a command after we're done * /
-if ($this->initially_was_account == $this->is_account){
-if ($this->is_modified){
-$this->handle_post_events("mofify");
-}
-} else {
-$this->handle_post_events("add");
-}
-}
-
-ENDE Alter Quellcode
-   */
-
-
-
-
-
+    $ldap= $this->config->get_ldap_link();
+    $ldap->cd($this->config->current['BASE']);
 
+    /* Call parents save to prepare $this->attrs */
+    plugin::save();
 
+    /* Save arrays */
+    $this->attrs['gosaMailAlternateAddress']  = $this->gosaMailAlternateAddress;
+    $this->attrs['gosaMailForwardingAddress'] = $this->gosaMailForwardingAddress;
+    $this->attrs['gosaSharedFolderTarget']    = "share+".$this->uid;
 
-/* Save data to LDAP, depending on is_account we save or delete */
-function save()
-{
-  $ldap= $this->config->get_ldap_link();
-
-  /* Call parents save to prepare $this->attrs */
-  plugin::save();
-
-  /* Save arrays */
-  $this->attrs['gosaMailAlternateAddress']= $this->gosaMailAlternateAddress;
-  $this->attrs['gosaMailForwardingAddress']= $this->gosaMailForwardingAddress;
-
-  /* Save shared folder target */
-  $this->attrs['gosaSharedFolderTarget']= "share+".$this->uid;
-
-  if(preg_match("/kolab/i",$this->mmethod)){
-    /* Save acl's */
-    $this->attrs['acl']= array();
-    foreach ($this->imapacl as $user => $acl){
-      if ($user == ""){
-        continue;
-      }
-      $ldap->search("(&(objectClass=person)(uid=".$user."))",array("mail"));
-      $mail = $ldap->fetch();
-      if($mail){
-        if(isset($mail['mail'][0])){
-          $this->attrs['acl'][]= $mail['mail'][0]." $acl";
+    if(preg_match("/kolab/i",$this->mmethod)){
+      /* Save acl's */
+      $this->attrs['acl']= array();
+      foreach ($this->imapacl as $user => $acl){
+        if ($user == ""){
+          continue;
+        }
+        $ldap->search("(&(objectClass=person)(|(uid=".$user.")(mail=".$user.")))",array("mail"));
+        $mail = $ldap->fetch();
+        if($mail){
+          if(isset($mail['mail'][0])){
+            $this->attrs['acl'][]= $mail['mail'][0]." $acl";
+          }
+        }else{
+          $this->attrs['acl'][]= "$user $acl";
+        }
+      }
+    }else{
+      /* Save acl's */
+      $this->attrs['acl']= array();
+      foreach ($this->imapacl as $user => $acl){
+        if ($user == ""){
+          continue;
         }
-      }else{
         $this->attrs['acl'][]= "$user $acl";
       }
     }
-  }else{
-    /* Save acl's */
-    $this->attrs['acl']= array();
-    foreach ($this->imapacl as $user => $acl){
-      if ($user == ""){
-        continue;
+
+    /* Only do IMAP actions if we are not a template */
+    if(preg_match("/kolab/i",$this->mmethod)){
+      if (empty($this->gosaMailServer)||is_array($this->gosaMailServer)){
+        if(isset($this->attrs['gosaMailServer'][0])){
+          $this->gosaMailServer = $this->attrs['gosaMailServer'][0];
+        }
       }
-      $this->attrs['acl'][]= "$user $acl";
-    }
-  }
+    }  
 
-  /* Only do IMAP actions if we are not a template */
-  if(preg_match("/kolab/i",$this->mmethod)){
-    if (empty($this->gosaMailServer)||is_array($this->gosaMailServer)){
-      if(isset($this->attrs['gosaMailServer'][0])){
-        $this->gosaMailServer = $this->attrs['gosaMailServer'][0];
+
+    if ((!$this->is_template)&&(!empty($this->gosaMailServer))){
+      $method= new $this->method($this->config);
+      $method->fixAttributesOnStore($this);
+      if (($method->connect($this->gosaMailServer))){
+        $method->updateMailbox($this->uid);
+        $method->setQuota($this->uid, $this->gosaMailQuota);
+        $method->setSharedFolderPermissions($this->uid, $this->imapacl);
+        $method->disconnect();
       }
     }
-  }  
 
-  if ((!$this->is_template)&&(!empty($this->gosaMailServer))){
-    $method= new $this->method($this->config);
-    $method->fixAttributesOnStore($this);
-    if ($method->connect($this->gosaMailServer)){
-      $method->updateMailbox($this->uid);
-      $method->setQuota($this->uid, $this->gosaMailQuota);
+    /* Exchange '%member%' pseudo entry */
+    $memberacl= $this->imapacl['%members%'];
 
-      /* Exchange '%member%' pseudo entry */
-      $memberacl= $this->imapacl['%members%'];
-      unset ($this->imapacl['%members%']);
-      foreach ($this->members as $user){
-        if (!isset($this->imapacl[$user])){
-          $this->imapacl[$user]= $memberacl;
+    foreach ($this->members as $user){
+      if(preg_match("/kolab/i",$this->mmethod)){
+        $ldap->cd($this->config->current['BASE']);
+        $ldap->search("(&(objectClass=person)(|(mail=".$user.")(uid=".$user.")))",array("mail"));
+        $at = $ldap->fetch();
+        if(isset($at['mail'][0])){
+          $user = $at['mail'][0];
         }
       }
-
-      $method->setSharedFolderPermissions($this->uid, $this->imapacl);
-      $method->disconnect();
+      if (!isset($this->imapacl[$user])){
+        $this->imapacl[$user]= $memberacl;
+      }
+    }
+    $this->attrs['acl'] = array();
+    foreach($this->imapacl as $user => $acl){
+      if(preg_match("/%members%/",$user) || empty($user)) continue;
+      
+      $this->attrs['acl'][] = $user." ".$acl;
     }
-  }
-
-  /* Save data to LDAP */
-  $ldap->cd($this->dn);
-  $this->cleanup();
-  $ldap->modify ($this->attrs); 
 
-  show_ldap_error($ldap->get_error());
+    /* Save data to LDAP */
+    $ldap->cd($this->dn);
+    $this->cleanup();
+    $ldap->modify ($this->attrs); 
+    show_ldap_error($ldap->get_error(), _("Saving group mail settings failed"));
 
-  /* Optionally execute a command after we're done */
-  if ($this->initially_was_account == $this->is_account){
-    if ($this->is_modified){
-      $this->handle_post_events("mofify");
+    /* Optionally execute a command after we're done */
+    if ($this->initially_was_account == $this->is_account){
+      if ($this->is_modified){
+        $this->handle_post_events("modify");
+      }
+    } else {
+      $this->handle_post_events("add");
     }
-  } else {
-    $this->handle_post_events("add");
   }
-}
 
-/* Check formular input */
-function check()
-{
-  $ldap= $this->config->get_ldap_link();
+  /* Check formular input */
+  function check()
+  {
+    $ldap= $this->config->get_ldap_link();
 
-  $message= array();
+    /* Call common method to give check the hook */
+    $message= plugin::check();
 
-  /* must: mail */
-  if ($this->mail == ""){
-    $message[]= _("The required field 'Primary address' is not set.");
-  }
-  if (!is_email($this->mail)){
-    $message[]= _("Please enter a valid email addres in 'Primary address' field.");
-  }
-  $ldap->cd($this->config->current['BASE']);
-  $ldap->search ("(&(!(objectClass=gosaUserTemplate))(objectClass=gosaMailAccount)(|(mail=".$this->mail.")(gosaMailAlternateAddress=".
-      $this->mail."))(!(uid=".$this->cn."))(!(cn=".$this->cn.")))");
-  if ($ldap->count() != 0){
-    $message[]= _("The primary address you've entered is already in use.");
-  }
+    if(!$this->is_account) return array();
+    
+    //$message[] = $str;      
 
-  /* Check quota */
-  if ($this->gosaMailQuota != '' && chkacl ($this->acl, "gosaMailQuota") == ""){
-    if (!is_numeric($this->gosaMailQuota)) {
-      $message[]= _("Value in 'Quota size' is not valid.");
-    } else {
-      $this->gosaMailQuota= (int) $this->gosaMailQuota;
+    /* must: mail */
+    if ($this->mail == ""){
+      $message[]= _("The required field 'Primary address' is not set.");
+    }
+    if (!is_email($this->mail)){
+      $message[]= _("Please enter a valid email addres in 'Primary address' field.");
+    }
+    $ldap->cd($this->config->current['BASE']);
+    $ldap->search ("(&(!(objectClass=gosaUserTemplate))(objectClass=gosaMailAccount)(|(mail=".$this->mail.")(gosaMailAlternateAddress=".
+        $this->mail."))(!(uid=".$this->orig_cn."))(!(cn=".$this->orig_cn.")))");
+    if ($ldap->count() != 0){
+      $message[]= _("The primary address you've entered is already in use.");
+    }
+  
+    /* Check quota */
+    if ($this->gosaMailQuota != '' && chkacl ($this->acl, "gosaMailQuota") == ""){
+      if (!is_numeric($this->gosaMailQuota)) {
+        $message[]= _("Value in 'Quota size' is not valid.");
+      } else {
+        $this->gosaMailQuota= (int) $this->gosaMailQuota;
+      }
     }
-  }
 
-  /* Check rejectsize for integer */
-  if ($this->gosaMailMaxSize != '' && chkacl ($this->acl, "gosaMailQuota") == ""){
-    if (!is_numeric($this->gosaMailMaxSize)){
-      $message[]= _("Please specify a vaild mail size for mails to be rejected.");
-    } else {
-      $this->gosaMailMaxSize= (int) $this->gosaMailMaxSize;
+    /* Check rejectsize for integer */
+    if ($this->gosaMailMaxSize != '' && chkacl ($this->acl, "gosaMailQuota") == ""){
+      if (!is_numeric($this->gosaMailMaxSize)){
+        $message[]= _("Please specify a vaild mail size for mails to be rejected.");
+      } else {
+        $this->gosaMailMaxSize= (int) $this->gosaMailMaxSize;
+      }
     }
-  }
 
-  /* Need gosaMailMaxSize if use_mailsize_limit is checked */
-  if (is_integer(strpos($this->gosaMailDeliveryMode, "reject")) && $this->gosaMailMaxSize == ""){
-    $message[]= _("You need to set the maximum mail size in order to reject anything.");
-  }
+    /* Need gosaMailMaxSize if use_mailsize_limit is checked */
+    if (is_integer(strpos($this->gosaMailDeliveryMode, "reject")) && $this->gosaMailMaxSize == ""){
+      $message[]= _("You need to set the maximum mail size in order to reject anything.");
+    }
 
-  if(ord($this->imapacl['anyone'][0])==194){
-    $message[] = _("Please choose valid permission settings. Default permission can't be emtpy.");
-  }
+    if(ord($this->imapacl['anyone'][0])==194){
+      $message[] = _("Please choose valid permission settings. Default permission can't be emtpy.");
+    }
 
-  if(empty($this->gosaMailServer)){
-    $message[] = _("Please select a valid mail server.");
-  }
+    if(empty($this->gosaMailServer)){
+      $message[] = _("Please select a valid mail server.");
+    }
 
-  return ($message);
-}
+    return ($message);
+  }
 
-/* Adapt from template, using 'dn' */
-function adapt_from_template($dn)
-{
-  plugin::adapt_from_template($dn);
-
-  foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){
-    $this->$val= array();
-    if (isset($this->attrs["$val"]["count"])){
-      for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){
-        $value= $this->attrs["$val"][$i];
-        foreach (array("sn", "givenName", "uid") as $repl){
-          if (preg_match("/%$repl/i", $value)){
-            $value= preg_replace ("/%$repl/i", $this->parent->$repl, $value);
+  /* Adapt from template, using 'dn' */
+  function adapt_from_template($dn)
+  {
+    plugin::adapt_from_template($dn);
+
+    foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){
+      $this->$val= array();
+      if (isset($this->attrs["$val"]["count"])){
+        for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){
+          $value= $this->attrs["$val"][$i];
+          foreach (array("sn", "givenName", "uid") as $repl){
+            if (preg_match("/%$repl/i", $value)){
+              $value= preg_replace ("/%$repl/i", $this->parent->$repl, $value);
+            }
           }
+          array_push($this->$val, $value);
         }
-        array_push($this->$val, $value);
       }
     }
   }
-}
 
-/* Add entry to forwarder list */
-function addForwarder($address)
-{
-  $this->gosaMailForwardingAddress[]= $address;
-  $this->gosaMailForwardingAddress= array_unique ($this->gosaMailForwardingAddress);
+  /* Add entry to forwarder list */
+  function addForwarder($address)
+  {
+    $this->gosaMailForwardingAddress[]= $address;
+    $this->gosaMailForwardingAddress= array_unique ($this->gosaMailForwardingAddress);
 
-  sort ($this->gosaMailForwardingAddress);
-  reset ($this->gosaMailForwardingAddress);
-  $this->is_modified= TRUE;
-}
+    sort ($this->gosaMailForwardingAddress);
+    reset ($this->gosaMailForwardingAddress);
+    $this->is_modified= TRUE;
+  }
 
-/* Remove list of addresses from forwarder list */
-function delForwarder($addresses)
-{
-  $this->gosaMailForwardingAddress= array_remove_entries ($addresses,
-      $this->gosaMailForwardingAddress);
-  $this->is_modified= TRUE;
-}
+  /* Remove list of addresses from forwarder list */
+  function delForwarder($addresses)
+  {
+    $this->gosaMailForwardingAddress= array_remove_entries ($addresses,
+        $this->gosaMailForwardingAddress);
+    $this->is_modified= TRUE;
+  }
 
 
 
-function addAlternate($address)
-{
-  $ldap= $this->config->get_ldap_link();
+  function addAlternate($address)
+  {
+    $ldap= $this->config->get_ldap_link();
 
-  $address= strtolower($address);
+    $address= strtolower($address);
 
-  /* Is this address already assigned in LDAP? */
-  $ldap->cd ($this->config->current['BASE']);
-  $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)".
-      "(gosaMailAlternateAddress=$address)))");
+    /* Is this address already assigned in LDAP? */
+    $ldap->cd ($this->config->current['BASE']);
+    $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)".
+        "(gosaMailAlternateAddress=$address)))");
 
-  if ($ldap->count() > 0){
-    $attrs= $ldap->fetch ();
-    return ($attrs["uid"][0]);
-  }
+    if ($ldap->count() > 0){
+      $attrs= $ldap->fetch ();
+      return ($attrs["uid"][0]);
+    }
 
-  /* Add to list of alternates */
-  if (!in_array($address, $this->gosaMailAlternateAddress)){
-    $this->gosaMailAlternateAddress[]= $address;
-  }
+    /* Add to list of alternates */
+    if (!in_array($address, $this->gosaMailAlternateAddress)){
+      $this->gosaMailAlternateAddress[]= $address;
+    }
 
-  sort ($this->gosaMailAlternateAddress);
-  reset ($this->gosaMailAlternateAddress);
-  $this->is_modified= TRUE;
+    sort ($this->gosaMailAlternateAddress);
+    reset ($this->gosaMailAlternateAddress);
+    $this->is_modified= TRUE;
 
-  return ("");
-}
+    return ("");
+  }
 
 
-function delAlternate($addresses)
-{
-  $this->gosaMailAlternateAddress= array_remove_entries ($addresses,
-      $this->gosaMailAlternateAddress);
-  $this->is_modified= TRUE;
-}
+  function delAlternate($addresses)
+  {
+    $this->gosaMailAlternateAddress= array_remove_entries ($addresses,
+        $this->gosaMailAlternateAddress);
+    $this->is_modified= TRUE;
+  }
 
 
-function make_name($attrs)
-{
-  $name= "";
-  if (isset($attrs['sn'][0])){
-    $name= $attrs['sn'][0];
-  }
-  if (isset($attrs['givenName'][0])){
+  function make_name($attrs)
+  {
+    $name= "";
+    if (isset($attrs['sn'][0])){
+      $name= $attrs['sn'][0];
+    }
+    if (isset($attrs['givenName'][0])){
+      if ($name != ""){
+        $name.= ", ".$attrs['givenName'][0];
+      } else {
+        $name.= $attrs['givenName'][0];
+      }
+    }
     if ($name != ""){
-      $name.= ", ".$attrs['givenName'][0];
-    } else {
-      $name.= $attrs['givenName'][0];
+      $name.= " ";
     }
+
+    return ($name);
   }
-  if ($name != ""){
-    $name.= " ";
+
+  function getCopyDialog()
+  {
+    if(!$this->is_account) return("");
+
+    $smarty = get_smarty();
+    $smarty->assign("gosaMailAlternateAddress",$this->gosaMailAlternateAddress);
+    $smarty->assign("gosaMailForwardingAddress",$this->gosaMailForwardingAddress);
+    $smarty->assign("mail",$this->mail);
+    $display= $smarty->fetch (get_template_path('paste_mail.tpl', TRUE));
+    $ret = array();
+    $ret['string'] = $display;
+    $ret['status'] = "";
+    return($ret);
   }
 
-  return ($name);
-}
+  function saveCopyDialog()
+  {
+    if(!$this->is_account) return;
 
-}
+    /* Perform ADD / REMOVE ... for mail alternate / mail forwarding addresses 
+    */
+    $this->execute();
+    if(isset($_POST['mail'])){
+      $this->mail = $_POST['mail'];
+    }
+  }
+
+  function PrepareForCopyPaste($source)
+  {
+    plugin::PrepareForCopyPaste($source);
 
+    /* Reset alternate mail addresses */
+    $this->gosaMailAlternateAddress = array();
+  }
+}
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>