Code

Updated locales. Fixed small typos
[gosa.git] / plugins / personal / mail / class_mailAccount.inc
index 6f5fc7e1c557c10e917b9be5ea6c642da5f1297e..bff7beeb0397a48690f7a5d1a423d8b8a2cdf9d8 100644 (file)
@@ -19,44 +19,47 @@ get_dir_list("$BASE_DIR/include");
 class mailAccount extends plugin
 {
   /* Definitions */
-  var $plHeadline= "Mail";
-  var $plDescription= "This does something";
-  var $method= "mailMethod";
+  var $plHeadline         = "Mail";
+  var $plDescription      = "This does something";
+  var $method             = "mailMethod";
 
   /* CLI vars */
-  var $cli_summary= "Manage users mail account";
-  var $cli_description= "Some longer text\nfor help";
-  var $cli_parameters= array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
+  var $cli_summary        = "Manage users mail account";
+  var $cli_description    = "Some longer text\nfor help";
+  var $cli_parameters     = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
 
   /* plugin specific values */
-  var $mail= "";
-  var $uid= "";
-  var $gosaMailAlternateAddress= array();
-  var $gosaMailForwardingAddress= array();
-  var $gosaMailDeliveryMode= "[L        ]";
-  var $gosaMailServer= "";
-  var $gosaMailQuota= "";
-  var $gosaMailMaxSize= "";
-  var $gosaVacationMessage= "";
-  var $gosaSpamSortLevel= "";
-  var $gosaSpamMailbox= "";
-
-  var $quotaUsage= 0;
-  var $forward_dialog= FALSE;
-  var $folder_prefix= "";
-  var $mailboxList= array();
-  var $default_permissions= "none";
-  var $member_permissions= "post";
-  var $members= array();
-  var $admins= array();
-  var $vacations= array();
-  var $perms= array( "lrs" => "read", "lrsp" => "post", "lrsip" => "append",
-      "lrswipcd" => "write", "lrswipcda" => "all" );
+  var $mail                               = "";
+  var $uid                                = "";
+  var $gosaMailAlternateAddress           = array();
+  var $gosaMailForwardingAddress          = array();
+  var $gosaMailDeliveryMode               = "[L        ]";
+  var $gosaMailServer                     = "";
+  var $gosaMailQuota                      = "";
+  var $gosaMailMaxSize                    = "";
+  var $gosaVacationMessage                = "";
+  var $gosaSpamSortLevel                  = "";
+  var $gosaSpamMailbox                    = "";
+
+  var $quotaUsage                         = 0;
+  var $forward_dialog                     = FALSE;
+  var $folder_prefix                      = "";
+  var $mailboxList                        = array();
+  var $default_permissions                = "none";
+  var $member_permissions                 = "post";
+  var $members                            = array();
+  var $admins                             = array();
+  var $vacations                          = array();
+  var $perms                              = array(  "lrs"       => "read", 
+                                                    "lrsp"      => "post", 
+                                                    "lrsip"     => "append",
+                                                    "lrswipcd"  => "write", 
+                                                    "lrswipcda" => "all" );
 
   /* attribute list for save action */
-  var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize",
-      "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox",
-      "gosaVacationMessage", "uid");
+  var $attributes= array("mail", "gosaMailServer", "gosaMailQuota", "gosaMailMaxSize","gosaMailForwardingAddress",
+      "gosaMailDeliveryMode", "gosaSpamSortLevel", "gosaSpamMailbox","gosaMailAlternateAddress",
+      "gosaVacationMessage", "gosaMailAlternateAddress", "gosaMailForwardingAddress");
   var $objectclasses= array("gosaMailAccount");
 
 
