source: sandbox/expressoServiceImap/prototype/modules/filters/filters.js @ 6486

Revision 6486, 26.9 KB checked in by natan, 12 years ago (diff)

Ticket #2845 - Atualizacao da API na busca de mensagens - Migracao do anexar mensagens para API atual

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