- Timestamp:
- 06/14/12 09:02:04 (12 years ago)
- Location:
- trunk
- Files:
-
- 14 edited
- 25 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/expressoMail1_2/inc/class.imap_functions.inc.php
r6483 r6487 1095 1095 function get_info_msg($params) 1096 1096 { 1097 1098 1097 if(isset($params['alarm'])){ 1099 1098 $alarm = $params['alarm']; … … 5332 5331 5333 5332 } 5333 5334 5335 /** 5336 * Método que retorna as mensagens com a flag $FilteredMessage que representa as mensagens filtradas que devem ser alertadas para o usuário 5337 * 5338 * @license http://www.gnu.org/copyleft/gpl.html GPL 5339 * @author Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 5340 * @sponsor Caixa Econômica Federal 5341 * @author Airton Bordin Junior <airton@prognus.com.br> 5342 * @author Marcieli <marcieli@prognus.com.br> 5343 * @author Marcos <marcosw@prognus.com.br> 5344 * @param <Array> <$paramFolders> <Pastas onde devem ser buscadas as mensagens> 5345 * @return <Mensagens encontradas com a flag $FilteredMessage> 5346 * @access <public> 5347 */ 5348 function getFlaggedAlertMessages($paramFolders) { 5349 5350 $folders = explode(",", $paramFolders['folders']); 5351 5352 $messages = array(); 5353 $result = array(); 5354 $label = '$FilteredMessage'; 5355 5356 foreach ($folders as $folder) { 5357 $this->mbox = $this->open_mbox($folder); 5358 /* Não deletadas, não lidas e com a flag */ 5359 $messages = imap_search($this->mbox, 'UNDELETED UNSEEN KEYWORD "$FilteredMessage"', SE_UID); 5360 if(is_array($messages)) 5361 foreach ($messages as $k => $m) { 5362 $headers = imap_fetch_overview($this->mbox, $m, FT_UID); 5363 $date = explode(" ", $headers[0]->date); 5364 $result[$m."_".$folder] = array ( 5365 'udate' => $headers[0]->udate, 5366 'smalldate' => $date[4], 5367 'from' => $headers[0]->from, 5368 'subject' => self::decodeMimeString($headers[0]->subject), 5369 'msg_number' => $m, 5370 'msg_folder' => $folder 5371 ); 5372 } 5373 } 5374 $result_final = array(); 5375 foreach ($result as $r){ 5376 $result_final[] = $r; 5377 } 5378 5379 return $result_final; 5380 } 5381 5382 /** 5383 * Esta função é chamada ao clicar sobre uma mensagem listada nos alertas de Filtro por Remetente 5384 * remove a flag e chama a função que recupera os dados da mensagem, para serem utilizados na abertura da aba de leitura da msg 5385 */ 5386 function open_flagged_msg($params){ 5387 $message_number = $params['msg_number']; 5388 $message_folder = $params['msg_folder']; 5389 $alarm = $params['alarm']; 5390 if ($message_folder && $message_number) { 5391 $this->mbox = $this->open_mbox($message_folder); 5392 imap_clearflag_full($this->mbox, $message_number, '$FilteredMessage', ST_UID); 5393 } 5394 $r = $this->get_info_msg(array('msg_number' => $message_number, 'msg_folder' =>urlencode($message_folder), 'alarm' => ($alarm))); 5395 return $r; 5396 } 5397 5398 /** 5399 * Remove a flag que caracteriza uma mensagem como alertada por Filtro por Remetente. 5400 * se houver o parametro msg_number, então remove a flag de uma msg especifica 5401 * se não houver o parametro msg_number, mas sim o from, então remove a flag de todas as msgs da pasta (parametro from), 5402 * e que o remetente for o from. 5403 */ 5404 function removeFlagMessagesFilter($params){ 5405 $message_number = $params['msg_number']; 5406 $folder = $params['folder']; 5407 5408 if(isset($message_number)){ 5409 if(isset($folder)){ 5410 $message_number = explode(',', $message_number); 5411 $this->mbox = $this->open_mbox($folder); 5412 foreach ($message_number as $k => $m) { 5413 imap_clearflag_full($this->mbox, $m, '$FilteredMessage', ST_UID); 5414 } 5415 } 5416 } 5417 else{ 5418 $from = $params['from']; 5419 if(isset($folder) && isset($from)){ 5420 $this->mbox = $this->open_mbox($folder); 5421 $messages = imap_search($this->mbox, 'UNDELETED UNSEEN KEYWORD "$FilteredMessage"', SE_UID); 5422 } 5423 if(is_array($messages)){ 5424 foreach ($messages as $k => $m) { 5425 $headers = imap_fetch_overview($this->mbox, $m, FT_UID); 5426 if(strpos($headers[0]->from, $from) > 0){ 5427 imap_clearflag_full($this->mbox, $m, '$FilteredMessage', ST_UID); 5428 } 5429 } 5430 } 5431 } 5432 5433 return array('status' => "success"); 5434 } 5435 5334 5436 } 5335 5437 ?> -
trunk/expressoMail1_2/index.php
r6237 r6487 72 72 <script type="text/javascript" src="../prototype/modules/calendar/js/calendar.codecs.js"></script> 73 73 74 <link rel="stylesheet" type="text/css" href="../prototype/plugins/freeow/style/freeow/freeow.css" > 75 <script type="text/javascript" src="../prototype/plugins/freeow/jquery.freeow.min.js"></script> 76 <script type="text/javascript" src="../prototype/plugins/freeow/jquery.freeow.js"></script> 74 77 75 78 <script src="js/rich_text_editor.js" type="text/javascript"></script> -
trunk/expressoMail1_2/js/draw_api.js
r6469 r6487 1980 1980 var msg_selected; 1981 1981 function draw_message(info_msg, ID){ 1982 // remove a flag $FilteredMessage da mensagem ao ser lida 1983 if(info_msg.Unseen == "U"){ 1984 $.each(fromRules, function(index, value) { 1985 if(value == info_msg.msg_folder){ 1986 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+info_msg.msg_folder+"&msg_number="+info_msg.msg_number, function(){}); 1987 return false; 1988 } 1989 }); 1990 } 1982 1991 var content = document.getElementById('content_id_' + ID); 1983 1992 -
trunk/expressoMail1_2/js/main.js
r6469 r6487 6 6 var results_search_messages = ""; 7 7 var cabecalho = '<h4>ExpressoLivre - ExpressoMail</h4>'; 8 // Variavel para controle de atualização das mensagens listadas na modal de alerta de filtro por remetente 9 var checkAlarmsFilter = false; 8 10 9 11 //Os IE's < 9 não possui suporte a trim() introduzida no JavaScript 1.8.1 … … 158 160 mobile_device = ( ( data.constructor == Boolean ) ? data : ( data === 'true' ) ); 159 161 }); 162 160 163 setTimeout('auto_refresh()', time_refresh); 161 164 … … 507 510 508 511 function refresh(alert_new_msg){ 512 getFromAlertRules(); 509 513 var handler_refresh = function(data){ 514 if(checkAlarmsFilter){ 515 handlerMessageFilter = function (data) { 516 alarmFollowupflagged('filtersAlarms', data); 517 } 518 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 519 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 520 } 521 checkAlarmsFilter = true; 510 522 if(data['msg_range_end']) 511 523 if(data['msg_range_end'] > 0) … … 1135 1147 Element('tot_m').innerHTML = n_total_msg; 1136 1148 } 1137 1138 1149 refresh(); 1139 1150 } … … 1170 1181 refresh(); 1171 1182 if (parseInt(msgs_number) > 0 || msgs_number.length > 0){ 1172 $.ajax({ 1183 // remove a flag $FilteredMessage da mensagem, depois move 1184 var handler_removeFlag = function(){ 1185 $.ajax({ 1173 1186 url: 'controller.php?' + $.param( {action: '$this.imap_functions.move_messages', 1174 1187 folder: folder, … … 1191 1204 } 1192 1205 1193 }); 1206 }); 1207 } 1208 var hasFolder = false; 1209 $.each(fromRules, function(index, value) { 1210 if(value == folder){ 1211 hasFolder = true; 1212 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&msg_number="+msgs_number, handler_removeFlag); 1213 return false; 1214 } 1215 }); 1216 if(!hasFolder){ 1217 handler_removeFlag(); 1218 } 1219 1194 1220 }else 1195 1221 write_msg(get_lang('No selected message.')); … … 2784 2810 set_msg_as_read(results_search_messages, false, true); 2785 2811 Element("check_box_message_" + msgs_to_set[i]).checked = false; 2812 2813 // remove a flag $FilteredMessage da mensagem ao ser marcada como lida 2814 $.each(fromRules, function(index, value) { 2815 if(value == folder){ 2816 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&msg_number="+msgs_to_set, function(){}); 2817 return false; 2818 } 2819 }); 2820 2786 2821 break; 2787 2822 case "flagged": … … 2808 2843 else 2809 2844 folder = Element("input_folder_"+msgs_to_set+"_r").value; 2810 2845 2811 2846 if (msgs_to_set) 2812 2847 $.ajax({ … … 3993 4028 }; 3994 4029 4030 function truncate(text, size){ 4031 var result = text; 4032 if(text.length > size){ 4033 result = text.substring(0,size) + '...'; 4034 } 4035 return result; 4036 } 4037 3995 4038 DataLayer.links('message'); 3996 4039 DataLayer.poll('message',30); -
trunk/expressoMail1_2/js/messages_controller.js
r6469 r6487 88 88 if (msgs_number == 'selected') 89 89 msgs_number = get_selected_messages(); 90 90 91 if(currentTab != 0 && currentTab.indexOf("search_") >= 0){ 91 92 var content_search = document.getElementById('content_id_'+currentTab); -
trunk/expressoMail1_2/setup/phpgw_pt-br.lang
r6348 r6487 16 16 Add user into my IM expressoMail1_2 pt-br Adicionar no meu IM 17 17 After store email in your local computer delete it from server expressoMail1_2 pt-br Depois de guardar e-mail no seu computador local, excluí-lo do servidor 18 Alert message filter by sender expressoMail1_2 pt-br Alertar ao receber mensagens filtradas por remetente 18 19 all expressoMail1_2 pt-br Todas 19 20 All messages are successfully unarchived expressoMail1_2 pt-br Mensagens desarquivadas com sucesso … … 561 562 There is not %1 folder, Expresso is creating it for you... Please, repeat your request later. expressoMail1_2 pt-br Pasta %1 inexistente, Expresso criará para você. Contudo por favor repita a operação em seguida. 562 563 There's an action processing. Do you want abort it? expressoMail1_2 pt-br Existe uma ação que ainda está sendo processada. Suspender ação? 564 The filter is active for alerts expressoMail1_2 pt-br O filtro está ativo para alertas 563 565 The results were found in the Global Catalog expressoMail1_2 pt-br Ocorrências encontradas no Catálogo Geral 564 566 The selected folder is empty. expressoMail1_2 pt-br A pasta selecionada está vazia. … … 900 902 will be removed. This action cannot be undone. Want to continue? expressoMail1_2 pt-br serão removidas. Essa ação não poderá ser desfeita. Deseja continuar? 901 903 Message size greateruler than allowed (Default rule) expressoMail1_2 pt-br Tamanho da mensagem excede o limite de tamanho configurado pelo administrador 904 You have an archived message: expressoMail1_2 pt-br Você tem uma mensagem arquivada: 905 You have %1 messages archived: expressoMail1_2 pt-br Você tem %1 mensagens arquivadas: 906 Filter by sender expressoMail1_2 pt-br Filtro por Remetente 907 Follow ups expressoMail1_2 pt-br Sinalizadas 908 Done expressoMail1_2 pt-br Concluídas 909 This filter not permits alert expressoMail1_2 pt-br Este filtro não permite alerta -
trunk/expressoMail1_2/templates/default/index.tpl
r5878 r6487 211 211 <div id="sendFileMessages" style="display:none;"></div> 212 212 <div id="quickAddContact" style="display:none;"></div> 213 <div id="freeow" class="freeow freeow-bottom-right"></div> 213 214 <!-- END list --> -
trunk/prototype/modules/filters/edit-filter.ejs
r6387 r6487 124 124 %> 125 125 </select> 126 <input type="checkbox" name="actionType[]" value="alertMessage" class="alertMessage"/> 127 <label><%= get_lang("Alert message filter by sender")%></label> 126 128 </fieldset> 127 129 <fieldset> -
trunk/prototype/modules/filters/filter-list.ejs
r6348 r6487 41 41 <% 42 42 for (var k=0; k<data.rules[i].actions.length; k++) { 43 if(data.rules[i].actions[k].type == "addflag") { 44 %> 45 <li><strong> (<%= get_lang("The filter is active for alerts") %>) </strong></li> 46 <% 47 continue; 48 } 43 49 %> 44 50 <li><strong><%= get_lang(data.rules[i].actions[k].type) %>:</strong> <%= (data.rules[i].actions[k].type == 'setflag') ? get_lang(data.rules[i].actions[k].parameter) : data.rules[i].actions[k].parameter %></li> -
trunk/prototype/modules/filters/filters.js
r6452 r6487 1 /* Verifica se a regra fora de escritório está ativa */ 2 function outOfficeVerify() { 1 /* 2 * Retorna as regras por remetente e que o usuário deseja ser avisado 3 */ 4 function getFromAlertRules() { 5 var filters = DataLayer.get("filter"); 6 fromRules = []; 7 var alertMessage; 8 var active; 9 for (var index in filters) { 10 alertMessage = filters[index]['alertMessage']; 11 active = filters[index]['enabled']; 12 for(var criterias in filters[index]['actions']) { 13 if (filters[index]['actions'][criterias]['type'] == 'fileinto' && alertMessage == 'true' && active == 'true') 14 fromRules[fromRules.length] = filters[index]['actions'][criterias]['parameter']; 15 } 16 } 17 return fromRules; 18 } 19 20 /* 21 * Verifica se a regra Fora de escritório está ativa 22 */ 23 function outOfficeVerify() { 3 24 DataLayer.remove('filter', false); 4 25 var filters = DataLayer.get("filter"); … … 18 39 } 19 40 20 /* Valida as informações do formulário de filtro de mensagens */ 41 /* 42 * Valida os campos do formulário da tela de filtros para salvar. 43 */ 21 44 valid_save = function(){ 22 45 var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); … … 103 126 } 104 127 } 128 var criteria_operator_list = list_container.find('[name="criteriaOperator[]"]'); 129 if(list_container.find('.alertMessage').is(':checked')){ 130 if($(criteria_list[0]).val() != "" && $('.select-folderlist').find('[type="radio"]').is(':checked') && $(criteria_operator_list[0]).find('option:selected').val() != "!*"){ 131 var hasValue = false; 132 $.each(criteria_list, function(index, value){ 133 if(($(criteria_list[index]).val() != "" && index != 0 && index != 5) || ($(criteria_list[index]).is(':checked'))){ 134 if($('.fields-isexact').find(':checked').val() == 'or'){ 135 hasValue = true; 136 } 137 } 138 }); 139 if(hasValue){ 140 $.Zebra_Dialog(get_lang('<strong>Filtro com alerta</strong><br>Se houver mais que um critério para o filtro, a opção "Atender a todos os critérios" deve estar selecionada')); 141 return false; 142 } 143 }else{ 144 $.Zebra_Dialog(get_lang('<strong>Filtro com alerta</strong><br> O filtro deve ter como critério definido "Remetente" e ação "Arquivar na pasta"')); 145 return false; 146 } 147 } 105 148 return true; 106 149 }; … … 154 197 } 155 198 156 /* Mostra os detalhes do filtro para edição */ 199 /* 200 * Preenche o formulário de filtros com as informações originais para edição 201 */ 157 202 showDetails = function( filter ){ 158 203 … … 182 227 } 183 228 isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True"); 229 230 if (filter.alertMessage == 'true') $('.alertMessage').attr('checked', 'True'); 184 231 } 185 232 … … 188 235 189 236 decoder: function( form ){ 190 237 if( form.vacation ) 191 238 return { 192 239 criteria: [{ value: "vacation", operator: "", field: "vacation" }], … … 218 265 219 266 !the_parameter ? the_parameter = form.actionParameter[i+1] : ""; 220 if (type == 'fileinto') { 267 268 if (type == 'alertMessage') { 269 //if(!$('[value="alertMessage"]').parent().hasClass("hidden")){ 270 type = 'addflag'; 271 the_parameter = '$FilteredMessage'; 272 //}else{ 273 // return; 274 //} 275 } 276 if (type == 'fileinto') { 221 277 the_parameter = form.valueFileInto; 222 278 } … … 248 304 }), 249 305 enabled : true, 250 applyMessages: apply_messages_ 306 alertMessage: $('.alertMessage').is(':checked'), 307 //applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ? 308 //keys( selectedMessages ) : allMessages : "" 309 applyMessages: apply_messages_ 310 //applyMessages: "" 251 311 }; 252 312 }, … … 303 363 }); 304 364 365 366 fromRules = getFromAlertRules(); 367 305 368 var BASE_PATH = '../prototype/'; 306 369 … … 311 374 var allMessages = false; 312 375 313 /* Bloqueio de usuários na tela de mensagem do ExpressoMail */ 376 /* 377 * Bloqueia usuário por email - utilizado na tela de mensagens do ExpressoMail 378 */ 314 379 function block_user_email(email) { 315 380 delete selectedMessages; … … 325 390 $.Zebra_Dialog(get_lang("Lock User") + " " + email + " " + get_lang("removed")); 326 391 list_filters(); 392 getFromAlertRules(); 327 393 }); 328 394 return true; … … 343 409 $.Zebra_Dialog(get_lang("User") + " " + email + " " + get_lang("blocked")); 344 410 list_filters(); 411 getFromAlertRules(); 345 412 }); 346 413 … … 358 425 }); 359 426 360 /* Gerencia o grid das mensagens da caixa de entrada */ 427 /* Gerencia o grid das mensagens da caixa de entrada 428 * Mostra o grid de mensagens para aplicar a regra nas mensagens da caixa de entrada. 429 */ 361 430 function showGridMessages(thiss) { 362 431 var criteria_list = list_container.find('[name="criteriaValue[]"]'); … … 484 553 485 554 /* Gerencia a listagem de filtros do usuário */ 555 /* 556 * Lista os filtros para o usuário 557 */ 486 558 function list_filters(html){ 487 559 outOfficeVerify(); … … 495 567 } 496 568 list_container = $(".expresso-window-filters").dialog({ 569 title: get_lang('Filters'), 497 570 width:700, 498 571 modal: true, … … 580 653 else 581 654 return; 582 DataLayer.commit( 'filter', false,function(){ 655 DataLayer.commit( 'filter', false,function(data){ 656 if(filters['alertMessage'] == "true"){ 657 if(filters['alertMessage'] != $('.alertMessage').is(':checked').toString()){ 658 /**RETIRA FLAG*/ 659 removeMessagesFlag(filters['id']); 660 } 661 } 583 662 if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { 584 663 for (var index in selectedMessages) { … … 587 666 } 588 667 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 668 getFromAlertRules(); 589 669 }); 590 670 }).end().filter('.button.search').click(function() { … … 604 684 DataLayer.commit( 'filter', false,function(){ 605 685 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 686 getFromAlertRules(); 606 687 }); 607 688 }); … … 618 699 var id = $(this).parents("li.rule").find('.id').val(); 619 700 DataLayer.put( 'filter', id, { enabled: false }); 701 /**RETIRA FLAG*/ 702 removeMessagesFlag(id); 620 703 DataLayer.commit("filter", false,function(){ 621 704 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 705 getFromAlertRules(); 622 706 }); 623 707 }).end() … … 633 717 DataLayer.commit("filter", false,function(){ 634 718 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 719 getFromAlertRules(); 635 720 }); 636 721 }).end() … … 653 738 DataLayer.remove('filter', false); 654 739 DataLayer.get('filter'); 740 /**RETIRA FLAG*/ 741 removeMessagesFlag(filter_name); 655 742 DataLayer.remove( 'filter', filter_name); 743 656 744 DataLayer.commit("filter", false,function(){ 657 745 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 746 getFromAlertRules(); 658 747 }); 659 748 }else{ … … 670 759 DataLayer.commit("filter", false, function(){ 671 760 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 761 getFromAlertRules(); 672 762 }); 673 763 }); … … 676 766 container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ 677 767 DataLayer.put( 'filter', o.innerHTML, { enabled: false }); 768 /**RETIRA FLAG*/ 769 removeMessagesFlag(o.innerHTML); 678 770 }); 679 771 DataLayer.commit("filter", false, function(){ 680 772 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 773 getFromAlertRules(); 681 774 }); 682 775 }); … … 693 786 DataLayer.get('filter'); 694 787 container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ 788 /**RETIRA FLAG*/ 789 removeMessagesFlag(urlencode(o.innerHTML)); 695 790 DataLayer.remove( 'filter', urlencode(o.innerHTML) ); 791 792 696 793 }); 697 794 DataLayer.commit("filter", false,function(){ 698 795 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 796 getFromAlertRules(); 699 797 }); 700 798 }else{ … … 734 832 } 735 833 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 834 getFromAlertRules(); 736 835 }); 737 836 }).end().filter('.button.search').click(function() { … … 760 859 DataLayer.commit( 'filter',false,function(){ 761 860 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 861 getFromAlertRules(); 762 862 }); 763 863 } … … 767 867 } 768 868 769 /* Inicializa os filtros e chama o list_filters */ 869 870 /* Inicializa os filtros e chama o list_filters 871 * Inicia a funcionalidade de filtros de mensagens 872 */ 770 873 function init_filters(){ 771 874 var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {}); 772 875 list_filters(html); 773 876 } 877 878 /* 879 * Ao excluir filtro, desabilitar filtro ou retirar a ação Alerta de um filtro 880 * esta função é chamada para retirar as flags que caracterizam uma mensagem como alertada pelos Filtros por Remetente 881 */ 882 function removeMessagesFlag(id){ 883 var filters_c = DataLayer.get('filter', id); 884 var folder = ''; 885 var from = ''; 886 887 for(var i=0; i < filters_c['actions'].length; i++){ 888 if(filters_c['actions'][i].type == 'fileinto'){ 889 folder = filters_c['actions'][i].parameter; 890 } 891 } 892 $.each(fromRules, function(index, value) { 893 if(value == folder){ 894 for(var i=0; i < filters_c['criteria'].length; i++){ 895 if(filters_c['criteria'][i].field == 'from'){ 896 from = filters_c['criteria'][i].value; 897 } 898 } 899 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){}); 900 return false; 901 } 902 }); 903 } -
trunk/prototype/modules/filters/interceptors/FilterMapping.php
r6459 r6487 224 224 $script_criteria .= ")"; 225 225 226 $script_action = " {\r\n "; 226 //$script_action = " {\r\n "; 227 /* Somente para controlar que o addFlag virá antes de qualquer ação. Modificar isso depois */ 228 $action_addFlag = ''; 227 229 228 230 if( is_array($action) ) … … 230 232 { 231 233 switch ($action[$k]['type']) { 234 case 'setflag': 235 $require_flag = true; 236 $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter']; 237 break; 238 case 'addflag': 239 $require_flag = true; 240 $action_addFlag = "addflag \"" . $action[$k]['parameter'] . "\";\r\n "; 241 break; 232 242 case 'redirect': 233 243 break; … … 245 255 $vacation = true; 246 256 continue; 247 case 'setflag':248 $require_flag = true;249 $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter'];250 break;251 257 case 'discard': 252 258 break; 253 259 } 254 if ($vacation == false ) $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n ";260 if ($vacation == false && $action[$k]['type'] != 'addflag') $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n "; 255 261 } 256 $script_action .= "}";257 262 263 /* ATENÇÃO: Colocar sempre o comando addflag antes de qualquer outro no caso de ações compostas no Sieve */ 264 if ($action_addFlag != '') $script_action = $action_addFlag . $script_action; 265 266 $script_action = "{\r\n " . $script_action . "}"; 267 $action_addFlag = ''; 258 268 if($vacation == false) 259 269 $script_rules .= $script_match . $script_criteria . $script_action . "\r\n"; … … 263 273 $script_match = ""; 264 274 $script_criteria = ""; 275 $script_action = ""; 265 276 $data['applyMessages'] = ""; 266 277 } … … 295 306 296 307 $content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data; 297 308 298 309 return( $content ); 299 310 } -
trunk/prototype/modules/mail/css/followupflag.css
r6167 r6487 209 209 span.removeLabeledMsg {margin:0 5px 0 5px;font-weight: bold;} 210 210 span.removeLabeledMsg:hover {cursor: pointer;} 211 212 .freeow .gray:hover .background { 213 border-color: #BBB; 214 } 215 .minimize-alarm { 216 background: url("../img/minimizar.png") no-repeat scroll 0 0 transparent; 217 height: 16px; 218 position: relative; 219 width: 16px; 220 float:right; 221 margin-right:5px; 222 } 223 .maximize-alarm { 224 background: url("../img/maximizar.png") no-repeat scroll 0 0 transparent; 225 height: 16px; 226 position: relative; 227 width: 16px; 228 float:right; 229 margin-right:5px; 230 } 231 .content-alarm ul { 232 max-height: 100px; 233 overflow: auto; 234 } 235 .content-alarm { 236 margin-top: 5px; 237 } 238 .title-alarm { 239 margin-left: 90px; 240 font-size: 16px; 241 } 242 .alert-options { 243 border: none; 244 } 245 .confirm-alarm { 246 float:right; 247 } 248 .freeow .gray h2 { 249 font-size: 12px; 250 } 251 .freeow { 252 width: 325px; 253 } 254 .freeow .gray .content { 255 margin: 5px; 256 } 257 .freeow .gray .background { 258 background-color: #fafafa; 259 border: 2px solid #BBB; 260 } 261 .freeow .content { 262 margin: 5px; 263 } 264 265 .filtersDeadline .img_title { 266 background: url("../img/email.png") no-repeat scroll 0 0 transparent; 267 height: 20px; 268 position: absolute; 269 width: 20px; 270 float:left; 271 margin-left:40px; 272 top: 7px; 273 } 274 .alarmDeadline .img_title { 275 background: url("../img/flagDefault4.png") no-repeat scroll 0 0 transparent; 276 height: 10px; 277 position: absolute; 278 width: 10px; 279 float:left; 280 margin-left:42px; 281 top: 11px; 282 } 283 .doneDeadline .img_title { 284 background: url("../img/flagDone.png") no-repeat scroll 0 0 transparent; 285 height: 10px; 286 position: absolute; 287 width: 10px; 288 float:left; 289 margin-left:43px; 290 top: 11px; 291 } -
trunk/prototype/modules/mail/js/followupflag.js
r6253 r6487 251 251 updateCacheFollowupflag(selectedMessageIds, folders, true); 252 252 winElement.dialog("close"); 253 alarmFollowupflagged( );253 alarmFollowupflagged('followupflagAlarms'); 254 254 }); 255 255 winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true); … … 328 328 DataLayer.commit(false, false, function(){ 329 329 winElement.dialog("close"); 330 alarmFollowupflagged( );330 alarmFollowupflagged('followupflagAlarms'); 331 331 }); 332 332 … … 471 471 472 472 /** 473 * constrói as duas possíveis janela de alerta, utilizando o mesmo template 473 * constrói as três possíveis janelas de alerta, utilizando o mesmo template 474 * para o parametro alert_type, espera-se vazio, followupflagAlarms ou filtersAlarms 475 * vazio: quando serão carregadas todas as modais de alarmes 476 * followupflagAlarms: quando serão carregadas as modais referentes à sinalizações 477 * filtersAlarms: quando será carregada a modal de filtros (nesse caso o parametro filter_list deve conter a lista de mensagens a ser exibida na modal) 474 478 */ 475 function alarmFollowupflagged(){ 476 $('.followupflag-alarm').remove(); 477 var toIterate = [ 478 { 479 attrDeadline: 'doneDeadline', 480 caption: {singular:'You have one undone message today:', 481 plural:"You have %1 undone messages today:" 482 }, 483 onOk: function(event){ 484 if($(event.target).parents('.doneDeadline').find('[name="stopAlert"]').is(':checked')){ 485 $.cookie("fadeCompleted", (new Date).toString("dd/MM/yyyy"), { 486 expires: 1 487 }); 488 } 489 }, 490 enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 491 }, 492 { 493 attrDeadline: 'alarmDeadline', 494 caption: { 495 singular:'You have a follow up due for today:', 496 plural:'You have %1 follow ups due for today:' 497 }, 498 onOk: function(event){ 499 if($(event.target).parents('.alarmDeadline').find('[name="stopAlert"]').is(':checked')){ 500 $.cookie("fadeAlarm", (new Date).toString("dd/MM/yyyy"), { 501 expires: 1 502 }); 503 } 504 }, 505 enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 506 } 507 ]; 479 function alarmFollowupflagged(alert_type, filter_list){ 480 switch(alert_type){ 481 // carregar modais de sinalizadores 482 case 'followupflagAlarms': 483 $('.doneDeadline').remove(); 484 $('.alarmDeadline').remove(); 485 var toIterate = [ 486 { 487 attrDeadline: 'doneDeadline', 488 caption: {singular:'You have one undone message today:', 489 plural:"You have %1 undone messages today:" 490 }, 491 title: get_lang('Done'), 492 enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 493 }, 494 { 495 attrDeadline: 'alarmDeadline', 496 caption: { 497 singular:'You have a follow up due for today:', 498 plural:'You have %1 follow ups due for today:' 499 }, 500 title: get_lang('Follow ups'), 501 enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 502 } 503 ]; 504 break; 505 // carregar modal de filtros 506 case 'filtersAlarms': 507 $('.filtersDeadline').remove(); 508 var toIterate = [ 509 { 510 attrDeadline: 'filtersDeadline', 511 caption: { 512 singular:'You have an archived message:', 513 plural:'You have %1 messages archived:' 514 }, 515 title: get_lang('Filter by sender'), 516 enable: ($.cookie("fadeFilterAlarm") != (new Date).toString("dd/MM/yyyy")) 517 } 518 ]; 519 break; 520 // carregar todas as modais 521 default: 522 $('.gray').remove(); 523 var toIterate = [ 524 { 525 attrDeadline: 'filtersDeadline', 526 caption: { 527 singular:'You have an archived message:', 528 plural:'You have %1 messages archived:' 529 }, 530 title: get_lang('Filter by sender'), 531 enable: ($.cookie("fadeFilterAlarm") != (new Date).toString("dd/MM/yyyy")) 532 }, 533 { 534 attrDeadline: 'doneDeadline', 535 caption: {singular:'You have one undone message today:', 536 plural:"You have %1 undone messages today:" 537 }, 538 title: get_lang('Done'), 539 enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 540 }, 541 { 542 attrDeadline: 'alarmDeadline', 543 caption: { 544 singular:'You have a follow up due for today:', 545 plural:'You have %1 follow ups due for today:' 546 }, 547 title: get_lang('Follow ups'), 548 enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 549 } 550 ]; 551 break; 552 } 508 553 var i = 0; 554 // recupera e monta os dados para serem exibidos nas modais de alarmes 509 555 while (it = toIterate.pop()){ 510 556 if (!it.enable) continue; 511 512 var alarmInRange = DataLayer.get('followupflagged', {filter: ['AND', ['>', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00')], ['<', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00')]], criteria: {deepness: 1}}); 557 558 var alarmInRange = {}; 559 // caso for alarme de sinalizadores 560 if(it.attrDeadline == 'doneDeadline' || it.attrDeadline == 'alarmDeadline'){ 561 alarmInRange = DataLayer.get('followupflagged', {filter: ['AND', ['>', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00')], ['<', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00')]], criteria: {deepness: 1}}); 562 if(alarmInRange.length > 0){ 563 for(var i=0; i<alarmInRange.length; i++){ 564 if(alarmInRange[i].isDone == 1){ 565 alarmInRange.splice(i,1); 566 i--; 567 } 568 } 569 } 570 571 if(alarmInRange.length > 0){ 572 var messages_alarm = []; 573 for(var i=0; i<alarmInRange.length; i++){ 574 var date = Date.parseExact(alarmInRange[i][it.attrDeadline], 'yyyy-MM-dd HH:mm:ss'); 575 if(date) 576 alarmInRange[i][it.attrDeadline] = date.toString('HH:mm'); 577 578 if(alarmInRange[i]['followupflag']['id'] < 7){ 579 var nameFollowupflag = get_lang(alarmInRange[i]['followupflag']['name']); 580 }else{ 581 var nameFollowupflag = alarmInRange[i]['followupflag']['name']; 582 } 583 var li_alarm = alarmInRange[i][it.attrDeadline] + ' - ' + nameFollowupflag + ' - ' + truncate(alarmInRange[i]['message']['headers']['subject'], 15); 584 messages_alarm.push({ 585 "msg_number" : alarmInRange[i]['messageNumber'], 586 "msg_folder" : alarmInRange[i]['folderName'], 587 "a" : li_alarm 588 }); 589 } 590 } 591 } 592 // caso for alarme de filtros 593 else if(filter_list){ 594 alarmInRange = filter_list; 595 if(alarmInRange.length > 0){ 596 var messages_alarm = []; 597 for(var i=0; i<alarmInRange.length; i++){ 598 var d = new Date(alarmInRange[i]['udate']*1000); 599 var dia = d.getDate(); 600 if(dia < 10){ 601 dia = "0" + dia; 602 } 603 var mes = (d.getMonth()) + 1; 604 if(mes < 10){ 605 mes = "0" + mes; 606 } 607 var ano = d.getFullYear(); 608 var dtFormatada = dia + '/' + mes + '/' + ano; 609 alarmInRange[i]['udate'] = dtFormatada; 610 611 var li_alarm = alarmInRange[i]['udate'] + ' ' + alarmInRange[i]['smalldate'] + ' - ' + alarmInRange[i]['from'] + ' - ' + truncate(alarmInRange[i]['subject'], 15); 612 messages_alarm.push({ 613 "msg_number" : alarmInRange[i]['msg_number'], 614 "msg_folder" : alarmInRange[i]['msg_folder'], 615 "a" : li_alarm 616 }); 617 } 618 } 619 } 620 513 621 if(alarmInRange.length > 0){ 514 for(var i=0; i<alarmInRange.length; i++){ 515 if(alarmInRange[i].isDone == 1){ 516 alarmInRange.splice(i,1); 517 i--; 518 } 519 } 520 } 521 if(alarmInRange.length > 0){ 522 for(var i=0; i<alarmInRange.length; i++){ 523 var date = Date.parseExact(alarmInRange[i][it.attrDeadline], 'yyyy-MM-dd HH:mm:ss'); 524 if(date) 525 alarmInRange[i][it.attrDeadline] = date.toString('HH:mm'); 526 } 622 // monta o subtitulo da modal 527 623 var caption = (alarmInRange.length == 1) ? 528 624 get_lang(it.caption.singular): 529 625 get_lang(it.caption.plural, alarmInRange.length); 530 626 // monta o array de dados a ser passado para o template 531 627 var data = { 532 alarmInRange : alarmInRange,628 alarmInRange : messages_alarm, 533 629 caption: caption, 534 it : it 630 type: it.attrDeadline, 631 captions: it.caption 535 632 }; 633 // tipo de modal a ser exibida 634 var type_alarm = it.attrDeadline; 635 //função chamada ao clicar no botão Ok da modal 636 var ok_function = function(event, type, type_cookie){ 637 if($(event.target).parents('.'+type).find('[name="stopAlert"]').is(':checked')){ 638 $.cookie(type_cookie, (new Date).toString("dd/MM/yyyy"), { 639 expires: 1 640 }); 641 } 642 } 643 // carrega o template dos alarmes e cria a modal utilizando o plugin freeow 536 644 var dialogText = DataLayer.render("../prototype/modules/mail/templates/followupflag_alarm_list.ejs", data); 645 var titulo = '<div class="header-alarm"><span class="img_title"></span><span class="title-alarm"><strong>'+it.title+'</strong></span><span name="header-icon" class="maximize-alarm"></span></div>'; 646 $("#freeow").freeow(titulo, dialogText, { 647 classes: ["gray", type_alarm], 648 autoHide: false, 649 startStyle: null, 650 onClick: function(event){ 651 var type = ''; 652 var type_cookie = ''; 653 if($(this).hasClass('alarmDeadline')){ 654 type = 'alarmDeadline'; 655 type_cookie = 'fadeAlarm'; 656 }else if($(this).hasClass('doneDeadline')){ 657 type = 'doneDeadline'; 658 type_cookie = 'fadeCompleted'; 659 }else if($(this).hasClass('filtersDeadline')){ 660 type = 'filtersDeadline'; 661 type_cookie = 'fadeFilterAlarm'; 662 } 663 if($(event.target).hasClass('stop-alert-alarm')){ 664 return; 665 } 666 if($(event.target).hasClass('minimize-alarm')){ 667 $('.'+type).find('.content-alarm').hide(); 668 $(event.target).removeClass('minimize-alarm').addClass('maximize-alarm'); 669 return; 670 } 671 if($(event.target).hasClass('maximize-alarm')){ 672 $('.'+type).find('.content-alarm').show(); 673 $(event.target).removeClass('maximize-alarm').addClass('minimize-alarm'); 674 return; 675 } 676 if($(event.target).hasClass('confirm-alarm')){ 677 ok_function(event, type, type_cookie); 678 $('.'+type).remove(); 679 return; 680 } 681 return false; 682 } 683 }); 684 // elementos do freeow desnecessários 685 $('.gray .background .content p').remove(); 686 $('.gray .icon').remove(); 687 $('.gray .close').remove(); 537 688 538 /** 539 * A última dialog criada é a dialog mais ao alto 540 */ 541 var offsetHeight = $('.ZebraDialog.right-bottom:last').length ? 542 $(window).height() - $('.ZebraDialog.right-bottom:last').position().top : 0; 543 544 /** 545 * Se for a primeira, desloca para cima do rodapé do grid 546 * caso contrário desloca para um pouco acima da última dialog criada 547 */ 548 offsetHeight = !offsetHeight ? 35 : offsetHeight + 20 ; 549 var dialog = new $.Zebra_Dialog(dialogText, { 550 'buttons': ['Ok'], 551 'modal': false, 552 'vcenter_short_message': false, 553 'position': ['right - 20', 'bottom - ' + offsetHeight.toString() ], 554 'custom_class': 'right-bottom followupflag-alarm '+it.attrDeadline 555 }).dialog; 556 $(".ZebraDialog.followupflag-alarm .ZebraDialog_Button0").click(it.onOk); 557 $(".ZebraDialog.followupflag-alarm .display-options .more").click(function(event) { 558 $(event.target).parents('.followupflag-alarm').find('.message-list').css('height', 'auto'); 559 }); 689 // botão ok da modal com jquery button 690 $('.content-alarm button').button(); 560 691 } 561 692 } 693 694 // controle de qual janela de alarme estará maximizada 695 $('.gray').find('.content-alarm').hide(); 696 $('.gray').find('.header-alarm [name="header-icon"]').removeClass('minimize-alarm').addClass('maximize-alarm'); 697 698 if($('.gray').length > 0){ 699 if($('.gray').hasClass('filtersDeadline')){ 700 $('.filtersDeadline').find('.content-alarm').show(); 701 $('.filtersDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm'); 702 }else if($('.gray').hasClass('alarmDeadline')){ 703 $('.alarmDeadline').find('.content-alarm').show(); 704 $('.alarmDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm'); 705 }else if($('.gray').hasClass('doneDeadline')){ 706 $('.doneDeadline').find('.content-alarm').show(); 707 $('.doneDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm'); 708 } 709 } 710 562 711 } 712 563 713 $('#main_table').ready(function(){ 564 alarmFollowupflagged(); 714 handlerMessageFilter = function (data) { 715 alarmFollowupflagged(null, data); 716 } 717 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 718 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 565 719 }); 720 -
trunk/prototype/modules/mail/templates/followupflag_alarm_list.ejs
r5738 r6487 1 <p class="title"><strong><%= data.caption %> </strong></p> 2 3 <ul class="message-list"> 4 <% 5 for(var i=0; i<data.alarmInRange.length; i++){ 6 var openMessageScript = "cExecute('$this.imap_functions.get_info_msg&msg_number="+data.alarmInRange[i].messageNumber+"&msg_folder="+data.alarmInRange[i].folderName+"&alarm=true', show_msg);"; 7 if(data.alarmInRange[i].followupflag.id < 7){ 8 var nameFollowupflag = get_lang(data.alarmInRange[i].followupflag.name); 9 }else{ 10 var nameFollowupflag = data.alarmInRange[i].followupflag.name; 1 <div class="content-alarm"> 2 <span class="subtitle-alarm"> 3 <strong><%=data.caption %></strong> 4 </span> 5 <ul class="message-list"> 6 <% 7 for(var i=0; i<data.alarmInRange.length; i++){ 8 if(data.type == 'filtersDeadline') 9 var openMessageScript = "$(this).parent().remove(); var msgs_count = $('.filtersDeadline').find('.message-item').length; if(msgs_count == 0){ $('.filtersDeadline').remove(); } $('.subtitle-alarm').find('strong').html((msgs_count == 1)?get_lang('"+data.captions.singular+"'):get_lang('"+data.captions.plural+"', msgs_count)); cExecute('$this.imap_functions.open_flagged_msg&msg_number="+data.alarmInRange[i].msg_number+"&msg_folder="+data.alarmInRange[i].msg_folder+"&alarm=true', show_msg);"; 10 else 11 var openMessageScript = "cExecute('$this.imap_functions.get_info_msg&msg_number="+data.alarmInRange[i].msg_number+"&msg_folder="+data.alarmInRange[i].msg_folder+"&alarm=true', show_msg);"; 12 %> 13 <li class="message-item"> 14 <a onclick="<%=openMessageScript%>"> 15 <%= data.alarmInRange[i].a %> 16 </a> 17 </li> 18 <% 11 19 } 12 %> 13 <li class="message-item"> 14 <a onclick="<%=openMessageScript%>"> 15 <%= (it.attrDeadline == 'alarmDeadline') ? data.alarmInRange[i].alarmDeadline : data.alarmInRange[i].doneDeadline %> - <%= nameFollowupflag %> - <%= data.alarmInRange[i].message.headers.subject %> 16 </a> 17 </li> 18 <% 19 } 20 %> 21 </ul> 22 23 <fieldset class="alert-options"> 24 <input type="checkbox" name="stopAlert"> <label><%= get_lang("Don't show this window anymore today.")%></label> 25 </fieldset> 20 %> 21 </ul> 22 <fieldset class="alert-options"> 23 <input type="checkbox" class="stop-alert-alarm" name="stopAlert"> <label><%= get_lang("Don't show this window anymore today.")%></label> 24 <button class="confirm-alarm">Ok</button> 25 </fieldset> 26 </div>
Note: See TracChangeset
for help on using the changeset viewer.