@@ -64,13 +67,21 @@ class mailAccount extends plugin
      'dn' from LDAP */
   function mailAccount ($config, $dn= NULL)
   {
-    /* Configuration is fine, allways */
-    $this->config= $config;
-
     /* Load bases attributes */
     plugin::plugin($config, $dn);
 
-    /* Set mailMethod to the one defined in gosa.conf */
+    if(isset($this->attrs['uid'])){
+      $this->uid = $this->attrs['uid'][0];
+    }
+    if(is_array($this->gosaMailServer) && isset($this->gosaMailServer[0])){
+      $this->gosaMailServer = $this->gosaMailServer[0];
+    }
+
+    /* Save initial account state */
+    $this->initially_was_account= $this->is_account;
+
+    /*  Set mailMethod to the one defined in gosa.conf */
     if (isset($this->config->current['MAILMETHOD'])){
       $method= $this->config->current['MAILMETHOD'];
       if (class_exists("mailMethod$method")){
@@ -80,7 +91,9 @@ class mailAccount extends plugin
       }
     }
 
-    /* Preset folder prefix. Will change it later to respect
+    
+    /* Create the account prefix  user. user/ 
+       Preset folder prefix. Will change it later to respect
        altnamespace. */
     if (isset($this->config->current['CYRUSUNIXSTYLE']) && $this->config->current['CYRUSUNIXSTYLE'] == "true"){
       $this->folder_prefix= "user/";
@@ -88,10 +101,13 @@ class mailAccount extends plugin
       $this->folder_prefix= "user.";
     }
 
-    if ($dn != NULL){
+    
+    /* This is not a new account, parse additional attributes */
+    if (($dn != NULL) && ($dn != "new") && $this->is_account){
 
       /* Load attributes containing arrays */
       foreach (array("gosaMailAlternateAddress", "gosaMailForwardingAddress") as $val){
+        $this->$val= array();
         if (isset($this->attrs["$val"]["count"])){
           for ($i= 0; $i<$this->attrs["$val"]["count"]; $i++){
             array_push($this->$val, $this->attrs["$val"][$i]);
@@ -99,25 +115,51 @@ class mailAccount extends plugin
         }
       }
 
+
       /* Only do IMAP actions if gosaMailServer attribute is set */
       if (isset ($this->attrs["gosaMailServer"][0])){
-        $method= new $this->method($this->config);
-        $id= $method->uattrib;
+
+        $method = new $this->method($this->config);
+        $id     = $method->uattrib;
+
+        /* Adapt attributes if needed */
+        $method->fixAttributesOnLoad($this);
         if ($method->connect($this->attrs["gosaMailServer"][0])){
+
+          /* Update quota values */
           $quota= $method->getQuota($this->folder_prefix.$this->$id);
-          $this->quotaUsage= $quota['quotaUsage'];
-          $this->gosaMailQuota= $quota['gosaMailQuota'];
-          $this->mailboxList= $method->getMailboxList(
-              $this->folder_prefix.$this->$id,
-              $this->$id);
+         
+          if($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->folder_prefix.$this->$id));
+          }
+
+          /* Get mailboxes / folder like INBOX ..*/
+          $this->mailboxList= $method->getMailboxList($this->folder_prefix.$this->$id,$this->$id);
+          
           $method->disconnect();
+        }else{
+          /* Could not connect to ldap.
+           */
+          if (isset($this->attrs['gosaMailQuota'][0])){
+            $this->gosaMailQuota = $this->attrs['gosaMailQuota'][0];
+          }
         }
-
-        /* Adapt attributes if needed */
-        $method->fixAttributesOnLoad($this);
       }
     }
 
+
+    /* Get vacation message */
+
     /* Fill vacation array */
     $this->vacation= array();
     if (isset($this->config->current['VACATIONDIR'])){
@@ -136,6 +178,9 @@ class mailAccount extends plugin
       }
     }
 
+
+  /* Create filter */
+
     /* Get global filter config */
     if (!is_global("mailfilter")){
       $ui= get_userinfo();
@@ -145,9 +190,6 @@ class mailAccount extends plugin
           "regex"           => "*");
       register_global("mailfilter", $mailfilter);
     }
-
-    /* Save initial account state */
-    $this->initially_was_account= $this->is_account;
   }
 
 
@@ -174,26 +216,28 @@ class mailAccount extends plugin
 
   function execute()
   {
+    /* Call parent execute */
+    plugin::execute();
+
+    /* Initialise vars */
+
     /* Load templating engine */
     $smarty= get_smarty();
     $display= "";
 
+    /* Get available mailserver */
     $mailserver= array();
     foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){
       $mailserver[]= $key;
     }
 
