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

Revision 6392, 26.8 KB checked in by airton, 12 years ago (diff)

Ticket #2830 - Inconsistencia ao aplicar filtro nas mensagens da caixa de entrada

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