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

Revision 6320, 26.4 KB checked in by marcieli, 12 years ago (diff)

Ticket #2764 - Validação ao salvar filtro com alerta.

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