+    /* Handle account state */
+
     /* Do we need to flip is_account state? */
     if (isset($_POST['modify_state'])){
       $this->is_account= !$this->is_account;
     }
 
-    /* Show main page */
-    $mailserver= array();
-    foreach ($this->config->data['SERVERS']['IMAP'] as $key => $val){
-      $mailserver[]= $key;
-    }
-
     /* Do we represent a valid account? */
     if (!$this->is_account && $this->parent == NULL){
       $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\">&nbsp;<b>".
@@ -214,6 +258,9 @@ class mailAccount extends plugin
       }
     }
 
+
+    /* Forwarder  subdialog */
+
     /* Trigger forward add dialog? */
     if (isset($_POST['add_local_forwarder'])){
       $this->forward_dialog= TRUE;
@@ -289,6 +336,9 @@ class mailAccount extends plugin
       }
     }
 
+    
+    /* Alternate address handling */
+
     /* Add alternate email addresses */
     if (isset($_POST['add_alternate'])){
       if ($_POST['alternate_address'] != "" &&
@@ -328,6 +378,9 @@ class mailAccount extends plugin
       }
     }
 
+  
+    /* Vocation message */
+  
     /* Import vacation message? */
     if (isset($_POST["import_vacation"]) && isset($this->vacation[$_POST["vacation_template"]])){
       $contents= "";
@@ -349,6 +402,9 @@ class mailAccount extends plugin
       $this->gosaVacationMessage= htmlspecialchars($contents);
     }
 
+  
+    /* Display forward dialog if requested above */
+
     /* Show forward add dialog */
     if ($this->forward_dialog){
       $ldap= $this->config->get_ldap_link();
@@ -392,7 +448,8 @@ class mailAccount extends plugin
       }
 
       $acl= array($this->config->current['BASE'] => ":all");
-      $res= get_list($acl, "(&(objectClass=gosaMailAccount)$filter)", TRUE, $mailfilter['depselect'], array("sn", "mail", "givenName"), TRUE);
+      $res= get_list("(&(objectClass=gosaMailAccount)$filter)", $acl, $mailfilter['depselect'], 
+                     array("sn", "mail", "givenName"), GL_SIZELIMIT | GL_SUBSEARCH);
       $ldap->cd($mailfilter['depselect']);
       $ldap->search ("(&(objectClass=gosaMailAccount)$filter)", array("sn", "mail", "givenName"));
       error_reporting (0);
@@ -410,6 +467,7 @@ class mailAccount extends plugin
 
       /* Show dialog */
       $smarty->assign("search_image", get_template_path('images/search.png'));
+      $smarty->assign("usearch_image", get_template_path('images/search_user.png'));
       $smarty->assign("tree_image", get_template_path('images/tree.png'));
       $smarty->assign("infoimage", get_template_path('images/info.png'));
       $smarty->assign("launchimage", get_template_path('images/small_filter.png'));
@@ -430,6 +488,8 @@ class mailAccount extends plugin
       return ($display);
     }
 
