Changeset 6487 for trunk/prototype
- Timestamp:
- 06/14/12 09:02:04 (12 years ago)
- Location:
- trunk/prototype
- Files:
-
- 7 edited
- 25 copied
Legend:
- Unmodified
- Added
- Removed
-
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.