source: branches/2.4/prototype/modules/filters/filters.js @ 7094

Revision 7094, 31.5 KB checked in by eduardow, 12 years ago (diff)

Ticket #3059 - Correção para tela de editar filtros com mais de uma action.

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