Changeset 5539
- Timestamp:
- 02/23/12 17:14:32 (11 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/expressoMail1_2/inc/class.imap_functions.inc.php
r5533 r5539 5326 5326 return $return; 5327 5327 } 5328 5329 5330 function searchSieveRule( $params ) 5331 { 5332 5333 $imap = $this->open_mbox( 'INBOX' ); 5334 $msgs = imap_sort( $imap , SORTDATE , 0 , SE_UID); 5335 5336 $rr = array(); 5337 5338 5339 foreach ($msgs as $i => $v) 5340 { 5341 5342 $msg = imap_headerinfo ( $imap, imap_msgno($imap, $v) ); 5343 5344 if(isset($params['from'])) 5345 { 5346 $from['from'] = array(); 5347 $from['from']['name'] = $this->decode_string($msg->from[0]->personal); 5348 $from['from']['email'] = $this->decode_string($msg->from[0]->mailbox . "@" . $msg->from[0]->host); 5349 if ($from['from']['name']) 5350 { 5351 if (substr($from['from']['name'], 0, 1) == '"') 5352 $from['from']['full'] = $from['from']['name'] . ' ' . '<' . $from['from']['email'] . '>'; 5353 else 5354 $from['from']['full'] = '"' . $from['from']['name'] . '" ' . '<' . $from['from']['email'] . '>'; 5355 } 5356 else 5357 $from['from']['full'] = $from['from']['email']; 5358 5359 if($this->filterCheck( $from['from']['full'] , $params['from']['criteria'] , $params['from']['filter'] )) 5360 $rr['from'][] = $v; 5361 } 5362 5363 if(isset($params['to'])) 5364 { 5365 $tos = $msg->to; 5366 $val = ''; 5367 foreach( $tos as $to) 5368 { 5369 $tmp = imap_mime_header_decode($to->personal); 5370 $val .= '"' . $tmp[0]->text . '" ' . '<' . $to->mailbox . "@" . $to->host . '>'; 5371 5372 } 5373 if($this->filterCheck( $val , $params['to']['criteria'] , $params['to']['filter'] )) 5374 $rr['to'][] = $v; 5375 5376 $tos = $msg->cc; 5377 $val = ''; 5378 foreach( $tos as $to) 5379 { 5380 $tmp = imap_mime_header_decode($to->personal); 5381 $val .= '"' . $tmp[0]->text . '" ' . '<' . $to->mailbox . "@" . $to->host . '>'; 5382 5383 } 5384 5385 if($this->filterCheck( $val , $params['to']['criteria'] , $params['to']['filter'] )) 5386 $rr['to'][] = $v; 5387 } 5388 5389 if(isset($params['subject'])) 5390 { 5391 $ss = ''; 5392 $subject = imap_mime_header_decode($msg->subject); 5393 foreach ($subject as $tmp) 5394 $ss .= $tmp->text; 5395 5396 if($this->filterCheck($ss , $params['subject']['criteria'] , $params['subject']['filter'] )) 5397 $rr['subject'][] = $v; 5398 } 5399 5400 if(isset($params['body'])) 5401 { 5402 $this->mbox = $this->open_mbox( 'INBOX' ); 5403 $b = $this->get_body_msg( $v , 'INBOX' ); 5404 5405 if( $this->filterCheck( $b['body'] , $params['body']['criteria'] , $params['body']['filter'] )) 5406 $rr['body'][] = $v; 5407 5408 unset($b); 5409 } 5410 5411 if(isset($params['size'])) 5412 { 5413 if( $this->filterCheck( $msg->Size , $params['size']['criteria'] , $params['size']['filter'] )) 5414 $rr['size'][] = $v; 5415 } 5416 } 5417 5418 $rrr = array(); 5419 $init = true; 5420 5421 5422 foreach ($rr as $i => $v) 5423 { 5424 if(count($rrr) == 0 && $init === true) 5425 $rrr = $v; 5426 else if($params['isExact'] === true) 5427 $rrr = array_diff($rrr , $v); 5428 else 5429 $rrr = array_unique(array_merge($rrr , $v)); 5430 5431 } 5432 5433 5434 // if($params['page'] && $params['rows']) 5435 // { 5436 // 5437 // $end = ( $params['rows'] * $params['page'] ); 5438 // $ini = $end - $params['rows'] ; 5439 // 5440 // //Pegando os do range da paginação 5441 // $k = -1; 5442 // $r = array(); 5443 // foreach ($rrr as $v) 5444 // { 5445 // $k++; 5446 // if( $k < $ini || $k >= $end ) continue; 5447 // $r[] = $v; 5448 // } 5449 // ////////////////////////////////////// 5450 // } 5451 // else 5452 $r = $rrr; 5453 5454 return $r ; 5455 } 5456 5457 function filterCheck( $val , $crit ,$fil ) 5458 { 5459 switch ( $fil ) { 5460 case '=' : //Igual 5461 if( $val == $crit ) return true; else return false; break; 5462 case '*' : //Existe 5463 if( strpos( $val , $crit ) !== false ) return true; else return false; break; 5464 case '!*' : //Não existe 5465 if( strpos( $val , $crit ) === false ) return true; else return false; break; 5466 case '^' : //Começa com 5467 if( substr ($val , 0 , strlen($crit) ) == $crit ) return true; else return false; break; 5468 case '$' : //Termina com 5469 if( substr ($val , 0 , -(strlen($crit)) ) == $crit ) return true; else return false; break; 5470 case '>' : //Maior que 5471 if( $val > (int)($crit * 1024) ) return true; else return false; break; 5472 case '<' : //Menor que 5473 if( $val < (int)($crit * 1024) ) return true; else return false; break; 5474 } 5475 } 5476 5477 function apliSieveFilter($msgs , $proc ) 5478 { 5479 $ret = array(); 5480 5481 switch($proc['action']){ 5482 case 'fileintro': 5483 $imap = $this->open_mbox( 'INBOX' ); 5484 foreach( $msgs as $msg ) 5485 if($proc['keep'] === true) 5486 $ret[$msg][] = imap_mail_copy($imap,$msg,$proc['value']); 5487 else 5488 $ret[$msg][] = imap_mail_move($imap,$msg,$proc['value']); 5489 break; 5490 case 'redirect': 5491 foreach($msgs as $msg) 5492 { 5493 $info = $this->get_info_msg(array('msg_folder' => 'INBOX','msg_number' => $msg)); 5494 5495 require_once $_SESSION['rootPath'] . '/API/class.servicelocator.php'; 5496 $mailService = ServiceLocator::getService('mail'); 5497 5498 $ret[$msg][] = $mailService->sendMail( $proc['value'] , $info['from']['full'] , $info['subject'] ,$info['body'] ); 5499 5500 if($proc['keep'] !== true) 5501 $this->delete_msgs(array('msgs_number' => $msg , 'folder' => 'INBOX')); 5502 } 5503 break; 5504 5505 case 'setflag': 5506 foreach($msgs as $msg) 5507 $ret[$msg][] = $this->set_messages_flag( array( 'folder' => 'INBOX' , 'msgs_to_set' => $msg , 'flag' => $proc['value']) ); 5508 5509 break; 5510 } 5511 5512 return $ret; 5513 } 5328 5514 } 5329 5515 ?> -
trunk/expressoMail1_2/index.php
r5533 r5539 386 386 <title>ExpressoMail</title> 387 387 </head> 388 <body scroll="no" style="overflow:hidden" >388 <body scroll="no" style="overflow:hidden" class="expressomail-module-container"> 389 389 <link rel="stylesheet" href="../prototype/modules/attach_message/attach_message.css" type="text/css" /> 390 390 <link rel="stylesheet" href="../prototype/modules/mail/css/label.css" type="text/css" /> … … 394 394 </body> 395 395 </html> 396 <script type="text/javascript" src="../prototype/modules/filters/filters.js"></script> 396 397 <script type="text/javascript">connector.updateVersion = "<?=$update_version?>";</script> 397 398 <!-----Expresso Mail - Version Updated:<?=$update_version?>--------> -
trunk/expressoMail1_2/js/common_functions.js
r5533 r5539 641 641 filters.Forms(); 642 642 } 643 644 645 function filterbox2(){ 646 jQuery('.expresso-window-container').dialog('open'); 647 } 648 643 649 644 650 function sharebox(){ -
trunk/expressoMail1_2/js/doiMenuData.js
r5533 r5539 97 97 "i01": {"name": get_lang("Preferences"), "icon": "preferences-mail", callback: preferences_mail }, 98 98 "i02": {"name": get_lang("Search"), "icon": "search-mail", callback: function(key, opt){ search_emails(""); }}, 99 "103": {"name": get_lang("Edit filters"), "icon": "filter", callback: filterbox },99 "103": {"name": get_lang("Edit filters"), "icon": "filter", callback: filterbox2 }, 100 100 "i04": {"name": get_lang("Edit folders"), "icon": "edit-folder", callback: folderbox }, 101 101 "i05": {"name": get_lang("Share mailbox"), "icon": "share-mailbox", callback: sharebox }, -
trunk/prototype/api/controller.php
r5514 r5539 422 422 foreach( $interceptors[ $eventType ] as $intercept => $interceptor ) 423 423 { 424 $return = $interceptor->$intercept( $params['URI'], $params['properties'], $params['criteria'], $original /*, $params['service']*/);424 $return = $interceptor->$intercept( $params['URI'], $params['properties'], $params['criteria'], $original /*, $params['service'] */); 425 425 426 426 if( $return === false ) … … 560 560 $TX['rollback'] = !!!$params['properties']; 561 561 562 if( $params['properties'] && is set($params['properties']['id']) )562 if( $params['properties'] && is_array($params['properties']) && isset($params['properties']['id']) ) 563 563 $TX['id'] = $params['properties']['id']; 564 564 … … 639 639 $result = Controller::call( $method, $URI, $data, false, false, true ); 640 640 641 if( !is_bool( $result ) && !is_string( $result ) && isset( $result['id'] ) )641 if( is_array( $result ) && isset( $result['id'] ) ) 642 642 $URI['id'] = $result['id']; 643 643 -
trunk/prototype/api/datalayer.js
r5531 r5539 89 89 var $this = $(this), action = $this.attr('action'), res = false, 90 90 91 method = $this.attr( 'method' ) ,91 method = $this.attr( 'method' ) || 'POST', 92 92 93 93 fileInputs = $this.find('input[type="file"]'); -
trunk/prototype/modules/filters/filter-list.ejs
r5341 r5539 1 1 <ul class="rule-list"> 2 2 <% 3 data.rules = data.rules || []; 3 data.rules = (data.rules || []); 4 for (var i=0; i<data.rules.length; i++) { 4 5 5 for (var i=0; i<data.rules.length; i++) {6 6 %> 7 7 <li class="rule <%= (data.rules[i].name=='vacation')?'vacation':'' %>" title="<%= data.rules[i].name %>"> … … 20 20 </ul> 21 21 </dd> 22 23 22 <dt>Ações:</dt> 24 23 <dd class="rule-briefing-action"> … … 35 34 </dl> 36 35 <ul class="menu-control"> 37 <li><a href="#<%= data.rules[i].name %>" class="button update" title="Alterar regra '<%= data.rules[i].name %>'"> Alterar</a></li>36 <li><a href="#<%= data.rules[i].name %>" class="button update" title="Alterar regra '<%= data.rules[i].name %>'"></a></li> 38 37 <li><a href="#<%= data.rules[i].name %>" class="button enable<%= (data.rules[i].enabled)? '': ' hidden' %>" title="Habilitar regra"></a></li> 39 38 <li><a href="#<%= data.rules[i].name %>" class="button disable<%= (data.rules[i].enabled)? ' hidden': '' %>" title="Desabilitar regra"></a></li> … … 46 45 %> 47 46 </ul> 48 <ul class="message-tip-container no-saved hidden"> 49 <li class="message-tip">Você possui ações não salvas. Para efetivá-las clique no botão "Concluir" abaixo.</li> 50 </ul> 51 <fieldset class="fields-add ui-corner-all"> 52 <legend>Adicionar</legend> 53 <a href="#" class="button add" title="Adicionar nova regra">Nova regra</a> 54 <a href="#" class="button add vacation" title="Adicionar regra 'Fora do escritório'">Fora do escritório</a> 55 </fieldset> 47 <!-- 56 48 <fieldset class="fields-selected-itens ui-corner-all"> 57 49 <legend>Selecionadas</legend> … … 60 52 <a href="#" class="button delete" title="Excluir regras selecionadas">Excluir</a> 61 53 </fieldset> 54 --> -
trunk/prototype/modules/filters/filters.css
r5341 r5539 31 31 .rule-list .rule { 32 32 display: block; 33 margin: 0;33 margin: 1px; 34 34 padding: 5px; 35 border : 1px solid #CCCCCC; 36 border-radius : 5px; 35 37 /* height: 18px;*/ 36 38 } … … 41 43 42 44 .rule-list .rule .menu-control { 43 max-width: 1 25px;45 max-width: 100px; 44 46 float: right; 45 47 margin-top: -50px; … … 52 54 padding: 0; 53 55 } 54 .rule.vacation { background-color: #F BFAF3; }56 .rule.vacation { background-color: #F5F3BC; } 55 57 .rule.vacation .title { font-style: italic; } 56 58 … … 72 74 margin: 5px; 73 75 padding: 5px; 74 text-align: center;75 76 width: 250px; 76 77 border: 1px solid #AAA; 77 78 } 79 80 .expresso-window-container .filter-llist{ 81 border: 1px solid #AAA; 82 } 83 78 84 .expresso-window-container .fields-add { margin-right: 0;} 79 85 … … 85 91 } 86 92 87 88 89 90 91 93 .filter-manager-window fieldset, .vacarion-details-container fieldset{ border: none; } 92 94 .rule-details-container fieldset label.small { width: 100px; display: inline-block;} … … 95 97 .rule-details-container fieldset.fields-isexact fieldset { border: none; } 96 98 97 .rule-details-container fieldset.fields-replyto textarea { display: block; width : 350px; height: 50px; border: 1px solid #AAA; margin: 5px; }98 .vacation-details-container textarea { display: block; width : 350px; height: 100px; border: 1px solid #AAA; margin: 5px; }99 .rule-details-container fieldset.fields-replyto textarea { display: block; width : 100%; height: 50px; border: 1px solid #AAA; padding: 5px; margin: 5px; } 100 .vacation-details-container textarea { display: block; width : 98.5%; height: 100px; border: 1px solid #AAA; padding: 5px; margin: 5px; } 99 101 100 102 .filter-manager-window .message-tip-container { list-style: none; border:1px solid #E17009; background-color: #FBFAF3; padding: 5px; margin: 5px;} … … 116 118 font-size: 0.8em; 117 119 } 118 .rule .menu-control .ui-button.disable,.rule .menu-control .ui-button.enable, .rule .menu-control .ui-button. close { top:5px; }120 .rule .menu-control .ui-button.disable,.rule .menu-control .ui-button.enable, .rule .menu-control .ui-button.update, .rule .menu-control .ui-button.close { top:5px; } 119 121 .filter-manager-window .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } -
trunk/prototype/modules/filters/filters.js
r5399 r5539 60 60 61 61 nameObj.val( filter.name ); 62 62 nameObj.attr("disabled", "disabled"); 63 63 for( var i = 0; i < filter.criteria.length; i++ ){ 64 64 … … 69 69 } 70 70 71 71 72 for( var i = 0; i < filter.actions.length; i++ ){ 72 73 actions.filter( '[value="' + filter.actions[i].type + '"]' ).val( filter.actions[i].type ) 74 .siblings( '[name="actionParameter[]"]' ).val( filter.actions[i].parameter ); 75 73 actions.filter( '[value="' + filter.actions[i].type + '"]' ).attr("checked", "True"); 74 actions.filter( '[value="' + filter.actions[i].type + '"]' ).val( filter.actions[i].type ) 75 .siblings( '[name="actionParameter[]"]' ).val( filter.actions[i].parameter ); 76 if(filter.actions[i].type == "redirect") 77 actions.siblings('[name="addressRedirect"]').val(filter.actions[i].parameter); 78 if(filter.actions[i].type == "reject") 79 actions.siblings('[name="messageReject"]').val(filter.actions[i].parameter); 76 80 } 77 81 78 isExact.val( filter.isExact ? "and" : "or" ); 82 //isExact.val( filter.isExact != "false"? "and" : "or" ); 83 isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True"); 79 84 } 80 85 … … 84 89 85 90 decoder: function( form ){ 86 87 91 if( form.vacation ) 88 92 return { 89 93 90 criteria: [{ value: " ", operator: "*", field: "from" }],91 actions: [{ parameter: form.vacation, type: " replyto" }],94 criteria: [{ value: "vacation", operator: "", field: "vacation" }], 95 actions: [{ parameter: form.vacation, type: "vacation" }], 92 96 id: "vacation", 93 97 name: "vacation", … … 96 100 } 97 101 98 return{99 id: form.name,100 name: form.name ,102 var haha = { 103 //id: form.name, 104 name: form.name ? form.name : nameObj.val(), 101 105 isExact: ( form.isExact === "and" ), 102 criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 103 106 criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 104 107 return (!form.criteriaValue[i]) ? null: 105 106 108 {value: form.criteriaValue[i], 107 109 operator: criteriaOperator, … … 110 112 }), 111 113 actions: $.map( form.actionType || [], function( type, i ){ 112 114 var the_parameter = form.actionParameter[i]; 115 116 !the_parameter ? the_parameter = form.actionParameter[i+1] : ""; 117 if (type == 'fileinto') { 118 the_parameter = form.valueFileInto; 119 } 120 if (type == 'reject') { 121 the_parameter = form.messageReject; 122 } 123 if (type == 'fileintoInbox') { 124 type = 'fileinto'; 125 the_parameter = 'INBOX'; 126 } 127 if (type == 'fileintoTrash') { 128 type = 'fileinto'; 129 the_parameter = 'INBOX/Trash'; 130 } 131 if (type == 'redirect') { 132 the_parameter = form.addressRedirect; 133 } 134 if (type == 'setflag') { 135 the_parameter = form.valueSetFlag; 136 } 137 113 138 return (!type) ? null: 114 {parameter: form.actionParameter[i], type: type };139 {parameter: the_parameter, type: type }; 115 140 116 141 }), 142 enabled : "enabled", 117 143 applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ? 118 119 keys( selectedMessages ) : allMessages : ""144 keys( selectedMessages ) : allMessages : "" 145 120 146 }; 121 147 return haha; 122 148 // 'vacation' => "" 123 149 }, 124 150 125 151 encoder: function( filters ){ 126 152 127 153 var rules = []; 128 154 … … 174 200 175 201 }); 176 202 /* 177 203 DataLayer.listen( "filter", function( status ){ 178 204 … … 180 206 181 207 }); 182 208 */ 183 209 184 210 … … 190 216 var selectedMessages = {}; 191 217 var allMessages = false; 192 218 //list_container = container.find(".rule-list-container"); 219 /* 193 220 var raster = function( html ){ 194 195 221 container = $('body.expressomail-module-container').append( html ).find(".expresso-window-container"); 196 197 198 199 222 list_container = container.find(".rule-list-container"); 223 details_container = container.find(".rule-details-container"); 224 vacation_container = container.find(".vacation-details-container"); 225 form = container.find("form"); 200 226 201 227 criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' ); 202 actions = details_container.find( 'fieldset input[name="actionType[]"]' ); 203 nameObj = details_container.find( 'input[name="name"]' ); 204 isExact = details_container.find( 'input[name="isExact"]' ); 205 228 actions = details_container.find( 'fieldset input[name="actionType[]"]' ); 229 nameObj = details_container.find( 'input[name="name"]' ); 230 isExact = details_container.find( 'input[name="isExact"]' ); 206 231 formatter(); 207 208 232 container = container.dialog({ 209 233 width:700, … … 226 250 autoOpen: false 227 251 }); 228 229 252 details_container.accordion({autoHeight: false}); 230 253 … … 260 283 261 284 }); 262 263 285 details_container.find( ".menu-container" ) 264 286 … … 399 421 400 422 }); 401 402 423 vacation_container.find( ".menu-container" ) 403 424 .find(".button.back").click(function(event){ … … 416 437 vacation_container.addClass('hidden'); 417 438 return( false ); 418 }); 439 }); 419 440 } 420 441 421 442 var reraster = function( html ){ 422 443 423 list_container.find( '.ui-widget' ).remove(); 424 425 list_container.html( html ).find(".button").button(); 426 427 formatter(); 444 //$(".rule-list-container").next().addClass("hidden"); 445 446 list_container.find( '.ui-widget' ).remove(); 447 448 list_container.html( html ).find(".button").button(); 449 450 formatter(); 428 451 } 429 452 … … 431 454 432 455 checkBoxes = container.find(".rule-list").selectable({ 433 434 selecting: function(event, ui) { 435 $(ui.selecting).find(':checkbox').attr('checked', true); 436 }, 437 unselecting: function(event, ui) { 438 $(ui.unselecting).find(':checkbox').attr('checked', false); 439 } 456 selecting: function(event, ui) { 457 $(ui.selecting).find(':checkbox').attr('checked', true); 458 }, 459 unselecting: function(event, ui) { 460 $(ui.unselecting).find(':checkbox').attr('checked', false); 461 } 440 462 }) 441 463 .find(':checkbox').change(function () { … … 511 533 512 534 513 .end().find( ".menu-control .button" ) 535 .end().find( ".menu-control .button" ).filter(".update").button({ 536 icons: { 537 primary: "ui-icon-pencil" 538 }, 539 text: false 540 }).end() 514 541 515 542 .filter(".enable, .disable").click( function(event) { … … 573 600 }; 574 601 575 DataLayer.render( BASE_PATH + 'modules/filters/filters.ejs', 'filter:detail', raster, true ); 602 //DataLayer.render(BASE_PATH + 'modules/filters/filters.ejs', {}, 'filter:detail', reraster, true); 603 //var vamo_ver = DataLayer.render(BASE_PATH + 'modules/filters/filters.ejs', {}); 604 //raster(vamo_ver); 605 var v = DataLayer.render( BASE_PATH + 'modules/filters/filters.ejs', {}); 606 raster(v); 607 details_container.accordion('activate',0); 608 609 showGridButton.removeClass('hidden'); 610 grid.addClass('hidden').jqGrid('GridDestroy'); 611 612 list_container.removeClass('hidden'); 613 details_container.addClass('hidden'); 614 615 DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', 'filter:detail', reraster ); 616 //var v = DataLayer.get("filter:detail"); 576 617 // ------------------------------------------------------------ 577 // ------------------------------------------------------------ 618 // ------------------------------------------------------------ 619 */ 620 function list_filters(html){ 621 if(html){ 622 if( ! $(".filters-windows").length ) 623 container = $('body.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html( html ).find(".expresso-window-container"); 624 list_container = $('body.expressomail-module-container').find(".rule-list-container"); 625 } 626 list_container = $(".expresso-window-filters").dialog({ 627 width:700, 628 modal: true, 629 resizable: false, 630 closeOnEscape:true, 631 close:function(event, ui) { 632 event.stopPropagation(); 633 if($(".cancel").length) 634 $(".cancel").trigger('click'); 635 //DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 636 }, 637 open: function () { 638 $(".ui-dialog .ui-dialog-titlebar") 639 .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>') 640 .find('.ui-dialog-titlebar-minimize').click(function() { 641 $(".ui-dialog-buttonpane, .ui-dialog-content").toggle(); 642 $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin'); 643 }); 644 }, 645 autoOpen: false, 646 buttons: [{ 647 text : "Fechar", 648 click : function() { 649 $( this ).dialog( "close" ); 650 } 651 }] 652 }); 653 $(".ui-dialog-titlebar").after("<div class='dialog-head-buttonpane ui-dialog-buttonpane ui-widget-content ui-helper-clearfix' style='background-color: rgb(224, 238, 238); '><div class='ui-dialog-buttonset header-buttonpane'></div></div>"); 654 $(".dialog-head-buttonpane").css("padding", "5px"). 655 find(".header-buttonpane").html("<a href='#' class='button add' title='Adicionar nova regra'>Nova regra</a><a href='#' class='button add vacation' title='Adicionar regra 'Fora do escritorio''>Fora do escritorio</a>").find(".button").button(); 656 657 $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE"); 658 var zu = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true)); 659 // DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', 'filter:detail',function(html){ 660 list_container.html(zu).find(".button").button(); 661 662 list_container.find(".rule-list").selectable({ 663 selecting: function(event, ui) { 664 $(ui.selecting).find(':checkbox').attr('checked', true); 665 }, 666 unselecting: function(event, ui) { 667 $(ui.unselecting).find(':checkbox').attr('checked', false); 668 } 669 }); 670 671 $( ".menu-control .button" ).filter(".update").button({ 672 icons: { 673 primary: "ui-icon-pencil" 674 }, 675 text: false 676 }).click(function(){ 677 var id = $(this).parents("li.rule").find('.title').html(); 678 var filters = DataLayer.get( 'filter', true); 679 for(var i =0; i < filters.length; i++){ 680 if(filters[i].id == id){ 681 filters = filters[i]; 682 break; 683 } 684 } 685 686 DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {},function(html){ 687 var details_container = $(".expresso-window-filters").html(html); 688 form = container.find("form"); 689 criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' ); 690 actions = details_container.find( 'fieldset input[name="actionType[]"]' ); 691 nameObj = details_container.find( 'input[name="name"]' ); 692 isExact = details_container.find( 'input[name="isExact"]' ); 693 showDetails(filters); 694 var accord = $(".rule-details-container").accordion({autoHeight: false}); 695 $(".button").button().filter(".forth").click(function(){ 696 accord.accordion('activate',1); 697 }).end().filter(".back").click(function(){ 698 accord.accordion('activate',0); 699 }).end().filter(".cancel").click(function(){ 700 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 701 }).end().filter(".submit").click(function(){ 702 if(nameObj) 703 nameObj.attr("disabled", "false"); 704 $(this).submit(); 705 DataLayer.commit( 'filter' ); 706 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 707 }); 708 }); 709 }).end() 710 .filter(".enable").button({ 711 icons: { 712 primary: "ui-icon-circle-check" 713 }, 714 text: false 715 }).click(function(){ 716 var id = $(this).parents("li.rule").find('.title').html(); 717 DataLayer.put( 'filter', id, { enabled: "disable" }); 718 DataLayer.commit("filter"); 719 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 720 }).end() 721 722 .filter(".disable").button({ 723 icons: { 724 primary: "ui-icon-circle-close" 725 }, 726 text: false 727 }).click(function(){ 728 var id = $(this).parents("li.rule").find('.title').html(); 729 DataLayer.put( 'filter', id, { enabled: "enabled" }); 730 DataLayer.commit("filter"); 731 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 732 }).end() 733 734 .filter(".close").button({ 735 icons: { 736 primary: "ui-icon-close" 737 }, 738 text: false 739 }).click(function(){ 740 $(event.target) 741 .parents("li.rule").find('.title') 742 .each( function(){ 743 DataLayer.remove( 'filter', $(this).html() ); 744 }); 745 DataLayer.commit("filter"); 746 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 747 }).end().removeClass("ui-button-icon-only"); 748 749 $(".button.add:first").click(function(){ 750 $(".dialog-head-buttonpane").addClass("hidden"); 751 DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {},function(html){ 752 $(".expresso-window-filters").html(html); 753 var accord = $(".rule-details-container").accordion({autoHeight: false}); 754 $(".button").button().filter(".forth").click(function(){ 755 accord.accordion('activate',1); 756 }).end().filter(".back").click(function(){ 757 accord.accordion('activate',0); 758 }).end().filter(".cancel").click(function(){ 759 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 760 }).end().filter(".submit").click(function(){ 761 $(this).submit(); 762 DataLayer.commit( 'filter' ); 763 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 764 }); 765 //$(".rule-edit-container").html(html); 766 }); 767 }); 768 $(".button.add.vacation").click(function(){ 769 $(".dialog-head-buttonpane").addClass("hidden"); 770 DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {},function(html){ 771 $(".expresso-window-filters").html(html); 772 $(".vacation-details-container").removeClass("hidden"); 773 $(".rule-details-container").addClass("hidden"); 774 $(".button").button().filter(".back").click(function(){ 775 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 776 }).end().filter(".submit").click(function(){ 777 $(this).submit(); 778 DataLayer.commit( 'filter' ); 779 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 780 }); 781 //$('[name="vacation"]').elastic().unbind('blur'); 782 //$(".back").click(function(){ 783 //$(".rule-edit-container").html(html); 784 }); 785 }); 786 // }); 787 } 788 789 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); -
trunk/prototype/modules/filters/interceptors/FilterMapping.php
r5341 r5539 1 1 <?php 2 2 /** 3 * 4 * Copyright (C) 2011 Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 5 * 6 * This program is free software; you can redistribute it and/or modify it under 7 * the terms of the GNU Affero General Public License version 3 as published by 8 * the Free Software Foundation with the addition of the following permission 9 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED 10 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE 11 * WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. 12 * 13 * This program is distributed in the hope that it will be useful, but WITHOUT 14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 16 * details. 17 * 18 * You should have received a copy of the GNU Affero General Public License 19 * along with this program; if not, see www.gnu.org/licenses or write to 20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 21 * MA 02110-1301 USA. 22 * 23 * This code is based on the OpenXchange Connector and on the Prognus pSync 24 * Connector both developed by the community and licensed under the GPL 25 * version 2 or above as published by the Free Software Foundation. 26 * 27 * You can contact Prognus Software Livre headquarters at Av. Tancredo Neves, 28 * 6731, PTI, Bl. 05, Esp. 02, Sl. 10, Foz do Iguaçu - PR - Brasil or at 29 * e-mail address prognus@prognus.com.br. 30 * 31 * Descrição rápida do arquivo 32 * 33 * Arquivo responsável pela manipulação dos filtros 34 * 35 * @package filters 36 * @license http://www.gnu.org/copyleft/gpl.html GPL 37 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 38 * @version 1.0 39 * @sponsor Caixa EconÎmica Federal 40 * @since Arquivo disponibilizado na versão 2.4 41 */ 42 43 44 45 /** 46 * Classe responsável pela manipulação dos filtros. 47 * 48 * 49 * @package prototype 50 * @license http://www.gnu.org/copyleft/gpl.html GPL 51 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 52 * @author Airton Bordin Junior 53 * @author Gustavo Pereira dos Santos 54 * @version 1.0 55 * @since Classe disponibilizada na versão 2.4 56 */ 3 57 class FilterMapping 4 58 { 5 public function formatSieveScript( $rules ) 59 60 var $service; 61 62 63 /** 64 * Método que formata o Script de acordo com a sintaxe do Sieve. 65 * 66 * @license http://www.gnu.org/copyleft/gpl.html GPL 67 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 68 * @sponsor Caixa EconÎmica Federal 69 * @author Airton Bordin Junior 70 * @author Gustavo Pereira dos Santos 71 * @param <Array> <$rules> <Array com as regras do usuário> 72 * @return <Regra de acordo com a sintaxe do Sieve> 73 * @access <public> 74 */ 75 public function formatSieveScript( $rules ) 6 76 { 7 $require_fileinto = $require_flag = $require_reject = $require_vacation = $require_body = $startswith = $endswith = false; 8 9 $script_rules = $script_header = ""; 10 11 foreach( $rules as $name => $data ) 77 $require_fileinto = $require_flag = $require_reject = $require_vacation = $require_body = $require_imapflag = $vacation = $startswith = $endswith = false; 78 79 $script_rules = $script_header = $script_criteria = ""; 80 $i = 0; 81 foreach( $rules as $name => $data ) 82 { 83 //if( $data['enabled'] ) 84 //continue; 85 86 $criteria = $data['criteria']; 87 $action = $data['actions']; 88 89 ($i >0) ? $script_match = 'els' : $script_match = ''; 90 $data['isExact'] == 'false' ? $script_match .= 'if anyof (' : $script_match .= 'if allof ('; 91 92 for ($j=0; $j<count($criteria); $j++) 93 { 94 switch($criteria[$j]['field']) { 95 case 'To': 96 case 'to': 97 case 'CC': 98 case 'Cc': 99 $criteria[$j]['field'] = "[\"To\", \"TO\", \"Cc\", \"CC\"]"; 100 $script_criteria .= "address :"; 101 break; 102 case 'from': 103 $criteria[$j]['field'] = "\"" . $criteria[$j]['field'] . "\""; 104 $script_criteria .= "address :"; 105 break; 106 case 'size': 107 $criteria[$j]['field'] = ''; 108 $script_criteria .= "size :"; 109 break; 110 case 'subject': 111 $criteria[$j]['field'] = "\"" . $criteria[$j]['field'] . "\""; 112 $criteria[$j]['value'] = "" . imap_8bit($criteria[$j]['value']) . "\", \"" . base64_encode($criteria[$j]['value']) . ""; 113 $script_criteria .= "header :"; 114 break; 115 case 'body': 116 $criteria[$j]['field'] = ''; 117 $script_criteria .= "body :"; 118 $require_body = true; 119 break; 120 case 'vacation': 121 $require_vacation = true; 122 $vacation = true; 123 $script_match = "vacation"; 124 break; 125 default: 126 $script_criteria .= "header :"; 127 break; 128 } 129 130 switch ($criteria[$j]['operator']) { 131 case '>': 132 $criteria[$j]['operator'] = "over"; 133 break; 134 case '<': 135 $criteria[$j]['operator'] = "under"; 136 break; 137 case '=': 138 $criteria[$j]['operator'] = "is"; 139 $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]"; 140 break; 141 case '*': 142 $criteria[$j]['operator'] = "contains"; 143 $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]"; 144 break; 145 case '^': 146 $criteria[$j]['operator'] = "matches"; 147 $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "*\"]"; 148 $startswith = true; 149 break; 150 case '$': 151 $criteria[$j]['operator'] = "matches"; 152 $criteria[$j]['value'] = "[\"*" . $criteria[$j]['value'] . "\"]"; 153 $endswith = true; 154 break; 155 /* 156 TO-DO: 157 Arrrumar regra do "não contém". 158 */ 159 case '!*': 160 $criteria[$j]['operator'] = "contains"; 161 $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]"; 162 break; 163 } 164 165 if ($criteria[$j]['field'] == "" || $criteria[$j]['field'] == "\"subject\"" || $startswith || $endswith) 166 { 167 $script_criteria .= $criteria[$j]['operator'] . " " . $criteria[$j]['field'] . " " . $criteria[$j]['value'] . ", "; 168 $startswith = $endswith = false; 169 } 170 else 171 $script_criteria .= $criteria[$j]['operator'] . " " . $criteria[$j]['field'] . " " . $criteria[$j]['value'] . ", "; 172 } 173 $script_criteria = substr($script_criteria,0,-2); 174 if ($vacation == false) 175 $script_criteria .= ")"; 176 else 177 $script_criteria = ""; 178 $script_action = " {\r\n "; 179 for ($k=0; $k<count($action); $k++) 180 { 181 switch ($action[$k]['type']) { 182 case 'redirect': 183 break; 184 case 'reject': 185 $require_reject = true; 186 break; 187 case 'fileinto': 188 $require_fileinto = true; 189 break; 190 case 'vacation': 191 $require_vacation = true; 192 $action[$k]['parameter'] = "\"" . $action[$k]['parameter'] . "\""; 193 $script_action = " :subject \"Fora do Escritório\" " . $action[$k]['parameter'] . ";"; 194 $vacation = true; 195 break; 196 case 'setflag': 197 $require_flag = true; 198 $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter']; 199 break; 200 case 'discard': 201 break; 202 } 203 if ($vacation == false) $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n "; 204 } 205 206 if ($vacation == false) $script_action .= "}"; 207 208 $script_rules .= $script_match . $script_criteria . $script_action . "\r\n"; 209 $script_match = ""; 210 $script_criteria = ""; 211 $i++; 212 } 213 214 if($require_reject || $require_fileinto || $require_vacation || $require_body || $require_flag) 215 { 216 $script_header .= "require ["; 217 $require_reject ? $script_header .= "\"reject\", " : ""; 218 $require_fileinto ? $script_header .= "\"fileinto\", " : ""; 219 $require_vacation? $script_header .= "\"vacation\", " : ""; 220 $require_flag ? $script_header .= "\"imapflags\", " : ""; 221 $require_body ? $script_header .= "\"body\", " : ""; /* tem que instalar as extensões no Cyrus */ 222 $script_header = substr($script_header,0,-2); 223 $script_header .= "];\r\n"; 224 } 225 226 $json_data = json_encode($rules); 227 228 $script_begin = "#Filtro gerado por Expresso Livre versão 2.4\r\n\r\n"; 229 230 $content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data; 231 232 /* $content = ""; //fill script! */ 233 return( $content ); 234 } 235 236 237 /** 238 * Método que faz o parsing do Script Sieve, transformando em Array. 239 * 240 * @license http://www.gnu.org/copyleft/gpl.html GPL 241 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 242 * @sponsor Caixa EconÎmica Federal 243 * @author Airton Bordin Junior 244 * @author Gustavo Pereira dos Santos 245 * @param <String> <$script> <Script Sieve com as regras do usuário> 246 * @return <Regras do usuário em Array> 247 * @access <public> 248 */ 249 public function parseSieveScript( $script ) 12 250 { 13 if( $data['enabled'] ) 14 continue; 15 16 $criteria = $data['criteria']; 17 $action = $data['actions']; 18 $data['isExact'] ? $script_match = 'if allof (' : $script_match = 'if anyof ('; 19 20 for ($j=0; $j<count($criteria); $j++) 21 { 22 switch($criteria[$j]['field']) { 23 case 'To': /* Adicionar o TO e Cc também?! */ 24 case 'CC': 25 $criteria[$j]['field'] = "[\"To\", \"TO\", \"Cc\", \"CC\"]"; 26 $script_criteria .= "address :"; 27 break; 28 case 'size': 29 $criteria[$j]['field'] = ''; 30 $script_criteria .= "size :"; 31 break; 32 case 'subject': 33 $criteria[$j]['field'] = "\"" . $criteria[$j]['field'] . "\""; 34 $criteria[$j]['value'] = "[\"" . imap_8bit($criteria[$j]['value']) . "\", \"" . base64_encode($criteria[$j]['value']) . "\"]"; 35 $script_criteria .= "header :"; 36 break; 37 case 'body': 38 $criteria[$j]['field'] = ''; 39 $criteria[$j]['value'] = "\"" . $criteria[$j]['value'] . "\""; 40 $script_criteria .= "body :"; 41 $require_body = true; 42 break; 43 default: 44 $criteria[$j]['field'] = "\"" . $criteria[$j]['field'] . "\""; 45 $script_criteria .= "header :"; 46 break; 251 $pos = strripos($script, "#PseudoScript#"); 252 $pseudo_script = substr( $script, $pos+17 ); 253 254 $return = json_decode( $pseudo_script, true ); 255 256 return $return; 257 } 258 259 var $rules = false; 260 261 /** 262 * Construtor da classe. 263 * 264 * @license http://www.gnu.org/copyleft/gpl.html GPL 265 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 266 * @sponsor Caixa EconÎmica Federal 267 * @author Airton Bordin Junior 268 * @author Gustavo Pereira dos Santos 269 * @access <public> 270 */ 271 public function __construct() 272 { 273 $this->service = Controller::service("Sieve"); 274 } 275 276 277 /** 278 * Método que recupera as regras do usuário. 279 * 280 * @license http://www.gnu.org/copyleft/gpl.html GPL 281 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 282 * @sponsor Caixa EconÎmica Federal 283 * @author Airton Bordin Junior 284 * @author Gustavo Pereira dos Santos 285 * @return <Regras do usuário> 286 * @access <public> 287 */ 288 public function getRules() 289 { 290 $this->rules = Controller::find( array( 'concept' => 'filter' ) ); 291 292 if( !$this->rules ) { 293 $this->rules = array(); 47 294 } 48 49 switch ($criteria[$j]['operator']) { 50 case '>': 51 $criteria[$j]['operator'] = "over"; 52 break; 53 case '<': 54 $criteria[$j]['operator'] = "under"; 55 break; 56 case '=': 57 $criteria[$j]['operator'] = "is"; 58 break; 59 case '*': 60 $criteria[$j]['operator'] = "contains"; 61 break; 62 case '^': 63 $criteria[$j]['operator'] = "matches"; 64 $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "*\"]"; 65 $startswith = true; 66 break; 67 case '$': 68 $criteria[$j]['operator'] = "matches"; 69 $criteria[$j]['value'] = "[\"*" . $criteria[$j]['value'] . "*\"]"; 70 $endswith = true; 71 break; 72 } 73 // if temporário, por favor! :D 74 if ($criteria[$j]['field'] == "" || $criteria[$j]['field'] == "\"subject\"" || $startswith || $endswith) 75 { 76 $script_criteria .= $criteria[$j]['operator'] . " " . $criteria[$j]['field'] . " " . $criteria[$j]['value'] . ", "; 77 $startswith = $endswith = false; 78 } 79 else 80 $script_criteria .= $criteria[$j]['operator'] . " " . $criteria[$j]['field'] . " \"" . $criteria[$j]['value'] . "\", "; 81 } 82 $script_criteria = substr($script_criteria,0,-2); 83 $script_criteria .= ")"; 84 $script_action = " {\r\n "; 85 for ($k=0; $k<count($action); $k++) 86 { 87 switch ($action[$k]['type']) { 88 case 'redirect': 89 break; 90 case 'reject': 91 $require_reject = true; 92 break; 93 case 'fileinto': 94 $require_fileinto = true; 95 break; 96 case 'vacation': 97 $require_vacation = true; 98 break; 99 case 'setflag': 100 $require_flag = true; 101 break; 102 case 'discard': 103 break; 104 } 105 $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n "; 106 } 107 108 $script_action .= "}"; 109 110 $script_rules .= $script_match . $script_criteria . $script_action . "\r\n"; 111 } 112 113 // if temporário meu caro amigo 114 if($require_reject || $require_fileinto || $require_vacation || $require_body || $require_flag) 295 return( $this->rules ); 296 } 297 298 299 /** 300 * Método que aplica o filtro para as mensagens do usuário. 301 * 302 * @license http://www.gnu.org/copyleft/gpl.html GPL 303 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 304 * @sponsor Caixa EconÎmica Federal 305 * @author Airton Bordin Junior 306 * @author Gustavo Pereira dos Santos 307 * @param <$uri> 308 * @param <$result> 309 * @param <$criteria> 310 * @param <$original> 311 * @access <public> 312 */ 313 public function applySieveFilter( &$uri , &$result , &$criteria , $original ) 115 314 { 116 $script_header .= "require ["; 117 $require_reject ? $script_header .= "\"reject\", " : ""; 118 $require_fileinto ? $script_header .= "\"fileinto\", " : ""; 119 $require_vacation? $script_header .= "\"vacation\", " : ""; 120 $require_flag ? $script_header .= "\"imapflags\", " : ""; 121 $require_body ? $script_header .= "\"body\", " : ""; /* tem que instalar o plugin no SIEVE */ 122 $script_header = substr($script_header,0,-2); 123 $script_header .= "];\r\n"; 124 } 125 126 $json_data = json_encode($rules); 127 128 $script_begin = "#Filtro gerado por Expresso Livre versão 2.4 power\r\n\r\n"; 129 130 $content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data; 131 132 return( $content ); 133 } 134 135 public function parseSieveScript( $script ) 136 { 137 $pos = strripos($script, "#PseudoScript#"); 138 // Esse 17 hardcodificado é temporário rapá! à o tamanho da palavra #PseudoScript## que vem antes do pseudoscript em si. 139 $pseudo_script = substr( $script, $pos+17 ); 140 141 $return = json_decode( $pseudo_script, true ); 142 143 return $return; 144 145 // if( !$array_rules ) 146 // { 147 // require_once ROOTPATH.'/../expressoMail1_2/inc/class.ScriptS.inc.php'; 148 // 149 // $rules = ScriptS::readScript( $script ); 150 // 151 // foreach( $rules['rule'] as $i => $rule ) 152 // { 153 // $rule = ScriptS::parsePseudoScript( $rule ); 154 // 155 // ob_start(); 156 // print_r( var_export($rule) ); 157 // $output = ob_get_clean(); 158 // file_put_contents( '/tmp/2.log', file_get_contents( '/tmp/2.log' ) . $output ); 159 // } 160 // 161 } 162 163 var $rules = false; 164 165 public function __construct() 166 { 167 168 } 169 170 public function getRules() 171 { 172 $this->rules = Controller::find( array( 'concept' => 'filter' ) ); 173 174 if( !$this->rules ) 175 $this->rules = array(); 176 177 return( $this->rules ); 178 } 179 180 public function applySieveFilter( &$uri , &$result , &$criteria , $original , &$service ){ 181 182 if( $original['properties']['applyMessages'] ) 183 { 184 $filter = Controller::read($uri); 185 186 $proc = array(); 187 $proc['keep'] = false; 188 189 foreach ($filter['actions'] as $v){ 190 if($v['type'] == 'keep') 191 $proc['keep'] = true; 192 else{ 193 $proc['type'] = $v['type']; 194 $proc['parameter'] = $v['parameter']; 195 } 196 } 197 198 $imap = Controller::service( 'Imap' ); 199 200 $imap->apliSieveFilter($original['properties']['applyMessages'] , $proc ); 201 202 return $result; 203 } 204 } 205 206 public function readUserScript( &$uri , &$params , &$criteria , $original, &$service ) 207 { 208 $uri['id'] = $service->config['user']; 209 } 210 211 public function setRule( &$uri , &$params , &$criteria , $original , &$service ) 212 { 213 if( !$this->rules ) 214 $this->rules = $this->getRules(); 215 216 $params['id'] = $uri['id']; 217 315 if( $original['properties']['applyMessages'] ) 316 { 317 $filter = Controller::read($uri); 318 319 $proc = array(); 320 $proc['keep'] = false; 321 322 foreach ($filter['actions'] as $v){ 323 if($v['type'] == 'keep') 324 $proc['keep'] = true; 325 else{ 326 $proc['type'] = $v['type']; 327 $proc['parameter'] = $v['parameter']; 328 } 329 } 330 331 $imap = Controller::service( 'Imap' ); 332 $imap->apliSieveFilter($original['properties']['applyMessages'] , $proc ); 333 return $result; 334 } 335 } 336 337 338 /** 339 * Método que lê o script do usuário. 340 * 341 * @license http://www.gnu.org/copyleft/gpl.html GPL 342 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 343 * @sponsor Caixa EconÎmica Federal 344 * @author Airton Bordin Junior 345 * @author Gustavo Pereira dos Santos 346 * @param <$uri> 347 * @param <$result> 348 * @param <$criteria> 349 * @param <$original> 350 * @return <Script do usuário> 351 * @access <public> 352 */ 353 public function readUserScript( &$uri , &$params , &$criteria , $original ) 354 { 355 $uri['id'] = $this->service->config['user']; 356 } 357 358 359 /** 360 * Método que seta o script do usuário. 361 * 362 * @license http://www.gnu.org/copyleft/gpl.html GPL 363 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 364 * @sponsor Caixa EconÎmica Federal 365 * @author Airton Bordin Junior 366 * @author Gustavo Pereira dos Santos 367 * @param <$uri> 368 * @param <$result> 369 * @param <$criteria> 370 * @param <$original> 371 * @return <Script do usuário> 372 * @access <public> 373 */ 374 public function setRule( &$uri , &$params , &$criteria , $original ) 375 { 376 if( !$this->rules ) 377 $this->rules = $this->getRules(); 378 379 $params['id'] = isset($params['id']) ? $params['id'] : $params['name']; 218 380 $update = false; 219 381 220 382 foreach( $this->rules as $i => $rule ) 221 if( $update = ($rule['id'] === $params['id']) )222 {223 224 225 }383 if( $update = ($rule['id'] === $params['id']) ) 384 { 385 $this->rules[$i] = $params; 386 break; 387 } 226 388 227 389 if( !$update ) 228 390 $this->rules[] = $params; 229 391 230 392 $content = $this->formatSieveScript( $this->rules ); 231 232 $params = array( 'name' => $service->config['user'],393 394 $params = array( 'name' => $this->service->config['user'], 233 395 'content' => $content, 234 396 'active' => true ); 235 } 236 237 public function deleteRule( &$uri, &$params, &$criteria, $original, &$service ) 238 { 239 if( !$this->rules ) 240 $this->rules = $this->getRules(); 241 242 $params['id'] = $uri['id']; 243 244 $update = false; 245 246 foreach( $this->rules as $i => $rule ) 247 if( $rule['id'] === $uri['id'] ) 248 unset( $this->rules[$i] ); 249 250 $uri['id'] = ''; 251 252 $params = array( 'name' => $service->config['user'], 253 'content' => $this->formatSieveScript( $this->rules ), 254 'active' => true ); 255 256 $URI = Controller::URI( $uri['concept'], $service->config['user'] ); 257 258 $service->update( $URI, $params ); 259 } 260 261 public function getSieveRule( &$uri , &$params , &$criteria , $original, &$service ) 262 { 263 $script = $this->parseSieveScript( $params['content'] ); 264 265 foreach( $script as $i => $rule ) 266 if( $rule['name'] === $original['id'] ) 267 return( $params = $rule ); 268 } 269 270 public function listSieveRules( &$uri , &$params , &$criteria , $original , &$service ) 271 { 272 return( $params = $this->parseSieveScript( $params[0]['content'] ) ); 273 } 397 } 398 399 400 /** 401 * Método que deleta o script do usuário. 402 * 403 * @license http://www.gnu.org/copyleft/gpl.html GPL 404 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 405 * @sponsor Caixa EconÎmica Federal 406 * @author Airton Bordin Junior 407 * @author Gustavo Pereira dos Santos 408 * @param <$uri> 409 * @param <$result> 410 * @param <$criteria> 411 * @param <$original> 412 * @access <public> 413 */ 414 public function deleteRule( &$uri, &$params, &$criteria, $original ) 415 { 416 if( !$this->rules ) 417 $this->rules = $this->getRules(); 418 419 $params['id'] = $uri['id']; 420 421 $update = false; 422 423 foreach( $this->rules as $i => $rule ) 424 if( $rule['id'] === $uri['id'] ) 425 unset( $this->rules[$i] ); 426 427 $uri['id'] = ''; 428 429 $params = array( 'name' => $this->service->config['user'], 430 'content' => $this->formatSieveScript( $this->rules ), 431 'active' => true ); 432 433 $URI = Controller::URI( $uri['concept'], $this->service->config['user'] ); 434 $this->service->update( $URI, $params ); 435 436 return( false ); 437 } 438 439 440 /** 441 * Método que pega o script do usuário. 442 * 443 * @license http://www.gnu.org/copyleft/gpl.html GPL 444 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 445 * @sponsor Caixa EconÎmica Federal 446 * @author Airton Bordin Junior 447 * @author Gustavo Pereira dos Santos 448 * @param <$uri> 449 * @param <$result> 450 * @param <$criteria> 451 * @param <$original> 452 * @return <Script do usuário> 453 * @access <public> 454 */ 455 public function getSieveRule( &$uri , &$params , &$criteria , $original ) 456 { 457 $script = $this->parseSieveScript( $params['content'] ); 458 459 foreach( $script as $i => $rule ) 460 if( $rule['name'] === $original['id'] ) 461 return( $params = $rule ); 462 } 463 464 465 /** 466 * Método que lista as regras do usuário. 467 * 468 * @license http://www.gnu.org/copyleft/gpl.html GPL 469 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 470 * @sponsor Caixa EconÎmica Federal 471 * @author Airton Bordin Junior 472 * @author Gustavo Pereira dos Santos 473 * @param <$uri> 474 * @param <$result> 475 * @param <$criteria> 476 * @param <$original> 477 * @return <Regras do usuário> 478 * @access <public> 479 */ 480 public function listSieveRules( &$uri , &$params , &$criteria , $original ) 481 { 482 $return = $params = $this->parseSieveScript( $params[0]['content'] ); 483 return( $return ); 484 } 274 485 } -
trunk/prototype/services/Sieve.php
r5341 r5539 10 10 11 11 public function open( $config ) 12 { 13 $this->config = $config; 14 15 if( PEAR::isError( $error = $this->connect( $config['host'] , $config['port'] , $config['options'] , $config['useTLS'] ) ) ) 16 return $error->toString(); 17 18 if( PEAR::isError( $error = $this->login( $config['user'] , $config['password'] , $config['loginType'] ) ) ) 19 return $error->toString(); 20 21 if( PEAR::isError( $error = $this->getError() ) ) 22 return $error->toString(); 12 { 13 $this->config = $config; 14 15 if( PEAR::isError( $error = $this->connect( $config['host'] , $config['port'] , $config['options'] , $config['useTLS'] ) ) ) { 16 return $error->toString(); 17 } 18 19 if( PEAR::isError( $error = $this->login( $config['user'] , $config['password'] , $config['loginType'] ) ) ) { 20 return $error->toString(); 21 } 22 23 if( PEAR::isError( $error = $this->getError() ) ) { 24 return $error->toString(); 25 } 23 26 } 24 27 25 public function find( $URI, $ context, $justthese = false, $criteria = false )28 public function find( $URI, $justthese = false, $criteria = false ) 26 29 { 27 30 $return = $this->listScripts(); … … 34 37 foreach( $return as $i => $id ) 35 38 $array_return[] = $this->read( array( 'id' => $id ) ); 36 37 // ob_start();38 // print_r( $array_return );39 // $output = ob_get_clean();40 // file_put_contents( "/tmp/2.log", $output , FILE_APPEND);41 42 39 return $array_return; 43 40 } … … 47 44 public function read( $URI, $justthese = false ) 48 45 { 49 return array( 'name' => $URI['id'],46 return array( 'name' => $URI['id'], 50 47 'content' => $this->getScript( $URI['id'] ), 51 48 'active' => ($this->getActive() === $URI['id']) ); … … 53 50 54 51 public function create( $URI, $data ) 55 { 56 if( $this->installScript( $data['name'], $data['content'], $data['active'] ) )57 52 { 53 if( $this->installScript( $data['name'], $data['content'], $data['active'] ) ) 54 return array('id' => $data['name']); 58 55 59 return false;56 return false; 60 57 } 61 58
Note: See TracChangeset
for help on using the changeset viewer.