Code

Updated mailForward selection list
[gosa.git] / gosa-plugins / mail / personal / mail / class_mail-methods.inc
index 634cb2a7d370c19991e046268a7cc63063e4700b..a17d77e4a0462d88de166d22461705d524590a50 100644 (file)
@@ -19,19 +19,41 @@ class mailMethod{
   protected $user_prefix    = "user.";  
   protected $share_prefix   = "share.";
 
-  /* Account ID creation */
-  protected $user_id    = "__PREFIX____UATTRIB__";  
-  protected $share_id   = "__PREFIX____UATTRIB__";
+  /* Account ID creation 
+
+      !!Depends on the attributes 'user_prefix'/'share_prefix' and the option 'cyrusUseSlashes'
+
+      Examples - based on defaults : 
+        %PREFIX%    => "user." or "user/" (Depending on cyrusUseSlashes=FALSE/TRUE) 
+        %CN%        => "technik"          (The groups cn)
+        %UID%       => "herbert"          (The users uid)
+        %MAIL%      => "herbert@domain.de"(The mail address)
+        %DOMAIN%    => "domain.de"        (The domain part of the specified mail)
+        %MAILPART%  => "herbert"          (The mail address without domain)
+        %UATTRIB%   => "herbert"/"herbert@domains.de"
+                                            (Configured in gosa.conf mailAttribute="mail"/"uid")
+   */
+  protected $user_id    = "%PREFIX%%UATTRIB%";  
+  protected $share_id   = "%PREFIX%%UATTRIB%";
 
   /* Create accounts in cyrus style with '/' instead of '.' */
   protected $cyrusUseSlashes= FALSE;
 
+  /* gosaSharedFolderTarget settings, 
+   *  E.g. 
+   *    For an accountID like: 'share/herberts.folder@gonicus.de' the value 'dummy+' 
+   *    will result in gosaSharedFolderTarget: dummy+share/herberts.folder@gonicus.de
+   */
+  protected $gosaSharedPrefix = '';  
+
   /* The atribute mapping for this class  Source --> Destination */
   protected $attributes     = array();
   protected $userObjectClasses = array();
   protected $shareObjectClasses = array();
 
-  /* Enabled mail domain selection. If enabled getMailDomains must the domain parts */ 
+  /* Enabled mail domain selection. If enabled getMailDomains() have to return an array 
+   *  with the domain parts.
+   */ 
   protected $enableDomainSelection= FALSE;
   protected $enableQuota          = TRUE;
   protected $enableSieveManager   = FALSE;
@@ -51,6 +73,8 @@ class mailMethod{
   protected $parent             = NULL;   
   protected $MailServer         = "";
 
+  protected $default_acls = array("__anyone__" => "p", "__member__" => "lrswp");
+
   protected $acl_map = array(
       "lrsw"     => "read",
       "lrswp"    => "post",
@@ -61,7 +85,7 @@ class mailMethod{
       " "         => "none");
 
   protected $acl_mapping = array();
+
 
   /*! \brief  Constructs the mail class 
       @param  Object  Config  The GOsa configuration object
@@ -86,6 +110,7 @@ class mailMethod{
     }else{
       $this->type = $type;
     }
+
   }
 
   
@@ -122,6 +147,27 @@ class mailMethod{
       $this->acl_mapping[$acl] = _($name);
     }
 
+    /* Check if we have an individual user/folder creation syntax 
+     */
+    $tmp = $this->config->get_cfg_value("mailUserCreation");
+    if(!empty($tmp)){
+      @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__, "<i>".$tmp."</i>",
+          "<b>MAIL:</b> User creation set to");
+      $this->user_id  = $tmp;
+    }
+    $tmp = $this->config->get_cfg_value("mailFolderCreation");
+    if(!empty($tmp)){
+      @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__, "<i>".$tmp."</i>",
+          "<b>MAIL:</b> Shared folder creation set to");
+      $this->share_id = $tmp;
+    }
+    $tmp = $this->config->get_cfg_value("gosaSharedPrefix");
+    if(!empty($tmp)){
+      @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__, "<i>".$tmp."</i>",
+          "<b>MAIL:</b> Shared folder prefix set to");
+      $this->gosaSharedPrefix = $tmp;
+    }
+
     $this->build_account_id();
     $this->initial_account_id = $this->account_id;
   }
