keys = function( object ){ var array = []; for( var key in object ) array[ array.length ] = key; return( array ); } /* Verifica se a regra fora de escritório está ativa */ function outOfficeVerify() { DataLayer.remove('filter', false); var filters = DataLayer.get("filter"); var outoffice_active = false; outoffice = false; for(var index in filters){ if(filters[index].id == "vacation") outoffice = true; if(filters[index].id == "vacation" && filters[index].enabled == "true"){ write_msg(get_lang("Attention, you are in out of office mode."), true); outoffice_active = true; break; } } if(!outoffice_active) clean_msg(); } /* Valida as informações do formulário de filtro de mensagens */ valid_save = function(){ var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); if(list_container.find('[name="name"]').attr("disabled") != "disabled") { if($.trim(list_container.find('[name="name"]').val()) == ""){ $.Zebra_Dialog(get_lang("No name filled"),{ 'onClose': function(caption) { list_container.find('[name="name"]').focus(); } }); accord.accordion('activate',0); return false; }else if($.trim(list_container.find('[name="name"]').val()) == "vacation"){ $.Zebra_Dialog(get_lang("Invalid name, 'vacation' is a reserved word"),{ 'onClose': function(caption) { list_container.find('[name="name"]').val("").focus(); } }); accord.accordion('activate',0); return false; }else{ filter_list = DataLayer.get("filter", true); var error = false; $.each(filter_list, function(index, value){ if(filter_list[index].name == list_container.find('[name="name"]').val()){ $.Zebra_Dialog(get_lang("There is already a filter with this name"),{ 'onClose': function(caption) { list_container.find('[name="name"]').val("").focus(); } }); accord.accordion('activate',0); error = true; return; } }); if(error){ return false; } } } var criteria = ""; var criteria_list = list_container.find('[name="criteriaValue[]"]'); var er_num = /^[0-9]+$/; if($(".sizeRule").val() != "" && er_num.test($(".sizeRule").val()) == false) { $.Zebra_Dialog(get_lang("Size rule must be a number"),{ 'onClose': function(caption) { list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").focus(); } }); accord.accordion('activate',0); return false; } $.each(criteria_list, function(index, value){ criteria += $.trim($(criteria_list[index]).val()); }); if(criteria == ""){ $.Zebra_Dialog(get_lang("No criteria filled"),{ 'onClose': function(caption) { list_container.find('[name="criteriaValue[]"]:first').focus(); } }); accord.accordion('activate',0); return false; } if(list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").length){ if($.trim(list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").val()) == ""){ $.Zebra_Dialog(get_lang("Fill the action value"),{ 'onClose': function(caption) { list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").focus(); } }); return false; } var er_mail = RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/); 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'){ $.Zebra_Dialog(get_lang("Invalid mail"),{ 'onClose': function(caption) { list_container.find('[name="actionType[]"]:checked').parent().find("input:text, textarea").focus(); } }); return false; } } return true; }; function urlencode (str) { str = (str + '').toString(); return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28'). replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+'); } // bytes2Size = function(bytes) { // var sizes = ['B', 'KB', 'MB', 'GB', 'TB']; // if (bytes === 0) return 'n/a'; // var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); // var size = (i<2) ? Math.round((bytes / Math.pow(1024, i))) : Math.round((bytes / Math.pow(1024, i)) * 100)/100; // return size + ' ' + sizes[i]; // }; // flags2Class2 = function(cellvalue) { // var flags_enum = cellvalue.split(','); // var classes = ''; // for (var i=0; i '; // } // return classes; // }; // date2Time = function (timestamp) { // var date = new Date(); // if( typeof timestamp === "string" ) // timestamp = parseInt( timestamp, 10 ); // if ((date.getTime() - timestamp) < (24*60*60*1000)) { // return ' '; // } else { // date = new Date(timestamp); // var b = date.toISOString().split("T")[0].split("-"); // var c = b[2] + "/" + b[1] + "/" + b[0]; // return '' + c + ''; // } // }; /* Mostra os detalhes do filtro para edição */ showDetails = function( filter ){ form.get(0).reset(); nameObj.val( filter.name ); nameObj.attr("disabled", "disabled"); for( var i = 0; i < filter.criteria.length; i++ ){ if(filter.criteria[i].field == 'hasAttachment') { $(".hasAttachment").attr("checked", "True"); continue; } criterias.filter( '[value="' + filter.criteria[i].field + '"]' ) .siblings( '[name="criteriaOperator[]"]' ).val( filter.criteria[i].operator ).end() .siblings( '[name="criteriaValue[]"]' ).val( filter.criteria[i].value ); } for( var i = 0; i < filter.actions.length; i++ ){ actions.filter( '[value="' + filter.actions[i].type + '"]' ).attr("checked", "True"); actions.filter( '[value="' + filter.actions[i].type + '"]' ).val( filter.actions[i].type ) .siblings( '[name="actionParameter[]"]' ).val( filter.actions[i].parameter ); if(filter.actions[i].type == "redirect") actions.siblings('[name="addressRedirect"]').val(filter.actions[i].parameter); if(filter.actions[i].type == "reject") actions.siblings('[name="messageReject"]').val(filter.actions[i].parameter); if(filter.actions[i].type == "fileinto" || filter.actions[i].type == "setflag") actions.parent().find('[value="'+filter.actions[i].parameter+'"]').attr("selected", "selected"); } isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True"); } DataLayer.codec( "filter", "detail", { decoder: function( form ){ if( form.vacation ) return { criteria: [{ value: "vacation", operator: "", field: "vacation" }], actions: [{ parameter: form.vacation, type: "vacation" }], id: "vacation", name: "vacation", isExact: false, applyMessages : "", enabled : true } var apply_messages_ = keys(selectedMessages); action = ''; return { name: form.name ? form.name.replace(/&/g,'&').replace(//g,'>') : nameObj.val().replace(/&/g,'&').replace(//g,'>'), isExact: ( form.isExact === "and" ), criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ return (!form.criteriaValue[i]) ? null: { value: form.criteriaValue[i].replace(/&/g,'&').replace(//g,'>'), operator: criteriaOperator, field: form.criteriaType[i].replace(/&/g,'&').replace(//g,'>') }; }), actions: $.map( form.actionType || [], function( type, i ){ var the_parameter = form.actionParameter[i]; !the_parameter ? the_parameter = form.actionParameter[i+1] : ""; if (type == 'fileinto') { the_parameter = form.valueFileInto; } if (type == 'reject') { the_parameter = form.messageReject; } if (type == 'fileintoInbox') { if(!$('[value="fileintoInbox"]').parent().hasClass("hidden")){ type = 'fileinto'; the_parameter = 'INBOX'; }else{ return; } } if (type == 'fileintoTrash') { type = 'fileinto'; the_parameter = 'INBOX' + cyrus_delimiter + 'Trash'; } if (type == 'redirect') { the_parameter = form.addressRedirect; } if (type == 'setflag') { the_parameter = form.valueSetFlag; action = form.valueSetFlag; } return (!type) ? null: {parameter: the_parameter, type: type }; }), enabled : true, applyMessages: apply_messages_ }; }, encoder: function( filters ){ var rules = []; for( var id in filters ) rules[ rules.length ] = filters[id]; return { rules: rules }; } }); /* Codec do datalayer */ DataLayer.codec( "folder", "select", { decoder:function(){ }, encoder:function( data ){ var tree1 = [], tree2 = [], tree3 = []; for (var i=0; i
', css: { backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', backgroundRepeat: 'no-repeat', backgroundPosition: 'center', backgroundColor: 'transparent', width: '32px', height: '32px', border:'none' }, overlayCSS: { backgroundColor: '#CCC', opacity: 0.5 } }); var numRows = 10; var data = DataLayer.get( 'message', { filter: criterias_, criteria: { properties: { context: { folder: 'INBOX' } } } }, true ); var total = data.length ? Math.ceil( data.length / numRows ) : 0; delete DataLayer.criterias['message:inboxSearch']; delete DataLayer.encoders['message:inboxSearch']; DataLayer.codec( 'message', 'inboxSearch', { encoder: function( dt, crit ){ return({"rows": dt, "records": data.length, "page": crit.criteria.properties.context.page, "total": total}); }, criteria: function( crit ){ if( crit.page > total ) crit.page = total; var start = crit.rows * ( crit.page - 1 ); start / crit.rows + 1 var msgNumber = []; for( var i = start; i < start + crit.rows && !!data[i]; i++ ) msgNumber.push( data[i] ); if( !msgNumber.length ) return( false ); return { filter: [ "msgNumber", "IN", msgNumber ], criteria: { properties: { context: { folder: 'INBOX', page: crit.page }, order: crit.sidx } } }; } }); allMessages = data; if (typeof grid !== "undefined") { grid/*.jqGrid( 'setGridParam', { url: 'message:inboxSearch', postData: data } )*/.trigger( 'reloadGrid' ); //return; } grid = showGridButton.siblings("#filtergrid-container").removeClass('empty-container') .html('') .children(".fields-search-messages-grid, .fields-search-messages-grid-pager").removeClass('hidden').filter(".fields-search-messages-grid").trigger( 'reloadGrid' ).jqGrid({ url: 'message:inboxSearch', datatype: "json", mtype: 'GET', colNames:['#', 'De', 'Assunto', 'Data', 'Tamanho'], colModel:[ {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false}, {name:'from.email',index:'msg_number', width:130, sortable:false}, {name:'subject',index:'subject', width:250, sortable:false}, {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time}, {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size} ], jsonReader : { root:"rows", page: "page", total: "total", records: "records", repeatitems: false, id: "0" }, rowNum:numRows, //rowList:[10,25,50], rowList:[10], pager: '#fields-search-messages-grid-pager', sortname: 'id', viewrecords: true, sortorder: "desc", multiselect: true, autowidth: true, reloadAfterEdit: true, reloadAfterSubmit: true, height:200, loadComplete: function(data) { // // aplica o contador // jQuery('.timable').each(function (i) { // jQuery(this).countdown({ // since: new Date(parseInt(this.title)), // significant: 1, // layout: 'há {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}', // description: ' atrás' // }); // }); }, onSelectRow: function (id, selected) { if( selected ) { selectedMessages[ id ] = true; } else { delete selectedMessages[ id ]; } }, onSelectAll: function (id, selected) { for (i in id) { if(selected) selectedMessages[id[i]] = true; else delete selectedMessages[id[i]]; } }, caption: 'Mensagens que atendem aos critérios' }); // end jqGrid } /* Gerencia a listagem de filtros do usuário */ function list_filters(html){ outOfficeVerify(); for (var index in selectedMessages) { delete selectedMessages[index]; } if(html){ if( ! $(".filters-windows").length ) container = $('.expressomail-module-container').append("
").find(".filters-windows").html( html ).find(".expresso-window-container"); list_container = $('.expressomail-module-container').find(".rule-list-container"); } list_container = $(".expresso-window-filters").dialog({ width:700, modal: true, resizable: false, closeOnEscape:true, close:function(event, ui) { event.stopPropagation(); if(list_container.find(".cancel").length) list_container.find(".cancel").trigger('click'); $(".dialog-head-buttonpane").hide(); }, open: function () { $(".ui-dialog .ui-dialog-titlebar") .append('minimize') .find('.ui-dialog-titlebar-minimize').click(function() { $(".ui-dialog-buttonpane, .ui-dialog-content").toggle(); $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin'); }); $(".dialog-head-buttonpane").show(); }, autoOpen: false, buttons: [{ text : get_lang("Close"), click : function() { $( this ).dialog( "close" ); } }] }); $(".ui-dialog-titlebar").after("
"); $(".dialog-head-buttonpane").css("padding", "5px"). find(".header-buttonpane").html(""+get_lang("New rule")+""+(!outoffice ? ""+get_lang("Out of office")+"" : "")).find(".button").button(); $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE"); var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true)); list_container.html(list).find(".button").button(); list_container.find(".rule-list").selectable({ selecting: function(event, ui) { $(ui.selecting).find(':checkbox').attr('checked', true); }, unselecting: function(event, ui) { $(ui.unselecting).find(':checkbox').attr('checked', false); } }); list_container.find( ".menu-control .button" ).filter(".update").button({ icons: { primary: "ui-icon-pencil" }, text: false }).click(function(){ var id = $(this).parents("li.rule").find('.id').val(); var filters = DataLayer.get( 'filter', true); for(var i =0; i < filters.length; i++){ if(filters[i].id == id){ filters = filters[i]; break; } } DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ var details_container = $(".expresso-window-filters").html(html); if(filters.name != "vacation"){ form = container.find("form"); criterias = details_container.find( 'fieldset input[name="criteriaType[]"]' ); actions = details_container.find( 'fieldset input[name="actionType[]"]' ); nameObj = details_container.find( 'input[name="name"]' ); isExact = details_container.find( 'input[name="isExact"]' ); showDetails(filters); var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); list_container.find(".button").button().filter(".forth").click(function(){ accord.accordion('activate',1); }).end().filter(".forth2").click(function(){ accord.accordion('activate',2); }).end().filter(".back").click(function(){ accord.accordion('activate',0); }).end().filter(".back2").click(function(){ accord.accordion('activate',1); }).end().filter(".cancel").click(function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }).end().filter(".submit").click(function(){ if(nameObj) nameObj.attr("disabled", "false"); if(valid_save()) $(this).submit(); else return; DataLayer.commit( 'filter', false,function(){ if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { for (var index in selectedMessages) { set_message_flag(index, action, false); } } DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }).end().filter('.button.search').click(function() { /* Valida se o usuário preencheu as informações */ if(valid_save()) showGridMessages($(this)); else return; }) }else{ list_container.find(".vacation-details-container").removeClass("hidden"); list_container.find(".rule-details-container").addClass("hidden"); list_container.find(".button").button().filter(".back").click(function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }).end().filter(".submit").click(function(){ $(this).submit(); DataLayer.commit( 'filter', false,function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }); details_container.find('[name="vacation"]').val(filters.actions[0].parameter); } }); }).end() .filter(".enable").button({ icons: { primary: "ui-icon-circle-close" }, text: false }).click(function(){ var id = $(this).parents("li.rule").find('.id').val(); DataLayer.put( 'filter', id, { enabled: false }); DataLayer.commit("filter", false,function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }).end() .filter(".disable").button({ icons: { primary: "ui-icon-circle-check" }, text: false }).click(function(){ var id = $(this).parents("li.rule").find('.id').val(); DataLayer.put( 'filter', id, { enabled: true }); DataLayer.commit("filter", false,function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }).end() .filter(".close").button({ icons: { primary: "ui-icon-close" }, text: false }).click(function(event){ var filter_name = $(event.target).parents("li.rule").find('.id').val(); var filter_screen_name = $(event.target).parents("li.rule").find('.title').html(); $.Zebra_Dialog(get_lang("Are you sure to delete the filter") + ": "+filter_screen_name+"",{ 'type': 'question', 'title': get_lang("Exclusion Confirmation"), 'buttons': [get_lang('Yes'), get_lang('No')], 'onClose': function(caption) { if(caption == get_lang('Yes')){ /** TODO - Mudar quando API abstrair atualizações no cache */ DataLayer.remove('filter', false); DataLayer.get('filter'); DataLayer.remove( 'filter', filter_name); DataLayer.commit("filter", false,function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }else{ $(event.target).removeClass("ui-selected").parent().removeClass("ui-selected"); } } }); }).end().removeClass("ui-button-icon-only"); $(".button.allenable").click(function(){ container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ DataLayer.put( 'filter', o.innerHTML, { enabled: true }); }); DataLayer.commit("filter", false, function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }); $(".button.alldisable").click(function(){ container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ DataLayer.put( 'filter', o.innerHTML, { enabled: false }); }); DataLayer.commit("filter", false, function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }); $(".button.alldelete").click(function(){ $.Zebra_Dialog(get_lang("Are you sure to delete the filters?"),{ 'type': 'question', 'title': get_lang("Exclusion Confirmation"), 'buttons': [get_lang('Yes'), get_lang('No')], 'onClose': function(caption) { if(caption == get_lang('Yes')){ /** TODO - Mudar quando API abstrair atualizações no cache */ DataLayer.remove('filter', false); DataLayer.get('filter'); container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ DataLayer.remove( 'filter', urlencode(o.innerHTML) ); }); DataLayer.commit("filter", false,function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }else{ return true; } } }); }); var aa = 0; list_container.parent().find(".button.add:first").click(function(){ list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ list_container.html(html); var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); list_container.find(".button").button().filter(".forth").click(function(){ accord.accordion('activate',1); }).end().filter(".forth2").click(function(){ accord.accordion('activate',2); }).end().filter(".back").click(function(){ accord.accordion('activate',0); }).end().filter(".back2").click(function(){ accord.accordion('activate',1); }).end().filter(".cancel").click(function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }).end().filter(".submit").click(function() { if(valid_save()) $(this).submit(); else return; DataLayer.commit( 'filter',false,function(){ if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { for (var index in selectedMessages) { set_message_flag(index, action, false); } } DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); }).end().filter('.button.search').click(function() { if(valid_save()) showGridMessages($(this)); else return; }); // end function click }); // end DataLayer.render }); list_container.parent().find(".button.add.vacation").click(function(){ list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ list_container.html(html); list_container.find(".vacation-details-container").removeClass("hidden"); list_container.find(".rule-details-container").addClass("hidden"); list_container.find(".button").button().filter(".back").click(function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }).end().filter(".submit").click(function(){ if(list_container.find(".vacation-details-container .filter-textarea").val().length <= 0){ $.Zebra_Dialog(get_lang('Write a message')); list_container.find(".vacation-details-container .filter-textarea").focus(); }else{ $(this).submit(); DataLayer.commit( 'filter',false,function(){ DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); }); } }); }); }); } /* Inicializa os filtros e chama o list_filters */ function init_filters(){ var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {}); list_filters(html); }