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

Revision 5950, 32.7 KB checked in by airton, 12 years ago (diff)

Ticket #2627 - Mensagem de regra de escritorio ativa desaparecia quando o modulo era reiniciado

Line 
1       
2function outOfficeVerify() {   
3        DataLayer.remove('filter', false);
4        var filters = DataLayer.get("filter");
5        var outoffice_active = false;
6        var outoffice = false;
7        for(var index in filters){
8                DataLayer.put( 'filter', filters[index].id, { enabled: (filters[index].enabled == "true" ? true: false)});
9                if(filters[index].id == "vacation")
10                        outoffice = true;
11                if(filters[index].id == "vacation" && filters[index].enabled == "true"){
12                        write_msg(get_lang("Attention, you are in out of office mode."), true);
13                        outoffice_active = true;
14                        break;
15                }
16        }
17}
18
19valid_save = function(){
20        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
21        if(list_container.find('[name="name"]').attr("disabled") != "disabled")
22        {
23                if($.trim(list_container.find('[name="name"]').val()) == ""){
24                        $.Zebra_Dialog(get_lang("No name filled"),{
25                                'onClose':  function(caption) {
26                                        list_container.find('[name="name"]').focus();
27                                }
28                        });
29                        accord.accordion('activate',0);
30                        return false;
31                }else if($.trim(list_container.find('[name="name"]').val()) == "vacation"){
32                        $.Zebra_Dialog(get_lang("Invalid name, 'vacation' is a reserved word"),{
33                                'onClose':  function(caption) {
34                                        list_container.find('[name="name"]').val("").focus();
35                                }
36                        });
37                        accord.accordion('activate',0);
38                        return false;
39                }else{
40                        filter_list = DataLayer.get("filter", true);
41                        var error = false;
42                        $.each(filter_list, function(index, value){
43                                if(filter_list[index].name == list_container.find('[name="name"]').val()){
44                                        $.Zebra_Dialog(get_lang("There is already a filter with this name"),{
45                                                'onClose':  function(caption) {
46                                                        list_container.find('[name="name"]').val("").focus();
47                                                }
48                                        });
49                                        accord.accordion('activate',0);
50                                        error = true;
51                                        return;
52                                }       
53                        });
54                        if(error){
55                                return false;
56                        }
57                }
58        }
59        var criteria = "";
60        var criteria_list = list_container.find('[name="criteriaValue[]"]');
61        $.each(criteria_list, function(index, value){
62                criteria += $.trim($(criteria_list[index]).val());
63        });
64        if(criteria == ""){
65                $.Zebra_Dialog(get_lang("No criteria filled"),{
66                        'onClose':  function(caption) {
67                                list_container.find('[name="criteriaValue[]"]:first').focus();
68                        }
69                });
70                accord.accordion('activate',0);
71                return false;
72        }
73        if(list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").length){
74                if($.trim(list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").val()) == ""){
75                        $.Zebra_Dialog(get_lang("Fill the action value"),{
76                                'onClose':  function(caption) {
77                                        list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").focus();
78                                }
79                        });
80                        return false;
81                }
82        }
83        return true;
84};
85
86bytes2Size = function(bytes) {
87        var sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
88        if (bytes === 0) return 'n/a';
89        var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
90        var size = (i<2) ? Math.round((bytes / Math.pow(1024, i))) : Math.round((bytes / Math.pow(1024, i)) * 100)/100;
91        return  size + ' ' + sizes[i];
92};
93
94flags2Class = function(cellvalue) {
95        var flags_enum = cellvalue.split(',');
96        var classes = '';
97        for (var i=0; i<flags_enum.length; i++){
98                classes += '<span class="icon-'+flags_enum[i].toLowerCase()+'"> </span>';
99        }
100        return classes;
101};
102
103date2Time = function (timestamp) {
104        var date = new Date();
105        if ((date.getTime() - timestamp) < (24*60*60*1000)) {
106                return '<span class="timable" title="'+timestamp+'"> </span>';
107        } else {
108                date = new Date(timestamp);
109                var b = date.toISOString().split("T")[0].split("-");
110                var c = b[2] + "/" + b[1] + "/" + b[0];
111                return '<span class="datable">' + c + '</span>';
112        }
113};
114
115keys = function( object ){
116 
117  var array = [];
118 
119  for( var key in object )
120       array[ array.length ] = key;
121 
122  return( array );
123
124}
125
126showDetails = function( filter ){
127 
128    form.get(0).reset();
129
130    nameObj.val( filter.name );
131        nameObj.attr("disabled", "disabled");
132    for( var i = 0; i < filter.criteria.length; i++ ){
133
134                criterias.filter( '[value="' + filter.criteria[i].field + '"]' )
135                .siblings( '[name="criteriaOperator[]"]' ).val( filter.criteria[i].operator ).end()
136                .siblings( '[name="criteriaValue[]"]' ).val( filter.criteria[i].value );
137
138    }
139
140       
141    for( var i = 0; i < filter.actions.length; i++ ){
142                actions.filter( '[value="' + filter.actions[i].type + '"]' ).attr("checked", "True");
143                actions.filter( '[value="' + filter.actions[i].type + '"]' ).val( filter.actions[i].type )
144                .siblings( '[name="actionParameter[]"]' ).val( filter.actions[i].parameter );
145                if(filter.actions[i].type == "redirect")
146                        actions.siblings('[name="addressRedirect"]').val(filter.actions[i].parameter);
147                if(filter.actions[i].type == "reject") 
148                        actions.siblings('[name="messageReject"]').val(filter.actions[i].parameter);
149                if(filter.actions[i].type == "fileinto" || filter.actions[i].type == "setflag")
150                        actions.parent().find('[value="'+filter.actions[i].parameter+'"]').attr("selected", "selected");
151    }
152 
153    //isExact.val( filter.isExact != "false"? "and" : "or" );
154        isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True");
155}
156
157/* --- ------ --- */
158
159DataLayer.codec( "filter", "detail", {
160 
161  decoder: function( form ){
162      if( form.vacation )
163          return {
164
165                criteria: [{ value: "vacation", operator: "", field: "vacation" }],
166                actions: [{ parameter: form.vacation, type: "vacation" }],
167                id: "vacation",
168                name: "vacation",
169                isExact: false,
170                applyMessages : "",
171                enabled : true
172      }
173
174          var apply_messages_ = keys(selectedMessages);
175          delete selectedMessages;
176
177      return {
178                //id: form.name,
179                name: form.name ? form.name : nameObj.val(),
180                isExact: ( form.isExact === "and" ),
181                criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 
182                        return (!form.criteriaValue[i]) ? null:
183                                {value:  form.criteriaValue[i],
184                                  operator: criteriaOperator,
185                                  field:  form.criteriaType[i]};
186
187                }),
188                actions: $.map( form.actionType || [], function( type, i ){
189                        var the_parameter = form.actionParameter[i];
190                       
191                        !the_parameter ? the_parameter = form.actionParameter[i+1] : "";
192                        if (type == 'fileinto') {
193                                the_parameter = form.valueFileInto;
194                        }
195                        if (type == 'reject') {
196                                the_parameter = form.messageReject;
197                        }
198                        if (type == 'fileintoInbox') {
199                                if(!$('[value="fileintoInbox"]').parent().hasClass("hidden")){
200                                        type = 'fileinto';
201                                        the_parameter = 'INBOX';
202                                }else{
203                                        return;
204                                }
205                        }
206                        if (type == 'fileintoTrash') {
207                                type = 'fileinto';
208                                the_parameter = 'INBOX/Trash';
209                        }
210                        if (type == 'redirect') {
211                                the_parameter = form.addressRedirect;
212                        }
213                        if (type == 'setflag') {
214                                the_parameter = form.valueSetFlag;
215                        }
216                       
217                        return (!type) ? null:
218                              {parameter: the_parameter, type: type };
219
220                }),
221                enabled : true,
222                //applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ?
223                //keys( selectedMessages ) : allMessages : ""
224                applyMessages: apply_messages_
225                //applyMessages: ""
226      };
227  },
228 
229  encoder: function( filters ){
230        var rules = [];
231
232        for( var id in filters )
233              rules[ rules.length ] = filters[id];
234
235        return { rules: rules };
236
237  }
238 
239});
240
241DataLayer.codec( "folder", "select", {
242 
243  decoder:function(){
244
245     
246   
247  },
248  encoder:function( data ){
249 
250      var tree1 = [], tree2 = [], tree3 = [];
251
252      for (var i=0; i<data.length; i++) {
253
254              if (/^INBOX/.test(data[i].id)) {
255                      if (!unorphanize(tree1, data[i])) {
256                              data[i].children = [];
257                              tree1.push(data[i]);
258                      }
259              }
260              else if (/^user/.test(data[i].id)) {
261                      if (!unorphanize(tree2, data[i])) {
262                              data[i].children = [];
263                              tree2.push(data[i]);
264                      }
265              }
266              else if (/^local_messages/.test(data[i].id)) {
267                      if (!unorphanize(tree3, data[i])) {
268                              data[i].children = [];
269                              tree3.push(data[i]);
270                      }
271              }
272
273      }
274     
275      return {folders: [ tree1, tree2, tree3 ]};
276
277  }
278
279});
280
281
282
283
284var BASE_PATH = '../prototype/';
285
286DataLayer.basePath = BASE_PATH + "REST.php?q=";
287DataLayer.dispatchPath = BASE_PATH;
288
289var selectedMessages = {};
290var allMessages = false;
291//list_container = container.find(".rule-list-container");
292/*
293var raster = function( html ){
294    container = $('body.expressomail-module-container').append( html ).find(".expresso-window-container");
295        list_container = container.find(".rule-list-container");
296        details_container = container.find(".rule-details-container");
297        vacation_container = container.find(".vacation-details-container");
298        form = container.find("form");
299    criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' );
300        actions = details_container.find( 'fieldset input[name="actionType[]"]' );
301        nameObj = details_container.find( 'input[name="name"]' );
302        isExact = details_container.find( 'input[name="isExact"]' );
303    formatter();
304    container = container.dialog({
305            width:700,
306            modal: true,
307            closeOnEscape:true,
308            close:function(event, ui) {
309                    event.stopPropagation();
310                    list_container.removeClass('hidden');
311                    details_container.addClass('hidden');
312                    vacation_container.addClass('hidden');
313            },
314                open: function () {
315                        $(".ui-dialog .ui-dialog-titlebar")
316                        .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>')
317                        .find('.ui-dialog-titlebar-minimize').click(function() {
318                                $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();
319                                $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');
320                        });
321                },
322            autoOpen: false
323    });
324    details_container.accordion({autoHeight: false});
325   
326    DataLayer.render( BASE_PATH + 'api/templates/folderselect.ejs', 'folder:select', function( html ){
327          details_container.find(".select-folderlist").append( html );
328    });
329
330
331    container.find(".button").button()
332   
333    .filter(".menu-filters > .button")
334
335    .click(function(){
336
337        container.dialog( 'close' );
338
339    })
340   
341    .filter(".cancel")
342   
343    .click(function(){
344
345        DataLayer.rollback( 'filter' );
346        return( false );
347
348    })
349   
350    .end().filter(".submit")
351   
352    .click(function(){
353
354        DataLayer.commit( 'filter' );
355        return( false );
356
357    });
358
359    details_container.find( ".menu-container" )
360
361        .find(".button.cancel").click(function(event){
362
363                details_container.accordion('activate',0);
364
365                showGridButton.removeClass('hidden');
366                grid.addClass('hidden').jqGrid('GridDestroy');
367         
368                list_container.removeClass('hidden');
369                details_container.addClass('hidden');
370
371                return( false );
372
373        }).end()
374        .find(".button.submit").click(function(event){
375
376                $(this).submit();
377
378                details_container.accordion('activate',0);
379
380                showGridButton.removeClass('hidden');
381                grid.addClass('hidden').jqGrid('GridDestroy');
382
383                list_container.removeClass('hidden');
384                details_container.addClass('hidden');
385
386                return( false );
387
388        }).end()
389        .find(".button.back").click(function(event){
390
391                details_container.accordion('activate',0);
392
393                return( false );
394
395        }).end()
396        .find(".button.forth").click(function(event){
397
398                details_container.accordion('activate',1);
399
400                return( false );
401
402        }).end()
403
404    //$( ".expresso-window-container .rule-details-container" ).accordion();
405    // var removeURL = new RegExp("^*.#");
406
407    // ------------------------------------------------------------
408    // ------------------------------------------------------------
409
410    //jqgrid
411    .end().find(".fields-search-messages .button.search")
412
413    .click(function(){
414
415                  var rule = DataLayer.form( form );
416                 
417                  showGridButton = $(this).parent();
418
419                  var connect = rule.isExact ? "AND" : "OR";
420
421                  var filter = $.map( rule.criteria, function( criteria, i ){
422
423                          if( i === 0 )
424                              return {"0": criteria.field, "1": criteria.operator, "2": criteria.value};
425                          else
426                              return {"0": connect,  "1": criteria.field, "2": criteria.operator, "3": criteria.value};
427                  });
428
429                  $.ajax( { 
430                            url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": filter} ),
431
432                            dataType: 'json',
433
434                            success: function(data){
435                             
436                                  allMessages = data;
437
438                                  grid = showGridButton.addClass('hidden')
439                                  .siblings(".fields-search-messages-grid, .fields-search-messages-grid-pager")
440                                  .removeClass('hidden').filter(".fields-search-messages-grid").jqGrid({
441
442                                          url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": [ "msgNumber", "IN", data ]} ),
443                                          datatype: "json",
444                                          mtype: 'GET',
445                                          colNames:['#', ' ', 'De', 'Assunto', 'Data', 'Tamanho'],
446                                          colModel:[
447                                                  {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false},
448                                                  {name:'flags',index:'msg_number', width:40, sortable:false, formatter:flags2Class},
449                                                  {name:'from.name',index:'msg_number', width:130, sortable:false},
450                                                  {name:'subject',index:'subject', width:250, sortable:false},
451                                                  {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time},
452                                                  {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size}
453                                          ],
454                                          jsonReader : {
455                                                    root:"rows",
456                                                    page: "page",
457                                                    total: "total",
458                                                    records: "records",
459                                                    repeatitems: false,
460                                                    id: "0"
461                                          },
462                                          rowNum:10,
463                                          rowList:[10,25,50],
464                                          pager: '#fields-search-messages-grid-pager',
465                                          sortname: 'id',
466                                          viewrecords: true,
467                                          sortorder: "desc",
468                                          multiselect: true,
469                                          autowidth: true,
470                                          height:40,
471                                          loadComplete: function(data) {
472                      //                                // aplica o contador
473                      //                                jQuery('.timable').each(function (i) {
474                      //                                        jQuery(this).countdown({
475                      //                                                since: new Date(parseInt(this.title)),
476                      //                                                significant: 1,
477                      //                                                layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
478                      //                                                description: ' atr&aacute;s'
479                      //                                        });
480                      //                                });
481                                          },
482                                          onSelectRow: function (id, selected) {
483
484                                              if( selected )
485                                                  selectedMessages[ id ] = true;
486                                              else
487                                                  delete selectedMessages[ id ];
488
489                                          },
490                                          caption: 'Mensagens que atendem aos crit&eacute;rios'
491                                  });
492                            }
493                  } );
494
495                 
496    });
497
498    vacation_container.find( ".menu-container" )
499        .find(".button.back").click(function(event){
500
501                list_container.removeClass('hidden');
502                vacation_container.addClass('hidden');
503
504                return( false );
505
506        }).end()
507        .find(".button.submit").click(function(event){
508
509                $(this).submit();
510         
511                list_container.removeClass('hidden');
512                vacation_container.addClass('hidden');
513                return( false );
514        });
515
516}
517
518var reraster = function( html ){
519
520        //$(".rule-list-container").next().addClass("hidden");
521       
522        list_container.find( '.ui-widget' ).remove();
523
524        list_container.html( html ).find(".button").button();
525 
526        formatter();
527}
528
529var formatter = function(){
530
531    checkBoxes = container.find(".rule-list").selectable({
532                selecting: function(event, ui) {
533                        $(ui.selecting).find(':checkbox').attr('checked', true);
534                },
535                unselecting: function(event, ui) {
536                        $(ui.unselecting).find(':checkbox').attr('checked', false);
537                }
538    })
539    .find(':checkbox').change(function () {
540
541//      if ($(this).attr("checked"))
542//          $(this).parents('.rule').addClass('ui-selected');
543//      else
544            $(this).parents('.rule').toggleClass('ui-selected');
545
546    });
547
548    list_container.children()
549
550    .filter( ".fields-add" )
551
552        .find(".button.add").click(function(){
553
554                list_container.addClass('hidden');
555                details_container.removeClass('hidden');
556                form.get(0).reset();
557
558                return( false );
559        })
560        .filter(".vacation").click(function(){
561
562                details_container.addClass('hidden');
563                vacation_container.removeClass('hidden');
564                form.get(0).reset();
565
566                return( false );
567
568        }).end().end()
569
570    .end().filter( ".fields-selected-itens" )
571
572    .find(".button.enable").click(function(){
573
574            var values = [];
575     
576            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(){
577
578                values[ values.length ] = { id: this.innerHTML, enabled: true };
579
580            });
581
582            DataLayer.put( 'filter', values );
583
584    }).end()
585
586    .find(".button.disable").click(function(){
587     
588            var values = [];
589     
590            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(){
591
592                values[ values.length ] = { id: this.innerHTML, enabled: false };
593
594            });
595
596            DataLayer.put( 'filter', values );
597
598    }).end()
599
600    .find(".button.delete").click(function(){
601     
602            checkBoxes.filter(':checked').parents(".rule-list").find('.title').each(function(i, o){
603
604                 DataLayer.remove( 'filter', o.html() );
605
606            });
607
608    }).end()
609   
610
611    .end().find( ".menu-control .button" ).filter(".update").button({
612                icons: {
613                        primary: "ui-icon-pencil"
614                },
615                text: false
616        }).end()
617
618        .filter(".enable, .disable").click( function(event) {
619
620                var id = $(this).parents("li.rule").find('.title').html();
621
622                DataLayer.put( 'filter', id, { enabled: !$(this).is('.enable') } );
623        })
624
625        .filter(".enable").button({
626                icons: {
627                        primary: "ui-icon-circle-check"
628                },
629                text: false
630        }).end()
631
632        .filter(".disable").button({
633                icons: {
634                        primary: "ui-icon-circle-close"
635                },
636                text: false
637        }).end().end()
638       
639        .filter(".close").button({
640                icons: {
641                        primary: "ui-icon-close"
642                },
643                text: false
644        }).click( function(event) {
645                $(event.target)
646                .parents("li.rule").find('.title')
647                .each( function(){
648
649                    DataLayer.remove( 'filter', $(this).html() );
650
651                }).end().remove();
652        }).end()
653       
654        .filter(".update").click(function(event){
655
656                var id = ( event.target.href || event.target.parentNode.href ).replace( new RegExp("^.*#"), "" );
657
658                var data = DataLayer.get( 'filter', id );
659
660                if( id === "vacation" )
661                {
662                    $('[name="vacation"]').val( data.actions[0].parameter );
663
664                    list_container.addClass('hidden');
665                    vacation_container.removeClass('hidden');
666                    return;
667                }
668
669                showDetails( data );
670
671                list_container.addClass('hidden');
672                details_container.removeClass('hidden');
673        }).end()
674       
675        .removeClass('ui-button-icon-only');
676};
677// ------------------------------------------------------------
678// ------------------------------------------------------------   
679*/
680
681function block_user_email(email) {
682        //var id = "block_"+email;
683        var idd = email;
684        /** TODO - Mudar quando API abstrair atualizações no cache */
685        DataLayer.remove('filter', false);
686        var filters = DataLayer.get('filter');
687        //var filters = DataLayer.get("filter", true);
688        for(var index in filters){
689                if(filters[index].name == email) {
690                        if(confirm(get_lang("This user is already blocked. Would you like to unlock it?"))) {
691                                DataLayer.remove( 'filter', filters[index].id );
692                                DataLayer.commit("filter", false, function(){
693                                        $.Zebra_Dialog(get_lang("Lock User") + " " + email + " " + get_lang("removed"));
694                                        list_filters();
695                                });
696                                return true;
697                        }else
698                                return true;
699                }
700        }
701        if(confirm(get_lang("Want to block the user") + " " + email + "?")){
702                DataLayer.put( 'filter', idd,
703                                        { name: email, isExact: false,
704                                                criteria:{ 0: {value: email, operator: "=", field: "from"} },
705                                                actions: { 0: {parameter: "INBOX/Spam", type: "fileinto"}},
706                                                enabled: true,
707                                                id: email,
708                                                block: true
709                                        });
710                DataLayer.commit("filter", false, function(){
711                        $.Zebra_Dialog(get_lang("User") + " " + email + " " + get_lang("blocked"));
712                        list_filters();
713                });
714               
715        }
716}
717
718function list_filters(html){
719        /** TODO - Mudar quando API abstrair atualizações no cache */
720        DataLayer.remove('filter', false);
721        var filters = DataLayer.get("filter");
722        var outoffice_active = false;
723        var outoffice = false;
724        for(var index in filters){
725                DataLayer.put( 'filter', filters[index].id, { enabled: (filters[index].enabled == "true" ? true: false)});
726                if(filters[index].id == "vacation")
727                        outoffice = true;
728                if(filters[index].id == "vacation" && filters[index].enabled == "true"){
729                        write_msg(get_lang("Attention, you are in out of office mode."), true);
730                        outoffice_active = true;
731                        break;
732                }
733        }
734        DataLayer.commit( 'filter' );
735        if(!outoffice_active){
736                clean_msg();
737        }
738        if(html){
739                if( ! $(".filters-windows").length )
740                        container = $('.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html( html ).find(".expresso-window-container");
741                list_container = $('.expressomail-module-container').find(".rule-list-container");
742        }
743        list_container = $(".expresso-window-filters").dialog({
744            width:700,
745            modal: true,
746                resizable: false,
747            closeOnEscape:true,
748            close:function(event, ui) {
749                    event.stopPropagation();
750                        if(list_container.find(".cancel").length)
751                                list_container.find(".cancel").trigger('click');       
752                        $(".dialog-head-buttonpane").hide();
753            },
754                open: function () {
755                        $(".ui-dialog .ui-dialog-titlebar")
756                        .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>')
757                        .find('.ui-dialog-titlebar-minimize').click(function() {
758                                $(".ui-dialog-buttonpane, .ui-dialog-content").toggle();
759                                $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin');
760                        });
761                        $(".dialog-head-buttonpane").show();
762                },
763            autoOpen: false,
764                buttons: [{
765                        text : get_lang("Close"),
766                        click : function() {
767                                $( this ).dialog( "close" );
768                        }
769                }]
770    });
771        $(".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>");
772        $(".dialog-head-buttonpane").css("padding", "5px").
773        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();
774       
775        $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE");
776        var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true));
777        list_container.html(list).find(".button").button();
778       
779        list_container.find(".rule-list").selectable({
780                selecting: function(event, ui) {
781                        $(ui.selecting).find(':checkbox').attr('checked', true);
782                },
783                unselecting: function(event, ui) {
784                        $(ui.unselecting).find(':checkbox').attr('checked', false);
785                }
786        });
787       
788        list_container.find( ".menu-control .button" ).filter(".update").button({
789                icons: {
790                        primary: "ui-icon-pencil"
791                },
792                text: false
793        }).click(function(){
794                var id = $(this).parents("li.rule").find('.id').val();
795                var filters = DataLayer.get( 'filter', true);
796                for(var i =0; i < filters.length; i++){
797                        if(filters[i].id == id){
798                                filters = filters[i];
799                                break;
800                        }       
801                }
802                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){
803                        var details_container = $(".expresso-window-filters").html(html);
804                        if(filters.name != "vacation"){
805                                form = container.find("form");
806                                criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' );
807                                actions = details_container.find( 'fieldset input[name="actionType[]"]' );
808                                nameObj = details_container.find( 'input[name="name"]' );
809                                isExact = details_container.find( 'input[name="isExact"]' );
810                                showDetails(filters);
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(nameObj)
824                                                nameObj.attr("disabled", "false");
825                                        if(valid_save())
826                                                $(this).submit();
827                                        else
828                                                return;
829                                        DataLayer.commit( 'filter', false,function(){
830                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
831                                        });
832                                });
833                        }else{
834                                list_container.find(".vacation-details-container").removeClass("hidden");
835                                list_container.find(".rule-details-container").addClass("hidden");
836                                list_container.find(".button").button().filter(".back").click(function(){
837                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
838                                }).end().filter(".submit").click(function(){
839                                        $(this).submit();
840                                        DataLayer.commit( 'filter', false,function(){
841                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
842                                        });
843                                });
844                                details_container.find('[name="vacation"]').val(filters.actions[0].parameter);
845                        }
846                });
847        }).end()
848        .filter(".enable").button({
849                icons: {
850                        primary: "ui-icon-circle-close"
851                },
852                text: false
853        }).click(function(){
854                var id = $(this).parents("li.rule").find('.id').val();
855                DataLayer.put( 'filter', id, { enabled: false  });
856                DataLayer.commit("filter", false,function(){
857                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
858                });
859        }).end()
860
861        .filter(".disable").button({
862                icons: {
863                        primary: "ui-icon-circle-check"
864                },
865                text: false
866        }).click(function(){
867                var id = $(this).parents("li.rule").find('.id').val();
868                DataLayer.put( 'filter', id, { enabled: true });
869                DataLayer.commit("filter", false,function(){
870                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
871                });
872        }).end()
873       
874        .filter(".close").button({
875                icons: {
876                        primary: "ui-icon-close"
877                },
878                text: false
879        }).click(function(event){
880                var filter_name = $(event.target).parents("li.rule").find('.id').val();
881                var filter_screen_name = $(event.target).parents("li.rule").find('.title').html();
882                $.Zebra_Dialog(get_lang("Are you sure to delete the filter") + ": <strong>"+filter_screen_name+"</strong>",{
883                        'type':     'question',
884                        'title':    get_lang("Exclusion Confirmation"),
885                        'buttons':  [get_lang('Yes'), get_lang('No')],
886                        'onClose':  function(caption) {
887                                if(caption == get_lang('Yes')){
888                                /** TODO - Mudar quando API abstrair atualizações no cache */
889                                        DataLayer.remove('filter', false);
890                                        DataLayer.get('filter');
891                                        DataLayer.remove( 'filter', filter_name);
892                                        DataLayer.commit("filter", false,function(){
893                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
894                                        });
895                                }else{
896                                        $(event.target).removeClass("ui-selected").parent().removeClass("ui-selected");
897                                }
898                        }
899                });
900        }).end().removeClass("ui-button-icon-only");
901       
902        var aa = 0;
903       
904        list_container.parent().find(".button.add:first").click(function(){
905                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");
906                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){
907                        list_container.html(html);
908                        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
909                        list_container.find(".button").button().filter(".forth").click(function(){
910                                accord.accordion('activate',1);
911                        }).end().filter(".forth2").click(function(){
912                                accord.accordion('activate',2);
913                        }).end().filter(".back").click(function(){
914                                accord.accordion('activate',0);
915                        }).end().filter(".back2").click(function(){
916                                accord.accordion('activate',1);
917                        }).end().filter(".cancel").click(function(){
918                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
919                        }).end().filter(".submit").click(function() {
920                                if(valid_save())
921                                        $(this).submit();
922                                else
923                                        return;
924                                DataLayer.commit( 'filter',false,function(){
925                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
926                                });
927                        }).end().filter('.button.search').click(function() {                           
928                                /* Valida se o usuário preencheu as informações */
929                                if(valid_save())
930                                {       
931                                        var criteria_list = list_container.find('[name="criteriaValue[]"]');
932                                        var criteria_operator_list = list_container.find('[name="criteriaOperator[]"]');
933                                        var criteria_value = "";
934                                        var criteria = "";
935                                        $.each(criteria_list, function(index, value){
936                                                criteria += $.trim($(criteria_list[index]).val()) + ",";
937                                        });
938                                        var criteria_ = criteria.split(",");
939                                        var criteria_operator  = "";
940                                        $.each(criteria_operator_list, function(index, value){
941                                                criteria_operator += $.trim($(criteria_list[index]).val()) != "" ? index + "," : ",";
942                                                criteria_value    += $.trim($(criteria_operator_list[index]).val()) + ",";
943                                        });
944                                        var criteria_operator_  = criteria_operator.split(",");
945                                        var criteria_value_     = criteria_value.split(",");
946                                        var options = ["from", "to", "subject", "body", "size"];
947                                        var criterias_ = new Array();
948                                        var j = 0;             
949                                        for (i in criteria_) {
950                                                if(criteria_[i] != "") {
951                                                        (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]};
952                                                        j++;
953                                                }       
954                                        }
955                                        showGridButton = $(this).parent();
956                                        $.ajax({ 
957                                                url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": criterias_} ),
958                                                dataType: 'json',
959                                                success: function(data){
960                                                        allMessages = data;
961
962                                                        var parametro =  { "filter": ( data != false ? [ "msgNumber", "IN", data ] : criterias_ ) };
963                                                       
964                                                        if (typeof grid !== "undefined") {
965                                                                grid.jqGrid( 'setGridParam', { url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( parametro ) } ).trigger( 'reloadGrid' );
966                                                                return;
967                                                        }
968                                                        grid = showGridButton.siblings(".fields-search-messages-grid, .fields-search-messages-grid-pager")
969                                                        .removeClass('hidden').filter(".fields-search-messages-grid").trigger( 'reloadGrid' ).jqGrid({
970                                                                //url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": [ "msgNumber", "IN", data ]} ),
971                                                                url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( parametro ),
972                                                                datatype: "json",
973                                                                mtype: 'GET',
974                                                                colNames:['#', ' ', 'De', 'Assunto', 'Data', 'Tamanho'],
975                                                                colModel:[
976                                                                        {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false},
977                                                                        {name:'flags',index:'msg_number', width:40, sortable:false, formatter:flags2Class},
978                                                                        {name:'from.name',index:'msg_number', width:130, sortable:false},
979                                                                        {name:'subject',index:'subject', width:250, sortable:false},
980                                                                        {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time},
981                                                                        {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size}
982                                                                ],
983                                                                jsonReader : {
984                                                                        root:"rows",
985                                                                        page: "page",
986                                                                        total: "total",
987                                                                        records: "records",
988                                                                        repeatitems: false,
989                                                                        id: "0"
990                                                                },
991                                                                rowNum:10,
992                                                                //rowList:[10,25,50],
993                                                                rowList:[10],
994                                                                pager: '#fields-search-messages-grid-pager',
995                                                                sortname: 'id',
996                                                                viewrecords: true,
997                                                                sortorder: "desc",
998                                                                multiselect: true,
999                                                                autowidth: true,
1000                                                                reloadAfterEdit: true,
1001                                                                reloadAfterSubmit: true,
1002                                                                height:200,
1003                                                                loadComplete: function(data) {
1004                                                          //                            // aplica o contador
1005                                                          //                            jQuery('.timable').each(function (i) {
1006                                                          //                                    jQuery(this).countdown({
1007                                                          //                                            since: new Date(parseInt(this.title)),
1008                                                          //                                            significant: 1,
1009                                                          //                                            layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',
1010                                                          //                                            description: ' atr&aacute;s'
1011                                                          //                                    });
1012                                                          //                            });
1013                                                                },
1014                                                                onSelectRow: function (id, selected) {
1015                                                                        if( selected )
1016                                                                        {
1017                                                                                selectedMessages[ id ] = true;
1018                                                                        }
1019                                                                        else
1020                                                                        {
1021                                                                                delete selectedMessages[ id ];
1022                                                                        }
1023                                                                },
1024                                                                caption: 'Mensagens que atendem aos crit&eacute;rios'
1025                                                        }); // end jqGrid
1026                                                } // end success
1027                                        }); // end ajax
1028                                }
1029                                else
1030                                {
1031                                        return;
1032                                }
1033                        }); // end function click
1034                });     // end DataLayer.render
1035        });
1036        list_container.parent().find(".button.add.vacation").click(function(){
1037                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden");
1038                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){
1039                        list_container.html(html);
1040                        list_container.find(".vacation-details-container").removeClass("hidden");
1041                        list_container.find(".rule-details-container").addClass("hidden");
1042                        list_container.find(".button").button().filter(".back").click(function(){
1043                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
1044                        }).end().filter(".submit").click(function(){
1045                                $(this).submit();
1046                                DataLayer.commit( 'filter',false,function(){
1047                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
1048                                });
1049                        });
1050                });     
1051        });
1052}
1053function  init_filters(){
1054        var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {});
1055        list_filters(html);
1056}
Note: See TracBrowser for help on using the repository browser.