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

Revision 6534, 30.5 KB checked in by cristiano, 12 years ago (diff)

Ticket #2865 - Exibição de mensagem ao mover pastas no Expresso Mail

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