var sActionButtons = '';
$(document).ready( () => {
$('.menu-desktop a').click(function() {
const enlace = this;
if($(enlace).data("url") != undefined && $(enlace).data("url") != ""){
const datosTracker = {};
const urlAccess = "./app/backend/ajax.php?module=horizontal_active&id=" + $(enlace).data("id");
callWebservice(urlAccess, "get", datosTracker, (response) =>{
location.href = $(enlace).data("url");
});
}else{
location.href = $(enlace).attr("href");
}
});
$('a[data-widget="pushmenu"]').click(function(){
//El + convierte el localstorage a entero, ya que solo puede almacenar cadenas
if (+getCookie("sidebar-collapse")) {
setCookie("sidebar-collapse", 0, 365);
} else {
setCookie("sidebar-collapse", 1 ,365);
}
});
$('a[data-widget="pushmenu"]').on('shown.lte.pushmenu', function() {
$('#tabla').DataTable().columns.adjust();
});
$('a[data-widget="pushmenu"]').on('collapsed.lte.pushmenu', function() {
$('#tabla').DataTable().columns.adjust();
});
setSelect2();
});
function setSelect2(){
$( "select" ).each(function( index ) {
if (!$(this).data('select2')) {
let options = {};
if($(this).find('option').length < 5){
options.minimumResultsForSearch = -1;
}
$(this).select2(options);
}
});
}
function replaceUrlParam(url, paramName, paramValue)
{
if (paramValue == null) {
paramValue = '';
}
var pattern = new RegExp('\\b('+paramName+'=).*?(&|#|$)');
if (url.search(pattern)>=0) {
return url.replace(pattern,'$1' + paramValue + '$2');
}
url = url.replace(/[?#]$/,'');
return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue;
}
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
function getContrastYIQ(hexcolor){
hexcolor = hexcolor.replace("#", "");
var r = parseInt(hexcolor.substr(0,2),16);
var g = parseInt(hexcolor.substr(2,2),16);
var b = parseInt(hexcolor.substr(4,2),16);
var yiq = ((r*299)+(g*587)+(b*114))/1000;
return (yiq >= 128) ? 'black' : 'white';
}
const callWebservice = (url, type, datos, callBack) => {
var jqxhr = $.ajax({
url: url,
type: type,
data: datos
})
.done(function(response) {
callBack(response);
})
.fail(function(error) {
console.log( error );
})
.always(function() {
});
};
function initTable(module, aColumns, callback, baseUrl){
if(baseUrl == undefined){
baseUrl = "backend/";
}
const table = $('#tabla').DataTable({
deferRender: true,
scrollY: 'calc(99vh - 280px)',
scroller: {
rowHeight: 41,
loadingIndicator: true,
},
// stateSave: true,
"order": [],
/*
"language": {
"url": "./resources/vendor/datatables/es_es.json"
},
*/
"ajax": {
"url": "./app/backend/ajax.php?module=" + module + "_list",
"dataSrc": ""
},
"initComplete": function(settings, json){
initTableButtons(module, baseUrl);
$('#tabla tbody tr').dblclick(function(e) {
console.log(e.target);
if ($(e.target).is(':not(input[type=checkbox])') && $(e.target).is(':not(a)') && $(e.target).is(':not(i)')) {
$(this).find('.action-edit').click();
}
});
if(callback != undefined){
const tableTemp = settings.oInstance.api();
callback(tableTemp);
}
},
columns: aColumns
});
}
// Función genérica de filtrado de tablas
const selectFields = ['iot_type', 'groups', ];
const booleanFields = ['is_geolocation', 'is_active'];
function initTableFilters(fields, col_size=4) {
const table = $('#tabla').DataTable();
// Reset every filter
table.columns().search('').draw();
// Add the filters and its events
if (fields.length == 1) {
const filterHtml = `
Clear Filters
`;
$('input[type=search]').addClass('field_filter');
$('input[type=search]').attr('data-id', '0');
$('#tabla_filter').append(filterHtml);
$('.clear_filters').click(function() {
$('.field_filter[type=search]').val('').keyup();
});
$('.field_filter[type=search]').keyup(function() {
if ($(this).val() != "") {
table.column(parseInt($(this).data('id'))).search($(this).val()).draw();
} else {
table.column(parseInt($(this).data('id'))).search('').draw();
}
});
} else {
let filterHtml = `
Clear Filters
Filter Data
`;
$('#tabla_filter').html(filterHtml);
$('.filter_list').hide();
initTableFiltersRec(fields, 0, col_size);
}
}
function initTableFiltersRec(fields, index, col_size) {
const table = $('#tabla').DataTable();
if (index < fields.length) {
const title = $(table.column(index).header()).text();
let filterHtml = `
`;
if (selectFields.includes(fields[index])) {
const urlData = `./app/backend/ajax.php?module=${fields[index]}_list`;
callWebservice(urlData, "post", {}, (response) => {
const elements = JSON.parse(response);
filterHtml += `
`;
$('#tabla_filter .filter_list').append(filterHtml);
initTableFiltersRec(fields, index + 1, col_size);
});
} else if (booleanFields.includes(fields[index])) {
filterHtml += `
`;
$('#tabla_filter .filter_list').append(filterHtml);
initTableFiltersRec(fields, index + 1, col_size);
} else if (fields[index] == 'is_db_connection') {
filterHtml += ``;
$('#tabla_filter .filter_list').append(filterHtml);
initTableFiltersRec(fields, index + 1, col_size);
} else if (fields[index] != 'id') {
filterHtml += ``;
$('#tabla_filter .filter_list').append(filterHtml);
initTableFiltersRec(fields, index + 1, col_size);
} else {
initTableFiltersRec(fields, index + 1, col_size);
}
} else {
$('#tabla_filter').append('');
$('.activate_filters').click(function() {
if ($('.filter_list').is(':visible')) {
$('.filter_list').hide();
$('.activate_filters i').removeClass('fa-minus').addClass('fa-plus');
} else {
$('.filter_list').show();
$('.activate_filters i').removeClass('fa-plus').addClass('fa-minus');
}
setSelect2();
});
$('.clear_filters').click(function() {
$('.field_filter[type=text]').val('').keyup();
$('select.field_filter').val('').change();
table.columns().search('').draw();
});
$('.field_filter[type=text]').keyup(function() {
if ($(this).val() != "") {
table.column(parseInt($(this).data('id'))).search($(this).val()).draw();
} else {
table.column(parseInt($(this).data('id'))).search('').draw();
}
});
$('select.field_filter').change(function() {
if ($(this).parent().find('span').text() == 'DB Connection:') {
$('#tabla').DataTable().column(2).search('').draw();
if ($(this).val() != "") {
const ids = $('td i.fa-plug.' + (($(this).val() == 1)? 'text-green' : 'text-danger') + '').map(function() {return '^' + $(this).data('id') + '$'}).get().join('|');
$('#tabla').DataTable().column(2).search(ids, regex=true).draw();
}
} else {
if ($(this).val() != "") {
table.column(parseInt($(this).data('id'))).search('^' + $(this).val() + '$', true, false, false).draw();
} else {
$('#tabla').DataTable().column($(this).data('id')).search('').draw();
}
}
});
}
}
function initTableButtons(module, baseUrl){
if(baseUrl == undefined){
baseUrl = "backend/";
}
$('.action-edit').click(function(){
var id = $(this).parent().parent().find('input#id').val();
location.href= "index.php?app=" + baseUrl + module + "_edit&id=" + id;
});
$('.action-delete').click(function(){
var id = $(this).parent().parent().find('input#id').val();
Swal.fire({
title: 'Do you want to delete the element? ',
text: "The change cannot be reversed. ",
icon: 'error',
showCancelButton: true,
confirmButtonColor: '#d33',
cancelButtonColor: '#3085d6',
confirmButtonText: 'Delete',
cancelButtonText: 'Cancel'
}).then((result) => {
if (result.isConfirmed) {
location.href= "index.php?app=" + baseUrl + module + "_delete&id=" + id;
}
});
});
/*
$('table tbody tr').click(function(e){
if($(this).find("input[type=checkbox]").is(":checked")){
$(this).find("input[type=checkbox]").attr("checked", false);
}else {
$(this).find("input[type=checkbox]").attr("checked", true);
}
e.stopPropagation();
});
*/
}
//Función generica de guardado de formulario
function initForm(urlBack){
$('.form-save').click(function(){
if(validate("datos")){
$('form#datos').submit();
}
});
$('.form-cancel').click(function(){
location.href = urlBack;
});
}
function redirect(urlBack){
location.href = urlBack;
}
function validate(form){
form = form.replace("#","");
var form = document.getElementById(form);
pristine = new Pristine(form);
var valid = pristine.validate();
return valid;
}
function initTextEditor(){
tinymce.remove();
tinymce.init({
selector:'textarea',
languaje:'es',
height: 350,
branding: false,
menubar: false,
plugins: [
"link image media filemanager responsivefilemanager"
],
toolbar1: "undo redo | bold italic underline | forecolor backcolor | link unlink | image media | code",
external_filemanager_path:"filemanager/",
filemanager_title:"Responsive Filemanager" ,
external_plugins: {
"responsivefilemanager": "../../js/tinymce/plugins/responsivefilemanager/plugin.min.js",
"filemanager": "../../../filemanager/plugin.min.js"
},
});
}
//Definimos un obj con todos los metodos de la gestión por idiomas.
let formLanguage = {};
//Definimos las tres variables necesarias para la gestion del formulario de idiomas
formLanguage.module_get = '';
formLanguage.module_save = '';
formLanguage.module_delete = '';
formLanguage.form_name = '';
formLanguage.id = 0;
//Función que obtiene la información de la bd de contenido
formLanguage.getContent = ( language ) => {
//Mostramos la ventana de contenido, mostramos la ventana de cargando y ocultamos la ventana de información mientras cargamos.
$('#form-content-info').hide();
$('#form-content-loading').show();
$('#form-content-info div#datos').html('');
let datos = {
'id' : formLanguage.id
};
//Si pasamos un language, generamos el form añadiendo un nuevo idioma.
if(language){
datos.language = language;
}
$.ajax({
url: './app/backend/ajax.php?module=' + formLanguage.module_get,
type: "post",
data: datos ,
success: function (response) {
if( response ){
$('#form-content-info').show();
$('#form-content-loading').hide();
$('#form-content-info div#datos').html(response);
initTextEditor();
$('.form-cancel').unbind('click').bind("click", (e) =>{
redirect(url_back);
});
$('.form-save').unbind('click').bind('click', (e) =>{
if(validate(formLanguage.form_name)){
formLanguage.saveContent();
setTimeout(function(){
redirect(url_back);
}, 500);
}
});
$('.delete-language').click(function(event) {
//Obtenemos el idioma del objeto html que le hemos
const lang = $(this).attr('id').replace('-delete','');
formLanguage.deleteLanguage( lang );
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
};
//Función que guarda la información en la bd por idiomas
formLanguage.saveContent = () => {
//Actualizamos los textarea con la información de los editores.
tinymce.triggerSave();
//Serializamos el form, con el nombre que hemos definido en la clase ajax.
const postdata = $(formLanguage.form_name).serialize();
const datos = {
'id' : formLanguage.id,
postdata
};
$.ajax({
url: './app/backend/ajax.php?module=' + formLanguage.module_save,
type: "post",
data: datos ,
success: function (response) {
//Asignamos el id a la variable id creada, sólo si es insert
if( formLanguage.id == 0 ){
formLanguage.id = response;
}
console.log(formLanguage.id);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
};
//Eliminar un idioma creado
formLanguage.deleteLanguage = ( language ) => {
Swal.fire({
title: '¿Desea eliminar el idioma?',
text: "Se perderán los datos asociados a ese idioma.",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#d33',
cancelButtonColor: '#3085d6',
confirmButtonText: 'Eliminar',
cancelButtonText: 'Cancelar'
}).then((result) => {
if (result.isConfirmed) {
formLanguage.deleteLanguageContent(language);
}
});
};
//Función que elimina la información en la bd
formLanguage.deleteLanguageContent = ( language ) => {
formLanguage.saveContent();
const datos = {
'id' : formLanguage.id,
language
};
$.ajax({
url: './app/backend/ajax.php?module=' + formLanguage.module_delete,
type: "post",
data: datos ,
success: function (response) {
formLanguage.getContent();
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
};
// Restricts input for the set of matched elements to the given inputFilter function.
(function($) {
$.fn.inputFilter = function(inputFilter) {
return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function() {
if (inputFilter(this.value)) {
this.oldValue = this.value;
this.oldSelectionStart = this.selectionStart;
this.oldSelectionEnd = this.selectionEnd;
} else if (this.hasOwnProperty("oldValue")) {
this.value = this.oldValue;
this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd);
} else {
this.value = "";
}
});
};
}(jQuery));
function initDatepicker(selector, hours, defaultDate){
let format = "DD/MM/YYYY HH:mm";
let timePicker = false;
if(hours == undefined){
hours = true;
timePicker = true;
}
if(!hours){
format = "DD/MM/YYYY";
}
let options = {
"singleDatePicker": true,
"autoApply": true,
"timePicker": timePicker,
"timePicker24Hour": true,
"locale": {
"format" : format,
"separator" : " - ",
"applyLabel": "Aceptar",
"cancelLabel": "Cancel",
"fromLabel": "Desde",
"toLabel": "Hasta",
"customRangeLabel": "Custom",
"weekLabel": "S",
"daysOfWeek": [
"Do",
"Lu",
"Ma",
"Mi",
"Ju",
"Vi",
"Sa"
],
"monthNames": [
"Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre"
],
"firstDay": 1
}
};
if(defaultDate != undefined){
options.startDate = defaultDate;
}
//console.log(options);
$(selector).daterangepicker(options);
}
function formatDate(oDate){
var currentdate = new Date(oDate);
return ((currentdate.getDate() < 10)?"0":"") + currentdate.getDate() +"/"+(((currentdate.getMonth()+1) < 10)?"0":"") + (currentdate.getMonth()+1) +"/"+ currentdate.getFullYear();
}
function formatTime(oDate){
var currentdate = new Date(oDate);
return ((currentdate.getHours() < 10)?"0":"") + currentdate.getHours() +":"+ ((currentdate.getMinutes() < 10)?"0":"") + currentdate.getMinutes() +":"+ ((currentdate.getSeconds() < 10)?"0":"") + currentdate.getSeconds();
}