Code

Added navigation gray out if option is not available
[gosa.git] / plugins / admin / groups / class_groupMail.inc
index 0076c7317b3e050a52a20272161c49657b3741de..b4bdc2962562fe5a5a8d1c9cd3ae86f04cccd983 100644 (file)
@@ -9,6 +9,7 @@ class mailgroup extends plugin
 
   var $uid                        = "";       // User id 
   var $cn                         = "";       // cn
+  var $orig_cn                    = "";       // cn
 
   var $method                     = "mailMethod"; // Used Mail method 
   var $mmethod                    = "";           // Contains the gosa.conf MAILMETHOD
@@ -40,12 +41,16 @@ class mailgroup extends plugin
   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",
@@ -55,11 +60,14 @@ class mailgroup extends plugin
   var $objectclasses= array("gosaMailAccount");
 
 
-  function mailgroup ($config, $dn= NULL, $ui= NULL)
+  function mailgroup ($config, $dn= NULL, $parent= NULL)
   {
     /* Initialise all available attributes ... if possible
      */
-    plugin::plugin($config, $dn);
+    plugin::plugin($config, $dn, $parent);
+
+    /* Save initial cn */
+    $this->orig_cn = $this->cn;
 
     /* Set mailMethod to the one defined in gosa.conf 
      */
@@ -112,10 +120,7 @@ class mailgroup extends plugin
         $method= new $this->method($this->config);
 
         if ($method->connect($this->attrs["gosaMailServer"][0])){
-
-          /*  get Quota
-           */
-          $quota= $method->getQuota($this->uid);
+        
 
           /* Maybe the entry is not saved in new style, get
              permissions from IMAP and convert them to acl attributes */
@@ -154,21 +159,30 @@ class mailgroup extends plugin
             }
 
           } // 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])){
 
-        /* Adapt attributes if needed */
-        $method->fixAttributesOnLoad($this);
-
       }   // ENDE gosaMailServer
 
     }   // ENDE dn != "new"
@@ -289,6 +303,7 @@ class mailgroup extends plugin
 
     /* Load templating engine */
     $smarty= get_smarty();
+    $display = "";
     if ($_SESSION['js']==FALSE){
       $smarty->assign("javascript", "false");
     } else {
@@ -302,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);
     }
@@ -314,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);
       }
     }
@@ -465,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);
@@ -589,22 +621,22 @@ class mailgroup extends plugin
 
     /* Connect to IMAP server for account deletion */
     if ($this->initially_was_account){
       $method= new $this->method($this->config);
-      if ($method->connect($this->gosaMailServer)){
+      $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());
+    show_ldap_error($ldap->get_error(), _("Removing group mail settings failed"));
 
     /* Optionally execute a command after we're done */
     $this->handle_post_events("remove");
@@ -614,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
@@ -690,9 +732,7 @@ I: Only insider delivery */
     /* Save arrays */
     $this->attrs['gosaMailAlternateAddress']  = $this->gosaMailAlternateAddress;
     $this->attrs['gosaMailForwardingAddress'] = $this->gosaMailForwardingAddress;
-
-    /* Save shared folder target */
-    $this->attrs['gosaSharedFolderTarget']= "share+".$this->uid;
+    $this->attrs['gosaSharedFolderTarget']    = "share+".$this->uid;
 
     if(preg_match("/kolab/i",$this->mmethod)){
       /* Save acl's */
@@ -770,13 +810,12 @@ I: Only insider delivery */
     $ldap->cd($this->dn);
     $this->cleanup();
     $ldap->modify ($this->attrs); 
-
-    show_ldap_error($ldap->get_error());
+    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");
+        $this->handle_post_events("modify");
       }
     } else {
       $this->handle_post_events("add");
@@ -788,7 +827,12 @@ I: Only insider delivery */
   {
     $ldap= $this->config->get_ldap_link();
 
-    $message= array();
+    /* Call common method to give check the hook */
+    $message= plugin::check();
+
+    if(!$this->is_account) return array();
+    
+    //$message[] = $str;      
 
     /* must: mail */
     if ($this->mail == ""){
@@ -799,7 +843,7 @@ I: Only insider delivery */
     }
     $ldap->cd($this->config->current['BASE']);
     $ldap->search ("(&(!(objectClass=gosaUserTemplate))(objectClass=gosaMailAccount)(|(mail=".$this->mail.")(gosaMailAlternateAddress=".
-        $this->mail."))(!(uid=".$this->cn."))(!(cn=".$this->cn.")))");
+        $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.");
     }
@@ -941,31 +985,36 @@ I: Only insider delivery */
   {
     if(!$this->is_account) return("");
 
-    $str =" <table width='100%'>
-              <tr>
-                <td style='width:150px;'>".
-                  _("Primary mail address").
-                "</td>
-                <td>
-                   <input id='mail' name='mail' size='16' maxlength='160'
-                    value='".$this->mail."'
-                    title='"._("Primary mail address for this shared folder")."'>
-                </td>
-              </tr>
-            </table>";
-    return($str);
+    $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);
   }
 
   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:
 ?>