source: trunk/prototype/modules/filters/filters.js @ 6789

Revision 6789, 30.9 KB checked in by airton, 12 years ago (diff)

Ticket #2959 - Considerar mais de uma regra para uma mesma mensagem no filtro de mensagem

Line 
1/*
2 * Retorna as regras por remetente e que o usuário deseja ser avisado
3 */
4function 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 */
23function outOfficeVerify() {   
24        DataLayer.remove('filter', false);
25        var filters = DataLayer.get("filter");
26        var outoffice_active = false;
27        outoffice = false;
28        for(var index in filters){
29                if(filters[index].id == "vacation")
30                        outoffice = true;
31                if(filters[index].id == "vacation" && filters[index].enabled == "true"){
32                        write_msg(get_lang("Attention, you are in out of office mode."), true);
33                        outoffice_active = true;
34                        break;
35                }
36        }
37        if(!outoffice_active && old_msg == get_lang("Attention, you are in out of office mode."))
38                clean_msg();
39}
40
41/*
42 * Valida os campos do formulário da tela de filtros para salvar.
43 */
44valid_save = function(){
45        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
46        if(list_container.find('[name="name"]').attr("disabled") != "disabled")
47        {
48                if($.trim(list_container.find('[name="name"]').val()) == ""){
49                        $.Zebra_Dialog(get_lang("No name filled"),{
50                                'onClose':  function(caption) {
51                                        list_container.find('[name="name"]').focus();
52                                }
53                        });
54                        accord.accordion('activate',0);
55                        return false;
56                }else if($.trim(list_container.find('[name="name"]').val()) == "vacation"){
57                        $.Zebra_Dialog(get_lang("Invalid name, 'vacation' is a reserved word"),{
58                                'onClose':  function(caption) {
59                                        list_container.find('[name="name"]').val("").focus();
60                                }
61                        });
62                        accord.accordion('activate',0);
63                        return false;
64                }else{
65                        filter_list = DataLayer.get("filter", true);
66                        var error = false;
67                        $.each(filter_list, function(index, value){
68                                if(filter_list[index].name == list_container.find('[name="name"]').val()){
69                                        $.Zebra_Dialog(get_lang("There is already a filter with this name"),{
70                                                'onClose':  function(caption) {
71                                                        list_container.find('[name="name"]').val("").focus();
72                                                }
73                                        });
74                                        accord.accordion('activate',0);
75                                        error = true;
76                                        return;
77                                }
78                        });
79                        if(error){
80                                return false;
81                        }
82                }
83        }
84        var criteria = "";
85        var criteria_list = list_container.find('[name="criteriaValue[]"]');
86        var er_num = /^[0-9]+$/;
87
88        if($(".sizeRule").val() != "" && er_num.test($(".sizeRule").val()) == false) {
89                $.Zebra_Dialog(get_lang("Size rule must be a number"),{
90                        'onClose':  function(caption) {
91                                list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").focus();
92                        }
93                });
94                accord.accordion('activate',0);
95                return false;
96        }
97        $.each(criteria_list, function(index, value){
98                if(($(criteria_list[index]).val() != "" && index != 5) || ($(criteria_list[index]).is(':checked'))){
99                        criteria += $.trim($(criteria_list[index]).val());
100                }
101        });
102        if(criteria == ""){
103                $.Zebra_Dialog(get_lang("No criteria filled"),{
104                        'onClose':  function(caption) {
105                                list_container.find('[name="criteriaValue[]"]:first').focus();
106                        }
107                });
108                accord.accordion('activate',0);
109                return false;
110        }
111        if(list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").length){
112                if($.trim(list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").val()) == ""){
113                        $.Zebra_Dialog(get_lang("Fill the action value"),{
114                                'onClose':  function(caption) {
115                                        list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").focus();
116                                }
117                        });
118                        return false;
119                }
120                var er_mail = RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
121                if(er_mail.test($.trim(list_container.find('[value="redirect"]:checked').parent().find("input:text").val())) == false && list_container.find('[name="actionType[]"]:checked').val() == 'redirect'){
122                        $.Zebra_Dialog(get_lang("Invalid mail"),{
123                                'onClose':  function(caption) {
124                                        list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").focus();
125                                }
126                        });
127                        return false;
128                }
129        }
130        /*Validação ao salvar filtro com alerta*/
131        var criteria_operator_list = list_container.find('[name="criteriaOperator[]"]');
132        if(list_container.find('.alertMessage').is(':checked')){
133                if($(criteria_list[0]).val() != "" && $('.select-folderlist').find('[type="radio"]').is(':checked') && $(criteria_operator_list[0]).find('option:selected').val() != "!*"){
134                        var hasValue = false;
135                        $.each(criteria_list, function(index, value){
136                                if(($(criteria_list[index]).val() != "" && index != 0 && index != 5) || ($(criteria_list[index]).is(':checked'))){
137                                        if($('.fields-isexact').find(':checked').val() == 'or'){
138                                                hasValue = true;
139                                        }
140                                }
141                        });
142                        if(hasValue){
143                                $.Zebra_Dialog('<strong>'+get_lang('Filter with alert')+'</strong><br>'+get_lang('If more than one criterion for the filter, the "Meeting all the criteria" must be selected'));
144                                return false;
145                        }
146                }else{
147                        $.Zebra_Dialog('<strong>'+get_lang('Filter with alert')+'</strong><br>'+get_lang('The filter should be set as a criteria "Sender" and action "Archive folder"'));
148                        return false;
149                }
150        }
151        return true;
152};
153
154function urlencode (str) {
155    str = (str + '').toString();
156    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
157    replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
158}
159
160bytes2Size = function(bytes) {
161        var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
162        if (bytes === 0) return 'n/a';
163        var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
164        var size = (i<2) ? Math.round((bytes / Math.pow(1024, i))) : Math.round((bytes / Math.pow(1024, i)) * 100)/100;
165        return  size + ' ' + sizes[i];
166};
167
168flags2Class = function(cellvalue) {
169        var flags_enum = cellvalue.split(',');
170        var classes = '';
171        for (var i=0; i<flags_enum.length; i++){
172                classes += '<span class="icon-'+flags_enum[i].toLowerCase()+'"> </span>';
173        }
174        return classes;
175};
176
177date2Time = function (timestamp) {
178        var date = new Date();
179        if( typeof timestamp === "string" )
180            timestamp = parseInt( timestamp, 10 );
181        if ((date.getTime() - timestamp) < (24*60*60*1000)) {
182                return '<span class="timable" title="'+timestamp+'"> </span>';
183        } else {
184                date = new Date(timestamp);
185                var b = date.toISOString().split("T")[0].split("-");
186                var c = b[2] + "/" + b[1] + "/" + b[0];
187                return '<span class="datable">' + c + '</span>';
188        }
189};
190
191keys = function( object ){
192
193  var array = [];
194
195  for( var key in object )
196       array[ array.length ] = key;
197
198  return( array );
199
200}
201
202/*
203 * Preenche o formulário de filtros com as informações originais para edição
204 */
205showDetails = function( filter ){
206
207    form.get(0).reset();
208
209    nameObj.val( filter.name );
210        nameObj.attr("disabled", "disabled");
211    for( var i = 0; i < filter.criteria.length; i++ ){
212                if(filter.criteria[i].field == 'hasAttachment') {
213                        $(".hasAttachment").attr("checked", "True");
214                        continue;
215                }
216                criterias.filter( '[value="' + filter.criteria[i].field + '"]' )
217                .siblings( '[name="criteriaOperator[]"]' ).val( filter.criteria[i].operator ).end()
218                .siblings( '[name="criteriaValue[]"]' ).val( filter.criteria[i].value );
219    }
220    for( var i = 0; i < filter.actions.length; i++ ){
221                actions.filter( '[value="' + filter.actions[i].type + '"]' ).attr("checked", "True");
222                actions.filter( '[value="' + filter.actions[i].type + '"]' ).val( filter.actions[i].type )
223                .siblings( '[name="actionParameter[]"]' ).val( filter.actions[i].parameter );
224                if(filter.actions[i].type == "redirect")
225                        actions.siblings('[name="addressRedirect"]').val(filter.actions[i].parameter);
226                if(filter.actions[i].type == "reject")
227                        actions.siblings('[name="messageReject"]').val(filter.actions[i].parameter);
228                if(filter.actions[i].type == "fileinto" || filter.actions[i].type == "setflag")
229                        actions.parent().find('[value="'+filter.actions[i].parameter+'"]').attr("selected", "selected");
230    }
231        isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True");
232       
233        if (filter.alertMessage == 'true') $('.alertMessage').attr('checked', 'True');
234        if (filter.verifyNextRule == 'true') $('.verifyNextRule').attr('checked', 'True');
235}
236
237
238DataLayer.codec( "filter", "detail", {
239
240  decoder: function( form ){
241          if( form.vacation )
242          return {
243                criteria: [{ value: "vacation", operator: "", field: "vacation" }],
244                actions: [{ parameter: form.vacation, type: "vacation" }],
245                id: "vacation",
246                name: "vacation",
247                isExact: false,
248                applyMessages : "",
249                enabled : true
250      }
251
252        var apply_messages_ = keys(selectedMessages);
253
254        action = '';
255
256    return {
257                name: form.name ? form.name.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;') : nameObj.val().replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'),
258                isExact: ( form.isExact === "and" ),
259                criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){
260                        return (!form.criteriaValue[i]) ? null:
261                        {
262                                        value:  form.criteriaValue[i].replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'),
263                                        operator: criteriaOperator,
264                                        field:  form.criteriaType[i].replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')
265                        };
266                }),
267                actions: $.map( form.actionType || [], function( type, i ){
268                        var the_parameter = form.actionParameter[i];
269
270                        !the_parameter ? the_parameter = form.actionParameter[i+1] : "";
271
272                        if (type == 'alertMessage') {
273                                //if(!$('[value="alertMessage"]').parent().hasClass("hidden")){
274                                        type = 'addflag';
275                                        the_parameter = '$FilteredMessage';
276                                //}else{
277                                //      return;
278                                //}
279                        }
280                        if (type == 'fileinto') {
281                                the_parameter = form.valueFileInto;
282                        }
283                        if (type == 'reject') {
284                                the_parameter = form.messageReject;
285                        }
286                        if (type == 'fileintoInbox') {
287                                if(!$('[value="fileintoInbox"]').parent().hasClass("hidden")){
288                                        type = 'fileinto';
289                                        the_parameter = 'INBOX';
290                                }else{
291                                        return;
292                                }
293                        }
294                        if (type == 'fileintoTrash') {
295                                type = 'fileinto';
296                                the_parameter = 'INBOX' + cyrus_delimiter + 'Trash';
297                        }
298                        if (type == 'redirect') {
299                                the_parameter = form.addressRedirect;
300                        }
301                        if (type == 'setflag') {
302                                the_parameter = form.valueSetFlag;
303                                action = form.valueSetFlag;
304                        }
305                        return (!type) ? null:
306                              {parameter: the_parameter, type: type };
307
308                }),
309                enabled : true,
310                alertMessage: $('.alertMessage').is(':checked'),
311                verifyNextRule: $('.verifyNextRule').is(':checked'),
312                //applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ?
313                //keys( selectedMessages ) : allMessages : ""
314                applyMessages: apply_messages_
315    };
316  },
317
318  encoder: function( filters ){
319        var rules = [];
320
321        for( var id in filters )
322              rules[ rules.length ] = filters[id];
323
324        return { rules: rules };
325
326  }
327
328});
329
330/* Codec do datalayer */
331DataLayer.codec( "folder", "select", {
332
333  decoder:function(){
334
335  },
336  encoder:function( data ){
337
338      var tree1 = [], tree2 = [], tree3 = [];
339
340      for (var i=0; i<data.length; i++) {
341
342              if (/^INBOX/.test(data[i].id)) {
343                      if (!unorphanize(tree1, data[i])) {
344                              data[i].children = [];
345                              tree1.push(data[i]);
346                      }
347              }
348              else if (/^user/.test(data[i].id)) {
349                      if (!unorphanize(tree2, data[i])) {
350                              data[i].children = [];
351                              tree2.push(data[i]);
352                      }
353              }
354              else if (/^local_messages/.test(data[i].id)) {
355                      if (!unorphanize(tree3, data[i])) {
356                              data[i].children = [];
357                              tree3.push(data[i]);
358                      }
359              }
360
361      }
362
363      return {folders: [ tree1, tree2, tree3 ]};
364
365  }
366
367});
368
369
370fromRules = getFromAlertRules();
371
372var BASE_PATH = '../prototype/';
373
374DataLayer.basePath = BASE_PATH + "REST.php?q=";
375DataLayer.dispatchPath = BASE_PATH;
376
377var selectedMessages = {};
378var allMessages = false;
379
380/*
381 * Bloqueia usuário por email - utilizado na tela de mensagens do ExpressoMail
382 */
383function block_user_email(email) {
384        delete selectedMessages;
385        var idd = urlencode(email);
386        /** TODO - Mudar quando API abstrair atualizações no cache */
387        DataLayer.remove('filter', false);
388        var filters = DataLayer.get('filter');
389        for(var index in filters){
390                if(filters[index].name == email) {
391                        if(confirm(get_lang("This user is already blocked. Would you like to unlock it?"))) {
392                                DataLayer.remove( 'filter', filters[index].id );
393                                DataLayer.commit("filter", false, function(){
394                                        $.Zebra_Dialog(get_lang("Lock User") + " " + email + " " + get_lang("removed"));
395                                        list_filters();
396                                        getFromAlertRules();
397                                });
398                                return true;
399                        }else
400                                return true;
401                }
402        }
403        if(confirm(get_lang("Want to block the user") + " " + email + "?")){
404                DataLayer.put( 'filter', idd,
405                                        { name: email, isExact: false,
406                                                criteria:{ 0: {value: email, operator: "=", field: "from"} },
407                                                actions: { 0: {parameter: "INBOX" + cyrus_delimiter + "Spam", type: "fileinto"}},
408                                                enabled: true,
409                                                id: email,
410                                                block: true
411                                        });
412                DataLayer.commit("filter", false, function(){
413                        $.Zebra_Dialog(get_lang("User") + " " + email + " " + get_lang("blocked"));
414                        list_filters();
415                        getFromAlertRules();
416                });
417
418        }
419}
420
421
422DataLayer.codec( 'message', 'jqGrid', {
423
424      encoder: function( data ){
425
426          return( data );
427
428      }
429});
430
431/* Gerencia o grid das mensagens da caixa de entrada
432 * Mostra o grid de mensagens para aplicar a regra nas mensagens da caixa de entrada.
433 */
434function showGridMessages(thiss) {
435        var criteria_list = list_container.find('[name="criteriaValue[]"]');
436        var criteria_operator_list = list_container.find('[name="criteriaOperator[]"]');
437        var criteria_value = "";
438        var criteria = "";
439        $.each(criteria_list, function(index, value){
440                criteria += $.trim($(criteria_list[index]).val()) + ",";
441        });
442        var criteria_ = criteria.split(",");
443        var criteria_operator  = "";
444        $.each(criteria_operator_list, function(index, value){
445                criteria_operator += $.trim($(criteria_list[index]).val()) != "" ? index + "," : ",";
446                criteria_value    += $.trim($(criteria_operator_list[index]).val()) + ",";
447        });
448        var criteria_operator_  = criteria_operator.split(",");
449        var criteria_value_     = criteria_value.split(",");
450        var options = ["from", "to", "subject", "body", "size"];
451        var criterias_ = new Array();
452
453        for (i in criteria_)
454                if(criteria_[i] != "")
455                    criterias_.push( criterias_.length ?  {"0": "OR", "1": options[i], "2": criteria_value_[i], "3": criteria_[i]} : {"0": options[i], "1": criteria_value_[i], "2": criteria_[i]} );
456
457        showGridButton = thiss.parent();
458
459        showGridButton.siblings("#filtergrid-container").block({
460                                                        message: '<div id="loading-content"><div class="image"></div></div>',
461                                                        css: {
462                                                                backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)',
463                                                                backgroundRepeat: 'no-repeat',
464                                                                backgroundPosition: 'center',
465                                                                backgroundColor: 'transparent',
466                                                                width: '32px',
467                                                                height: '32px',
468                                                                border:'none'
469                                                        },
470                                                        overlayCSS: {
471                                                                backgroundColor: '#CCC',
472                                                                opacity:         0.5
473                                                        }
474                                                });
475
476        var data = DataLayer.get( 'message', { filter: criterias_, criteria: { properties: { context: { folder: 'INBOX' } } } }, true );
477
478        DataLayer.register( 'criterias', 'message:jqGrid', function( crit ){
479
480                    crit.properties = { context: { folder: 'INBOX' } };
481
482                    return { filter: [ "msgNumber", "IN", data ], criteria: crit };
483        });
484
485        allMessages = data;
486
487        if (typeof grid !== "undefined") {
488                grid.jqGrid( 'setGridParam', { url: 'message:jqGrid', postData: data } ).trigger( 'reloadGrid' );
489                //return;
490        }
491        grid = showGridButton.siblings("#filtergrid-container").removeClass('empty-container')
492        .html('<table class="hidden fields-search-messages-grid" id="fields-search-messages-grid"><tr><td/></tr></table><div class="hidden fields-search-messages-grid-pager" id="fields-search-messages-grid-pager"></div>')
493        .children(".fields-search-messages-grid, .fields-search-messages-grid-pager").removeClass('hidden').filter(".fields-search-messages-grid").trigger( 'reloadGrid' ).jqGrid({
494                url: 'message:jqGrid',
495                datatype: "json",
496                mtype: 'GET',
497                colNames:['#', 'De', 'Assunto', 'Data', 'Tamanho'],
498                colModel:[
499                        {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false},
500                        {name:'from.email',index:'msg_number', width:130, sortable:false},
501                        {name:'subject',index:'subject', width:250, sortable:false},
502                        {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time},
503                        {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size}
504                ],
505                jsonReader : {
506                        root:"rows",
507                        page: "page",
508                        total: "total",
509                        records: "records",
510                        repeatitems: false,
511                        id: "0"
512                },
513                rowNum:10,
514                //rowList:[10,25,50],
515                rowList:[10],
516                pager: '#fields-search-messages-grid-pager',
517                sortname: 'id',
518                viewrecords: true,
519                sortorder: "desc",
520                multiselect: true,
521                autowidth: true,
522                reloadAfterEdit: true,
523                reloadAfterSubmit: true,
524                height:200,
525                loadComplete: function(data) {
526          //                            // aplica o contador
527          //                            jQuery('.timable').each(function (i) {
528          //                                    jQuery(this).countdown({
529          //                                            since: new Date(parseInt(this.title)),
530          //                                            significant: 1,
531          //                                            layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
532          //                                            description: ' atr&aacute;s'
533          //                                    });
534          //                            });
535                },
536                onSelectRow: function (id, selected) {
537                        if( selected )
538                        {
539                                selectedMessages[ id ] = true;
540                        }
541                        else
542                        {
543                                delete selectedMessages[ id ];
544                        }
545                },
546                onSelectAll: function (id, selected) {
547                        for (i in id) {
548                                if(selected)
549                                        selectedMessages[id[i]] = true;
550                                else
551                                        delete selectedMessages[id[i]];
552                        }
553                },
554                caption: 'Mensagens que atendem aos crit&eacute;rios'
555        }); // end jqGrid
556}
557
558/* Gerencia a listagem de filtros do usuário */
559/*
560 * Lista os filtros para o usuário
561 */
562function list_filters(html){
563        outOfficeVerify();
564        for (var index in selectedMessages) {
565                delete selectedMessages[index];
566        }
567        if(html){
568                if( ! $(".filters-windows").length )
569                        container = $('.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html( html ).find(".expresso-window-container");
570                list_container = $('.expressomail-module-container').find(".rule-list-container");
571        }
572        list_container = $(".expresso-window-filters").dialog({
573                title: get_lang('Filters'),
574            width:700,
575            modal: true,
576                resizable: false,
577            closeOnEscape:true,
578            close:function(event, ui) {
579                    event.stopPropagation();
580                        if(list_container.find(".cancel").length)
581                                list_container.find(".cancel").trigger('click');
582                        $(".dialog-head-buttonpane").hide();
583            },
584                open: function () {
585                        $(".ui-dialog .ui-dialog-titlebar")
586                        .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>')
587                        .find('.ui-dialog-titlebar-minimize').click(function() {
588                                $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();
589                                $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');
590                        });
591                        $(".dialog-head-buttonpane").show();
592                },
593            autoOpen: false,
594                buttons: [{
595                        text : get_lang("Close"),
596                        click : function() {
597                                $( this ).dialog( "close" );
598                        }
599                }]
600    });
601        $(".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>");
602        $(".dialog-head-buttonpane").css("padding", "5px").
603        find(".header-buttonpane").html("<a href='#' class='button add' title='"+get_lang("Add new rule")+"'>"+get_lang("New rule")+"</a>"+(!outoffice ? "<a href='#' class='button add vacation' title='"+get_lang("Add rule out of office")+"'>"+get_lang("Out of office")+"</a>" : "")).find(".button").button();
604
605        $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE");
606        var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true));
607        list_container.html(list).find(".button").button();
608
609        list_container.find(".rule-list").selectable({
610                selecting: function(event, ui) {
611                        $(ui.selecting).find(':checkbox').attr('checked', true);
612                },
613                unselecting: function(event, ui) {
614                        $(ui.unselecting).find(':checkbox').attr('checked', false);
615                }
616        });
617
618        list_container.find( ".menu-control .button" ).filter(".update").button({
619                icons: {
620                        primary: "ui-icon-pencil"
621                },
622                text: false
623        }).click(function(){
624                var id = $(this).parents("li.rule").find('.id').val();
625                var filters = DataLayer.get( 'filter', true);
626                for(var i =0; i < filters.length; i++){
627                        if(filters[i].id == id){
628                                filters = filters[i];
629                                break;
630                        }
631                }
632                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){
633                        var details_container = $(".expresso-window-filters").html(html);
634                        if(filters.name != "vacation"){
635                                form = container.find("form");
636                                criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' );
637                                actions = details_container.find( 'fieldset input[name="actionType[]"]' );
638                                nameObj = details_container.find( 'input[name="name"]' );
639                                isExact = details_container.find( 'input[name="isExact"]' );
640                                showDetails(filters);
641                                var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
642                                list_container.find(".button").button().filter(".forth").click(function(){
643                                        accord.accordion('activate',1);
644                                }).end().filter(".forth2").click(function(){
645                                        accord.accordion('activate',2);
646                                }).end().filter(".back").click(function(){
647                                        accord.accordion('activate',0);
648                                }).end().filter(".back2").click(function(){
649                                        accord.accordion('activate',1);
650                                }).end().filter(".cancel").click(function(){
651                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
652                                }).end().filter(".submit").click(function(){
653                                        if(nameObj)
654                                                nameObj.attr("disabled", "false");
655                                        if(valid_save())
656                                                $(this).submit();
657                                        else
658                                                return;
659                                        DataLayer.commit( 'filter', false,function(data){
660                                                if(filters['alertMessage'] == "true"){
661                                                        if(filters['alertMessage'] != $('.alertMessage').is(':checked').toString()){
662                                                                /**RETIRA FLAG*/
663                                                                removeMessagesFlag(filters['id']);
664                                                        }
665                                                }
666                                                if($('#gbox_fields-search-messages-grid').length > 0 && action != '') {
667                                                        for (var index in selectedMessages) {
668                                                                set_message_flag(index, action, false);
669                                                        }
670                                                }
671                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
672                                                getFromAlertRules();
673                                        });
674                                }).end().filter('.button.search').click(function() {
675                                        /* Valida se o usuário preencheu as informações */
676                                        if(valid_save())
677                                                showGridMessages($(this));
678                                        else
679                                                return;
680                                })
681                        }else{
682                                list_container.find(".vacation-details-container").removeClass("hidden");
683                                list_container.find(".rule-details-container").addClass("hidden");
684                                list_container.find(".button").button().filter(".back").click(function(){
685                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
686                                }).end().filter(".submit").click(function(){
687                                        $(this).submit();
688                                        DataLayer.commit( 'filter', false,function(){
689                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
690                                                getFromAlertRules();
691                                        });
692                                });
693                                details_container.find('[name="vacation"]').val(filters.actions[0].parameter);
694                        }
695                });
696        }).end()
697        .filter(".enable").button({
698                icons: {
699                        primary: "ui-icon-circle-close"
700                },
701                text: false
702        }).click(function(){
703                var id = $(this).parents("li.rule").find('.id').val();
704                DataLayer.put( 'filter', id, { enabled: false  });
705                /**RETIRA FLAG*/
706                removeMessagesFlag(id);
707                DataLayer.commit("filter", false,function(){
708                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
709                        getFromAlertRules();
710                });
711        }).end()
712
713        .filter(".disable").button({
714                icons: {
715                        primary: "ui-icon-circle-check"
716                },
717                text: false
718        }).click(function(){
719                var id = $(this).parents("li.rule").find('.id').val();
720                DataLayer.put( 'filter', id, { enabled: true });
721                DataLayer.commit("filter", false,function(){
722                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
723                        getFromAlertRules();
724                });
725        }).end()
726
727        .filter(".close").button({
728                icons: {
729                        primary: "ui-icon-close"
730                },
731                text: false
732        }).click(function(event){
733                var filter_name = $(event.target).parents("li.rule").find('.id').val();
734                var filter_screen_name = $(event.target).parents("li.rule").find('.title').html();
735                $.Zebra_Dialog(get_lang("Are you sure to delete the filter") + ": <strong>"+filter_screen_name+"</strong>",{
736                        'type':     'question',
737                        'title':    get_lang("Exclusion Confirmation"),
738                        'buttons':  [get_lang('Yes'), get_lang('No')],
739                        'onClose':  function(caption) {
740                                if(caption == get_lang('Yes')){
741                                /** TODO - Mudar quando API abstrair atualizações no cache */
742                                        DataLayer.remove('filter', false);
743                                        DataLayer.get('filter');
744                                        /**RETIRA FLAG*/
745                                        removeMessagesFlag(filter_name);
746                                        DataLayer.remove( 'filter', filter_name);
747
748                                        DataLayer.commit("filter", false,function(){
749                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
750                                                getFromAlertRules();
751                                        });
752                                }else{
753                                        $(event.target).removeClass("ui-selected").parent().removeClass("ui-selected");
754                                }
755                        }
756                });
757        }).end().removeClass("ui-button-icon-only");
758
759        $(".button.allenable").click(function(){
760                container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){
761                        DataLayer.put( 'filter', urlencode(o.innerHTML), { enabled: true  });
762                });
763                DataLayer.commit("filter", false, function(){
764                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
765                        getFromAlertRules();
766                });
767        });
768
769        $(".button.alldisable").click(function(){
770                container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){
771                        DataLayer.put( 'filter', urlencode(o.innerHTML), { enabled: false  });
772                        /**RETIRA FLAG*/
773                        removeMessagesFlag(o.innerHTML);
774                });
775                DataLayer.commit("filter", false, function(){
776                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
777                        getFromAlertRules();
778                });
779        });
780
781        $(".button.alldelete").click(function(){
782                $.Zebra_Dialog(get_lang("Are you sure to delete the filters?"),{
783                        'type':     'question',
784                        'title':    get_lang("Exclusion Confirmation"),
785                        'buttons':  [get_lang('Yes'), get_lang('No')],
786                        'onClose':  function(caption) {
787                                if(caption == get_lang('Yes')){
788                                /** TODO - Mudar quando API abstrair atualizações no cache */
789                                        DataLayer.remove('filter', false);
790                                        DataLayer.get('filter');
791                                        container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){
792                                                /**RETIRA FLAG*/
793                                                removeMessagesFlag(urlencode(o.innerHTML));     
794                                                filter_Name = urlencode(o.innerHTML.replace(".", "_"));
795                                                DataLayer.remove( 'filter', (filter_Name) );
796                                        });
797                                        DataLayer.commit("filter", false,function(){
798                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
799                                                getFromAlertRules();
800                                        });
801                                }else{
802                                        return true;
803                                }
804                        }
805                });
806        });
807
808        var aa = 0;
809
810        list_container.parent().find(".button.add:first").click(function(){
811                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");
812                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){
813                        list_container.html(html);
814                        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
815                        list_container.find(".button").button().filter(".forth").click(function(){
816                                accord.accordion('activate',1);
817                        }).end().filter(".forth2").click(function(){
818                                accord.accordion('activate',2);
819                        }).end().filter(".back").click(function(){
820                                accord.accordion('activate',0);
821                        }).end().filter(".back2").click(function(){
822                                accord.accordion('activate',1);
823                        }).end().filter(".cancel").click(function(){
824                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
825                        }).end().filter(".submit").click(function() {
826                                if(valid_save())
827                                        $(this).submit();
828                                else
829                                        return;
830                                DataLayer.commit( 'filter',false,function(){
831                                        if($('#gbox_fields-search-messages-grid').length > 0 && action != '') {
832                                                for (var index in selectedMessages) {
833                                                        set_message_flag(index, action, false);
834                                                }
835                                        }
836                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
837                                        getFromAlertRules();
838                                });
839                        }).end().filter('.button.search').click(function() {
840                                if(valid_save())
841                                        showGridMessages($(this));
842                                else
843                                        return;
844                        }); // end function click
845                });     // end DataLayer.render
846        });
847        list_container.parent().find(".button.add.vacation").click(function(){
848
849                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");
850                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){
851                        list_container.html(html);
852                        list_container.find(".vacation-details-container").removeClass("hidden");
853                        list_container.find(".rule-details-container").addClass("hidden");
854                        list_container.find(".button").button().filter(".back").click(function(){
855                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
856                        }).end().filter(".submit").click(function(){
857                                if(list_container.find(".vacation-details-container .filter-textarea").val().length <= 0){
858                                                $.Zebra_Dialog(get_lang('Write a message'));
859                                                list_container.find(".vacation-details-container .filter-textarea").focus();
860                                }else{
861                                        $(this).submit();
862                                        DataLayer.commit( 'filter',false,function(){
863                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
864                                                getFromAlertRules();
865                                        });
866                                }
867                        });
868                });
869        });
870}
871
872
873/* Inicializa os filtros e chama o list_filters
874 * Inicia a funcionalidade de filtros de mensagens
875 */
876function  init_filters(){
877        var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {});
878        list_filters(html);
879}
880
881/*
882 * Ao excluir filtro, desabilitar filtro ou retirar a ação Alerta de um filtro
883 * esta função é chamada para retirar as flags que caracterizam uma mensagem como alertada pelos Filtros por Remetente
884 */
885function removeMessagesFlag(id){
886        var filters_c = DataLayer.get('filter', urlencode(id));
887        var folder = '';
888        var from = ''; 
889        if(filters_c['actions'])
890        for(var i=0; i < filters_c['actions'].length; i++){
891                if(filters_c['actions'][i].type == 'fileinto'){
892                        folder = filters_c['actions'][i].parameter;
893                }
894        }
895        $.each(fromRules, function(index, value) {
896                if(value == folder){
897                        for(var i=0; i < filters_c['criteria'].length; i++){
898                                if(filters_c['criteria'][i].field == 'from'){
899                                        from = filters_c['criteria'][i].value;
900                                }
901                        }
902                        cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){});
903                        return false;
904                }
905        });
906}
Note: See TracBrowser for help on using the repository browser.