+    /* Display mail account tab */
+
     $smarty->assign("mailServers", $mailserver);
     foreach(array("gosaMailServer", "gosaMailQuota", "perms", "mail",
           "gosaMailAlternateAddress", "gosaMailForwardingAddress",
@@ -441,7 +501,7 @@ class mailAccount extends plugin
     }
 
     if (is_numeric($this->gosaMailQuota) && $this->gosaMailQuota != 0){
-      $smarty->assign("quotausage", progressbar(($this->quotaUsage * 100)/ $this->gosaMailQuota,100,15,true));
+      $smarty->assign("quotausage", progressbar(round(($this->quotaUsage * 100)/ $this->gosaMailQuota),100,15,true));
       $smarty->assign("quotadefined", "true");
     } else {
       $smarty->assign("quotadefined", "false");
@@ -453,12 +513,29 @@ class mailAccount extends plugin
       $smarty->assign("mailACL", "disabled");
     }
 
-    /* Fill checkboxes */
+
     if (!preg_match("/L/", $this->gosaMailDeliveryMode)) {
       $smarty->assign("drop_own_mails", "checked");
     } else {
       $smarty->assign("drop_own_mails", "");
     }
+
+    $types = array(
+          "V"=>"use_vacation",
+          "S"=>"use_spam_filter",
+          "R"=>"use_mailsize_limit",
+          "I"=>"only_local",
+          "C"=>"own_script");
+
+    /* Fill checkboxes */
+    foreach($types as $option => $varname){
+      if (preg_match("/".$option."/", $this->gosaMailDeliveryMode)) {
+        $smarty->assign($varname, "checked");
+      } else {
+        $smarty->assign($varname, "");
+      }
+    }
+    
     if (preg_match("/V/", $this->gosaMailDeliveryMode)) {
       $smarty->assign("use_vacation", "checked");
     } else {
@@ -534,18 +611,12 @@ class mailAccount extends plugin
     $method= new $this->method($this->config);
     $method->fixAttributesOnRemove($this);
 
-    /* Mailmethod wants us to remove the entry from LDAP. Keep uid! */
-    #fixme: || kolab || is differs here, you can't delete all attrs specified in this plugin .... 
-    #fixme: there are some attributes we have to keep, i think.
-    unset ($this->attrs['uid']);
-
-
-
-    @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,
-        $this->attributes, "Save");
+    @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,$this->attributes, "Save");
     $ldap->cd($this->dn);
-    $ldap->modify($this->attrs);
-    show_ldap_error($ldap->get_error());
+    $this->cleanup();
+    $ldap->modify ($this->attrs); 
+
+    show_ldap_error($ldap->get_error(), _("Removing mail account failed"));
 
     /* Connect to IMAP server for account deletion */
     if ($this->gosaMailServer != ""){
@@ -630,17 +701,33 @@ class mailAccount extends plugin
     /* Adapt attributes if needed */
     $method= new $this->method($this->config);
     $id= $method->uattrib;
+
     $method->fixAttributesOnStore($this);
 
+    /* Remove Mailquota if = "" or "0"  */
+    if((isset($this->attrs['gosaMailQuota']))&&(!$this->attrs['gosaMailQuota'])) {
+      $this->attrs['gosaMailQuota']=0;
+    }
+
+    if(empty($this->attrs['gosaSpamMailbox'])){
+      unset($this->attrs['gosaSpamMailbox']);
+    }
+
+    $this->attrs['mail'] = strtolower($this->attrs['mail']); 
+
     /* Save data to LDAP */
     $ldap->cd($this->dn);
-    $ldap->modify($this->attrs);
-    show_ldap_error($ldap->get_error());
+    $this->cleanup();
+    $ldap->modify ($this->attrs); 
+
+    show_ldap_error($ldap->get_error(), _("Saving mail account failed"));
 
     /* Only do IMAP actions if we are not a template */
     if (!$this->is_template){
+
       if ($method->connect($this->gosaMailServer)){
         $method->updateMailbox($this->folder_prefix.$this->$id);
+        
         $method->setQuota($this->folder_prefix.$this->$id, $this->gosaMailQuota);
         $method->disconnect();
 
@@ -661,7 +748,7 @@ class mailAccount extends plugin
     /* 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");
@@ -669,12 +756,16 @@ class mailAccount extends plugin
 
   }
 
+
   /* Check formular input */
   function check()
   {
+    if(!$this->is_account) return(array());
+
     $ldap= $this->config->get_ldap_link();
 
-    $message= array();
+    /* Call common method to give check the hook */
+    $message= plugin::check();
 
     if(empty($this->gosaMailServer)){
       $message[]= _("There is no valid mailserver specified, please add one in the system setup.");
@@ -694,8 +785,7 @@ class mailAccount extends plugin
       }
     }
     $ldap->cd($this->config->current['BASE']);
-    $ldap->search ("(&(!(objectClass=gosaUserTemplate))(|(mail=".$this->mail.")(gosaMailAlternateAddress=".
-        $this->mail."))(!(uid=".$this->uid."))(!(cn=".$this->uid.")))", array("uid"));
+    $ldap->search ("(&(!(objectClass=gosaUserTemplate))(objectClass=gosaMailAccount)(|(mail=".$this->mail.")(gosaMailAlternateAddress=".$this->mail."))(!(uid=".$this->uid."))(!(cn=".$this->uid.")))", array("uid"));
     if ($ldap->count() != 0){
       $message[]= _("The primary address you've entered is already in use.");
     }
@@ -725,9 +815,14 @@ class mailAccount extends plugin
       $message[]= _("You need to set the maximum mail size in order to reject anything.");
     }
 
+    if((preg_match("/S/", $this->gosaMailDeliveryMode))&&(empty($this->gosaSpamMailbox))) {
+      $message[]= _("You specified Spam settings, but there is no Folder specified.");
+    }
+
     return ($message);
   }
 
+
   /* Adapt from template, using 'dn' */
   function adapt_from_template($dn)
   {
@@ -750,17 +845,18 @@ class mailAccount extends plugin
     $this->mail= strtolower(rewrite($this->mail));
   }
 
+
   /* 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;
   }
 
+
   /* Remove list of addresses from forwarder list */
   function delForwarder($addresses)
   {
@@ -769,17 +865,16 @@ class mailAccount extends plugin
   }
 
 
-
+  /* Add given mail address to the list of alternate adresses , 
+      check if this mal address is used, skip adding in this case */
   function addAlternate($address)
   {
     $ldap= $this->config->get_ldap_link();
-
     $address= strtolower($address);
-
+      
     /* Is this address already assigned in LDAP? */
     $ldap->cd ($this->config->current['BASE']);
-    $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)".
-        "(gosaMailAlternateAddress=$address)))", array("uid"));
+    $ldap->search ("(&(objectClass=gosaMailAccount)(|(mail=$address)"."(gosaMailAlternateAddress=$address)))", array("uid"));
 
     if ($ldap->count() > 0){
       $attrs= $ldap->fetch ();
@@ -794,7 +889,6 @@ class mailAccount extends plugin
 
     sort ($this->gosaMailAlternateAddress);
     reset ($this->gosaMailAlternateAddress);
-
     return ("");
   }
 