@@ -159,6 +205,7 @@ class mailMethod{
     }else{
       $this->parent->attrs['objectClass'] = 
         array_remove_entries_ics($this->shareObjectClasses, $this->parent->attrs['objectClass']);
+      $this->parent->attrs['gosaSharedFolderTarget'] =array();
     }
     foreach($this->attributes as $source => $dest){
       $this->attrs[$dest]   = array();
@@ -187,6 +234,13 @@ class mailMethod{
         $this->parent->attrs['objectClass'][] = $oc;
       }
     }
+  
+    // Add gosaSharedFolderTarget for groups.
+    $this->build_account_id();
+    if($this->type == "group"){ 
+      $this->parent->attrs['gosaSharedFolderTarget'] = 
+        $this->gosaSharedPrefix.$this->account_id;
+    }
   }
 
 
@@ -297,23 +351,38 @@ class mailMethod{
      */
     $uattrib = $this->uattrib;
     if($this->cyrusUseSlashes){
-      $prefix = preg_replace('/([^\\\\])\./',"\\1/",$prefix);
+      $prefix     = preg_replace('/([^\\\\])\./',"\\1/",$prefix);
+      $acc_string = preg_replace('/([^\\\\])\./',"\\1/",$acc_string); 
     }
     $prefix = preg_replace("/\\\\([\.\/])/","\\1",$prefix);
-   
+    $acc_string = preg_replace("/\\\\([\.\/])/","\\1",$acc_string); 
+  
     $domain = $mailpart = "";
-    if(preg_match("/\@/",$this->parent->$uattrib)){
-      $mailpart = preg_replace("/\@.*$/","",$this->parent->$uattrib);
-      $domain   = preg_replace("/^[^\@]*+\@(.*)$/","\\1",$this->parent->$uattrib);
+    $mail = $this->parent->mail;
+    if(preg_match("/\@/",$mail)){
+      list($mailpart,$domain) = explode("@",$mail);
     }
 
     /* Create account_id 
      */ 
-    $from = array("/__CN__/","/__UID__/","/__PREFIX__/","/__UATTRIB__/","/__DOMAIN__/","/__MAILPART__/");
-    $to   = array($this->parent->cn,$this->parent->uid,$prefix,$this->parent->$uattrib, $domain, $mailpart);
+    $from = array("/%cn%/i","/%uid%/i","/%prefix%/i","/%uattrib%/i","/%domain%/i","/%mailpart%/i","/%mail%/i");
+    $to   = array($this->parent->cn,$this->parent->uid,$prefix,$this->parent->$uattrib, $domain, $mailpart,$mail);
     $acc_id = trim(strtolower(preg_replace($from,$to,$acc_string)));
 
+    /* Check for not replaced pattern.
+     */
+    if(preg_match("/%/",$acc_id)){
+      $notr = preg_replace("/^[^%]*/","",$acc_id);
+      if(!empty($notr)){
+        @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__,"<b>Warning</b>", 
+            sprintf("<b>MAIL: WARNING unknown pattern in account creation string '%s' near '%s'</b>", $acc_id, $notr));
+
+        /* Remove incomprehensible patterns */
+        $acc_id = preg_replace("/%[^%]+%/","",$acc_id);
+      }
+    }
+
+
     if($this->account_id != $acc_id){
       $this->account_id = $acc_id;
       @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__,"", "<b>MAIL:</b> AccountID generated: <b>".$acc_id."</b>");
@@ -346,32 +415,47 @@ class mailMethod{
       $acc_string = $this->share_id;
     }
 
-    /* Create account prefix and respect "cyrusUseSlashes"
+    /* Create account prefix and respect "cyrusUseSlashes" 
        Do not replace escaped dots for cyrusUseSlashes.
      */
     $uattrib = $this->uattrib;
     if($this->cyrusUseSlashes){
-      $prefix = preg_replace('/([^\\\\])\./',"\\1/",$prefix);
+      $prefix     = preg_replace('/([^\\\\])\./',"\\1/",$prefix);
+      $acc_string = preg_replace('/([^\\\\])\./',"\\1/",$acc_string); 
     }
     $prefix = preg_replace("/\\\\([\.\/])/","\\1",$prefix);
-
+    $acc_string = preg_replace("/\\\\([\.\/])/","\\1",$acc_string); 
+  
     $domain = $mailpart = "";
-    if(preg_match("/\@/",$this->parent->$uattrib)){
-      list($mailpart,$domain) = split("\@",$this->parent->$uattrib);
+    $mail = $this->parent->mail;
+    if(preg_match("/\@/",$mail)){
+      list($mailpart,$domain) = explode("@",$mail);
     }
 
     /* Create account_id
      */
-    $from = array("/__CN__/","/__UID__/","/__PREFIX__/","/__UATTRIB__/","/__DOMAIN__/","/__MAILPART__/");
-    $to   = array($this->parent->cn,$this->parent->uid,$prefix,$this->parent->$uattrib, $domain, $mailpart);
-
+    $from = array("/%cn%/i","/%uid%/i","/%prefix%/i","/%uattrib%/i","/%domain%/i","/%mailpart%/i","/%mail%/i");
+    $to   = array($this->parent->cn,$this->parent->uid,$prefix,$this->parent->$uattrib, $domain, $mailpart,$mail);
     $acc_id = trim(strtolower(preg_replace($from,$to,$acc_string)));
 
+    /* Check for not replaced pattern.
+     */
+    if(preg_match("/%/",$acc_id)){
+      $notr = preg_replace("/^[^%]*/","",$acc_id);
+      if(!empty($notr)){
+        @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__,"<b>Warning</b>", 
+            sprintf("<b>MAIL: WARNING unknown pattern in account creation string '%s' near '%s'</b>", $acc_id, $notr));
+
+        /* Remove incomprehensible patterns */
+        $acc_id = preg_replace("/%[^%]+%/","",$acc_id);
+      }
+    }
+
     if(preg_match("/\@/",$acc_id)){
-      list($mail,$domain) = split("\@",$acc_id);
-      $str = trim(strtolower($mail . $folder . "@" . $domain));
+      list($mail,$domain) = explode("@",$acc_id);
+      $str = trim($mail . $folder . "@" . $domain);
     }else{
-      $str = trim(strtolower($acc_id . $folder));
+      $str = trim($acc_id . $folder);
     }
     return($str) ;
   }
