source: sandbox/2.4.1-1/prototype/modules/filters/filters.js @ 6404

Revision 6404, 28.2 KB checked in by marcieli, 12 years ago (diff)

Ticket #2764 - Validado usuário informar mais critérios e atender a todos.

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