var gsorder = 0; var lastlen = 0; var order = {}; order.key = 0; order.dir = 0; var strPassword; var charPassword; var minPasswordLength = 8; var baseScore = 0, score = 0; var num = {}; num.Excess = 0; num.Upper = 0; num.Numbers = 0; num.Symbols = 0; var bonus = {}; bonus.Excess = 3; bonus.Upper = 4; bonus.Numbers = 5; bonus.Symbols = 5; bonus.Combo = 0; bonus.FlatLower = 0; bonus.FlatNumber = 0; var powertipOptions = {placement: 'ne', smartPlacement: 'true', fadeOutTime: 500}; jQuery.extend(jQuery.fancybox.defaults, { type: 'ajax', autoWidth: 'true', autoHeight: 'true', minHeight: 50, padding: 0, helpers: {overlay : { css : { 'background' : 'rgba(0, 0, 0, 0.1)'}}} }); $(document).ready(function(){ $("[title]").powerTip(powertipOptions); $('input, textarea').placeholder(); setContentSize(); }).ajaxComplete(function() { $("[title]").powerTip(powertipOptions); $('input, textarea').placeholder(); }); function doAction(action, lastAction, id){ var data = {'action' : action,'lastAction': lastAction,'id': id, is_ajax: 1}; $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'html', url: APP_ROOT + '/ajax/ajax_getcontent.php', data: data, success: function(response){ $('#content').html(response); setContentSize(); }, error:function(){$('#content').html(resMsg("nofancyerror"));}, complete: function(){$.fancybox.hideLoading();} }); } function setContentSize(){ // Calculate total height for full body resize var totalHeight = $("#content").height() + 100; var totalWidth = $("#wrap").width(); // alert(totalWidth + 'x' + totalHeight); $("#container").css("height",totalHeight); // $("#wrap").css("width",totalWidth); } function scrollUp(){ $('html, body').animate({ scrollTop: 0 }, 'slow'); } // Función para limpiar un formulario function Clear(id, search){ $("#" + id).resetForm(); if ( search == 1 ){ document.frmSearch.search.value = ""; document.frmSearch.customer.selectedIndex = 0; document.frmSearch.category.selectedIndex = 0; $('#frmSearch input[name="start"]').val(0); $('#frmSearch input[name="skey"]').val(0); $('#frmSearch input[name="sorder"]').val('ASC'); } } // Función para realizar una búsqueda function accSearch(continous){ var lenTxtSearch = $('#txtSearch').val().length; if ( lenTxtSearch < 3 && continous === 1 && lenTxtSearch > window.lastlen ) return; window.lastlen = lenTxtSearch; var datos = $("#frmSearch").serialize(); $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'html', url: APP_ROOT + '/ajax/ajax_search.php', data: datos, success: function(response){ $('#resBuscar').html(response); }, error:function(){$('#resBuscar').html(resMsg("nofancyerror"));}, complete: function(){$.fancybox.hideLoading();} }); return false; } // Función para buscar con la ordenación por campos function searchSort(skey,start,nav){ if ( typeof(skey) == "undefined" || typeof(start) == "undefined" ) return false if ( order.dir === 0 ){ if ( nav === 1 ){ var sorder = 0; } else { if ( order.key > 0 && order.key != skey ){ order.key = skey; var sorder = 0; } else{ order.key = skey; order.dir = 1; var sorder = 1; } } } else { if ( nav === 1 ){ var sorder = 1; } else { if ( order.key > 0 && order.key != skey ){ order.key = skey; var sorder = 1; } else{ order.key = skey; order.dir = 0; var sorder = 0; } } } $('#frmSearch input[name="skey"]').val(skey); $('#frmSearch input[name="sorder"]').val(sorder); $('#frmSearch input[name="start"]').val(start); var frmData = $("#frmSearch").serialize(); $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'html', url: APP_ROOT + '/ajax/ajax_search.php', data: frmData, success: function(response){ $('#resBuscar').html(response); }, error:function(){$('#resBuscar').html(resMsg("nofancyerror"));}, complete: function(){ scrollUp(); $.fancybox.hideLoading(); } }); } // Función para buscar con la ordenación por campos function navLog(start, current){ if ( typeof(start) === "undefined" ) return false $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'html', url: APP_ROOT + '/ajax/ajax_eventlog.php', data: {'start' : start, 'current' : current}, success: function(response){ $('#content').html(response); }, error:function(){$('#content').html(resMsg("nofancyerror"));}, complete: function(){ $.fancybox.hideLoading(); scrollUp(); setContentSize(); } }); } // Función para ver la clave de una cuenta function viewPass(id,full,history){ $.post( APP_ROOT + '/ajax/ajax_viewpass.php', {'accountid': id, 'full': full, 'isHistory' : history}, function( data ) { if ( data.length === 0 ){ doLogout(); } else { resMsg("none",data); } } ); } // Función para las variables de la URL y parsearlas a un array. function getUrlVars(){ var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i < hashes.length; i++){ hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } // Función para autentificar usuarios function doLogin(){ $.fancybox.showLoading(); var form_data = {user: $("#user").val(), pass: $("#pass").val(), mpass: $("#mpass").val(), login: 'login', is_ajax: 1}; $("#btnLogin").prop('disabled',true); $.ajax({ type: "POST", dataType: "xml", url: APP_ROOT + '/ajax/ajax_doLogin.php', data: form_data, success: function(xml){ var status = parseInt($(xml).find("status").text()); var description = $(xml).find("description").text(); if( status === 0 || status === 2 ){ location.href = 'index.php'; } else if ( status === 3 || status === 4 ){ resMsg("error", description); $("#mpass").prop('disabled',false); $('#smpass').show(); } else if ( status === 5 ){ resMsg("warn", description,'',"location.href = 'index.php';"); } else { resMsg("error", description); } }, complete: function(){$('#btnLogin').prop('disabled',false); $.fancybox.hideLoading();}, statusCode: { 404: function() { var txt = LANG[1] + '

' + LANG[22] + '

'; resMsg("error", txt); }}, }); return false; } function doLogout() { location.href = 'index.php?logout=1'; } function checkLogout(){ var session = getUrlVars()["session"]; if ( session == 0 ){ resMsg("warn", LANG[2],'',"location.search = ''"); } } // Función para añadir/editar una cuenta function saveAccount(frm) { var data = $("#"+frm).serialize(); var id = $('input[name="accountid"]').val(); var savetyp = $('input[name="savetyp"]').val(); var action = $('input[name="next"]').val(); switch(savetyp){ case "1": break; case "2": break; } $('#btnGuardar').attr('disabled', true); $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'xml', url: APP_ROOT + '/ajax/ajax_accountsave.php', data: data, success: function(xml){ var status = parseInt($(xml).find("status").text()); var description = $(xml).find("description").text(); if ( status === 0 ){ resMsg("ok", description); if ( savetyp == 1 ){ $('#btnSave').hide(); } else{ $('#btnSave').attr('disabled', true); } if ( action && id ){ doAction(action,'accsearch',id); } } else if ( status === 10){ doLogout(); } else { resMsg("error", description); $('#btnSave').removeAttr("disabled"); } }, error:function(jqXHR, textStatus, errorThrown){ var txt = LANG[1] + '

' + errorThrown + textStatus + '

'; resMsg("error", txt); }, complete: function(){$.fancybox.hideLoading();} }); } // Función para eliminar una cuenta function delAccount(id,action,sk){ var data = {accountid: id, savetyp: action, sk: sk}; var atext = '

' + LANG[8] + '

'; alertify.confirm(atext, function (e) { if (e) { $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'xml', url: APP_ROOT + '/ajax/ajax_accountsave.php', data: data, success: function(xml){ var status = parseInt($(xml).find("status").text()); var description = $(xml).find("description").text(); if ( status === 0 ){ resMsg("ok", description); doAction('accsearch'); } else if ( status === 10){ resMsg("error", description); doLogout(); } else { resMsg("error", description); } }, error: function(jqXHR, textStatus, errorThrown){ resMsg("error", 'Oops...' + LANG[0]); }, complete: function(){$.fancybox.hideLoading();} }); } }); } // Función para guardar la configuración function configMgmt(action){ var data, url, txt, activeTab; switch(action){ case "addcat": frm = 'frmAddCategory'; url = APP_ROOT + '/ajax/ajax_categorymgmt.php'; break; case "editcat": frm = 'frmEditCategory'; url = APP_ROOT + '/ajax/ajax_categorymgmt.php'; break; case "delcat": frm = 'frmDelCategory'; url = APP_ROOT + '/ajax/ajax_categorymgmt.php'; break; case "saveconfig": $("#allowed_exts option").prop('selected',true); $("#wikifilter option").prop('selected',true); $("#ldapuserattr option").prop('selected',true); frm = 'frmConfig'; url = APP_ROOT + '/ajax/ajax_configsave.php'; break; case "savempwd": frm = 'frmCrypt'; url = APP_ROOT + '/ajax/ajax_configsave.php'; break; case "backup": frm = 'frmBackup'; url = APP_ROOT + '/ajax/ajax_backup.php'; break; case "migrate": frm = 'frmMigrate'; url = APP_ROOT + '/ajax/ajax_migrate.php'; break; default: return; } data = $('#' + frm).serialize(); activeTab = $('#' + frm + ' input[name="active"]').val() - 1; $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'xml', url: url, data: data, success: function(xml){ var status = parseInt($(xml).find("status").text()); var description = $(xml).find("description").text(); if ( status === 0 ){ resMsg("ok", description); doAction('configmenu','',activeTab); } else if ( status === 10){ doLogout(); } else { resMsg("error", description); } }, error:function(jqXHR, textStatus, errorThrown){ txt = LANG[1] + '

' + errorThrown + textStatus + '

'; resMsg("error", txt); }, complete: function(){$.fancybox.hideLoading();} }); return false; } // Función para descargar/ver archivos de una cuenta function downFile(fancy){ if ( $("#files").val() == null ){ resMsg("error", LANG[3]); return false; } if ( fancy == 1){ $.fancybox.showLoading(); $("#action").val('view') var data = $('#files_form').serialize(); $.ajax({ type : "POST", cache : false, url : APP_ROOT + "/ajax/ajax_files.php", data : data, success: function(response) { $.fancybox(response,{padding: [10,10,10,10]}); // Actualizar fancybox para adaptarlo al tamaño de la imagen setTimeout(function() {$.fancybox.update();}, 1000); }, complete: function(){$.fancybox.hideLoading();} }); } else { $('#files_form').submit(); } } // Función para obtener la lista de archivos de una cuenta function getFiles(id, isDel, sk){ var data = {'id' : id, 'del' : isDel, 'sk' : sk}; $.ajax({ type : "GET", cache : false, url : APP_ROOT + "/ajax/ajax_getFiles.php", data : data, success: function(response) { $('#downFiles').html(response); }, complete: function(){$.fancybox.hideLoading();} }); } // Función para eliminar archivos de una cuenta function delFile(id){ if ( $("#files").val() == null ){ resMsg("error", LANG[3]); return false; } $.fancybox.showLoading(); var data = {fileId: $("#files").val(), action: 'delete'}; $.post( APP_ROOT + '/ajax/ajax_files.php', data, function( data ) { $.fancybox.hideLoading(); resMsg("ok", data); $("#downFiles").load( APP_ROOT + "/ajax/ajax_getFiles.php?id=" + id +"&del=1&is_ajax=1"); } ); } // Función para subir archivos de una cuenta function upldFile(id){ var optionsUpld = { beforeSubmit: function(){ if ( $("#upload_form input[name=inFile]").val() == '' ){ resMsg("error", LANG[4]); return false; } $.fancybox.showLoading(); }, success: function(responseText, statusText, xhr, $form){ resMsg("ok", responseText); $("#downFiles").load( APP_ROOT + "/ajax/ajax_getFiles.php?id=" + id +"&del=1&is_ajax=1"); $.fancybox.hideLoading(); }, error:function(jqXHR, textStatus, errorThrown){ $.fancybox.hideLoading(); var txt = LANG[1] + '

' + errorThrown + textStatus + '

'; resMsg("error", txt); } }; $('#upload_form').ajaxSubmit(optionsUpld); } // Función para mostrar los registros de usuarios y grupos function usrgrpDetail(id, type, sk, active){ var data = {'id' : id, 'type' : type, 'sk' : sk, 'active' : active}; var url = APP_ROOT + '/ajax/ajax_usersMgmt.php'; $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'html', url: url, data: data, success: function(response){ $.fancybox(response,{ padding: [0,10,10,10], afterClose: function(){doAction('usersmenu','',active);} }); }, error:function(jqXHR, textStatus, errorThrown){ var txt = LANG[1] + '

' + errorThrown + textStatus + '

'; resMsg("error", txt); }, complete: function(){$.fancybox.hideLoading();} }); } // Función para editar los registros de usuarios y grupos function usersMgmt(frmId, isDel, id, type, sk){ var data; var url = '/ajax/ajax_usersSave.php'; if ( isDel === 1 ){ var data = {'id' : id, 'type' : type, 'action' : 4, 'sk' : sk }; var atext = '

' + LANG[21] + '

'; var active = frmId; alertify.confirm(atext, function (e) { if ( e) { usersAjax(data, url); doAction('usersmenu','',active) } }); } else { data = $("#" + frmId).serialize(); //type = parseInt($('input:[name=type]').val()); usersAjax(data, url); } } // Función para realizar la petición ajax de gestión de usuarios function usersAjax(data, url){ $.fancybox.showLoading(); $.ajax({ type: 'POST', dataType: 'xml', url: APP_ROOT + url, data: data, success: function(xml){ var status = parseInt($(xml).find("status").text()); var description = $(xml).find("description").text(); description = description.replace(/;;/g,"
"); switch(status){ case 0: $.fancybox.close(); resMsg("ok", description); break; case 1: $.fancybox.close(); resMsg("error", description); break; case 2: $("#resFancyAccion").html('' + description + ''); $("#resFancyAccion").show(); break; case 3: $.fancybox.close(); resMsg("warn", description); break; case 10: doLogout(); break; default: return; } }, error:function(jqXHR, textStatus, errorThrown){ var txt = LANG[1] + '

' + errorThrown + textStatus + '

'; resMsg("error", txt); }, complete: function(){$.fancybox.hideLoading();} }); } // Función para mostrar el formulario para cambio de clave de usuario function usrUpdPass(id,usrlogin){ var data = {'usrid': id, 'usrlogin': usrlogin}; $.fancybox.showLoading(); $.ajax({ type : "GET", cache : false, url : APP_ROOT + '/ajax/ajax_usrpass.php', data : data, success: function(data) { if ( data.length === 0 ){ doLogout(); } else { $.fancybox(data,{padding: 0}); } } }); } // Función para verificar si existen actualizaciones function checkUpds(){ $.ajax({ type: 'GET', dataType: 'html', url: APP_ROOT + '/ajax/ajax_checkupds.php', timeout: 5000, success: function(response){ $('#updates').html(response); }, error:function(jqXHR, textStatus, errorThrown){ $('#updates').html('!'); } }); } // Función para añadir opciones a un select desde input function addSelOption(dst_id,src_id){ var dup = 0; var value_txt = $("#" + src_id).val().toUpperCase(); if ( typeof(value_txt) == "undefined" || value_txt == "" ){ resMsg("error", LANG[10]); } else { $("#" + dst_id + " option").each(function(){ if ( $(this).val().toUpperCase() == value_txt ){ resMsg("error", LANG[11]); dup = 1; } }); if ( dup == 0 ){ $("#" + dst_id).append(new Option(value_txt, value_txt, true, true)); resMsg("ok", LANG[13]); } $("#" + src_id).val(''); $("#" + dst_id + "option").prop('selected',true); } } // Función para eliminar opciones de un select function delSelOption(id){ var value = $("#" + id +" option:selected").val(); if ( typeof(value) == "undefined" ){ resMsg("error", LANG[12]); } else { $("#" + id +" option:selected").remove(); resMsg("ok", LANG[14]); } } function showOptional(me){ $(me).hide(); $(me).parent().css('width','15em'); var actions = $(me).closest('.cell-actions').children('.actions-optional'); actions.show(250); } // Función para generar claves aleatorias. // By Uzbekjon from http://jquery-howto.blogspot.com.es function password(length, special, fancy, dstId) { var iteration = 0; var password = ""; var randomNumber; if(special == undefined){ var special = false; } while(iteration < length){ randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33; if( ! special ){ if ((randomNumber >=33) && (randomNumber <=47)) { continue; } if ((randomNumber >=58) && (randomNumber <=64)) { continue; } if ((randomNumber >=91) && (randomNumber <=96)) { continue; } if ((randomNumber >=123) && (randomNumber <=126)) { continue; } } iteration++; password += String.fromCharCode(randomNumber); } if ( fancy == true ){ $("#viewPass").attr("title",password); //alertify.alert('

' + LANG[15] + '

' + password + '

'); } else { alertify.alert('

' + LANG[15] + '

' + password + '

'); } if ( dstId ){ checkPassLevel(password); $('#' + dstId +' input:password').val(password); $('#' + dstId + ' #passLevel').show(500); } else{ checkPassLevel(password); $('input:password').val(password); $('#passLevel').show(500); } //return password; } // Funciónes para analizar al fortaleza de una clave // From http://net.tutsplus.com/tutorials/javascript-ajax/build-a-simple-password-strength-checker/ function checkPassLevel(password, dstId){ strPassword= password; charPassword = strPassword.split(""); num.Excess = 0; num.Upper = 0; num.Numbers = 0; num.Symbols = 0; bonus.Combo = 0; bonus.FlatLower = 0; bonus.FlatNumber = 0; baseScore = 0; score = 0; if (charPassword.length >= minPasswordLength){ baseScore = 50; analyzeString(); calcComplexity(); } else { baseScore = 0; } if ( dstId ){ outputResult(dstId); } else{ outputResult(dstId); } } function analyzeString (){ for (i=0; i=50 && score<75){ complexity.html(LANG[17]).removeClass("weak strong strongest").addClass("good"); } else if (score>=75 && score<100){ complexity.html(LANG[16]).removeClass("weak good strongest").addClass("strong"); } else if (score>=100){ complexity.html(LANG[19]).removeClass("weak good strong").addClass("strongest"); } } // Función para mostrar mensaje con Fancybox function resMsg(type, txt, url, action){ if ( typeof(url) !== "undefined" ){ $.ajax({ url: url, type: 'get', dataType: 'html', async: false, success: function(data) { txt = data; }}); } var html; switch(type){ case "ok": //html = '
' + txt + '
'; return alertify.success(txt); case "error": //html = '
' + txt + '
'; return alertify.error(txt); case "warn": //html = '
' + txt + '
'; return alertify.log(txt); case "info": html = '
' + txt + '
'; break; case "none": html = txt; break; case "nofancyerror": html = '

Oops...
' + LANG[1] + '
' + txt + '

'; return html; break; default: //html = '
Oops...
'; return alertify.error(txt); } $.fancybox(html,{afterLoad: function(){ $('.fancybox-skin,.fancybox-outer,.fancybox-inner').css({'border-radius':'25px','-moz-border-radius':'25px','-webkit-border-radius':'25px'}); },afterClose : function() { if ( typeof(action) !== "undefined" ) eval(action);} }); } // Combo (function( $ ) { $.widget( "custom.combobox", { _create: function() { this.wrapper = $("").addClass( "custom-combobox" ).insertAfter( this.element ); this.element.hide(); this._createAutocomplete(); this._createShowAllButton(); }, _createAutocomplete: function() { var selected = this.element.children( ":selected" ), value = selected.val() ? selected.text() : ""; this.input = $( "" ) .appendTo( this.wrapper ) .val( value ) .attr( { 'title' : "", 'placeholder' : this.options.placeholder }) .addClass( "custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left" ) .autocomplete({ delay: 0, minLength: 0, source: $.proxy( this, "_source" ) }) .tooltip({ tooltipClass: "ui-state-highlight" }) this._on( this.input, { autocompleteselect: function( event, ui ) { ui.item.option.selected = true; this._trigger( "select", event, { item: ui.item.option }); if ( this.options.dosearch === 1 ){ accSearch(0); } }, autocompletechange: "_removeIfInvalid" }); }, _createShowAllButton: function() { var input = this.input, wasOpen = false; $( "" ) .attr( "tabIndex", -1 ) //.attr( "title", "Show All Items" ) .tooltip() .appendTo( this.wrapper ) .button({ icons: { primary: "ui-icon-triangle-1-s"}, text: false }) .removeClass( "ui-corner-all" ) .addClass( "custom-combobox-toggle ui-corner-right" ) .mousedown(function() { wasOpen = input.autocomplete( "widget" ).is( ":visible" ); }) .click(function() { input.focus(); // Close if already visible if ( wasOpen ) { return; } // Pass empty string as value to search for, displaying all results input.autocomplete( "search", "" ); }); }, _source: function( request, response ) { var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" ); response( this.element.children( "option" ).map(function() { var text = $( this ).text(); if ( this.value && ( !request.term || matcher.test(text) ) ) return { label: text, value: text, option: this }; })); }, _removeIfInvalid: function( event, ui ) { // Selected an item, nothing to do if ( ui.item ) { return; } // Search for a match (case-insensitive) var value = this.input.val(), valueLowerCase = value.toLowerCase(), valid = false; this.element.children( "option" ).each(function() { if ( $( this ).text().toLowerCase() === valueLowerCase ) { this.selected = valid = true; return false; } }); // Found a match, nothing to do if ( valid ) { return; } // Remove invalid value this.input .val( "" ) //.attr( "title", value + " didn't match any item" ) .tooltip( "open" ); this.element.val( "" ); this._delay(function() { this.input.tooltip( "close" ).attr( "title", "" ); }, 2500 ); this.input.data( "ui-autocomplete" ).term = ""; }, _destroy: function() { this.wrapper.remove(); this.element.show(); } }); })( jQuery );