Server IP : 23.254.227.96 / Your IP : 216.73.216.7 Web Server : Apache/2.4.62 (Unix) OpenSSL/1.1.1k System : Linux hwsrv-1277026.hostwindsdns.com 4.18.0-477.13.1.el8_8.x86_64 #1 SMP Tue May 30 14:53:41 EDT 2023 x86_64 User : viralblo ( 1001) PHP Version : 8.1.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/local/cwpsrv/var/services/users/cwp_theme/original/js/modules/ |
Upload File : |
console.log(); let html_rule = ''; let html_action = ''; const ActionRegExp = /{ACTION_INDEX}/g; const RuleRegExp = /{RULE_INDEX}/g; const TEMPLATE_FORM_PARAMETERS = { rules_wrapper: '#rules_filter', actions_wrapper: '#actions_filters_preset', join_selector: 'name=_join', name_selector: '#filter_name' //filter_name_toaccount }; let varname_reg = /^[a-zA-Z0-9]{1,12}$/ let domain_list = []; let templates_table = null; let presetlist = JSON.parse('{{mod.presets|json_encode|raw}}'); $(document).ready(function() { {% if mod.isie == 1 %} uchip = new $.Uchip(); {% else %} uchip = new Uchip(); {% endif %} listAccounts(); tablePresets(presetlist); $('#filter_to_accounts').tagsinput({ tagClass: 'cwp-tags-input' }); let modDomains = JSON.parse('{{mod.domains|json_encode|raw}}'); modDomains.forEach(function(dom){ let domain = dom.domain; if(domain.type == "subdomain"){ domain = dom.subdomain + '.' + dom.domain; } domain_list.push(domain); }); $('#filter_to_accounts').on('beforeItemAdd', function(event) { if(!validateEmail(event.item)){ event.cancel = true; noti_bubble('{{langmod.EMFILTERSLAB95}}','{{langmod.EMFILTERSLAB96}}!','error',false,false,'3000',true); }else if(!validDomainEmail(event.item)){ event.cancel = true; noti_bubble('Invalid domain','{{langmod.EMFILTERSLAB96}}!','error',false,false,'3000',true); } // event.item: contains the item // event.cancel: set to true to prevent the item getting added }); $('[data-toggle=tab]').on('show.bs.tab', function (e) { let target = e.target.dataset.idenifier; if(target == '#tab-1' && $('#new_filter_form').is(':visible')){ confirmChangeTab(function(){ presetBackFrom('#new_filter_form'); }); }else if(target == '#tab-2' && $('#email_filters_manager').is(':visible')){ confirmChangeTab(function(){ cancelFilterFormAccount(); $('#goat_wrap').hide(); $('#list_presets').show(); }); } else if (target == '#tab-2'){ $('#goat_wrap').hide(); $('#list_presets').show(); } }); // $('#save_type_domain_list').select2(); }); function cancelPreset(){ confirmChangeTab(function(){ presetBackFrom('#goat_wrap'); $('#filter_name').val(''); $('#_allof').prop('checked', true); }); } function confirmChangeTab(onConfirm){ let r = confirm("{{langmod.EMFILTERSLAB125}}"); if (r !== true) { return; }else{ onConfirm(); } } function deleteTemplate(index, action) { let li_element = $('#trpreset_' + index); let set_name = li_element.data('name'); if (action !== true) { $('#conf_del_buttons').html('<button type="button" class="btn btn-white" data-dismiss="modal">{{langmod.EMFILTERSLAB131}}</button>' + '<button type = "button" class= "btn btn-primary" onclick="deleteTemplate(' + index + ', true)" > {{langmod.EMFILTERSLAB132}}</button >'); $('#modal_del_item_filter .modal-body').html('<p style="font-weight: 500;">{{langmod.EMFILTERSLAB168}}: <b>' + set_name + '</b>.' + '<br> <span style="font-weight: bold;">{{langmod.EMFILTERSLAB150}}</span></p >'); $("#modal_del_item_filter").modal('toggle'); } else { li_element.addClass('deleting_row'); uchip.handleButton('#_btn_edit_preset_' + index, 'fa-edit'); uchip.handleButton('#_btn_del_preset_' + index, 'fa-trash'); $("#modal_del_item_filter").modal('toggle'); uchip.call('module=email_filters&acc=deletetemplate', { data: 'template=' + set_name, callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { noti_bubble('{{langmod.EMFILTERSLAB169}}', '{{langmod.EMFILTERSLAB101}}', 'success', false, false, '3000', true); li_element.slideUp('fast', function () { templates_table.row(this).remove().draw(); }); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB143}}'; } else if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB170}}'; } } noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); li_element.removeClass('deleting_row'); uchip.handleButton('#_btn_edit_preset_' + index, 'fa-edit', true); uchip.handleButton('#_btn_del_preset_' + index, 'fa-trash', true); } } }); } } function templateToForm(template, parameters){ parameters = parameters === undefined ? TEMPLATE_FORM_PARAMETERS : parameters; templateInitForm(parameters); bindTagsInput(0); let $radios = $('input:radio[' + parameters.join_selector + ']'); $(parameters.name_selector).val(template.general.name); $radios.filter('[value=' + template.general.filter_type + ']').prop('checked', true); matchingType(parameters.rules_wrapper); if (template.general.filter_type !== 'any') { renderRulesEditTemplate(template.rules, parameters.rules_wrapper); } renderActionsEditTemplate(template.actions, parameters.actions_wrapper); } function renderActionsEditTemplate(actions, actions_wrapper) { let index = 0; do { let action = actions[index]; if (index !== 0) { $(actions_wrapper).append(html_action.replace(ActionRegExp, index)); bindTagsActionsInput(index); } let action_type = $('#action_type' + index); action_type.val(action.type); actionType(action_type); if (action.type === 'redirect_copy' || action.type === 'redirect') { $('#_action_row_' + index).find('.redirection-filter-address').val(action.addres); } else if (action.type === 'reject') { $('#action_target_area' + index).val(action.message); } else if (action.type === 'fileinto' || action.type === 'fileinto_copy') { $('#action_mailbox' + index).val(action.redirect_to); } else if (action.type === 'vacation') { $('#vacation_message_area' + index).val(action.message); let div_action = $('#_action_row_' + index); div_action.find('.vacation-action-subject').val(action.subject); div_action.find('.vacation-action-sndradd').val(action.sender); if (action.addresses !== undefined) { fillInputTags(action.addresses, div_action.find('.vacation-action-myadds')); } div_action.find('.vacation-action-days').val(action.days !== undefined ? action.days : (action.often !== undefined ? action.often : '')); } else if (action.type === 'setflag' || action.type === 'addflag' || action.type === 'removeflag') { // let $check_flags = $('input:checkbox[name=filter_action_flags' + index + ']'); // action.target.forEach(function(flag){ // $check_flags.filter('[value=' + flag + ']').prop('checked', true); // }); poblateChecksActions('filter_action_flags' + index, action.flags); } else if (action.type === 'set') { console.log('ACTION', action); $('#action_varname' + index).val(action.name); $('#action_varvalue' + index).val(action.value); poblateChecksActions('_action_varmods' + index, action.modifiers); // let $check_modifiers = $('input:checkbox[name=filter_action_flags' + index + ']'); // action.target.forEach(function (flag) { // $check_flags.filter('[value=' + flag + ']').prop('checked', true); // }); } else if (action.type === 'notify') { $('#action_notifytarget' + index).val(action.target); $('#action_notifymessage' + index).val(action.message); $('#action_notifyfrom' + index).val(action.sender); $('#_action_notifyimportance' + index).val(action.importance); } index++; } while (index < actions.length); } function renderRulesEditTemplate(rules, rules_wrapper) { let index = 0; do { let rule = rules[index]; if (index !== 0) { $(rules_wrapper).append(html_rule.replace(RuleRegExp, index)); bindTagsRulesInput(index); } let rule_header = $('#rule_type' + index); rule_header.val(rule.type); let selindex = rule_header.prop('selectedIndex'); ruleType(rule_header); if (selindex < 5) { renderRulesTexts(index, rule, selindex); } else if (selindex === 5) { renderRulesSize(index, rule); } else if (selindex > 5 && selindex < 8) { renderRulesDate(index, rule); } index++; } while (index < rules.length); } function editTemplate(index){ let template_name = $('#trpreset_' + index).data('name'); uchip.slideToggle('#goat_wrap', '#list_presets', function(){ $('#new_filter_form').hide(); $('#preset_form_loader').show(); $('#_template_editor_title').html('{{langmod.EMFILTERSLAB173}}: ' + template_name); }); $('#editor_action').val('update'); $('#editing_index').val(template_name); uchip.call('module=email_filters&acc=gettemplateinfo', { data: 'name=' + template_name, callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { uchip.slideToggle('#new_filter_form', '#preset_form_loader', function () { templateToForm(response.template_data); }); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB143}}'; } else if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB170}}'; } } uchip.slideToggle('#list_presets', '#goat_wrap', function () { $('#new_filter_form').show(); $('#preset_form_loader').hide(); }); noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); } } }); } function createFromTemplate(index){ let template_name = $('#_template_trpreset_' + index).data('name'); let email = $('#set_filter_account').val(); $('#modal_pick_template').modal('toggle'); uchip.slideToggle('#email_filters_manager', '#email_filters_main', function () { $('#filter_title_prefix_account').text('{{langmod.EMFILTERSLAB172}}'); $('#filter_title_account').text(email); $('#filter_for_account').val(email); $('#editor_action').val('create'); $('#editing_index').val(template_name); $('#editor_form').hide(); $('#editor_loader').show(); uchip.call('module=email_filters&acc=gettemplateinfo', { data: 'name=' + template_name, callback: function (response) { if (!response.hasOwnProperty('result') || response.result === 'error') { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB170}}'; } } uchip.slideToggle('#email_filters_main', '#email_filters_manager'); noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); } else { // console.log('KENJI'); templateToForm(response.template_data, { rules_wrapper: '#rules_filter_account', actions_wrapper: '#actions_filters_account', join_selector: 'name=_join_account', name_selector: '#filter_name_toaccount' //filter_name_toaccount }); } uchip.slideToggle('#editor_form', '#editor_loader'); } }); }); // uchip.call('module=email_filters&acc=gettemplateinfo', { // data: 'name=' + template_name, // callback: function (response) { // if (response.hasOwnProperty('result') && response.result === 'success') { // uchip.slideToggle('#new_filter_form', '#preset_form_loader', function () { // templateToForm(response.template_data); // }); // } else { // let message_error = '{{langmod.EMFILTERSLAB141}}'; // if (response.hasOwnProperty('code')) { // if (response.code == 2) { // message_error = '{{langmod.EMFILTERSLAB143}}'; // } else if (response.code == 1) { // message_error = '{{langmod.EMFILTERSLAB170}}'; // } // } // uchip.slideToggle('#list_presets', '#goat_wrap', function () { // $('#new_filter_form').show(); // $('#preset_form_loader').hide(); // }); // noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); // } // } // }); } function tablePresets(list, return_html){ presetlist = list; mod_prefix = ''; if (return_html === true) { mod_prefix = '_template_'; } if(presetlist.length > 0){ let html_content = ''; let index = 0; presetlist.forEach(function(preset){ let btn_actions = '<button class="btn btn-xs btn-success" id="_btn_edit_preset_' + index + '" onclick="editTemplate(' + index + ')" style="margin-right:5px;"><i class="fa fa-edit"></i></button>' + '<button class="btn btn-xs btn-danger" id="_btn_del_preset_' + index + '" onclick="deleteTemplate(' + index + ')"><i class="fa fa-trash"></i></button>'; if (return_html === true){ btn_actions = '<button class="btn btn-xs btn-success btn-xxs" onclick="createFromTemplate(' + index + ')" style="margin-right:5px;"><i class="fa fa-sticky-note-o"></i> Use this</button>'; } html_content += '<tr id="' + mod_prefix + 'trpreset_' + index + '" data-name="' + preset.name + '" class="gradeA odd" role="row">' + '<td>' + preset.name + '</td>' + '<td style="width:140px">' + '<span class="badge badge-success mr5">' + preset.rules + ' {{langmod.EMFILTERSLAB127}}</span> ' + '</td>' + '<td style="width:140px">' + '<span class="badge badge-primary">' + preset.actions + ' {{langmod.EMFILTERSLAB129}}</span> ' + '</td>' + '<td style="width:80px">' + btn_actions + '</td>' + '</tr>'; index++; }); let table_html = '<table class="table ' + mod_prefix + 'preset_table table-striped table-bordered table-hover">' + '<thead>' + '<tr role="row">' + '<th>Name</th>' + '<th style="width:140px">{{langmod.EMFILTERSLAB126}}</th>' + '<th style="width:140px">{{langmod.EMFILTERSLAB128}}</th>' + '<th style="width:80px"> </th>' + '</tr>' + '</thead>' + '<tbody id="contenttr">' + html_content + '</tbody>' + '</table>'; if (return_html === undefined){ $('#table_preset_container').html(table_html); $('.preset_table').DataTable().destroy(); templates_table = $('.preset_table').DataTable({ "columnDefs": [ { "orderable": false, "targets": [1, 2, 3] } ] }); $('[data-toggle="tooltip"]').tooltip() }else{ return table_html; } }else{ let empty_html = '<div class="empty_list"><h4 class="text-success">{{langmod.EMFILTERSLAB177}}</h4></div>'; if (return_html === undefined) { $('#table_preset_container').html(empty_html); }else{ return empty_html; } } } function savePreSet() { let valid = validFilter(); if (valid === true) { let filter_data = getFilterData(); let editor_action = $('#editor_action').val(); let original_name = $('#editing_index').val(); uchip.handleButton('.cancel-preset', 'fa-ban'); uchip.handleButton('.save-preset', 'fa-floppy-o'); uchip.slideToggle('#preset_form_loader', '#new_filter_form'); uchip.call('module=email_filters&acc=newpreset', { data: 'data=' + Base64.encode(filter_data) + '&editor_action=' + editor_action + '&original_name=' + original_name, callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { // uchip.slideToggle('#filter_account_form', '#filter_account_form_loader'); tablePresets(response.list); uchip.handleButton('.cancel-preset-account', 'fa-ban', true); uchip.handleButton('.save-preset-account', 'fa-floppy-o', true); uchip.handleButton('.cancel-preset', 'fa-ban', true); uchip.handleButton('.save-preset', 'fa-floppy-o', true); $('#filter_name').val(''); $('#_allof').prop('checked', true); presetBackFrom('#goat_wrap'); setTimeout(function () { uchip.slideToggle('#new_filter_form', '#preset_form_loader'); }, 400); noti_bubble('{{langmod.EMFILTERSLAB100}}', '{{langmod.EMFILTERSLAB101}}', 'success', false, false, '3000', true); // displayNewFilter({ // 'name': filter_name, // 'status': response.filter_status // }, filter_set); // cancelFilterFormAccount(); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB143}}'; } else if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB144}}'; } } noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); } } }); } else { noti_bubble('{{langmod.EMFILTERSLAB102}}', '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '3000', true); } } function validateEmail(email) { var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email); } function validDomainEmail(email) { let pieces = email.split('@'); let index = domain_list.findIndex(function(dom){ return dom == pieces[1]; }); return index > -1 ? true : false; } function addNewRule(){ let last_index = $('.rules-filter-wrapper:visible .rules-filter:last-child').data('index'); $('.rules-filter-wrapper:visible').append(html_rule.replace(RuleRegExp, last_index + 1)); $('#filter_value' + (last_index + 1)).tagsinput({ tagClass: 'cwp-tags-input' }); $('#rule_custom' + (last_index + 1)).tagsinput({ tagClass: 'cwp-tags-input' }); $('#rule_custom' + (last_index + 1)).on('beforeItemAdd', function (event) { if (!varname_reg.test(event.item)) { event.cancel = true; noti_bubble('{{langmod.EMFILTERSLAB130}}', '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '3000', true); } }); } function remRule(index, type, confirmed){ if(confirmed === undefined){ $('#conf_del_buttons').html('<button type="button" class="btn btn-white" data-dismiss="modal">{{langmod.EMFILTERSLAB131}}</button>' + '<button type = "button" class= "btn btn-primary" onclick="remRule(' + index + ', \'' + type + '\',true)" > {{langmod.EMFILTERSLAB132}}</button >'); $('#modal_del_item_filter .modal-body').html('<p style="font-weight: 500;">{{langmod.EMFILTERSLAB149}} <span id="item_filter_deleting">' + (type === 'rule' ? 'rule' : 'action') + '</span>.' + '<br> <span style="font-weight: bold;">{{langmod.EMFILTERSLAB150}}</span></p >'); $("#modal_del_item_filter").modal('toggle'); }else{ let elem = '#' + (type === 'rule' ? '_rule_row_' : '_action_row_') + index; $(elem).slideUp('fast', function () { $(this).remove(); }); $('#modal_del_item_filter').modal('hide'); } } function addNewAction(){ let last_index = $('.actions-filters:visible .redirection-filter:last-child').data('index'); $('.actions-filters:visible').append(html_action.replace(ActionRegExp, last_index + 1)); $('#_action_notifyoption' + (last_index + 1)).tagsinput({ tagClass: 'cwp-tags-input' }); $('#_vacation_addresses' + (last_index + 1)).tagsinput({ tagClass: 'cwp-tags-input' }); $('#_vacation_addresses' + (last_index + 1)).on('beforeItemAdd', function (event) { if (!validateEmail(event.item)) { event.cancel = true; noti_bubble('{{langmod.EMFILTERSLAB133}}', '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '3000', true); } }); ui_account_folders.forEach(function(folder){ $('.action-redirect-to:not(.added-folders)').append(new Option(folder, folder)); }); $('.action-redirect-to').addClass('added-folders'); } function actionType(elem){ let value = $(elem).val(); let parent = $(elem).parent(); parent.find('.subnormal').hide(); if(value == 'fileinto' || value == 'fileinto_copy'){ parent.find('.redirection-filter-natural').show(); }else if(value == 'redirect' || value == 'redirect_copy'){ parent.find('.redirection-filter-natural').hide(); parent.find('.redirection-filter-address').show(); }else if(value == 'reject'){ parent.find('.redirection-filter-natural').hide(); parent.find('.redirection-filter-message').show(); } else if (value == 'vacation') { parent.find('.redirection-filter-natural').hide(); parent.find('.vacation-action-message-wrapper').show(); }else if(value == 'setflag' || value == 'addflag' || value == 'removeflag'){ parent.find('.redirection-filter-natural').hide(); parent.find('.redirection-filter-flags').show(); }else if(value == 'set'){ parent.find('.redirection-filter-natural').hide(); parent.find('.redirection-filter-vars').show(); }else if(value == 'notify'){ parent.find('.redirection-filter-natural').hide(); parent.find('.redirection-filter-notify').show(); }else if(value == 'discard' || value == 'keep' || value == 'stop'){ parent.find('.redirection-filter-natural').hide(); } } function ruleType(elem){ let value = $(elem).val(); let parent = $(elem).parent(); parent.find('.subnormal').hide(); parent.find('.filter-by-size').hide(); parent.find('.rules-filter-contains').val('contains'); if(value == '...'){ parent.find('.rules-filter-custom-wrapper').show(); }else if(value == 'size'){ parent.find('.filter-normal').hide(); parent.find('.filter-by-size').show(); }else if(value == 'date' || value == 'currentdate'){ parent.find('.rules-filter-date').show(); parent.find('.filter-normal').show(); }else{ parent.find('.filter-normal').show(); } } function matchingType(elem){ if($('#_any').is(':checked') || $('#_any_account').is(':checked')){ $(elem).slideUp('fast'); }else{ $(elem).slideDown('fast'); } } function containType(elem){ let currval = $(elem).val(); let rule_wrapper = $(elem).next('.rules-filter-value-wrapper') if(currval == 'exists' || currval == 'notexists'){ rule_wrapper.hide(); }else{ let selindex = $(elem).prop('selectedIndex'); rule_wrapper.show(); if(selindex > 9){ rule_wrapper.find('.rules-filter-value').data('type', 'numeric') }else{ rule_wrapper.find('.rules-filter-value').data('type', 'string') } } } function validFilter(){ function placeError(elem_parent, message){ elem_parent.parent().find('.error-span').remove(); elem_parent.after('<span class="error-span">' + message + '</span>'); } let valid = true; $('.data-required:visible').each(function(){ let numeric = $(this).data('numeric'); let isemail = $(this).data('isemail'); let isvarname = $(this).data('isvarname'); let numeric_reg = /^\d+$/; let itemval = $(this).val(); let optional = $(this).data('isoptional'); if (itemval == '' && optional === undefined){ valid = false; $(this).addClass('error'); } else if (isemail !== undefined && itemval != '' && !validateEmail(itemval)){ console.log('optional', optional); valid = false; $(this).addClass('error'); } else if (isvarname !== undefined && itemval != '' && !varname_reg.test(itemval)) { valid = false; $(this).addClass('error'); } else if (numeric !== undefined && itemval != '' && !numeric_reg.test(itemval)){ valid = false; $(this).addClass('error'); }else{ $(this).removeClass('error'); } }); $('.rules-filter-value-wrapper:visible .rules-filter-value').each(function(){ let validtags = true; let elem_value = $(this).val(); let elem_parent = $(this).parent().find('.bootstrap-tagsinput'); if(elem_value != ''){ let numeric_reg = /^\d+$/; let values = elem_value.split(','); let type = $(this).data('type'); let index = $(this).data('index'); values.forEach(function(item){ if(type == 'numeric' && !numeric_reg.test(item)){ validtags = false; elem_parent.addClass('error_filter'); // elem_parent.parent().append('<span class="error-span">Number required</span>'); placeError(elem_parent, '{{langmod.EMFILTERSLAB98}}'); }else if(type == 'string'){ if (item == ''){ validtags = false; elem_parent.addClass('error_filter'); placeError(elem_parent, '{{langmod.EMFILTERSLAB99}}'); } else if ($('#rule_date' + index).is(':visible')){ let date_val = $('#rule_date' + index).val(); if (!checkDateInput(date_val, item)){ validtags = false; elem_parent.addClass('error_filter'); placeError(elem_parent, '{{langmod.EMFILTERSLAB99}}'); } } } }); }else{ validtags = false; elem_parent.addClass('error_filter'); placeError(elem_parent, '{{langmod.EMFILTERSLAB99}}'); } if(validtags === true){ elem_parent.removeClass('error_filter'); elem_parent.parent().find('.error-span').remove(); } valid = valid && validtags; }); if(!valid){ noti_bubble('Fields marked in red are required', 'Error!','error',false,false,'3000', true); } return valid; } function checkDateInput(date_type, val){ let numeric_reg = /^\d+$/; let month_reg = /^(0[1-9]|1[012])$/; let day_reg = /^(0[1-9]|[12][0-9]|3[01])$/; let hour_reg = /^([0-1][0-9]|2[0-3])$/; let weekday_reg = /^[0-6]$/; let timezone_reg = /^([+-](?:2[0-3]|[01][0-9]):[0-5][0-9])$/; let minute_reg = /^[0-5][0-9]$/; let time_reg = /(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)/; let date_reg = /^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$/ let date_iso_reg = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/ if (date_type == 'date' && !date_reg.test(val)){ return false; } else if (date_type == 'iso8601' && !date_iso_reg.test(val)){ return false; } else if ((date_type == 'julian' && val.length != 5 && val.length != 7) || (date_type == 'julian' && !numeric_reg.test(val))){ return false; } else if (date_type == 'time' && !time_reg.test(val)) { return false; } else if (date_type == 'year' && (!numeric_reg.test(val) || val.length !== 4)) { return false; } else if (date_type == 'month' && !month_reg.test(val)) { return false; } else if (date_type == 'day' && !day_reg.test(val)) { return false; } else if (date_type == 'hour' && !hour_reg.test(val)) { return false; } else if (date_type == 'minute' && !minute_reg.test(val)) { return false; } else if (date_type == 'second' && !minute_reg.test(val)) { return false; } else if (date_type == 'zone' && !timezone_reg.test(val)) { return false; } else if (date_type == 'weekday' && !weekday_reg.test(val)) { return false; } return true; } function editFilterInSet(set_name, index){ let filter_name = $('#_filter_list_item_' + index).data('filtername'); let email = $('#set_filter_account').val(); $('#new_filter_selector').removeClass('open'); uchip.slideToggle('#email_filters_manager', '#email_filters_main', function () { $('#filter_title_prefix_account').text('{{langmod.EMFILTERSLAB171}}'); $('#filter_title_account').text(''); $('#filter_for_account').val(email); $('#editor_action').val('update'); $('#editing_index').val(index); $('#editor_form').hide(); $('#editor_loader').show(); uchip.call('module=email_filters&acc=getfilterdata', { data: 'account=' + email + '&set=' + set_name + '&filter_name=' + filter_name, callback: function (response) { if (!response.hasOwnProperty('result') || response.result === 'error') { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB144}}'; } else if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB144}}'; } } uchip.slideToggle('#email_filters_main', '#email_filters_manager'); noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); } else { renderEditform(response.filter_data); } } }); }); } function bindTagsRulesInput(index){ $('#filter_value' + index).tagsinput({ tagClass: 'cwp-tags-input' }); $('#rule_custom' + index).tagsinput({ tagClass: 'cwp-tags-input' }); $('#rule_custom' + index).on('beforeItemAdd', function (event) { if (!varname_reg.test(event.item)) { event.cancel = true; noti_bubble('Forbiden characters were found!', 'Error!', 'error', false, false, '3000', true); } }); } function bindTagsActionsInput(index){ $('#_action_notifyoption' + index).tagsinput({ tagClass: 'cwp-tags-input' }); $('#_vacation_addresses' + index).tagsinput({ tagClass: 'cwp-tags-input' }); $('#_vacation_addresses' + index).on('beforeItemAdd', function (event) { if (!validateEmail(event.item)) { event.cancel = true; noti_bubble('Just valid email addresses allowed', 'Error!', 'error', false, false, '3000', true); } }); } function bindTagsInput(index){ bindTagsRulesInput(index); bindTagsActionsInput(index); } function renderEditform(filter_data){ uchip.slideToggle('#editor_form', '#editor_loader', function () { html_rule = $('#rules_filter_raw').html(); $('#filter_name_toaccount').val(filter_data.name); let check_status_filter = filter_data.status === 1 ? '#_filter_status_form_active' : '#_filter_status_form_inactive'; $(check_status_filter).prop('checked', true); $('#filter_name_toaccount').data('original',filter_data.name); html_action = $('.actions-filters_raw').html(); $('#rules_filter_account').html(html_rule.replace(RuleRegExp, '0')); $('#actions_filters_account').html(html_action.replace(ActionRegExp, '0')); bindTagsInput(0); let $radios = $('input:radio[name=_join_account]'); $radios.filter('[value=' + filter_data.join + ']').prop('checked', true); matchingType('#rules_filter_account'); if (filter_data.join !== 'any'){ renderRulesEditForm(filter_data.tests); } renderActionsEditForm(filter_data.actions); }); } function renderActionsEditForm(actions){ let index = 0; do { let action = actions[index]; if (index !== 0) { $('#actions_filters_account').append(html_action.replace(ActionRegExp, index)); bindTagsActionsInput(index); } let action_type = $('#action_type' + index); action_type.val(action.type); actionType(action_type); ui_account_folders.forEach(function(folder){ $('.action-redirect-to:not(.added-folders)').append(new Option(folder, folder)); }); $('.action-redirect-to').addClass('added-folders'); if (action.type === 'redirect_copy' || action.type === 'redirect'){ $('#_action_row_' + index).find('.redirection-filter-address').val(action.target); } else if (action.type === 'reject'){ $('#action_target_area' + index).val(action.message); } else if (action.type === 'fileinto' || action.type === 'fileinto_copy') { $('#action_mailbox' + index).val(action.target); } else if (action.type === 'vacation') { $('#vacation_message_area' + index).val(action.msg); let div_action = $('#_action_row_' + index); div_action.find('.vacation-action-subject').val(action.subject); div_action.find('.vacation-action-sndradd').val(action.from); if (action.addresses !== undefined){ fillInputTags(action.addresses, div_action.find('.vacation-action-myadds')); } div_action.find('.vacation-action-days').val(action.days !== undefined ? action.days : ''); } else if (action.type === 'setflag' || action.type === 'addflag' || action.type === 'removeflag') { // let $check_flags = $('input:checkbox[name=filter_action_flags' + index + ']'); // action.target.forEach(function(flag){ // $check_flags.filter('[value=' + flag + ']').prop('checked', true); // }); poblateChecksActions('filter_action_flags' + index, action.target); } else if (action.type === 'set') { $('#action_varname' + index).val(action.name); $('#action_varvalue' + index).val(action.value); poblateChecksActions('_action_varmods' + index, action.modifiers); // let $check_modifiers = $('input:checkbox[name=filter_action_flags' + index + ']'); // action.target.forEach(function (flag) { // $check_flags.filter('[value=' + flag + ']').prop('checked', true); // }); } else if (action.type === 'notify'){ $('#action_notifytarget' + index).val(action.method.replace('mailto:','')); $('#action_notifymessage' + index).val(action.msg !== undefined ? action.msg : ''); $('#action_notifyfrom' + index).val(action.from !== undefined ? action.from : ''); $('#_action_notifyimportance' + index).val(action.importance !== undefined ? action.importance : '2'); } index++; } while (index < actions.length); } function poblateChecksActions(name_field, values){ let $check_modifiers = $('input:checkbox[name=' + name_field + ']'); values.forEach(function (val) { $check_modifiers.filter('[value=' + val + ']').prop('checked', true); }); } function fillInputTags(tags_val, tags_input){ if (Array.isArray(tags_val)) { tags_val.forEach(function (val) { tags_input.tagsinput('add', val); }); } else { tags_input.tagsinput('add', tags_val); } } function renderRulesEditForm(rules){ let index = 0; do { let rule = rules[index]; if(index !== 0){ $('#rules_filter_account').append(html_rule.replace(RuleRegExp, index)); bindTagsRulesInput(index); } let rule_header = $('#rule_type' + index); if (rule.is_custom !== undefined && rule.is_custom === true){ rule_header.val('...'); }else{ rule_header.val(rule.type === 'header' ? rule.header : rule.type); } let selindex = rule_header.prop('selectedIndex'); ruleType(rule_header); if (selindex < 5){ renderRulesTexts(index, rule, selindex); } else if(selindex === 5){ renderRulesSize(index, rule); } else if (selindex > 5 && selindex < 8) { // renderRulesDate(index, rule); } index++ ; } while (index < rules.length); } function renderRulesDate(index, rule){ let rule_contain = $('#filter_rule_contain' + index); let operator = rule.hasOwnProperty('operator') ? rule.operator.replace(' "', '-') : rule.contains; operator = operator.replace('"', ''); rule_contain.val((rule.not === true ? 'not' : '') + operator); $('#rule_date' + index).val(rule.hasOwnProperty('datepart') ? rule.datepart : rule.date_type); fillInputTags((rule.hasOwnProperty('target') ? rule.target : rule.contains_values), $('#filter_value' + index)); } function renderRulesSize(index, rule){ let size_reg = /[1-9]+[0-9]|[gbmkt]{1}/gi; let size_info = rule.hasOwnProperty('target') ? rule.target.match(size_reg) : [rule.quota, rule.unit]; $('#rule_size_op' + index).val(rule.hasOwnProperty('operator') ? rule.operator : rule.size_type); $('#rule_size_quota' + index).val(size_info[0]); let $radios = $('input:radio[name=filter_rule_size' + index + ']'); $radios.filter('[value=' + (size_info[1] == undefined ? 'B' : size_info[1]) + ']').prop('checked', true); } function renderRulesTexts(index, rule, selindex){ let rule_contain = $('#filter_rule_contain' + index); let operator = rule.hasOwnProperty('operator') ? rule.operator.replace(' "', '-') : rule.contains; operator = operator.replace('"', ''); rule_contain.val((rule.not === true ? 'not' : '') + operator); if (selindex === 3) { fillInputTags((rule.hasOwnProperty('header') ? rule.header : rule.custom_rule), $('#rule_custom' + index)); } containType(rule_contain); let sel_contain_index = rule_contain.prop('selectedIndex'); if (sel_contain_index !== 4 && sel_contain_index !== 5) { fillInputTags((rule.hasOwnProperty('target') ? rule.target : rule.contains_values), $('#filter_value' + index)); } } function handleFilterStatus(index){ let li_element = $('#_filter_list_item_' + index); li_element.addClass('deleting_row'); let current_status = li_element.data('st'); let filter_name = li_element.data('filtername'); let current_icon = 'fa-check'; let current_class = 'btn-primary'; if (current_status !== 1){ current_icon = 'fa-ban'; current_class = 'btn-warning'; } uchip.handleButton('#_btn_status_filter_' + index, current_icon); $('#_btn_edit_filter_' + index).prop('disabled', true); $('#_btn_delete_filter_' + index).prop('disabled', true); uchip.call('module=email_filters&acc=statusfilter', { data: 'st=' + (current_status !== 1 ? 1 : 0) + '&filter_name=' + filter_name + '&account=' + $('#set_filter_account').val() + '&set=' + $('#set_filter_selected').val(), callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { let new_class = 'btn-warning'; let btn_status = $('#_btn_status_filter_' + index); let message_action = '{{langmod.EMFILTERSLAB161}}'; if (current_icon === 'fa-ban'){ current_icon = 'fa-check'; li_element.data('st', 1); new_class = 'btn-primary'; btn_status.prop('title', '{{langmod.EMFILTERSLAB160}}'); message_action = '{{langmod.EMFILTERSLAB160}}'; li_element.removeClass('filter-list-item-inactive'); }else{ current_icon = 'fa-ban'; li_element.data('st', 0); btn_status.prop('title', '{{langmod.EMFILTERSLAB161}}'); li_element.addClass('filter-list-item-inactive'); } btn_status.removeClass(current_class); btn_status.addClass(new_class); noti_bubble('{{langmod.EMFILTERSLAB164}} ' + message_action + '.', '{{langmod.EMFILTERSLAB101}}', 'success', false, false, '3000', true); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB174}}'; } else if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB144}}'; } } noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); } li_element.removeClass('deleting_row'); uchip.handleButton('#_btn_status_filter_' + index, current_icon, true); $('#_btn_edit_filter_' + index).prop('disabled', false); $('#_btn_delete_filter_' + index).prop('disabled', false); } }); } function redenderFilterHtml(filter_data, set_name, index){ let status_btn = 'class="btn btn-primary btn-xs" title="{{langmod.EMFILTERSLAB160}}"><i class="fa fa-check"></i>'; let stclass = ''; if(filter_data.status !== 1){ stclass = 'filter-list-item-inactive'; status_btn = 'class="btn btn-warning btn-xs" title="{{langmod.EMFILTERSLAB161}}"><i class="fa fa-ban"></i>'; } return '<li id="_filter_list_item_' + index + '" class="' + stclass + '" data-filtername="' + filter_data.name + '" data-st="' + filter_data.status + '">' + '<div class="filters-list-item">' + '<span class="filters-list-item-name" data-index="' + index + '">' + filter_data.name + '</span>' + '<div>' + '<button title="{{langmod.EMFILTERSLAB162}}" type="button" onclick="editFilterInSet(\'' + set_name + '\',\'' + index + '\')"' + ' class="btn btn-success btn-edit-filter btn-xs" id="_btn_edit_filter_' + index + '" style="margin-right:5px;">' + '<i class="fa fa-edit"></i>' + '</button>' + '<button type="button" style="margin-right: 5px;" onclick="handleFilterStatus(' + index + ')" id="_btn_status_filter_' + index + '"' + status_btn + '</button>' + '<button title="{{langmod.EMFILTERSLAB163}}" type="button" ' + 'onclick="deleteFilterFromSet(' + index + ', 0)" id="_btn_delete_filter_' + index + '" class="btn btn-danger btn-xs"><i class="fa fa-trash"></i></button>' + '</div>' + '</div>' + '</li>'; } function deleteFilterFromSet(index, action){ let li_element = $('#_filter_list_item_' + index); let filter_name = li_element.data('filtername'); if(action === 0){ $('#conf_del_buttons').html('<button type="button" class="btn btn-white" data-dismiss="modal">{{langmod.EMFILTERSLAB131}}</button>' + '<button type = "button" class= "btn btn-primary" onclick="deleteFilterFromSet(' + index + ', 1)" > {{langmod.EMFILTERSLAB132}}</button >'); $('#modal_del_item_filter .modal-body').html('<p style="font-weight: 500;">{{langmod.EMFILTERSLAB151}}: <b>' + filter_name + '</b>.' + '<br> <span style="font-weight: bold;">{{langmod.EMFILTERSLAB150}}</span></p >'); $("#modal_del_item_filter").modal('toggle'); }else{ li_element.addClass('deleting_row'); uchip.handleButton('#_btn_edit_filter_' + index, 'fa-edit'); uchip.handleButton('#_btn_delete_filter_' + index, 'fa-trash'); $("#modal_del_item_filter").modal('toggle'); uchip.call('module=email_filters&acc=deletefilter', { data: 'filter_name=' + filter_name + '&account=' + $('#set_filter_account').val() + '&set=' + $('#set_filter_selected').val(), callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { noti_bubble('{{langmod.EMFILTERSLAB154}}', '{{langmod.EMFILTERSLAB101}}', 'success', false, false, '3000', true); li_element.slideUp('fast', function(){ li_element.remove(); if ($('.filters-list-item-name').length === 0){ $('#filter_list_box').html(emptyFilterListHtml()); } let set_index = $('#_set_viewing_index').val(); let set_data = $('#_btn_manage_set_list_' + set_index).data('set'); set_data.filters.splice(index, 1); $('#_btn_manage_set_list_' + set_index).data('set', set_data); }); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB143}}'; } else if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB144}}'; } } noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); li_element.removeClass('deleting_row'); uchip.handleButton('#_btn_edit_filter_' + index, 'fa-edit', true); uchip.handleButton('#_btn_delete_filter_' + index, 'fa-trash', true); } } }); } } function emptyFilterListHtml(){ return '<div id="filters_list_wrapper">' + '<div class="no-filters-stored">{{langmod.EMFILTERSLAB135}}<br /> ' + '<button class="btn btn-primary btn-xs" onclick="showNewFilterFormAccount()"><i class="fa fa-plus"></i> {{langmod.EMFILTERSLAB134}}</button>' + '</div>' + '</div>' } function showFiltersInSet(elem, index){ $('.current-viewing').removeClass('current-viewing'); $('#_list_set_item_' + index).addClass('current-viewing'); let data_set = $(elem).data('set'); let filters_content = emptyFilterListHtml(); if(data_set.filters.length > 0){ filters_content = '<ul class="ul-filters-list" id="set_filters_list">'; data_set.filters.forEach(function (filter, index){ filters_content += redenderFilterHtml(filter, data_set.name, index); }); filters_content += '</ul>'; } let filters_html = '<div class="ibox"> ' + '<input type="hidden" id="_set_viewing_index" value="' + index + '">' + '<div class="ibox-title"> ' + '<input type="hidden" id="set_filter_selected"> ' + '<div class="email-filters-title">' + '<h4>{{langmod.EMFILTERSLAB138}}: ' + data_set.name + '</h4>' + '<div class="text-right">' + '<button type="button" id="btn_add_new_set" onclick="showNewFilterSelector()" class="btn btn-success btn-xs mr5 mb10"><i class="fa fa-plus"></i></button>' + '</div>' + '</div>' + '<div class="dropdown" id="new_filter_selector">' + '<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">' + '<a class="dropdown-item" href="#" onclick="showNewFilterFormAccount()"><i class="fa fa-file-text-o"></i>{{langmod.EMFILTERSLAB136}}</a>' + '<a class="dropdown-item" href="#" onclick="showTemplatePicker()"><i class="fa fa-tags"></i>{{langmod.EMFILTERSLAB137}}</a>' + '</div>' + '</div>' + '</div> ' + '<div class="ibox-content filters-list-box" id="filter_list_box"> ' + filters_content + '</div> ' + '</div>'; $('#set_filters_wrapper').html(filters_html); $('#set_filter_selected').val(data_set.name); $('[data-toggle="tooltip"]').tooltip() $('#filters_list_wrapper').height($('.sets-account-list .ibox-content').height() - 30); } function showNewFilterSelector(){ $('#new_filter_selector').toggleClass('open'); hideOnClickOutside('#new_filter_selector', '#btn_add_new_set'); } function hideOnClickOutside(selector, second) { let forhide = false; // if (second === undefined) { // second = '#show_options_button'; // forhide = true; // } function outsideClickListener(event) { $target = $(event.target); if (!$target.closest(selector).length && !$target.closest(second).length && $(selector).is(':visible')) { $(selector).removeClass('open'); removeClickListener(); } } function removeClickListener() { document.removeEventListener('click', outsideClickListener) } document.addEventListener('click', outsideClickListener) } function showNewFilterFormAccount(){ let email = $('#set_filter_account').val(); $('#new_filter_selector').removeClass('open'); $('#editor_action').val('create'); $('#_filter_status_form_active').prop('checked', true); uchip.slideToggle('#email_filters_manager', '#email_filters_main', function(){ $('#filter_title_prefix_account').text('{{langmod.EMFILTERSLAB172}}'); $('#filter_title_account').text(email); $('#filter_for_account').val(email); filterForAccount(); }); } function getFilterData(){ let data_rules = []; $('.rules-filter-wrapper:visible .rules-filter').each(function(){ let rule = $(this); let rule_type_elem = rule.find('.rules-filter-first'); let selindex = rule_type_elem.prop('selectedIndex'); let rule_data = {}; rule_data.type = rule_type_elem.val(); if(selindex < 3 || selindex == 4){ rule_data.contains = rule.find('.rules-filter-contains').val(); rule_data.contains_values = rule.find('.rules-filter-value').val(); }else if(selindex == 3){ rule_data.contains = rule.find('.rules-filter-contains').val(); rule_data.contains_values = rule.find('.rules-filter-value').val(); rule_data.custom_rule = rule.find('.rules-filter-custom').val(); }else if(selindex == 5){ rule_data.size_type = rule.find('.rules-filter-size').val(); rule_data.quota = rule.find('.rules-filter-quota').val(); rule_data.unit = rule.find('.filter_size_unit:checked').val(); }else{ rule_data.date_type = rule.find('.rules-filter-date').val(); rule_data.contains = rule.find('.rules-filter-contains').val(); rule_data.contains_values = rule.find('.rules-filter-value').val(); } data_rules.push(rule_data); }); let data_actions = []; $('.actions-filters:visible .redirection-filter').each(function(){ let action = $(this); let action_type_elem = action.find('.redirection-filter-first'); let selindex = action_type_elem.prop('selectedIndex'); let action_data = {}; action_data.type = action_type_elem.val(); if(selindex < 2){ action_data.redirect_to = action.find('.action-redirect-to').val(); }else if(selindex > 1 && selindex < 4){ action_data.addres = action.find('.redirection-filter-address').val(); }else if(selindex > 3 && selindex < 5){ action_data.message = action.find('.redirection-filter-message').val(); } else if (selindex === 5) { action_data.message = action.find('.vacation-action-message').val(); action_data.subject = action.find('.vacation-action-subject').val(); action_data.sender = action.find('.vacation-action-sndradd').val(); action_data.often = action.find('.vacation-action-days').val(); action_data.addresses = action.find('.vacation-action-myadds').val(); }else if(selindex > 6 && selindex < 10){ action_data.flags = []; action.find('.redirection-filter-flags .action-flag-item:checked').each(function(){ action_data.flags.push($(this).val()); }); }else if(selindex == 10){ action_data.name = action.find('.action-var-name').val(); action_data.value = action.find('.action-var-value').val(); action_data.modifiers = []; action.find('.redirection-filter-vars .action-var-modifier:checked').each(function(){ action_data.modifiers.push($(this).val()); }); }else if(selindex == 11){ action_data.action_type = action.find('.action-notify-type').val(); action_data.target = action.find('.action-notify-target').val(); action_data.message = action.find('.action-notify-message').val(); action_data.sender = action.find('.action-notify-sender').val(); action_data.importance = action.find('.action-notify-importance').val(); action_data.options = action.find('.action-notify-options').val(); } data_actions.push(action_data); }); let general_info = {}; general_info.name = $('.filter_name_input:visible').val(); general_info.usage = $('#how_to_use').val(); general_info.status = parseInt($('.filter-status-check-form:checked').val()); if(general_info.usage == 'domains'){ general_info.domain = $('#save_type_domain_list').val(); }else if(general_info.usage == 'accounts'){ general_info.accounts = $('#filter_to_accounts').val(); } general_info.filter_type = $('.rules-selector:visible .type_filter:checked').val(); return JSON.stringify({ rules: data_rules, actions: data_actions, general: general_info }); } function presetBackFrom(from){ uchip.slideToggle('#list_presets', from, function(){ $('#rules_filter').html(''); $('#actions_filters_preset').html(''); }); } function showNewFilterForm(){ uchip.slideToggle('#goat_wrap', '#list_presets', function(){ $('#editor_action').val('update'); $('#_template_editor_title').html('{{langmod.EMFILTERSLAB4}}'); $('#preset_form_loader ').hide(); $('#new_filter_form').show(); templateInitForm(TEMPLATE_FORM_PARAMETERS); }); } function showTemplatePicker(){ $('#new_filter_selector').removeClass('open'); let table_html = tablePresets(presetlist, true); $('#modal_pick_template .modal-body').html(table_html); $('#modal_pick_template').modal('toggle'); setTimeout(function(){ $('._template_preset_table').DataTable().destroy(); $('._template_preset_table').DataTable({ "columnDefs": [ { "orderable": false, "targets": [1, 2, 3] } ] },15); }); } function templateInitForm(parameters){ html_rule = $('#rules_filter_raw').html(); html_action = $('.actions-filters_raw').html(); $(parameters.rules_wrapper).html(html_rule.replace(RuleRegExp, '0')); $(parameters.actions_wrapper).html(html_action.replace(ActionRegExp, '0')); bindTagsInput(0); } function listAccounts(){ let content_html = ''; content_html = '<table class="table table-striped email-accounts-table">' + '<thead>' + '<tr>' + '<th>{{langmod.EMFILTERSLAB103}}</th>' + '<th>{{langmod.EMFILTERSLAB104}}</th>' + '<th style="width:100px">{{langmod.EMFILTERSLAB105}}</th>' + '<th class="actions-td" style="width:30px">{{langmod.EMFILTERSLAB106}}</th>' + '</tr>' + '</thead>' + '<tbody id="table_email_account">' + '</tbody>' + '</table>'; // console.log('content_html', content_html); $('#table_email_container').append(content_html); tableAccounts(); } function tableAccounts(){ $('.email-accounts-table').DataTable().destroy(); mail_accounts_table = $('.email-accounts-table').on('processing.dt', function (e, settings, processing) { $('#DataTables_Table_0_processing').hide(); if (processing) { $('#accounts_loader').fadeIn('fast'); // $('#DataTables_Table_0').fadeOut('fast', function(){ // $('#accounts_loader').fadeIn('fast'); // }); } else { $('#accounts_loader').fadeOut('fast'); $('[data-toggle="tooltip"]').tooltip() // $('#accounts_loader').fadeOut('fast', function(){ // $('#DataTables_Table_0').fadeIn('fast'); // }); } }).DataTable({ "dom": '<"row"<"col-sm-4"l><"col-sm-4 filter-type"><"col-sm-4"f>>rt<"row"<"col-sm-6"i><"col-sm-6"p>>', serverSide: true, processing: true, ajax: { url: './{{users}}/index.php?module=email_filters&acc=listaccounts', type: 'POST', data:{ filters: filter_type } }, columnDefs: [ { targets: [-1, -2], orderable: false } ], columns: [ { data: 'email' }, { data: 'domain' }, { render: function(data, type, row){ return '<div class="td-filters">' + (row.filters !== false ? '<i class="fa fa-check-circle text-success" data-toggle="tooltip" title="" data-placement="top" aria-hidden="true" data-original-title="' + row.filters + (row.filters > 1 ? ' {{langmod.EMFILTERSLAB107}}' : ' {{langmod.EMFILTERSLAB108}}') + ' {{langmod.EMFILTERSLAB109}}"></i>' : '<i class="fa fa-ban text-warning subdomain-icon" title="" data-toggle="tooltip" data-placement="top" aria-hidden="true" data-original-title="{{langmod.EMFILTERSLAB110}}"></i>') + '</div>'; } }, { render: function(data, type, row){ return '<button class="btn btn-primary btn-xs" onclick="manageFilterAccount(\'' + row.email + '\',\'' + row.domain + '\',' + row.filters + ')"><i class="fa fa-filter" aria-hidden="true"></i> {{langmod.EMFILTERSLAB111}}</button>'; } } ], deferRender: true }); renderFilterTable(); } let filter_type = '*'; let ui_account_folders = []; function filterForAccount(){ html_rule = $('#rules_filter_raw').html(); html_action = $('.actions-filters_raw').html(); $('#rules_filter_account').html(html_rule.replace(RuleRegExp, '0')); $('#actions_filters_account').html(html_action.replace(ActionRegExp, '0')); $('#filter_value0').tagsinput({ tagClass: 'cwp-tags-input' }); $('#rule_custom0').tagsinput({ tagClass: 'cwp-tags-input' }); $('#rule_custom0').on('beforeItemAdd', function (event) { if (!varname_reg.test(event.item)) { event.cancel = true; noti_bubble('Forbiden characters were found!', 'Error!', 'error', false, false, '3000', true); } }); $('#_action_notifyoption0').tagsinput({ tagClass: 'cwp-tags-input' }); $('#_vacation_addresses0').tagsinput({ tagClass: 'cwp-tags-input' }); ui_account_folders.forEach(function (folder){ $('#action_mailbox0').append(new Option(folder, folder)); }); $('#_vacation_addresses0').on('beforeItemAdd', function (event) { if (!validateEmail(event.item)) { event.cancel = true; noti_bubble('Just valid email addresses allowed', 'Error!', 'error', false, false, '3000', true); } }); } function cancelManageFilterAccount(){ uchip.slideToggle('#list_filters', '#email_filters_sets'); } function manageFilterAccount(email, domain, havefilters){ // if(havefilters !== false){ // $('#filters_account_modal').modal('show'); // }else{ // uchip.slideToggle('#email_filters_manager', '#email_filters_main', function(){ // $('#filter_title_prefix_account').text('{{langmod.EMFILTERSLAB172}}'); // $('#filter_title_account').text(email); // $('#filter_for_account').val(email); // filterForAccount(); // }); // } $('#manager_content_wrapper').html('<div class="ibox-content-loader">' + '<div class="table_cron_loader accounts_loader"><span><i class="fa fa-circle-o-notch fa-spin"></i></span></div>' + '</div>'); $('#title_manage_filter').text('Managing Filters for ' + email); uchip.slideToggle('#email_filters_sets', '#list_filters'); uchip.call('module=email_filters&acc=filtersaccount', { data: 'account=' + email, callback: function(response){ renderFilterSets(response, email); ui_account_folders = response.folders; } }); } function statusFilterSet(elem, index){ $('#set_filter_account_wrapper').fadeOut('fast', function(){ $('#filter_set_loader').fadeIn('fast'); }); let filter_set = $(elem).data('filterset'); uchip.call('module=email_filters&acc=statusofset', { data: 'status=' + ($(elem).is(':checked') ? 1 : 0) + '&set_name=' + filter_set.name + '&account=' + $('#set_filter_account').val(), callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { noti_bubble('{{langmod.EMFILTERSLAB159}}', '{{langmod.EMFILTERSLAB101}}', 'success', false, false, '3000', true); $('.chk-set-status:not(#_chk_status_set_list_' + index + ')').prop('checked', false); let item_active = $('.set-item.set-item-active'); item_active.find('.badge-success').remove(); item_active.find('.radio').removeClass('radio-success'); item_active.addClass('set-item-inactive').removeClass('set-item-active'); $(elem).closest('.set-item').addClass('set-item-active'); $(elem).closest('.set-item').removeClass('set-item-inactive'); $('.set-item.set-item-active').find('.set-item-info-name').after(' <span class="badge badge-success">{{langmod.EMFILTERSLAB166}}</span>'); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB144}}'; } } $(elem).prop('checked', !$(elem).is(':checked')); noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); } $('#filter_set_loader').slideUp('fast', function () { $('#set_filter_account_wrapper').slideDown('fast'); }); } }); } function deleteSetInAccount(index, action){ let li_element = $('#_list_set_item_' + index); let set_name = li_element.data('setname'); if (action !== true) { $('#conf_del_buttons').html('<button type="button" class="btn btn-white" data-dismiss="modal">{{langmod.EMFILTERSLAB131}}</button>' + '<button type = "button" class= "btn btn-primary" onclick="deleteSetInAccount(' + index + ', true)" > {{langmod.EMFILTERSLAB132}}</button >'); $('#modal_del_item_filter .modal-body').html('<p style="font-weight: 500;">{{langmod.EMFILTERSLAB158}}: <b>' + set_name + '</b>.' + '<br> <span style="font-weight: bold;">{{langmod.EMFILTERSLAB150}}</span></p >'); $("#modal_del_item_filter").modal('toggle'); } else { li_element.addClass('deleting_row'); uchip.handleButton('#_btn_manage_set_list_' + index, 'fa-edit'); uchip.handleButton('#_btn_delete_set_list_' + index, 'fa-trash'); $('#_chk_status_set_list_' + index).prop('disabled', true); $("#modal_del_item_filter").modal('toggle'); uchip.call('module=email_filters&acc=deleteset', { data: 'set_name=' + set_name + '&account=' + $('#set_filter_account').val(), callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { noti_bubble('{{langmod.EMFILTERSLAB159}}', '{{langmod.EMFILTERSLAB101}}', 'success', false, false, '3000', true); li_element.slideUp('fast', function () { li_element.remove(); if ($('.set-item').length === 0) { $('#_set_list_content').slideUp('fast', function(){ $(this).html(emptySetListHtml()) $(this).slideDown('fast'); }); } if (index == $('#_set_viewing_index').val()){ $('#set_filters_wrapper').html(filterListInfoHtml()); $('.select-filter-set').height($('.sets-account-list').height()); $('#filter_set_loader').height($('.sets-account-list').height()); } }); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB143}}'; } else if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB144}}'; } } noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); li_element.removeClass('deleting_row'); uchip.handleButton('#_btn_manage_set_list_' + index, 'fa-edit', true); uchip.handleButton('#_btn_delete_set_list_' + index, 'fa-trash', true); $('#_chk_status_set_list_' + index).prop('disabled', false); } } }); } } function emptySetListHtml(){ return '<div class="empty-set-filter">' + '<div><h5>{{langmod.EMFILTERSLAB139}}</h5><button class="btn-primary btn-xs btn-block" onclick="showNewSetForm()">{{langmod.EMFILTERSLAB140}}</button></div>' + '</div>'; } function filterListInfoHtml(){ return '<div class="select-filter-set">' + '<h4>{{langmod.EMFILTERSLAB145}} ' + '<button type="button" onclick="" class="btn btn-primary btn-xs mr5 mb10"><i class="fa fa-cogs"></i></button>' + ' {{langmod.EMFILTERSLAB146}}</h4>' + '</div>' } function renderFilterSets(data, email){ let sets_html = emptySetListHtml(); if(data.sets.length > 0){ sets_html = '<ul>'; data.sets.forEach(function(filter_set, index){ sets_html += '<li data-set="" data-setname="' + filter_set.name + '" id="_list_set_item_' + index + '" data-index="' + index + '" ' + 'class="set-item ' + (filter_set.active === true ? 'set-item-active' : 'set-item-inactive') + '">' + '<div class="row">' + '<div class="col-md-12">' + '<div class="set-item-info">' + '<div class="switch">' + '<div class="onoffswitch">' + '<input type="checkbox"' + (filter_set.active === true ? ' checked ' : ' ') + 'class="onoffswitch-checkbox chk-set-status" onchange="statusFilterSet(this, ' + index + ')"' + 'data-filterset=\'' + JSON.stringify(filter_set) + '\' name="set-filter-status" id="_chk_status_set_list_' + index + '">' + '<label class="onoffswitch-label" for="_chk_status_set_list_' + index + '">' + '<span class="onoffswitch-inner"></span>' + '<span class="onoffswitch-switch"></span>' + '</label>' + '</div>' + '</div>' + '<span class="set-item-info-name">' + filter_set.name + '</span>' + (filter_set.active === true ? ' <span class="badge badge-success">{{langmod.EMFILTERSLAB166}}</span>' : '') + // '<div class="radio radio-' + (filter_set.active === true ? 'success' : 'plain') + '">' + // '<input id="_chk_status_set_list_' + index + '" onchange="statusFilterSet(this)" data-filterset=\'' + JSON.stringify(filter_set) + '\' name="set-filter-status" ' + // (filter_set.active === true ? 'checked' : '') + ' onchange="" type="radio" id="filter_set_' + index + '" value="">' + // '<label for="filter_set_' + index + '">' + filter_set.name + '</label>' + // (filter_set.active === true ? ' <span class="badge badge-success">{{langmod.EMFILTERSLAB166}}</span>' : '') + // '</div>' + '</div>' + '<div class="set-item-buttons">' + '<button type="button" id="_btn_manage_set_list_' + index + '" data-set=\'' + JSON.stringify(filter_set) + '\' onclick="showFiltersInSet(this, ' + index + ')"' + ' class="btn btn-primary btn-xs" style="margin-right:5px;">' + '<i class="fa fa-cogs"></i>' + '</button>' + '<button type="button" id="_btn_delete_set_list_' + index + '" onclick="deleteSetInAccount(' + index + ')" class="btn btn-danger btn-xs">' + '<i class="fa fa-trash"></i>' + '</button>' + '</div>' + '</div>' + '</div>' + '</li>'; }); sets_html += '</ul>'; } let content_html = '<div class="row">' + '<div class="col-md-6 sets-account-list">' + '<div class="ibox" id="set_filter_account_wrapper"> ' + '<div class="ibox-title"> ' + '<input type="hidden" id="set_filter_account"> ' + '<div class="email-filters-title">' + '<h4>{{langmod.EMFILTERSLAB157}}</h4>' + '<div class="text-right">' + '<button type="button" id="btn_add_new_set" onclick="showNewSetForm()" class="btn btn-success btn-xs mr5 mb10"><i class="fa fa-plus"></i> {{langmod.EMFILTERSLAB176}}</button>' + '</div>' + '</div>' + '<div class="dropdown" id="new_set_dropdown">' + '<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">' + '<div class="form-group" style="margin-bottom:5px">' + '<label>{{langmod.EMFILTERSLAB155}}</label> ' + '<input type="text" data-required="true" id="set_name" placeholder="{{langmod.EMFILTERSLAB156}}" class="form-control">' + '</div>' + '<div class="btn-container"> ' + '<button class="btn btn-warning btn-xs" id="btn_cancel_set" onclick="showNewSetForm()" style="margin-right:10px">' + '<i class="fa fa-ban" style="margin-right:5px"></i>{{langmod.EMFILTERSLAB5}}</button>' + '<button class="btn btn-success btn-xs" id="btn_save_set" onclick="saveFilterSet()"><i class="fa fa-floppy-o" style="margin-right:5px"></i>{{langmod.EMFILTERSLAB6}}</button>' + '</div>' + '</div>' + '</div>' + '</div> ' + '<div class="ibox-content" id="_set_list_content"> ' + '<div class="container-fluid">' + '<div class="row head-set-list">' + '<div class="col-md-2">Status</div>' + '<div class="col-md-10">Set name</div>' + '</div>' + '</div>' + sets_html + '</div> ' + '</div>'+ '<div class="filter-set-loader-wrapper" id="filter_set_loader">' + '<div class="filter-set-loader"><span><i class="fa fa-circle-o-notch fa-spin"></i></span></div>' + '</div>' + '</div>' + '<div class="col-md-6" id="set_filters_wrapper">' + filterListInfoHtml()+ '</div>' + '</div>'; $('#manager_content_wrapper').html(content_html); $('.select-filter-set').height($('.sets-account-list').height()); $('#filter_set_loader').height($('.sets-account-list').height()); $('#set_filter_account').val(email); } function showNewSetForm(){ $('#new_set_dropdown').toggleClass('open'); if($('#new_set_dropdown').hasClass('open')){ $('#set_name').focus(); }else{ uchip.validator('#set_name', true); } } function saveFilterSet(){ if(uchip.validator('#set_name')){ uchip.handleButton('#btn_cancel_set', 'fa-ban'); uchip.handleButton('#btn_save_set', 'fa-floppy-o'); uchip.handleButton('#btn_add_new_set', 'fa-plus'); let set_name = encodeURIComponent($('#set_name').val()); uchip.call('module=email_filters&acc=saveset', { data: 'name=' + set_name + '&account=' + $('#set_filter_account').val(), callback: function(response){ if(response.hasOwnProperty('result') && response.result == 'success'){ showNewSetForm(); $('#set_name').val(''); renderFilterSets(response, $('#set_filter_account').val()); noti_bubble('{{langmod.EMFILTERSLAB100}}','{{langmod.EMFILTERSLAB101}}','success',false,false,'3000', true); }else{ let message = '{{langmod.EMFILTERSLAB141}}'; if(response.hasOwnProperty('code') && response.code == 1){ message = '{{langmod.EMFILTERSLAB142}}'; } noti_bubble(message,'{{langmod.EMFILTERSLAB96}}','error',false,false,'3000', true); } uchip.handleButton('#btn_cancel_set', 'fa-ban', false); uchip.handleButton('#btn_save_set', 'fa-floppy-o', false); uchip.handleButton('#btn_add_new_set', 'fa-plus', false); } }); } } function cancelFilterFormAccount(){ uchip.slideToggle('#email_filters_main', '#email_filters_manager', function(){ $('#rules_filter_account').html(''); $('#filter_name_toaccount').val(''); $('#actions_filters_account').html(''); $('#_allof_account').prop('checked', true); }); } function cancelManage(){ confirmChangeTab(function(){ cancelFilterFormAccount(); }); } function saveFilterAccount(){ let valid = validFilter(); if(valid){ let filter_data = getFilterData(); let filter_set = $('#set_filter_selected').val(); let filter_name = $('.filter_name_input:visible').val(); uchip.slideToggle('#filter_account_form_loader', '#filter_account_form'); uchip.handleButton('.cancel-preset-account','fa-ban'); uchip.handleButton('.save-preset-account','fa-floppy-o'); if ($('#editor_action').val() === 'create'){ mkSaveNewItem(filter_data, filter_set, filter_name); }else{ mkUpdateItem(filter_data, filter_set, filter_name); } } } function mkUpdateItem(filter_data, filter_set, filter_name){ uchip.call('module=email_filters&acc=updatefilter', { data: 'data=' + Base64.encode(filter_data) + '&account=' + $('#filter_for_account').val() + '&original_name=' + $('#filter_name_toaccount').data('original') + '&set=' + filter_set, callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { let editing_index = $('#editing_index').val(); noti_bubble('{{langmod.EMFILTERSLAB152}}', '{{langmod.EMFILTERSLAB101}}', 'success', false, false, '3000', true); $('.filters-list-item-name[data-index=' + editing_index + ']').text(response.filter_name); let li_filter = $('#_filter_list_item_' + editing_index); let button_status = $('#_btn_status_filter_' + editing_index); li_filter.data('filtername', response.filter_name); li_filter.data('st', response.filter_status); let btn_class = 'btn-warning'; let ico_class = 'fa-ban'; let button_tittle = '{{langmod.EMFILTERSLAB161}}'; if (response.filter_status === 1){ li_filter.removeClass('filter-list-item-inactive'); btn_class = 'btn-primary'; ico_class = 'fa-check'; button_tittle = '{{langmod.EMFILTERSLAB160}}' }else{ li_filter.addClass('filter-list-item-inactive'); } button_status.removeClass().addClass('btn ' + btn_class + ' btn-xs'); button_status.find('.fa').removeClass().addClass('fa ' + ico_class); button_status.prop('title', button_tittle); cancelFilterFormAccount(); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB143}}'; } else if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB144}}'; } } noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); } uchip.slideToggle('#filter_account_form', '#filter_account_form_loader'); uchip.handleButton('.cancel-preset-account', 'fa-ban', true); uchip.handleButton('.save-preset-account', 'fa-floppy-o', true); } }); } function mkSaveNewItem(filter_data, filter_set, filter_name){ uchip.call('module=email_filters&acc=filtertoaccount', { data: 'data=' + Base64.encode(filter_data) + '&account=' + $('#filter_for_account').val() + '&set=' + filter_set, callback: function (response) { if (response.hasOwnProperty('result') && response.result === 'success') { noti_bubble('{{langmod.EMFILTERSLAB153}}', '{{langmod.EMFILTERSLAB101}}', 'success', false, false, '3000', true); displayNewFilter({ 'name': filter_name, 'status': response.filter_status }, filter_set); cancelFilterFormAccount(); } else { let message_error = '{{langmod.EMFILTERSLAB141}}'; if (response.hasOwnProperty('code')) { if (response.code == 2) { message_error = '{{langmod.EMFILTERSLAB143}}'; } else if (response.code == 1) { message_error = '{{langmod.EMFILTERSLAB144}}'; } } noti_bubble(message_error, '{{langmod.EMFILTERSLAB96}}', 'error', false, false, '5000', true); } uchip.slideToggle('#filter_account_form', '#filter_account_form_loader'); uchip.handleButton('.cancel-preset-account', 'fa-ban', true); uchip.handleButton('.save-preset-account', 'fa-floppy-o', true); } }); } function displayNewFilter(filter_data, filter_set){ let items_qty = $('.filters-list-item').length; if (items_qty == 0){ $('.filters-list-box').html('<ul class="ul-filters-list" id="set_filters_list"></ul>'); } $('#set_filters_list').append(redenderFilterHtml(filter_data, filter_set, items_qty)); let set_index = $('#_set_viewing_index').val(); let set_data = $('#_btn_manage_set_list_' + set_index).data('set'); set_data.filters.push(filter_data); $('#_btn_manage_set_list_' + set_index).data('set', set_data); $('[data-toggle="tooltip"]').tooltip(); } function setFilterTable(elem){ filter_type = $(elem).val(); tableAccounts(); } function renderFilterTable(){ let content = '<label>Show'+ '<select onchange="setFilterTable(this)" name="" class="form-control input-sm">' + '<option value="*" ' + (filter_type == '*' ? 'selected' : '') + '>{{langmod.EMFILTERSLAB112}}</option>' + '<option value="1" ' + (filter_type == '1' ? 'selected' : '') + '>{{langmod.EMFILTERSLAB113}}</option>' + '<option value="0" ' + (filter_type == '0' ? 'selected' : '') + '>{{langmod.EMFILTERSLAB114}}</option>' + '</select>' + '</label>' $('.filter-type').html(content); } function saveType(elem){ let value = $(elem).val(); $('.pick-on-save').hide(); if(value == 'domains'){ $('#save_type_domains').show(); }else if(value == 'accounts'){ $('#save_type_accounts').show(); } save_type_domains save_type_accounts }