From a88c1699741d6d7e4cdbf0cb587320b420765964 Mon Sep 17 00:00:00 2001 From: Klaus Leithoff Date: Thu, 23 Apr 2015 08:38:47 +0000 Subject: [PATCH] create the default script, if there is none; fix problem on trying to save/create vacation when there is NO rule or vacation existing beforehand --- .../inc/class.emailadmin_script.inc.php | 63 ++++++++++++------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/emailadmin/inc/class.emailadmin_script.inc.php b/emailadmin/inc/class.emailadmin_script.inc.php index 1453b1d1f7..2778e6c5e1 100644 --- a/emailadmin/inc/class.emailadmin_script.inc.php +++ b/emailadmin/inc/class.emailadmin_script.inc.php @@ -92,14 +92,12 @@ class emailadmin_script { return false; } - // if script doesn't yet exist, nothing to retrieve. - // safe to write to this script file. - #LK if (!AppSession::scriptExists($this->name)) { - #LK $this->so = true; - #LK return true; - #LK } - - #print "



get Script ". $this->name ."
"; + // If the called script name is not exist then create it + // otherwise we might get error due to non existance script + if (!in_array($this->name, $connection->listScripts())) + { + $this->updateScript($connection); + } if(self::isError($script = $connection->getScript($this->name))) { if ($this->debug) error_log(__CLASS__.'::'.__METHOD__.": error retrieving script: ".$script->getMessage()); @@ -249,7 +247,7 @@ class emailadmin_script { $vacation_active = false; $username = $GLOBALS['egw_info']['user']['account_lid']; - $version = $GLOBALS['egw_info']['apps']['felamimail']['version']; + $version = $GLOBALS['egw_info']['apps']['mail']['version']; //include "$default->lib_dir/version.php"; @@ -432,7 +430,7 @@ class emailadmin_script { $defaultaddr = $sieve->user . '@' . $sieve->maildomain; array_push($vacation['addresses'],$defaultaddr); } - if ($vacation['status'] == 'on' || $vacation['status'] == 'by_date' && + if (($vacation['status'] == 'on' && strlen(trim($vacation['text']))>0)|| $vacation['status'] == 'by_date' && $vacation['start_date'] <= time() && time() < $vacation['end_date']+24*3600) // +24*3600 to include the end_date day { if (trim($vacation['forwards'])) { @@ -447,17 +445,20 @@ class emailadmin_script { $newscriptbody .= "\tkeep;\n}\n"; } $vacation_active = true; - if ($regexsupported) + if ($vacation['text']) { - $newscriptbody .= "if header :regex ".'"X-Spam-Status" '.'"\\\\bYES\\\\b"'."{\n\tstop;\n}\n"; //stop vacation reply if it is spam - $regexused = 1; - } - else - { - // if there are no regex'es supported use a different Anti-Spam Rule: if X-Spam-Status holds - // additional spamscore information (e.g. BAYES) this rule may prevent Vacation notification - // TODO: refine rule without using regex - $newscriptbody .= "if header :contains ".'"X-Spam-Status" '.'"YES"'."{\n\tstop;\n}\n"; //stop vacation reply if it is spam + if ($regexsupported) + { + $newscriptbody .= "if header :regex ".'"X-Spam-Status" '.'"\\\\bYES\\\\b"'."{\n\tstop;\n}\n"; //stop vacation reply if it is spam + $regexused = 1; + } + else + { + // if there are no regex'es supported use a different Anti-Spam Rule: if X-Spam-Status holds + // additional spamscore information (e.g. BAYES) this rule may prevent Vacation notification + // TODO: refine rule without using regex + $newscriptbody .= "if header :contains ".'"X-Spam-Status" '.'"YES"'."{\n\tstop;\n}\n"; //stop vacation reply if it is spam + } } $newscriptbody .= "vacation :days " . $vacation['days'] . " :addresses ["; $first = 1; @@ -530,7 +531,7 @@ class emailadmin_script { $newscripthead = ""; $newscripthead .= "#Mail filter rules for " . $username . "\n"; - $newscripthead .= '#Generated by ' . $username . ' using FeLaMiMail ' . $version . ' ' . date($default->script_date_format); + $newscripthead .= '#Generated by ' . $username . ' using Mail ' . $version . ' ' . date($default->script_date_format); $newscripthead .= "\n"; if ($activerules) { @@ -545,9 +546,25 @@ class emailadmin_script { $newscripthead .= "];\n\n"; } else { // no active rules, but might still have an active vacation rule + $closeRequired = false; if ($this->vacation && $vacation_active) - $newscripthead .= "require [\"vacation\"];\n\n"; - if ($this->emailNotification && $this->emailNotification['status'] == 'on') $newscripthead .= "require [\"".($enotify?'e':'')."notify\"".($variables?',"variables"':'')."];\n\n"; // Added email notifications + { + $newscripthead .= "require [\"vacation\""; + if ($regexsupported && $regexused) $newscripthead .= ",\"regex\""; + $closeRequired=true; + } + if ($this->emailNotification && $this->emailNotification['status'] == 'on') + { + if ($this->vacation && $vacation_active) + { + $newscripthead .= ",\"".($enotify?'e':'')."notify\"".($variables?',"variables"':'')."];\n\n"; // Added email notifications + } + else + { + $newscripthead .= "require [\"".($enotify?'e':'')."notify\"".($variables?',"variables"':'')."];\n\n"; // Added email notifications + } + } + if ($closeRequired) $newscripthead .= "];\n\n"; } // generate the encoded script foot