Code

* Created "old" branch and moved stuff
[gosa.git] / branches / old / gosa-plugins / mail / personal / mail / sieve / class_sieveElement_Vacation.inc
diff --git a/branches/old/gosa-plugins/mail/personal/mail/sieve/class_sieveElement_Vacation.inc b/branches/old/gosa-plugins/mail/personal/mail/sieve/class_sieveElement_Vacation.inc
new file mode 100644 (file)
index 0000000..1af166e
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+
+class sieve_vacation 
+{
+  var $days     = FALSE;
+  var $subject  = FALSE;
+  var $from     = "";
+  var $mime     = "";
+  var $handle   = "";
+  var $reason   = "\"I am not available, currently.\"";
+  var $addresses= array();
+  var $object_id= -1;
+  var $Expert   = FALSE;
+  var $parent   = NULL;
+
+  function sieve_vacation($data,$object_id,$parent)
+  {
+    $this->parent = $parent;
+    $this->object_id = $object_id;
+    $this->parent->add_require("vacation");
+
+    /* Usage:   vacation [":days" number] [":subject" string]
+       [":from" string] [":addresses" string-list]
+       [":mime"] [":handle" string] <reason: string> */
+
+    /* Not all attribute types are supported by the sieve class right now */
+    $known_attrs = array(":days",":subject",":from",":mime",":handle");
+
+    /* skip if empty */
+    if(($data === NULL) || !is_array($data)) return;
+
+    /* Walk through elements */
+    $p= count($data['ELEMENTS']);
+    for ($i= 0; $i < $p; $i++){
+
+      /* get current element */
+      $node = $data['ELEMENTS'][$i];
+
+      /* Check if tag is in the specified list of attributes */
+      if($node['class'] == "tag" && in_array($node['text'],$known_attrs)){
+
+        $var = preg_replace("/\:/","",$node['text']);
+        $this->$var = $data['ELEMENTS'][$i+1]['text'];
+        $i ++;
+      }
+
+      /* Check for addresses */
+      if($node['class'] == "tag" && $node['text'] == ":addresses") {
+        $this->addresses = array();
+        $i ++;
+
+        /* Multiple or single address given */
+        if($data['ELEMENTS'][$i]['class'] == "left-bracket"){
+          while($data['ELEMENTS'][$i]['class'] != "right-bracket" && ($i < count($data['ELEMENTS']))){
+            $i ++;
+            if($data['ELEMENTS'][$i]['class'] == "quoted-string"){
+              $this->addresses[] = preg_replace("/\"/i","",$data['ELEMENTS'][$i]['text']);
+            }
+          }
+        }else{
+              $this->addresses[] =  preg_replace("/\"/i","",$data['ELEMENTS'][$i]['text']);
+        }
+      }
+
+      /* Add the vacation message */
+      if(in_array($node['class'],array("quoted-string","multi-line"))){
+
+        $tmp = sieve_get_strings($data['ELEMENTS'],$i);
+        $strs= $tmp['STRINGS'];
+        $data = ""; 
+        foreach($strs as $str){
+          $data .= $str;
+        }
+        $this->reason = $data;
+      }
+    }
+  }
+
+  function get_sieve_script_part()
+  {
+    $str = "vacation ";
+    if($this->days){
+      $str.= ":days ".$this->days;
+    }
+
+    if(count($this->addresses)){
+      $str .= ":addresses ".sieve_create_strings($this->addresses);
+      if($this->subject){
+        $str.= ":subject ".sieve_create_strings($this->subject);
+      }
+    }
+    if($this->mime){
+      $str.= ":mime ".sieve_create_strings($this->mime);
+    }
+  
+    /* Append reason and ensure that this will be 
+     *  handled as multiline text element 
+     *  by adding a "\n" new line 
+     */
+    $str .= "\n ".sieve_create_strings($this->reason."\n");
+    return($str." ; \n");
+  }
+
+  function save_object()
+  {
+    /* Get release date */
+    if(isset($_POST['vacation_release_'.$this->object_id])){
+      $this->days = stripslashes($_POST['vacation_release_'.$this->object_id]);
+    }
+
+    /* Check if we want to toggle the expert mode */
+    if(isset($_POST['Toggle_Expert_'.$this->object_id])){
+      $this->Expert = !$this->Expert;
+    }
+
+    /* Get release date */
+    if(isset($_POST['vacation_receiver_'.$this->object_id])){
+      $vr = stripslashes ($_POST['vacation_receiver_'.$this->object_id]);
+      $tmp = array();
+      $tmp2 = split(",",$vr);
+      foreach($tmp2 as $val){
+        $ad = trim($val);
+        if(!empty($ad)){
+          $tmp[] = $ad;
+        }
+      }
+      $this->addresses = $tmp;
+    }
+
+    /* Get reason */
+    if(isset($_POST['vacation_reason_'.$this->object_id])){
+      $vr = stripslashes ($_POST['vacation_reason_'.$this->object_id]);
+      $this->reason = trim($vr);
+    }
+  }
+
+  function check()
+  {
+    $msgs = array();
+    $err = FALSE;
+    foreach($this->addresses as $addr){
+      if(!tests::is_email($addr)){
+        $err = true;
+      }
+    }
+    if($err){
+      $msgs[] = _("Alternative sender address must be a valid email addresses.");
+    }
+    return($msgs);
+  }
+
+  function execute()
+  {
+    $Addresses = "";
+    foreach($this->addresses as $key){
+      $Addresses .= $key.", ";
+    }
+    $Addresses = preg_replace("/,$/","",trim($Addresses));
+
+    $smarty = get_smarty();
+    $smarty->assign("LastError",$this->check());
+    $smarty->assign("LastErrorCnt",count($this->check()));
+    $smarty->assign("Reason",$this->reason);
+    $smarty->assign("Addresses",$Addresses);
+    $smarty->assign("Subject",$this->subject);
+    $smarty->assign("Days",$this->days);
+    $smarty->assign("ID",$this->object_id);
+    $smarty->assign("Expert",$this->Expert);
+
+    $object_container = $smarty->fetch(get_template_path("templates/object_container.tpl",TRUE,dirname(__FILE__)));
+    $object= $smarty->fetch(get_template_path("templates/element_vacation.tpl",TRUE,dirname(__FILE__)));
+    $str = preg_replace("/%%OBJECT_CONTENT%%/",addcslashes($object,"\\"),$object_container);
+    return($str);
+  }
+}
+
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
+?>