@@ -393,8 +477,8 @@ class mailMethod{
         $tmp->init();
         return($tmp);
       }else{
-        @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__, "","<b>MAIL: Invalid mailMethod defined: <b>".$cls.
-            "</b> falling back to <b>".get_class($this)."</b>");
+        @DEBUG (DEBUG_MAIL, __LINE__, __FUNCTION__, __FILE__, "","<b>MAIL: Invalid mailMethod defined: ".$cls.
+            " falling back to ".get_class($this)."</b>");
 
         /* Print out configuration errors directly, we can't catch them everywhere. 
          */
@@ -711,6 +795,30 @@ class mailMethod{
     return("");
   }
 
+
+  static function quota_to_image($use,$quota)
+  {
+    if($use == -1){
+      return("&nbsp;&nbsp;"._("Unknown"));
+    }elseif(empty($quota)){
+      return("&nbsp;&nbsp;"._("Unlimited"));
+    }else{
+      $usage =round(($use/$quota) * 100);
+      return("<img src='progress.php?x=100&amp;y=17&amp;p=$usage'>");
+    }
+  }
+
+  /*! \brief  Returns the default sharedFolder ACLs for this method.
+      @return Array Returns an array containg acls for __member__ and __anyone__
+   */ 
+  public function getDefaultACLs()
+  {
+    $tmp = $this->default_acls;
+    if(!isset($tmp['__member__'])) $tmp['__member__'] = " ";
+    if(!isset($tmp['__anyone__'])) $tmp['__anyone__'] = " ";
+    return($tmp);
+  }
 }