var isProcessing;
//Permet aux composant de mutualiser leurs appels
var componentQueue = {};
$(document).ready(function(){
if(localStorage.getItem('configuration') !== null){
//Le local storage a été mis à jour lors de la connexion
var inactivityDelay = JSON.parse(localStorage.getItem('configuration')).inactivityDelay;
//On est bien dans le cadre d'une conf de gestion de l'inactivité utilisateur
if(inactivityDelay !== null){
var timeout;
//Durée d'affichage (en sec) du message pendant laquelle on peut éviter la déco
var messageTime = 58;
//Conversion en milli secondes pour $.message et settimeout
var messageTimeMilliseconds = messageTime * 1000;
//On s'assure de travailler avec des entiers
inactivityDelay = parseInt(inactivityDelay);
//Controle de valeur délai min à 60 sec
inactivityDelay = inactivityDelay < 60 ? 60 : inactivityDelay;
//Déclaration du compteur;
var inactivityCounter;
//Gestion de l'activité de l'utilisateur durant l'affichage du message toast
var userActive = false;
$(document).on('mousemove',function(){
//L'utilisateur est actif, permet de savoir s'il a bougé durant l'affichage du message et donc de savoir si on le déco ou pas
userActive = true;
//Si l'utilisateur bouge pendant que le message est affiché
//Alors on réinitialise l'activité du user et on efface les toasts
if($('.toast.inactivity_message').is(':visible')){
core_initialize_activity();
clearTimeout(timeout);
}
//Si l'utilisateur bouge on arrete l'exécution du compteur
clearInterval(inactivityCounter);
//On réinitialise le compteur avec le délai d'inactivité
var countdown = inactivityDelay - messageTime;
//Le compteur s'exécute tant que l'utilisateur ne bouge pas
inactivityCounter = setInterval(function(){
//Décompte du nombre de sec restantes pour éviter la déco
countdown--;
//Déclenchement de l'affichage du toast informant de la déco imminente
if(countdown === 0){
$.message('warning','Votre session va expirer, vous allez être déconnecté.',messageTimeMilliseconds,'inactivity_message');
userActive = false;
//A la fin du message
timeout = setTimeout(function(){
//Si l'utilisateur a été actif on réinitialise son activité
//Sinon on le déco
if(userActive){
core_initialize_activity();
}else{
core_logout();
}
},messageTimeMilliseconds);
}
}, 1000);
}).mousemove();
}
}
if($.urlParam('title')!=null) window.parent.document.title = decodeURI($.urlParam('title'));
if($('.login-request').length) $('#login-dropdown').remove();
var page = $.page();
page = page == '' ? 'index' : page;
var init = 'init_'+page;
init = init.replace(/[^a-z_0-9]/g,'_');
init_components();
if($.urlParam('module')==null){
if(window[init]!=null) window[init]($.urlParam());
} else {
var mod = $.urlParam('module').replace(/[^a-z_0-9]/g,'_');
var init = 'init_plugin_'+mod;
if(window[init]!=null) window[init]($.urlParam());
}
//SHOW HTTP ERROR/NOTICE
if($.urlParam('error') != null) {
$.message('error', decodeURIComponent($.urlParam('error')), 0);
$.urlParam('error', false);
}
if($.urlParam('warning') != null) {
$.message('warning', decodeURIComponent($.urlParam('warning')), 0);
$.urlParam('warning', false);
}
if($.urlParam('info') != null) {
$.message('info', decodeURIComponent($.urlParam('info')));
$.urlParam('info', false);
}
if($.urlParam('success') != null) {
$.message('success', decodeURIComponent($.urlParam('success')));
$.urlParam('success', false);
}
//Icône menu mobile
$('#mainMenu > button').on('click', function(e){
$('.menu').toggleClass('open');
});
$('.navbar-toggler').on('click', function(e){
if($(e.target).closest('#mainMenu').length) return;
$('#navbarCollapse').collapse('hide');
$('.menu').removeClass('open');
});
//Positionnement du loginHeader
if($(document).width() <= 767) $('#mainMenu .navbar-brand').after($('#loginHeader').detach());
});
//Changement positionnement loginHeader
//au redimensionnement de la fenêtre
$(window).resize(function(event) {
if(is_phone()) return;
var width = $(document).width();
var loginForm = $('#loginHeader').detach();
if(width>767) $('#navbarCollapse').append(loginForm);
if(width<=767) $('#mainMenu .navbar-brand').after(loginForm);
});
/** BACK TO TOP **/
$('#scroll-top').click(function() {
scroll_top(150);
});
// Affichage du bouton dès lors où l'on a scrollé
$(window).on('scroll', function(){
scrollPos = $(document).scrollTop();
if (scrollPos >= 100) {
$('#scroll-top').addClass('active');
} else {
$('#scroll-top').removeClass('active');
}
});
//Permet de scroller en haut de page
function scroll_top(time){
$('html,body').animate({scrollTop:0},time);
}
/** CONTRÔLES DATE ET HEURE **/
function is_valid_date(string){
var format = /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]|(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)(?:0?2|(?:Feb))\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;
return format.test(string);
}
function is_valid_hour(string){
var format = /^(?:\d|[01]\d|2[0-3]):[0-5]\d$/;
return format.test(string);
}
//SHOW/HIDE PASSWORD
function toggle_password(element){
event.stopPropagation();
var element = $(element);
element.prev('input').attr('type', (element.hasClass('fa-eye-slash') ? 'text' : 'password'));
element.toggleClass('fa-eye fa-eye-slash');
}
/** QUICKFORM **/
function reset_quickform_modal(){
$('.modal form').attr('data-id','');
$('input, textarea', '.modal').each(function(i, v){
if($(v).attr('type') == 'checkbox')
$(v).prop('checked', false);
else
$(v).val('');
});
}
/** CORE **/
//LOGIN
$(document).ready(function(){
$('body').on('keyup', '.login-form input', function(e){
if(e.keyCode == 13){
var button = $(this).closest('.login-form').find('.btn-login');
core_login(button);
}
});
});
function core_login(element){
if(isProcessing) return;
var btn = $(element);
btn.addClass('btn-preloader');
var form = btn.closest('.login-form');
var data = form.toJson(true);
data.redirect = form.attr('data-redirect');
data.url = form.attr('data-url');
data.action = 'core_login';
isProcessing = true;
$.action(data
,function(r){
isProcessing = false;
if(r.inactivityDelay)
localStorage.setItem('configuration',JSON.stringify({'inactivityDelay' : parseInt(r.inactivityDelay)}));
if(r.redirect) window.location = r.redirect;
},function(r){
isProcessing = false;
$('[data-password]',form).val('');
}, function(r){
isProcessing = false;
});
}
function core_logout(url){
$.action({
action:'core_logout',
url: url
},function(r){
localStorage.setItem('configuration',JSON.stringify({'inactivityDelay' : null}));
if(r.redirect) window.location = r.redirect;
});
}
function core_initialize_activity(){
$.action({
action:'initialize_activity'
},function(){
$('.toast.inactivity_message').remove();
});
}
// INIT - INDEX
function init_index(){
$('#loginHeader #login-button').keypress(function(e){
var key = e.which;
if(key == 13){
$('#login-button').click();
return false;
}
});
}
function init_setting(parameter){
switch(parameter.section){
case 'plugin':
core_plugin_search();
$('.section-plugin').on('change', 'input.toggle', function(){
var input = $(this);
var button = input.closest('.activator');
var label = $('> label', button).detach();
var value = input.prop('checked');
if(!value && !confirm("Êtes-vous sûr de vouloir désactiver ce plugin ?\nCela entraînera la suppression de toutes les données associées.")) {
input.prop('checked',!value);
button.prepend(label);
return;
}
button.text((!value?'Activer':'Désactiver'))
.toggleClass('text-success text-muted')
.prepend(label);
$.action({
action : 'core_plugin_state_save',
plugin : input.closest('li').attr('data-id'),
state: value ? 1 : 0
}, function(r){
core_plugin_firm_show();
}, function(r){
button.text(value?'Activer':'Désactiver')
.toggleClass('text-success text-muted')
.prepend(label);
input.prop('checked',!value);
core_plugin_firm_show();
});
});
break;
case 'user':
core_user_search();
break;
case 'firmPlugin':
core_firm_plugin_search();
break;
case 'userfirmrank':
core_userfirmrank_search();
break;
case 'log':
$('#logs').sortable_table({
onSort : search_log
});
break;
case 'rank':
core_rank_search();
break;
case 'dictionary':
core_dictionary_search();
$('#label').blur(function(){
if($('#label').val() != '' && $('#slug').val() == ''){
$('#slug').off('click');
core_dictionary_slug_proposal($('#label'), $('#parent'));
}
});
$('#slug').off('click');
$('#slug').on('click', function(){
if($('#label').val() != '' && $('#slug').val() == '')
core_dictionary_slug_proposal($('#label'), $('#parent'));
});
break;
case 'right':
core_right_search();
break;
default:
if(parameter.section!= null){
var section = parameter.section.replace(/[^a-z_0-9]/g,'_');
var init = 'init_setting_'+section;
if(window[init]!=null) window[init]($.urlParam());
}
break;
}
}
/** RIGHT **/
function right_switch(element){
$(element).closest('tr').find('input').trigger('click');
}
/** FORM **/
function send_form(element){
var form = $(element).closest('[data-form]');
var data = $.getForm(form);
var data = {};
for(var key in form.data()){
if(key!="action" && key != "id") continue;
data[key] = form.attr('data-'+key);
}
$('input,select,textarea',form).each(function(i,element){
element = $(element);
if(element.attr('data-id')!=null && element.attr('data-id')!=""){
if(element.attr("type")=='checkbox' || element.attr("type")=='radio'){
data[element.attr('data-id')] = (element.is(':checked')?1:0);
}else{
data[element.attr('data-id')] = element.val();
}
}
});
data.action = 'send_form';
$.action(data,function(r){
});
}
/** LOG **/
// SEARCH
function search_log(exportMode, callback){
if(isProcessing) return;
var box = new FilterBox('#filters');
if(exportMode) $('#export-logs-btn').addClass('btn-preloader');
isProcessing = true;
$('#logs').fill({
action:'core_search_log',
filters: box.filters(),
sort: $('#logs').sortable_table('get'),
export: !exportMode ? false : exportMode,
},function(){
isProcessing = false;
if(callback!=null) callback();
},function(){
isProcessing = false;
});
}
/** USER FIRM RANK**/
// SEARCH
function core_userfirmrank_search(callback){
$('#userfirmranks').fill({
firm : $('#firm').val(),
action:'core_userfirmrank_search'
},function(){
if(callback!=null) callback();
});
}
// SAVE
function core_user_savefirmrank(element){
if(isProcessing) return;
var button = $(element);
var data = $.getForm('#userfirmrankForm');
data.id = $('#userfirmrankForm').attr('data-id');
button.html(' Enregistrement en cours').addClass('disabled');
isProcessing = true;
$.action(data,function(r){
button.html(' Enregistrer').removeClass('disabled');
if(typeof r.success !== 'undefined'){
for(var i = 0; i span').text(response.pagination.total);
if(callback!=null) callback();
},function(r){
isProcessing = false;
});
}
//Ajout ou modification etablissement
function core_firm_save(){
if(isProcessing) return;
var form = $('#firm-form');
var data = form.toJson();
isProcessing = true;
$.action(data,function(r){
isProcessing = false;
form.attr('data-id',r.id);
$.urlParam('id',r.id);
$.message('success','Enregistré');
},function(r){
isProcessing = false;
});
}
//Suppression établissement
function core_firm_delete(element){
if(!confirm('Êtes-vous sûr de vouloir supprimer cet établissement ?') || isProcessing) return;
var line = $(element).closest('.item-line');
isProcessing = true;
$.action({
action: 'core_firm_delete',
id: line.attr('data-id')
},function(r){
isProcessing = false;
line.remove();
$.message('info','Établissement supprimé');
},function(r){
isProcessing = false;
});
}
/** FIRM PLUGINS **/
// SEARCH
function core_right_search(callback){
$('#rights').fill({
action: 'core_right_search',
targetUid: $('#targetUid').attr('data-rank'),
firm: $('#firm').val()
},function(r){
update_checkboxes(r);
if(callback!=null) callback(r);
});
}
// TOGGLE RIGHT
function core_right_toggle(element){
var line = $(element).closest('tr');
$.action({
action:'core_right_toggle',
targetUid:$('#targetUid').attr('data-rank'),
targetScope: 'rank',
firm:$('#firm').val(),
scope:line.attr('data-scope'),
right:$(element).attr('data-right'),
state:$(element).prop('checked')?1:0
});
}
// SEARCH
function core_firm_plugin_search(callback){
$('#firmplugins').fill({
action: 'core_firm_plugin_search',
firm: $('#firm').val()
},function(r){
update_checkboxes(r);
if(callback!=null) callback(r)
});
}
// ENABLE/DISABLE
function core_firm_plugin_save(element){
var line = $(element).closest('.item');
$.action({
action:'core_firm_plugin_save',
firm :$(element).closest('.firm-item').attr('data-id'),
state : $(element).prop('checked')?1:0,
plugin: line.attr('data-id')
});
}
function update_checkboxes(response){
$('input[data-result="0"]').prop('checked',false);
$('input[data-result="1"]').prop('checked',true);
$('input[data-result="2"]').prop('indeterminate',true);
}
/*
// SUPPRESSION LOGO ÉTABLISSEMENT
function firm_logo_delete(element){
if(!confirm('Êtes vous sûr de vouloir supprimer l\'image ?')) return;
var imageComposer = $(element).parent().find("input[data-type='image']");
$.action({
action: 'firm_logo_delete',
id: $('#firm').val()
}, function(r){
imageComposer.wrap('