@@ -826,6 +920,55 @@ class mailAccount extends plugin
     return ($name);
   }
 
+  
+  /* Create the mail part for the copy & paste dialog */
+  function getCopyDialog()
+  {
+    if(!$this->is_account) return("");
+    $smarty = get_smarty();
+    $smarty->assign("mail",$this->mail); 
+    $smarty->assign("gosaMailAlternateAddress",$this->gosaMailAlternateAddress);
+    $smarty->assign("gosaMailForwardingAddress",$this->gosaMailForwardingAddress);
+    $str = $smarty->fetch(get_template_path("copypaste.tpl",TRUE, dirname(__FILE__)));
+
+    $ret = array();
+    $ret['status'] = "";
+    $ret['string'] = $str;
+    return($ret);
+  }
+
+  function saveCopyDialog()
+  {
+    if(!$this->is_account) return;  
+
+    /* Execute to save mailAlternateAddress && gosaMailForwardingAddress */
+    $this->execute();
+    
+    if(isset($_POST['mail'])){
+      $this->mail = $_POST['mail'];
+    }
+
+  }
+
+  function allow_remove()
+  {
+    if (isset($this->config->current['MAILMETHOD'])){
+      $method= $this->config->current['MAILMETHOD'];
+      if(preg_match("/kolab/i",$method)){
+        $ldap = $this->config->get_ldap_link();
+        $ldap->cd($this->config->current['BASE']);
+        $ldap->cat($this->dn);
+        if($ldap->count()){
+          $attrs = $ldap->fetch();
+          if(isset($attrs['kolabDeleteFlag'])){ 
+            return(_("Waiting for kolab to remove mail properties."));
+          }elseif(in_array("gosaMailAccount",$attrs['objectClass'])){
+            return(_("Please remove the mail account first, to allow kolab to call its remove methods."));
+          }
+        }
+      }
+    }
+  }
 }
 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: