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

Revision 7635, 33.2 KB checked in by acoutinho, 12 years ago (diff)

Ticket #3227 - Alertas (amarelos) do Expresso travam operacees do usuario

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