From 6cc49f242cd152e1ec2bf4a9e01fdb06fff4f8ed Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Tue, 12 Jan 2010 11:44:35 -0500
Subject: [PATCH] Added support for dovecot in Debian Lenny. Added Support for Sieve mail filtering language on dovecot servers.

---
 interface/web/mail/mail_user_filter_edit.php |  118 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 84 insertions(+), 34 deletions(-)

diff --git a/interface/web/mail/mail_user_filter_edit.php b/interface/web/mail/mail_user_filter_edit.php
index ed43ebc..03b5232 100644
--- a/interface/web/mail/mail_user_filter_edit.php
+++ b/interface/web/mail/mail_user_filter_edit.php
@@ -92,7 +92,7 @@
 		$found = false;
 		
 		foreach($lines as $line) {
-			$line = trim($line);
+			$line = rtrim($line);
 			if($line == '### BEGIN FILTER_ID:'.$this->id) {
 				$skip = true;
 				$found = true;
@@ -117,21 +117,69 @@
 	
 	function getRule() {
 		
-		$content = '';
-		$content .= '### BEGIN FILTER_ID:'.$this->id."\n";
+		global $app,$conf;
+		
+		$app->uses("getconf");
+		$mailuser_rec = $app->db->queryOneRecord("SELECT server_id FROM mail_user WHERE mailuser_id = ".intval($this->dataRecord["mailuser_id"]));
+		$mail_config = $app->getconf->get_server_config(intval($mailuser_rec["server_id"]),'mail');
+		
+		if($mail_config['mail_filter_syntax'] == 'sieve') {
+			
+			// #######################################################
+			// Filter in Sieve Syntax
+			// #######################################################
+			
+			$content = '';
+			$content .= '### BEGIN FILTER_ID:'.$this->id."\n";
+			
+			//$content .= 'require ["fileinto", "regex", "vacation"];'."\n";
+			
+			$content .= 'if header :regex    ["'.strtolower($this->dataRecord["source"]).'"] ["';
+			
+			$searchterm = preg_quote($this->dataRecord["searchterm"]);
+			
+			if($this->dataRecord["op"] == 'contains') {
+				$content .= ".*".$searchterm;
+			} elseif ($this->dataRecord["op"] == 'is') {
+				$content .= $searchterm."$";
+			} elseif ($this->dataRecord["op"] == 'begins') {
+				$content .= " ".$searchterm."";
+			} elseif ($this->dataRecord["op"] == 'ends') {
+				$content .= ".*".$searchterm."$";
+			}
+			
+			$content .= '"] {'."\n";
+			
+			if($this->dataRecord["action"] == 'move') {
+				$content .= '    fileinto "'.$this->dataRecord["target"].'";' . "\n";
+			} else {
+				$content .= "    discard;\n";
+			}
+			
+			$content .= "    stop;\n}\n";
+			
+			$content .= '### END FILTER_ID:'.$this->id."\n";
+		
+		} else {
+		
+			// #######################################################
+			// Filter in Maildrop Syntax
+			// #######################################################
+			$content = '';
+			$content .= '### BEGIN FILTER_ID:'.$this->id."\n";
 
-		$TargetNoQuotes = $this->dataRecord["target"];
-		$TargetQuotes = "\"$TargetNoQuotes\"";
+			$TargetNoQuotes = $this->dataRecord["target"];
+			$TargetQuotes = "\"$TargetNoQuotes\"";
 
-		$TestChDirNoQuotes = '$DEFAULT/.'.$TargetNoQuotes;
-		$TestChDirQuotes = "\"$TestChDirNoQuotes\"";
+			$TestChDirNoQuotes = '$DEFAULT/.'.$TargetNoQuotes;
+			$TestChDirQuotes = "\"$TestChDirNoQuotes\"";
 
-		$MailDirMakeNoQuotes = $TargetQuotes.' $DEFAULT';
+			$MailDirMakeNoQuotes = $TargetQuotes.' $DEFAULT';
 
-		$EchoTargetFinal = $TargetNoQuotes;
+			$EchoTargetFinal = $TargetNoQuotes;
 
 
-		if($this->dataRecord["action"] == 'move') {
+			if($this->dataRecord["action"] == 'move') {
 
 			$content .= "
 `test -e ".$TestChDirQuotes." && exit 1 || exit 0`
@@ -142,38 +190,40 @@
 	`echo \"INBOX.$EchoTargetFinal\" >> ".'$DEFAULT'."/courierimapsubscribed`
 }
 ";
-		}
+			}
 
-		$content .= "if (/^".$this->dataRecord["source"].":";
+			$content .= "if (/^".$this->dataRecord["source"].":";
 
-		$searchterm = preg_quote($this->dataRecord["searchterm"]);
+			$searchterm = preg_quote($this->dataRecord["searchterm"]);
 
-		if($this->dataRecord["op"] == 'contains') {
-			$content .= ".*".$searchterm."/:h)\n";
-		} elseif ($this->dataRecord["op"] == 'is') {
-			$content .= $searchterm."$/:h)\n";
-		} elseif ($this->dataRecord["op"] == 'begins') {
-			$content .= " ".$searchterm."/:h)\n";
-		} elseif ($this->dataRecord["op"] == 'ends') {
-			$content .= ".*".$searchterm."$/:h)\n";
-		}
+			if($this->dataRecord["op"] == 'contains') {
+				$content .= ".*".$searchterm."/:h)\n";
+			} elseif ($this->dataRecord["op"] == 'is') {
+				$content .= $searchterm."$/:h)\n";
+			} elseif ($this->dataRecord["op"] == 'begins') {
+				$content .= " ".$searchterm."/:h)\n";
+			} elseif ($this->dataRecord["op"] == 'ends') {
+				$content .= ".*".$searchterm."$/:h)\n";
+			}
 
-		$content .= "{\n";
-		$content .= "exception {\n";
+			$content .= "{\n";
+			$content .= "exception {\n";
 
-		if($this->dataRecord["action"] == 'move') {
-			$content .= 'ID' . "$this->id" . 'EndFolder = "$DEFAULT/.' . $this->dataRecord['target'] . '/"' . "\n";
-			$content .= "to ". '$ID' . "$this->id" . 'EndFolder' . "\n";
-		} else {
-			$content .= "to /dev/null\n";
-		}
+			if($this->dataRecord["action"] == 'move') {
+				$content .= 'ID' . "$this->id" . 'EndFolder = "$DEFAULT/.' . $this->dataRecord['target'] . '/"' . "\n";
+				$content .= "to ". '$ID' . "$this->id" . 'EndFolder' . "\n";
+			} else {
+				$content .= "to /dev/null\n";
+			}
 
-		$content .= "}\n";
-		$content .= "}\n";
+			$content .= "}\n";
+			$content .= "}\n";
 		
-		//}
+			//}
 		
-		$content .= '### END FILTER_ID:'.$this->id."\n";
+			$content .= '### END FILTER_ID:'.$this->id."\n";
+		
+		}
 		
 		return $content;
 	}

--
Gitblit v1.9.1