Changeset 3859 for branches/2.2/expressoMail1_2/inc/class.ScriptS.inc.php
- Timestamp:
- 03/11/11 09:23:24 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2/expressoMail1_2/inc/class.ScriptS.inc.php
r3849 r3859 1 1 <?php 2 2 3 //Inclui o arquivo contendo a classe SieveS; 3 4 include('class.SieveS.inc.php'); 4 5 5 6 class ScriptS { 6 7 7 8 //Declaração de Variáveis; 8 var $SieveS; 9 var $reply; 10 var $scriptfile; 11 var $username; 12 var $rules; 13 var $errstr; 14 var $size; 15 var $so; 9 var $SieveS; // Var para criação do objeto; 10 var $reply; // Var para resposta; 11 var $scriptfile; // Nome do script; 12 var $username; // Nome do usuario; 13 var $rules; // Regras do sieve; 14 var $errstr; // Erros retornados; 15 var $size; // Tamanho; 16 var $so; // Verifica se a regra foi criada por outro tipo serviço de filtros; 16 17 var $continuebit; 17 18 var $sizebit; … … 24 25 var $EmailVoip; 25 26 var $EmailExpresso; 26 27 function ScriptS() {27 28 function ScriptS() { 28 29 29 30 //Cria o objeto; 30 $this->SieveS 31 31 $this->SieveS = new SieveS(); 32 32 33 //$this->scriptfile = $GLOBALS['HTTP_SESSION_VARS']['phpgw_info']['expressomail']['user']['account_lid']; 33 34 $this->scriptfile = $_SESSION['phpgw_info']['expressomail']['user']['account_lid']; 34 $this->username = $this->scriptfile; 35 36 $this->reply = ""; 37 $this->rules = ""; 38 $this->errstr = ""; 39 $this->size = ""; 40 41 $this->continuebit = 1; 42 $this->sizebit = 1; 43 $this->anyofbit = 4; 44 $this->keepbit = 8; 45 $this->regexbit = 128; 46 47 $this->EmailVoip = trim($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_email_redirect']); 48 $this->EmailExpresso = trim($_SESSION['phpgw_info']['expressomail']['user']['email']); 49 35 $this->username = $this->scriptfile; 36 37 $this->reply = ""; 38 $this->rules = ""; 39 $this->errstr = ""; 40 $this->size = ""; 41 42 $this->continuebit = 1; 43 $this->sizebit = 1; 44 $this->anyofbit = 4; 45 $this->keepbit = 8; 46 $this->regexbit = 128; 47 48 $this->EmailVoip = trim($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_email_redirect']); 49 $this->EmailExpresso = trim($_SESSION['phpgw_info']['expressomail']['user']['email']); 50 50 } 51 52 function init_a() {53 51 52 function init_a() { 53 54 54 //Abre a conexão 55 55 $this->SieveS->start(); 56 56 57 57 $this->reply = $this->SieveS->getscript(); 58 59 if (!$this->reply){60 58 59 if (!$this->reply) { 60 61 61 $aux = $this->SieveS->putscript($this->scriptfile, $this->createScript()); 62 if (!$aux){62 if (!$aux) { 63 63 // Caso de erro, grava dentro da variável errstr; 64 $this->errstr = "Error: file not created"; 65 return $this->errstr; 64 $this->errstr = "Error: file not created"; 65 return $this->errstr; 66 66 } 67 67 // Mata a variavel; … … 69 69 // Ativa o script; 70 70 $aux = $this->SieveS->activatescript($this->scriptfile); 71 72 if (!$aux){71 72 if (!$aux) { 73 73 // Caso de erro, grava dentro da variavel errstr; 74 $this->errstr = "Error: error to activate file"; 75 return $this->errstr; 76 } 77 else{ 74 $this->errstr = "Error: error to activate file"; 75 return $this->errstr; 76 } else { 78 77 $this->reply = $this->SieveS->getscript(); 79 78 $this->rules = $this->readScript($this->reply); 80 79 } 81 } else{80 } else { 82 81 $this->rules = $this->readScript($this->reply); 83 } 82 } 84 83 85 84 //Fecha a conexao 86 85 $this->SieveS->close(); 87 88 if ($this->rules)86 87 if ($this->rules) 89 88 return $this->rules; 90 91 89 } 92 93 function rec_rules($params) {94 95 $newr1 96 $newr2 97 $newr3 98 90 91 function rec_rules($params) { 92 93 $newr1 = array(); 94 $newr2 = array(); 95 $newr3 = array(); 96 99 97 $var_decode = rawurldecode($params['arfilter']); 100 98 $var_decode = preg_replace('/\n\./', '.', $var_decode); 101 102 $narray = explode("_end_",$var_decode);103 104 foreach ($narray as $key=>$tmp){105 if ($tmp != ""){99 100 $narray = explode("_end_", $var_decode); 101 102 foreach ($narray as $key => $tmp) { 103 if ($tmp != "") { 106 104 $newr1[] = $tmp; 107 105 } … … 109 107 unset($key); 110 108 unset($tmp); 111 foreach ($newr1 as $key=>$tmp){109 foreach ($newr1 as $key => $tmp) { 112 110 $tmp2 = explode("_begin_##", $tmp); 113 foreach ($tmp2 as $tmp3){114 if ($tmp3 != ""){115 $newr2[] = trim($tmp3); 116 } 117 } 118 } 119 111 foreach ($tmp2 as $tmp3) { 112 if ($tmp3 != "") { 113 $newr2[] = trim($tmp3); 114 } 115 } 116 } 117 120 118 unset($tmp); 121 119 unset($tmp2); 122 120 unset($tmp3); 123 121 124 foreach ($newr2 as $tmp){125 if (trim($tmp) != ""){126 $tmp2 = explode("##", $tmp);127 foreach ($tmp2 as $tmp3){128 $tmp4 .= trim($tmp3) . "&&"; 129 } 130 $newr3[] = substr($tmp4, 0,(strlen($tmp4)-4));122 foreach ($newr2 as $tmp) { 123 if (trim($tmp) != "") { 124 $tmp2 = explode("##", $tmp); 125 foreach ($tmp2 as $tmp3) { 126 $tmp4 .= trim($tmp3) . "&&"; 127 } 128 $newr3[] = substr($tmp4, 0, (strlen($tmp4) - 4)); 131 129 unset($tmp2); 132 130 unset($tmp3); … … 134 132 } 135 133 } 136 137 $tmp = $newr3[count($newr3) -1];138 139 if (substr($tmp,0,9) == "#vacation"){134 135 $tmp = $newr3[count($newr3) - 1]; 136 137 if (substr($tmp, 0, 9) == "#vacation") { 140 138 $this->newout = array_pop($newr3); 141 foreach ($newr3 as $key=>$tmp){139 foreach ($newr3 as $key => $tmp) { 142 140 $this->newrules[] = $tmp; 143 141 } 144 } else{145 foreach ($newr3 as $tmp){146 $this->newrules[] = $tmp; 147 } 148 } 149 142 } else { 143 foreach ($newr3 as $tmp) { 144 $this->newrules[] = $tmp; 145 } 146 } 147 150 148 unset($tmp); 151 $tmp = explode("&&",$this->newout);152 $tmp1 = explode(",", $tmp[2]);153 foreach ($tmp1 as $key=>$tmp2){154 $tmp3 .= stripslashes(trim($tmp2)) .", ";155 } 156 $tmp3 = substr($tmp3, 0,(strlen($tmp3)-2));157 149 $tmp = explode("&&", $this->newout); 150 $tmp1 = explode(",", $tmp[2]); 151 foreach ($tmp1 as $key => $tmp2) { 152 $tmp3 .= stripslashes(trim($tmp2)) . ", "; 153 } 154 $tmp3 = substr($tmp3, 0, (strlen($tmp3) - 2)); 155 158 156 unset($tmp); 159 157 unset($tmp1); 160 158 unset($tmp2); 161 159 unset($key); 162 $tmp = explode("&&", $this->newout);163 foreach ($tmp as $key=>$tmp1){164 if ($key == 2){165 $tmp2 .= trim($tmp3) . "&&"; 166 } else{167 $tmp2 .= trim($tmp1) . "&&"; 168 } 160 $tmp = explode("&&", $this->newout); 161 foreach ($tmp as $key => $tmp1) { 162 if ($key == 2) { 163 $tmp2 .= trim($tmp3) . "&&"; 164 } else { 165 $tmp2 .= trim($tmp1) . "&&"; 166 } 169 167 } 170 168 unset($this->newout); 171 $this->newout = substr($tmp2, 0,(strlen($tmp2)-2));172 169 $this->newout = substr($tmp2, 0, (strlen($tmp2) - 2)); 170 173 171 //Abre a conexao 174 172 $this->SieveS->start(); 175 173 $this->errstr = ""; 176 174 177 175 // Escreve a nova regra; 178 176 $this->reply = $this->SieveS->getscript(); 179 177 /* 180 if($this->reply){181 $this->errstr = $this->SieveS->deletescript($this->scriptfile);182 }183 */184 185 $error_log_file ="/home/expressolivre/sieve_error.log";178 if($this->reply){ 179 $this->errstr = $this->SieveS->deletescript($this->scriptfile); 180 } 181 */ 182 183 $error_log_file = "/home/expressolivre/sieve_error.log"; 186 184 //Escreve a(s) nova(s) regra(s); 187 185 $newrule = $this->write_rule(); 188 186 if (strlen($newrule) > 0) 189 $this->errstr = $this->SieveS->putscript($this->scriptfile,$newrule); 190 else 191 { 192 if($_SESSION['phpgw_info']['server']['expressomail']['expressoMail_enable_log_messages'] == "True") 193 error_log(date("D M j G:i:s T Y").": SieveError, Invalid rule for " 194 .$_SESSION['phpgw_info']['expressomail']['user']['userid']."=>" 195 .$this->teste."\nRule:" 196 .$var_decode."\n", 3, $error_log_file); 187 $this->errstr = $this->SieveS->putscript($this->scriptfile, $newrule); 188 else { 189 if ($_SESSION['phpgw_info']['server']['expressomail']['expressoMail_enable_log_messages'] == "True") 190 error_log(date("D M j G:i:s T Y") . ": SieveError, Invalid rule for " 191 . $_SESSION['phpgw_info']['expressomail']['user']['userid'] . "=>" 192 . $this->teste . "\nRule:" 193 . $var_decode . "\n", 3, $error_log_file); 197 194 return "Invalid rule\n" . $this->teste; 198 195 } 199 196 200 197 //Ativa o script; 201 198 $this->errstr = $this->SieveS->activatescript($this->scriptfile); 202 199 203 200 //Fecha a conexao 204 201 $this->SieveS->close(); 205 206 if($this->errstr) 207 { 202 203 if ($this->errstr) { 208 204 return "Ok"; 209 } 210 else 211 { 212 if($_SESSION['phpgw_info']['server']['expressomail']['expressoMail_enable_log_messages'] == "True") 213 error_log(date("D M j G:i:s T Y") 214 .": SieveError, Problem for " 215 .$_SESSION['phpgw_info']['expressomail']['user']['userid']."=>" 216 ." " 217 .$this->SieveS->errstr."\n", 3, $error_log_file); 205 } else { 206 if ($_SESSION['phpgw_info']['server']['expressomail']['expressoMail_enable_log_messages'] == "True") 207 error_log(date("D M j G:i:s T Y") 208 . ": SieveError, Problem for " 209 . $_SESSION['phpgw_info']['expressomail']['user']['userid'] . "=>" 210 . " " 211 . $this->SieveS->errstr . "\n", 3, $error_log_file); 218 212 return "Problemas na criação do arquivo!\n" . $this->teste; 219 213 } 220 214 } 221 215 222 function convert_specialchar($input) 223 { 224 $special_char = false; 225 for ( $i = 0; $i < strlen($input); $i++ ) 226 { 227 if ( preg_match('/[^a-z0-9.@~_+=&\'*^\ \-\[\]]/i', $input[$i]) ) 228 { 229 $special_char = true; 230 $input = preg_replace('/\\'.$input[$i].'/', '=' . bin2hex($input[$i]), $input); 231 } 232 } 233 234 if ( $special_char ) 235 { 236 /* * 237 * When using arrays with pattern and replacement, 238 * the keys are processed in the order they appear in the array. 239 * See preg_replace in php.net/preg_replace 240 * */ 241 $patterns[0] = '/=c3/i'; 242 $patterns[1] = '/ /'; 243 $replacements[1] = ''; 244 $replacements[0] = '_'; 245 $input = preg_replace($patterns, $replacements, $input); 246 } 247 248 return($input); 249 } 216 function convert_specialchar($input) { 217 $special_char = false; 218 for ($i = 0; $i < strlen($input); $i++) { 219 if (preg_match('/[^a-z0-9.@~_+=&\'*^\ \-\[\]]/i', $input[$i])) { 220 $special_char = true; 221 $input = preg_replace('/\\' . $input[$i] . '/', '=' . bin2hex($input[$i]), $input); 222 } 223 } 224 225 if ($special_char) { 226 /* * 227 * When using arrays with pattern and replacement, 228 * the keys are processed in the order they appear in the array. 229 * See preg_replace in php.net/preg_replace 230 * */ 231 $patterns[0] = '/=c3/i'; 232 $patterns[1] = '/ /'; 233 $replacements[1] = ''; 234 $replacements[0] = '_'; 235 $input = preg_replace($patterns, $replacements, $input); 236 } 237 238 return($input); 239 } 250 240 251 241 // build the rule 252 function write_rule() {242 function write_rule() { 253 243 254 244 // Variaveis; … … 260 250 $rejectused = 0; 261 251 $notify = 0; 262 252 $flaggedused = 0; 263 253 $newscriptbody = ""; 264 265 266 254 $continue = 1; 255 $tmpSubject = ""; 256 267 257 // Recebe os valores das regras; 268 foreach($this->newrules as $tmp){ 269 $tmp1 = explode("&&",$tmp); 270 $rule['priority'] = $tmp1[1]; 271 $rule['status'] = $tmp1[2]; 272 $rule['from'] = $this->convert_specialchar($tmp1[3]); 273 $rule['to'] = $this->convert_specialchar($tmp1[4]); 274 $tmpSubject = $tmp1[5]; 275 $rule['subject'] = $this->convert_specialchar($tmp1[5]); 276 $rule['action'] = $tmp1[6]; 277 $rule['action_arg'] = utf8_encode(preg_replace("/\\r\\n/","\r\n",$tmp1[7])); 278 $rule['flg'] = $tmp1[8]; 279 $rule['field'] = $tmp1[9]; 280 $rule['field_val'] = $tmp1[10]; 281 $rule['size'] = $tmp1[11]; 282 $rule['continue'] = ($tmp1[8] & $this->continuebit); 283 $rule['gthan'] = ($tmp1[8] & $this->sizebit); 284 $rule['anyof'] = ($tmp1[8] & $this->anyofbit); 285 $rule['keep'] = ($tmp1[8] & $this->keepbit); 286 $rule['regexp'] = ($tmp1[8] & $this->regexbit); 287 $rule['unconditional'] = 0; 288 289 if (!$rule['from'] && !$rule['to'] && !$rule['subject'] && !$rule['field'] && empty($rule['size']) && $rule['action']) 290 { 291 $rule['unconditional'] = 1; 292 293 if( $rule['unconditional'] && ($rule['size'] == "0" || $rule['size'] == 0 ) ) 294 $rule['unconditional'] = 0; 295 } 296 unset($tmp1); 297 298 // Monta as regras; 299 if ($rule['status'] != 'ENABLED') { 300 } 301 else { 302 $activerules = 1; 303 304 // Condições para montagem das regras; 305 $anyall = "allof"; 306 if ($rule['anyof']) $anyall = "anyof"; 307 if ($rule['regexp']) { 308 $regexused = 1; 309 } 310 $started = 0; 311 312 if (!$rule['unconditional']) { 313 if (!$continue) $newruletext .= "els"; 314 $newruletext .= "if " . $anyall . " ("; 315 if ($rule['from']) { 316 if (preg_match("/^\s*!/", $rule['from'])){ 317 $newruletext .= 'not '; 318 $rule['from'] = preg_replace("/^\s*!/","",$rule['from']); 319 } 320 $match = ':contains'; 321 if (preg_match("/\*|\?/", $rule['from'])) $match = ':matches'; 322 if ($rule['regexp']) $match = ':regex'; 323 $newruletext .= "header " . $match . " [\"From\"]"; 324 $newruletext .= " \"" . $rule['from'] . "\""; 325 $started = 1; 326 } 327 if ($rule['to']) { 328 if ($started) $newruletext .= ", "; 329 if (preg_match("/^\s*!/", $rule['to'])){ 330 $newruletext .= 'not '; 331 $rule['to'] = preg_replace("/^\s*!/","",$rule['to']); 332 } 333 $match = ':contains'; 334 if (preg_match("/\*|\?/", $rule['to'])) $match = ':matches'; 335 if ($rule['regexp']) $match = ':regex'; 336 $newruletext .= "address " . $match . " [\"To\",\"TO\",\"Cc\",\"CC\"]"; 337 $newruletext .= " \"" . $rule['to'] . "\""; 338 $started = 1; 339 } 340 if ($rule['subject']) { 341 if ($started) $newruletext .= ", "; 342 if (preg_match("/^\s*!/", $rule['subject'])){ 343 $newruletext .= 'not '; 344 $rule['subject'] = preg_replace("/^\s*!/","",$rule['subject']); 345 } 346 $match = ':contains'; 347 if (preg_match("/\*|\?/", $rule['subject'])) $match = ':matches'; 348 if ($rule['regexp']) $match = ':regex'; 349 $newruletext .= "header " . $match . " \"subject\""; 350 $newruletext .= " \"" . $rule['subject'] . "\""; 351 $started = 1; 352 } 353 if ($rule['field'] && $rule['field_val']) { 354 if ($started) $newruletext .= ", "; 355 if (preg_match("/^\s*!/", $rule['field_val'])){ 356 $newruletext .= 'not '; 357 $rule['field_val'] = preg_replace("/^\s*!/","",$rule['field_val']); 358 } 359 $match = ':contains'; 360 if (preg_match("/\*|\?/", $rule['field_val'])) $match = ':matches'; 361 if ($rule['regexp']) $match = ':regex'; 362 $newruletext .= "header " . $match . " \"" . $rule['field'] . "\""; 363 $newruletext .= " \"" . $rule['field_val'] . "\""; 364 $started = 1; 365 } 366 367 if ( $rule['size'] >= 0 ) { 368 $xthan = " :under "; 369 if ($rule['gthan']) $xthan = " :over "; 370 if ($started) $newruletext .= ", "; 371 372 if($rule['size'] != 0 && $rule['size'] != "0") 373 $newruletext .= "size " . $xthan . $rule['size'] ."K"; 374 else 375 $newruletext .= "size " . $xthan . "0K"; 376 377 $started = 1; 378 } 379 380 } 381 // Don't write half rule! 382 if (strlen($newruletext) == 0) 383 return false; 384 // Actions 385 if (!$rule['unconditional']) $newruletext .= ") {\n\t"; 386 387 if (preg_match("/folder/i",$rule['action'])) 388 { 389 $newruletext .= "fileinto \"" . $rule['action_arg'] . "\";"; 390 } 391 392 if (preg_match("/reject/i",$rule['action'])) 393 { 394 $newruletext .= "reject text: \n" . $rule['action_arg'] . "\n.\n;"; 395 $rejectused = 1; 396 } 397 if (preg_match("/flagged/i",$rule['action'])) 398 { 399 $newruletext .= "addflag \"\\\\Flagged\";"; 400 $flaggedused = 1; 401 } 402 if (preg_match("/address/i",$rule['action'])) 403 { 404 $newruletext .= "redirect \"" . $rule['action_arg'] . "\";"; 405 } 406 407 if (preg_match("/notify/i",$rule['action'])) 408 { 409 $newruletext .= "notify :method \"mailto\" :options [\"".$this->EmailVoip ."\"]:" . 410 "message \"<expressovoip><from>". $this->EmailExpresso."</from>". 411 "<br/><Subject>".utf8_encode($tmpSubject)."</Subject></expressovoip>\";"; 412 $notify = 1; 413 } 414 415 if (preg_match("/discard/i",$rule['action'])) { 416 $newruletext .= "discard;"; 417 } 418 if ($rule['keep']) $newruletext .= "\n\tfileinto \"INBOX\";"; 419 //if ($rule['keep']) $newruletext .= "\n\tkeep;"; 420 if (!$rule['unconditional']) $newruletext .= "\n}"; 421 422 $continue = 0; 423 if ($rule['continue']) $continue = 1; 424 if ($rule['unconditional']) $continue = 1; 425 426 $newscriptbody .= $newruletext . "\n\n"; 427 unset($newruletext); 428 } 258 foreach ($this->newrules as $tmp) { 259 $tmp1 = explode("&&", $tmp); 260 $rule['priority'] = $tmp1[1]; 261 $rule['status'] = $tmp1[2]; 262 $rule['from'] = $this->convert_specialchar($tmp1[3]); 263 $rule['to'] = $this->convert_specialchar($tmp1[4]); 264 $tmpSubject = $tmp1[5]; 265 $rule['subject'] = $this->convert_specialchar($tmp1[5]); 266 $rule['action'] = $tmp1[6]; 267 $rule['action_arg'] = utf8_encode(preg_replace("/\\r\\n/", "\r\n", $tmp1[7])); 268 $rule['flg'] = $tmp1[8]; 269 $rule['field'] = $tmp1[9]; 270 $rule['field_val'] = $tmp1[10]; 271 $rule['size'] = $tmp1[11]; 272 $rule['continue'] = ($tmp1[8] & $this->continuebit); 273 $rule['gthan'] = ($tmp1[8] & $this->sizebit); 274 $rule['anyof'] = ($tmp1[8] & $this->anyofbit); 275 $rule['keep'] = ($tmp1[8] & $this->keepbit); 276 $rule['regexp'] = ($tmp1[8] & $this->regexbit); 277 $rule['unconditional'] = 0; 278 279 if (!$rule['from'] && !$rule['to'] && !$rule['subject'] && !$rule['field'] && empty($rule['size']) && $rule['action']) { 280 $rule['unconditional'] = 1; 281 282 if ($rule['unconditional'] && ($rule['size'] == "0" || $rule['size'] == 0 )) 283 $rule['unconditional'] = 0; 284 } 285 unset($tmp1); 286 287 // Monta as regras; 288 if ($rule['status'] != 'ENABLED') { 289 290 } else { 291 $activerules = 1; 292 293 // Condições para montagem das regras; 294 $anyall = "allof"; 295 if ($rule['anyof']) 296 $anyall = "anyof"; 297 if ($rule['regexp']) { 298 $regexused = 1; 299 } 300 $started = 0; 301 302 if (!$rule['unconditional']) { 303 if (!$continue) 304 $newruletext .= "els"; 305 $newruletext .= "if " . $anyall . " ("; 306 if ($rule['from']) { 307 if (preg_match("/^\s*!/", $rule['from'])) { 308 $newruletext .= 'not '; 309 $rule['from'] = preg_replace("/^\s*!/", "", $rule['from']); 310 } 311 $match = ':contains'; 312 if (preg_match("/\*|\?/", $rule['from'])) 313 $match = ':matches'; 314 if ($rule['regexp']) 315 $match = ':regex'; 316 $newruletext .= "header " . $match . " [\"From\"]"; 317 $newruletext .= " \"" . $rule['from'] . "\""; 318 $started = 1; 319 } 320 if ($rule['to']) { 321 if ($started) 322 $newruletext .= ", "; 323 if (preg_match("/^\s*!/", $rule['to'])) { 324 $newruletext .= 'not '; 325 $rule['to'] = preg_replace("/^\s*!/", "", $rule['to']); 326 } 327 $match = ':contains'; 328 if (preg_match("/\*|\?/", $rule['to'])) 329 $match = ':matches'; 330 if ($rule['regexp']) 331 $match = ':regex'; 332 $newruletext .= "address " . $match . " [\"To\",\"TO\",\"Cc\",\"CC\"]"; 333 $newruletext .= " \"" . $rule['to'] . "\""; 334 $started = 1; 335 } 336 if ($rule['subject']) { 337 if ($started) 338 $newruletext .= ", "; 339 if (preg_match("/^\s*!/", $rule['subject'])) { 340 $newruletext .= 'not '; 341 $rule['subject'] = preg_replace("/^\s*!/", "", $rule['subject']); 342 } 343 $match = ':contains'; 344 if (preg_match("/\*|\?/", $rule['subject'])) 345 $match = ':matches'; 346 if ($rule['regexp']) 347 $match = ':regex'; 348 $newruletext .= "header " . $match . " \"subject\""; 349 $newruletext .= " \"" . $rule['subject'] . "\""; 350 $started = 1; 351 } 352 if ($rule['field'] && $rule['field_val']) { 353 if ($started) 354 $newruletext .= ", "; 355 if (preg_match("/^\s*!/", $rule['field_val'])) { 356 $newruletext .= 'not '; 357 $rule['field_val'] = preg_replace("/^\s*!/", "", $rule['field_val']); 358 } 359 $match = ':contains'; 360 if (preg_match("/\*|\?/", $rule['field_val'])) 361 $match = ':matches'; 362 if ($rule['regexp']) 363 $match = ':regex'; 364 $newruletext .= "header " . $match . " \"" . $rule['field'] . "\""; 365 $newruletext .= " \"" . $rule['field_val'] . "\""; 366 $started = 1; 367 } 368 369 if ($rule['size'] != '') 370 { 371 if ($rule['size'] == 0) { 372 $xthan = " :under "; 373 if ($rule['gthan']) 374 $xthan = " :over "; 375 if ($started) 376 $newruletext .= ", "; 377 378 $newruletext .= "size " . $xthan . "0K"; 379 $started = 1; 380 } 381 382 if ($rule['size'] > 0) { 383 $xthan = " :under "; 384 if ($rule['gthan']) 385 $xthan = " :over "; 386 if ($started) 387 $newruletext .= ", "; 388 389 $newruletext .= "size " . $xthan . $rule['size'] . "K"; 390 $started = 1; 391 } 392 } 393 } 394 395 // Don't write half rule! 396 if (strlen($newruletext) == 0) 397 return false; 398 // Actions 399 if (!$rule['unconditional']) 400 $newruletext .= ") {\n\t"; 401 402 if (preg_match("/folder/i", $rule['action'])) { 403 $newruletext .= "fileinto \"" . $rule['action_arg'] . "\";"; 404 } 405 406 if (preg_match("/reject/i", $rule['action'])) { 407 $newruletext .= "reject text: \n" . $rule['action_arg'] . "\n.\n;"; 408 $rejectused = 1; 409 } 410 if (preg_match("/flagged/i", $rule['action'])) { 411 $newruletext .= "addflag \"\\\\Flagged\";"; 412 $flaggedused = 1; 413 } 414 if (preg_match("/address/i", $rule['action'])) { 415 $newruletext .= "redirect \"" . $rule['action_arg'] . "\";"; 416 } 417 418 if (preg_match("/notify/i", $rule['action'])) { 419 $newruletext .= "notify :method \"mailto\" :options [\"" . $this->EmailVoip . "\"]:" . 420 "message \"<expressovoip><from>" . $this->EmailExpresso . "</from>" . 421 "<br/><Subject>" . utf8_encode($tmpSubject) . "</Subject></expressovoip>\";"; 422 $notify = 1; 423 } 424 425 if (preg_match("/discard/i", $rule['action'])) { 426 $newruletext .= "discard;"; 427 } 428 if ($rule['keep']) 429 $newruletext .= "\n\tfileinto \"INBOX\";"; 430 //if ($rule['keep']) $newruletext .= "\n\tkeep;"; 431 if (!$rule['unconditional']) 432 $newruletext .= "\n}"; 433 434 $continue = 0; 435 if ($rule['continue']) 436 $continue = 1; 437 if ($rule['unconditional']) 438 $continue = 1; 439 440 $newscriptbody .= $newruletext . "\n\n"; 441 unset($newruletext); 442 } 429 443 }// Fim do Foreach; 430 $this->teste = $newscriptbody; 444 $this->teste = $newscriptbody; 431 445 // Para a regras fora do escritorio; 432 433 if($this->newout != ""){434 $aux = explode("&&",$this->newout);435 $vacation['days']= $aux[1];436 $vacation['addresses'] = $aux[2];437 $vacation['text'] = preg_replace("/\\\\n/","\r\n",$aux[3]);438 $vacation['status']= $aux[4];439 440 446 unset($tmp); 447 if ($this->newout != "") { 448 $aux = explode("&&", $this->newout); 449 $vacation['days'] = $aux[1]; 450 $vacation['addresses'] = $aux[2]; 451 $vacation['text'] = preg_replace("/\\\\n/", "\r\n", $aux[3]); 452 $vacation['status'] = $aux[4]; 453 } 454 441 455 // Monta a regra para fora do escritorio; 442 456 if ($vacation['status'] == 'on') { 443 457 $newscriptbody .= "vacation :days " . $vacation['days'] . " :addresses ["; 444 445 446 447 458 $newscriptbody .= $vacation['addresses']; 459 $newscriptbody .= "] text:\n" . utf8_encode($vacation['text']) . "\n.\n;\n\n"; 460 } 461 448 462 // Cria o cabeçalho do arquivo; 449 $newscripthead 450 $newscripthead .= "#Mail filter rules for " . $this->username . "\n";463 $newscripthead = ""; 464 $newscripthead .= "#Mail filter rules for " . $this->username . "\n"; 451 465 $newscripthead .= '#Generated by ' . $this->username . ' using Expressomail '; 452 466 $newscripthead .= "\n"; 453 467 454 468 // Continuação do cabeçalho do arquivo; 455 456 457 458 if($notify){459 $newscripthead .= ",\"notify\"";460 461 if($regexused){462 463 464 if($rejectused){465 466 467 if($flaggedused){468 469 }470 if($this->newout && $vacation['status'] == 'on'){471 472 473 474 }else{475 if ($vacation && $vacation['status'] == 'on'){476 477 } 478 479 480 481 $newscriptfoot= "";482 483 484 foreach($this->newrules as $tmp){485 $newscriptfoot .= preg_replace("/[\\n\\r]/", " ",$tmp). "\n";486 487 488 if($this->newout != ""){489 $newscriptfoot .= preg_replace("/[\\n\\r]/", " ",$this->newout)."\n";490 469 if ($activerules) { 470 $newscripthead .= "require [\"fileinto\""; 471 472 if ($notify) { 473 $newscripthead .= ",\"notify\""; 474 } 475 if ($regexused) { 476 $newscripthead .= ",\"regex\""; 477 } 478 if ($rejectused) { 479 $newscripthead .= ",\"reject\""; 480 } 481 if ($flaggedused) { 482 $newscripthead .= ",\"imapflags\""; 483 } 484 if ($this->newout && $vacation['status'] == 'on') { 485 $newscripthead .= ",\"vacation\""; 486 } 487 $newscripthead .= "];\n\n"; 488 } else { 489 if ($vacation && $vacation['status'] == 'on') { 490 $newscripthead .= "require [\"vacation\"];\n\n"; 491 } 492 } 493 494 // Cria o rodapé do arquivo; 495 $newscriptfoot = ""; 496 $newscriptfoot .= "##PSEUDO script start\n"; 497 // Lê as regras; 498 foreach ($this->newrules as $tmp) { 499 $newscriptfoot .= preg_replace("/[\\n\\r]/", " ", $tmp) . "\n"; 500 } 501 // Lê as regras fora do escritório; 502 if ($this->newout != "") { 503 $newscriptfoot .= preg_replace("/[\\n\\r]/", " ", $this->newout) . "\n"; 504 } 491 505 $newscriptfoot .= "#mode&&basic\n"; 492 493 $newscript = $newscripthead . $newscriptbody . $newscriptfoot; 506 507 $newscript = $newscripthead . $newscriptbody . $newscriptfoot; 494 508 495 509 // Destroi as variaveis; … … 499 513 unset($regexused); 500 514 unset($rejectused); 501 515 unset($flaggedused); 502 516 unset($newscripthead); 503 517 unset($newscriptbody); 504 505 506 507 508 518 unset($newscriptfoot); 519 unset($continue); 520 unset($this->newrules); 521 unset($this->newout); 522 509 523 // Retorna o script construido; 510 524 return $newscript; 511 512 }// Fim da Função 513 525 } 526 527 // Fim da Função 514 528 // Cria o script sieve, caso nao possua; 515 function createScript() {516 529 function createScript() { 530 517 531 // Cria o cabeçalho do arquivo; 518 $newScriptHead 519 $newScriptHead .= "#Mail filter rules for " . $this->username . "\n";520 $newScriptHead .= '#Generated by ' . $this->username . ' using ExpressoMail '; 532 $newScriptHead = ""; 533 $newScriptHead .= "#Mail filter rules for " . $this->username . "\n"; 534 $newScriptHead .= '#Generated by ' . $this->username . ' using ExpressoMail '; 521 535 $newScriptHead .= "\n"; 522 536 523 537 //Cria o rodapé do arquivo; 524 $newScriptFoot 538 $newScriptFoot = ""; 525 539 $newScriptFoot .= "##PSEUDO Script Start\n"; 526 540 $newScriptFoot .= "#mode&&basic\n"; 527 541 528 542 //Para passar para o arquivo; 529 543 $newScript = $newScriptHead . $newScriptFoot; … … 531 545 return $newScript; 532 546 } 533 547 534 548 //Lê o conteúdo do script; 535 function readScript($scriptName) {536 549 function readScript($scriptName) { 550 537 551 // Verifica se a conexão foi bem sucedida; 538 if (!$scriptName){552 if (!$scriptName) { 539 553 $this->errstr = "Não foi possível conectar com o Servidor"; 540 return "false 2"; 541 } 542 554 return "false 2"; 555 } 556 543 557 // Recebe o conteúdo do array; 544 558 $lines = array(); 545 $lines = preg_split("/\n/", $scriptName);546 559 $lines = preg_split("/\n/", $scriptName); 560 547 561 // Pega o tamanho da regra na primeira do script; 548 562 $size_rule = array_shift($lines); 549 563 550 564 // Recebe o tamanho do script, pela primeira linha; 551 565 $this->size = trim($size_rule); 552 566 553 567 // Verifica a composição do script; 554 568 $line = array_shift($lines); 555 if (!preg_match("/^# ?Mail(.*)rules for/", $line)){569 if (!preg_match("/^# ?Mail(.*)rules for/", $line)) { 556 570 $this->errstr = "Formato nao reconhecido"; 557 571 return false; 558 572 } 559 573 560 574 // Variaveis para a regra e o campo ferias; 561 $regexps = array('^ *##PSEUDO','^ *#rule','^ *#vacation','^ *#mode');562 $retorno['rule'] 575 $regexps = array('^ *##PSEUDO', '^ *#rule', '^ *#vacation', '^ *#mode'); 576 $retorno['rule'] = array(); 563 577 $retorno['vacation'] = array(); 564 $retorno['mode'] 565 578 $retorno['mode'] = array(); 579 566 580 $line = array_shift($lines); 567 while (isset($line)) {568 foreach ($regexps as $regp){569 if (preg_match("/$regp/i",$line)){581 while (isset($line)) { 582 foreach ($regexps as $regp) { 583 if (preg_match("/$regp/i", $line)) { 570 584 // Recebe todas as regras criadas no servidor; 571 if (preg_match("/^ *#rule&&/i",$line)){585 if (preg_match("/^ *#rule&&/i", $line)) { 572 586 $retorno['rule'][] = $line . "\n"; 573 587 } 574 if (preg_match("/^ *#vacation&&/i",$line)){575 $retorno['vacation'][] = $line . "\n"; 576 } 577 if (preg_match("/^ *#mode&&(.*)/i",$line)){578 $retorno['mode'][] = $line . "\n";579 } 588 if (preg_match("/^ *#vacation&&/i", $line)) { 589 $retorno['vacation'][] = $line . "\n"; 590 } 591 if (preg_match("/^ *#mode&&(.*)/i", $line)) { 592 $retorno['mode'][] = $line . "\n"; 593 } 580 594 } 581 595 } … … 583 597 $line = array_shift($lines); 584 598 } 585 return $retorno; 599 return $retorno; 586 600 } 587 588 }//Fim da Classe 601 602 } 603 604 //Fim da Classe 589 605 ?>
Note: See TracChangeset
for help on using the changeset viewer.