function changeView(view){ let another_view = view == 'row_list_cron' ? 'row_panel_cron' : 'row_list_cron'; $('#' + view).slideUp('fast', function(){ $('#' + another_view).slideDown('fast'); }); if(view == 'row_panel_cron'){ $('#simple_scheduled').show(); $('#advance_options').hide(); $('#crontab_command').val(''); $('#simple_selected').val('hourly'); $('#cron_description').val(''); $('#form_title').text('{{ langmod.CRCREATE }}'); resetAdvance('#sel_min'); resetAdvance('#sel_hour'); resetAdvance('#sel_day'); resetAdvance('#sel_month'); resetAdvance('#sel_weekdays'); $('#line_editing').val(''); $('#status_editing').val(''); } } const resetAdvance = (idelemen) => { let option = $(idelemen).data('list').options[0].value; populateOnEdit(idelemen, option); } const setButtonAllState = (state) => { if(state){ $('#selunselall_button').html('{{ langmod.CRUNSELECT }}'); }else{ $('#selunselall_button').html('{{ langmod.CRSELECTALL }}'); } all_selected = state; } const saveButtonState = (elem_button, state) => { let button_icon = elem_button.find('.fa'); let cancel_buton = $('#cron_cancel_button'); if(state === true){ elem_button.addClass('disabled'); cancel_buton.addClass('disabled'); button_icon.removeClass('fa-floppy-o'); button_icon.addClass('fa-circle-o-notch fa-spin'); }else{ elem_button.removeClass('disabled'); button_icon.removeClass('fa-circle-o-notch'); button_icon.removeClass('fa-spin'); cancel_buton.removeClass('disabled'); button_icon.addClass('fa-floppy-o'); } } String.prototype.isEmpty = function() { return (this.length === 0 || !this.trim()); }; String.prototype.replaceAll = function(find, replace) { return this.replace(new RegExp(find, 'g'), replace); } const createCron = (elem_button) => { elem_button = $(elem_button); let data_send = ''; let invalid = false; let type_scheduled = ''; if($('#advance_options').is(':visible')){ type_scheduled = 'advance'; $('#advance_options').find('.advance_options_item').each(function(){ let val_item = $(this).data('items_selecteds'); let opt_selection = $(this).parent().find('.cron_opt_selection'); if(Array.isArray(val_item)){ if(val_item.length > 0){ val_item = JSON.stringify(val_item); opt_selection.removeClass('error'); }else{ opt_selection.addClass('error'); invalid = true; } }else if(val_item != undefined){ val_item = val_item.value; opt_selection.removeClass('error'); }else{ opt_selection.addClass('error'); invalid = true; } data_send += $(this).attr('id') + '=' + val_item + '&'; }); data_send = data_send.substring(0, data_send.length - 1); }else{ type_scheduled = 'simple'; data_send = 'simple_selected=' + $('#simple_selected').val(); } let crontab_command_input = $('#crontab_command'); let comment = $('#cron_description').val(); let crontab_command = encodeURIComponent(crontab_command_input.val()); if(crontab_command.isEmpty()){ crontab_command_input.addClass('error'); crontab_command_input.focus(); invalid = true; } if(!invalid){ saveButtonState(elem_button, true); let line_editing = $('#line_editing').val(); let endpoint_url = ''; if(line_editing.isEmpty()){ endpoint_url = "./{{users}}/index.php?module=crontab&acc=add"; }else{ let status_editing = $('#status_editing').val(); line_editing = '&line=' + line_editing + '&status_editing=' + status_editing; endpoint_url = "./{{users}}/index.php?module=crontab&acc=edit"; } $.ajax({ type: "POST", url: endpoint_url, data: 'type=' + type_scheduled + '&' + data_send + '&comment=' + comment + '&crontab_command=' + crontab_command + line_editing, complete: function(datos){ saveButtonState(elem_button, false); cronTable(datos.responseJSON.list); changeView('row_panel_cron'); } }); }else{ noti_bubble('{{ langmod.CRINVALIDCREATION }}','Error','error',false,false,'4000',true); } // $.ajax({ // type: "POST", // url: "./{{users}}/index.php?module=crontab&acc=addcront", // data: 'type=' + type_scheduled, // complete: function(datos){ // // } // }); } const updateAdvanced = (elem_id) => { let elem = $('#' + elem_id); let selecteds = elem.data('items_selecteds'); let selecteds_container = elem.parent().find('.cron_opt_selection'); let sels = ''; if(Array.isArray(selecteds)){ if(selecteds.length > 0){ sels = '(' + selecteds.join(',') + ')'; let list = elem.data('list'); if(selecteds.length == list.items.length){ setButtonAllState(true); } }else{ sels = 'None selected.'; setButtonAllState(false); } }else{ sels = selecteds.label; } selecteds_container.text(sels); } const crontab_run = (elem) =>{ let command = $(elem).data('command'); noti_bubble('{{ langmod.CRLABEL4 }}','{{ langmod.CRLABEL6 }}','success',true,false,'3000',true); $.ajaxSetup({ headers: { 'csrftoken' : '{{ tokenajax }}' } }); $.ajax({ type: "POST", url: "./{{users}}/index.php?module=crontab", data:"acc=run_cron&command=" + command, complete: function(datos){ return false; } }); return false; } const showTimeMenu = (elem, title, additional) => { let elem_id = $(elem).attr('id'); if($('#main_cont_' + elem_id).is(':visible')){ $('#main_cont_' + elem_id).remove(); $('#' + elem_id).parent().find('.fa-sliders.selected').removeClass('selected'); }else{ let data_list = $(elem).data('list'); let items = data_list.items; let selecteds = $(elem).data('items_selecteds'); // if(selecteds == 'All'){ // selecteds = items; // } var col_size = ''; if(elem_id == 'sel_month'){ col_size = 'col-md-6'; }else if(elem_id == 'sel_weekdays'){ col_size = 'col-md-6'; }else{ col_size = 'col-md-2'; } let selected_option = ''; let days_selected = []; if(Array.isArray(selecteds)){ selected_option = 'custom'; days_selected = selecteds; }else{ selected_option = selecteds.value; } let html_config = '
' + '
' + '
' + '' + '
' + '
' + '
'; data_list.options.forEach(function(option, index){ html_config += '
'; }); html_config += '
'; html_config += '
' + '
' + '
' + '
' + '
'; // let html_config = '

Select ' + title + '

'; let selected_count = 0; items.forEach(function(item){ let isSelected = ''; if(days_selected.indexOf(item.value) > -1){ selected_count++; isSelected = 'class="selected"'; } html_config += '
' + item.label + '
'; }); html_config +='
' + '
' + '{{ langmod.CRSELECTALL }}' + '
' + '
' + '
' + '
' + '
' + '
' + '
'; // html_config = html_config.replace('{{ITEMS}}', html_config_items); // html_config += '
Unselect all
'; $(elem).parent().find('.fa-sliders').addClass('selected'); $(elem).parent().parent().prepend(html_config); // $('#main_cont_' + elem_id).focus(); // document.getElementById().focus(); setTimeout(function(){ $('html, body').animate({ scrollTop: $('#' + elem_id).offset().top - ($('.mail-config-menu-container').height() + 100) }, 300); },50); if(selected_count == items.length){ setButtonAllState(true); }else{ setButtonAllState(false); } $('.i-checks').iCheck({ checkboxClass: 'icheckbox_square-green', radioClass: 'iradio_square-green', }); $('.i-checks').on('ifChecked', function(event){ if($(event.target).val() != 'custom'){ $('#' + elem_id).data('items_selecteds', $(event.target).data('option')); $('.cron-item-time span').removeClass('selected'); }else{ setTimeout(function(){ $('.cron_advance_tab li:eq(1) a').tab('show'); },200); $('#' + elem_id).data('items_selecteds', []); } updateAdvanced(elem_id); }); $('.cron-item-time').click(function(){ let selecteds = $('#' + elem_id).data('items_selecteds'); let current_option = $('.cron_option :checked'); if(current_option.val() != 'custom'){ current_option.iCheck('uncheck'); $('#custom_option').iCheck('check'); } let span_item = $(this).find('span'); if(span_item.hasClass('selected')){ span_item.removeClass('selected'); }else{ span_item.addClass('selected'); } let sels = []; $('.cron-item-time span.selected').each(function(index){ sels.push($(this).data('value')); }); $('#' + elem_id).data('items_selecteds', sels); updateAdvanced(elem_id); }); if(selected_option == 'custom'){ $('.cron_advance_tab li:eq(1) a').tab('show'); } hideOnClickOutside('#main_cont_' + elem_id, '#' + elem_id + (additional != undefined ? ', ' + additional : '')); } } let all_selected = false; const handleOptSelection = (button, master_elem) => { let gparent = $(button).parent().parent(); let items = gparent.find('.cron-item-time'); let new_items = []; if(!all_selected){ items.each(function(){ let item_elem = $(this).find('span'); item_elem.addClass('selected'); new_items.push(item_elem.data('value')); }); all_selected = true; }else{ items.each(function(){ $(this).find('span').removeClass('selected'); }); all_selected = false; } $('#' + master_elem).data('items_selecteds', new_items); updateAdvanced(master_elem); } const hideOnClickOutside = (selector, second) => { let forhide = false; if(second === undefined){ second = '#show_options_button'; forhide = true; } const outsideClickListener = (event) => { $target = $(event.target); if (!$target.closest(selector).length && !$target.closest(second).length && $(selector).is(':visible')) { $(selector).parent().find('.fa-sliders.selected').removeClass('selected'); if(forhide){ $(selector).hide(); }else{ $(selector).remove(); } $(selector).remove(); removeClickListener(); } } const removeClickListener = () => { document.removeEventListener('click', outsideClickListener) } document.addEventListener('click', outsideClickListener) } function showAdvanceOptions(){ if($('#simple_scheduled').is(':visible')){ var to_show = 'advance_options'; var to_hide = 'simple_scheduled'; }else{ var to_hide = 'advance_options'; var to_show = 'simple_scheduled'; } $('#' + to_hide).slideUp('fast', function(){ $('#' + to_show).slideDown('fast'); }); } const showMoreData = (elem, title) => { let elem_id = $(elem).attr('id'); if($('#main_cont_' + elem_id).is(':visible')){ $('#main_cont_' + elem_id).remove(); return; } let position = $(elem).offset(); let width_elem = $(elem).width(); let factor = 6; if(width_elem > 55){ factor = 5; } let left_px = position.left - (width_elem * factor); let items = $(elem).data('time'); let menu_html = '
'+ '
' + '

' + title + '

'+ '
'; items.forEach(function(item){ menu_html += '
' + item + '
'; }); menu_html += '
' + '
' + '
'; hideOnClickOutside('#main_cont_' + elem_id, '#' + elem_id); $(elem).append(menu_html); // $(menu_html).insertBefore(elem); } const advanceValueShow = (option_value, title, title_short, line) =>{ let slices = option_value.split(','); let html = ''; if(option_value.length > 5){ html = '
{{ langmod.CRSHOWMORE }}' + slices.length + '
'; // html = '
Show +' + slices.length + '
'; }else{ html = '
(' + slices.join(',') + ' )
'; } return html; } const timeInfo = (info_time, line) => { let description = ''; let pattern = ''; if(info_time.type == 'simple'){ description = '
' + info_time.data.label + '
'; pattern = info_time.data.pattern; }else{ description = '
' + advanceValueShow(info_time.data.minutes,'{{ langmod.CRSELECTEDM }}','mins', line) + ' ' + advanceValueShow(info_time.data.hours,'{{ langmod.CRSELECTEDM }}','hours', line) + ' ' + advanceValueShow(info_time.data.days,'{{ langmod.CRSELECTEDD }}','days', line) + ' ' + advanceValueShow(info_time.data.months,'{{ langmod.CRSELECTEDMT }}','months', line) + ' ' + advanceValueShow(info_time.data.weekdays,'{{ langmod.CRSELECTEDWD }}','weedays', line) + '
'; } let html_time = '
' + '
' + '' + description + ' ' + '
' + // '' + '
'; return html_time; } const replaceQuotes = (content) =>{ content = content.replaceAll('{Q1}','"'); content = content.replaceAll('{Q2}',"'"); content = content.replaceAll('{Q3}',"`"); return content; } const cronTable = (cron_list) => { let table_content = ''; let content_html = ''; if(cron_list.length > 0){ cron_list.forEach(function(cron_item){ let tr_class = ''; let act_icon = 'fa-ban'; let act_title = 'Deactivate'; if(cron_item.status == false){ tr_class = 'class="cron_line_inactive"'; act_icon = 'fa-check'; act_title = 'Activate'; } table_content += '' + '' + cron_item.line + '' + '' + replaceQuotes(cron_item.command) + '' + '' + timeInfo(cron_item.time, cron_item.line) + '' + '' + '
' + '' + '' + '' + '