| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 | 
							- //CHARGEMENT DE LA PAGE
 
- function init_plugin_dynamicform(){
 
- 	switch($.urlParam('page')){
 
- 		case 'sheet.dynamic.form':
 
- 			dynamicform_form_layout();
 
- 			dynamicform_field_search();
 
- 			
 
- 			window.addEventListener("beforeunload", function (event) {				  
 
- 			  if(window.unsavedModifications) event.returnValue = "Si vous n'enregistrez pas le formulaire, vos dernières modifications seront perdues";
 
- 			});
 
- 		break;
 
- 		default:
 
- 		break;
 
- 	}
 
- 	dynamicform_form_search();
 
- 	
 
- }
 
- function dynamicform_sortableFields(){
 
- 	$( ".fields" ).sortable({
 
-       connectWith: ".fields",
 
-       handle: ".btn-field-move"
 
-     }).disableSelection();
 
- }
 
- function dynamicform_form_reset(){
 
- 	var layout = $('#form-layout');
 
- 	var rowTemplate = $('#layout-row').html();
 
- 	layout.find('.row').remove();
 
- 	//créeer la ligne/colonne par défaut
 
- 	var row = $(rowTemplate);
 
- 	layout.append(row);
 
- }
 
- function dynamicform_form_layout(){
 
- 	var layout = $('#form-layout');
 
- 	var rowTemplate = $('#layout-row').html();
 
- 	
 
- 	var defaultType = JSON.parse(atob($('#dynamic-form-form').attr('data-default-type')));
 
- 	
 
- 	dynamicform_form_reset();
 
- 	//créeer la ligne/colonne par défaut
 
- 	if(layout.find('.row').length == 0){
 
- 		var row = $(rowTemplate);
 
- 		layout.append(row);
 
- 	}
 
- 	layout.off('click');
 
- 	layout.on('click','.btn-row-add',function(){
 
- 		var button = $(this);
 
- 		var row = button.closest('.row');
 
- 		dynamicform_row_add(row);
 
- 		window.unsavedModifications = true;
 
- 	});
 
- 	layout.on('click','.btn-column-add',function(){
 
- 		var column = $(this).closest('.column');
 
- 		var row = column.closest('.row');
 
- 		dynamicform_column_add(row);
 
- 		window.unsavedModifications = true;
 
- 	});
 
- 	layout.on('click','.btn-row-remove',function(){
 
- 		var button = $(this);
 
- 		if(layout.find('>.row').length < 2) return;
 
- 		button.closest('.row').remove();
 
- 		window.unsavedModifications = true;
 
- 	});
 
- 	layout.on('click','.btn-column-remove',function(){
 
- 		var button = $(this);
 
- 		var row = $(this).closest('.row');
 
- 		if(row.find('>.column').length < 2) return;
 
- 		button.closest('.column').remove();
 
- 		window.unsavedModifications = true;
 
- 	});
 
- 	layout.on('click','.btn-field-add',function(){
 
- 		var button = $(this);
 
- 		var column = button.closest('.column');
 
- 		var field = dynamicform_field_add(null,column,{type : defaultType,label : 'Nouveau champ'});
 
- 		field.find('.btn-field-edit').trigger('click');
 
- 	});
 
- 	layout.on('click','.btn-field-edit',function(){
 
- 		var button = $(this);
 
- 		var field = button.closest('.field');
 
- 		var data = field.data();
 
- 		$.setForm('#dynamic-field-form',data);
 
- 		$('#dynamic-field-form').attr('data-id',data.id);
 
- 		$('#dynamic-field-form').data('field',field);
 
- 		$('.dynamic-field-panel').removeClass('fold');
 
- 		$('#dynamic-field-form .label').focus().select();
 
- 		var meta = atob_unicode(data.meta);
 
- 		if(meta) meta = JSON.parse(meta);
 
- 		if(!meta) meta = {};
 
- 		$('#deleted-operators input[type="checkbox"]').prop('checked',false);
 
- 		if(meta['operator-delete']){
 
- 			for(var k in meta['operator-delete']){
 
- 				$('#deleted-operators input[type="checkbox"][value="'+meta['operator-delete'][k]+'"]').prop('checked',true);
 
- 			}
 
- 			init_components('#deleted-operators')
 
- 		}
 
- 	
 
- 		$('#show-filter').prop('checked',(meta['show-filter'] == true));
 
- 		
 
- 		dynamicform_fieldtype_change(data.meta);
 
- 	});
 
- 	layout.on('click','.btn-field-remove',function(){
 
- 		var button = $(this);
 
- 		var field = button.closest('.field');
 
- 		if(!confirm('Êtes-vous sûr de vouloir supprimer ce champ ?')) return;
 
- 		field.remove();
 
- 		window.unsavedModifications = true;
 
- 	});
 
- }
 
- function dynamicform_row_add(after){
 
- 	var clone = $('#form-layout .row:eq(0)').clone();
 
- 	clone.find('.column .fields').html('');
 
- 	if(after){
 
- 		after.after(clone);
 
- 	}else{
 
- 		$('#form-layout').append(clone);
 
- 	}
 
- 	dynamicform_sortableFields();
 
- 	return clone;
 
- }
 
- function dynamicform_column_add(row){
 
- 	var column = $('#form-layout .column:eq(0)');
 
- 	var clone = column.clone();
 
- 	clone.find('.fields').html('');
 
- 	row.append(clone);
 
- 	dynamicform_sortableFields();
 
- 	return clone;
 
- }
 
- function dynamicform_field_add(field,column,data){
 
- 	var fieldTemplate = $('#field-template').html();
 
- 	var fieldLine = $(Mustache.render(fieldTemplate,data));
 
- 	if(field){
 
- 		field.replaceWith(fieldLine);
 
- 	}else{
 
- 		var fields = column.find('.fields');
 
- 		fields.append(fieldLine);
 
- 	}
 
- 	dynamicform_sortableFields();
 
- 	return fieldLine;
 
- }
 
- //Enregistrement des configurations
 
- function dynamicform_setting_save(){
 
- 	$.action({ 
 
- 		action: 'dynamicform_setting_save', 
 
- 		fields:  $('#dynamicform-setting-form').toJson() 
 
- 	},function(){
 
- 		$.message('success','Enregistré');
 
- 	});
 
- }
 
- /** FORMULAIRE **/
 
- //Récuperation d'une liste  formulaire dans le tableau #dynamicforms
 
- function dynamicform_form_search(callback){
 
- 	$('#dynamic-forms').fill({
 
- 		action:'dynamicform_form_search'
 
- 	},function(response){
 
- 		if(callback!=null) callback();
 
- 	});
 
- }
 
- //Ajout ou modification formulaire
 
- function dynamicform_form_save(){
 
- 	var data = $('.dynamic-form-form').toJson();
 
- 	data.rows = [];
 
- 	$('#form-layout > .row').each(function(i){
 
- 		var rowLine = this;
 
- 		$('> .column',rowLine).each(function(u){
 
- 			var columnLine = $(this);
 
- 			$('> .fields >li',columnLine).each(function(o){
 
- 				var fieldLine = $(this);
 
- 				var lineData = fieldLine.data();				
 
- 				var field = {
 
- 					id : lineData.id,
 
- 					label : lineData.label,
 
- 					type : lineData.type,
 
- 					default : lineData.default,
 
- 					description : lineData.description,
 
- 					mandatory : lineData.mandatory ,
 
- 					readonly : lineData.readonly,
 
- 					slug : lineData.slug,
 
- 					meta : lineData.meta
 
- 				}
 
- 				if(!data.rows[i]) data.rows[i] = [];
 
- 				if(!data.rows[i][u]) data.rows[i][u] = [];
 
- 				data.rows[i][u].push(field);
 
- 			});
 
- 		});
 
- 	});
 
- 	$.action(data,function(r){
 
- 		$('#dynamic-form-form').attr('data-id',r.id);
 
- 		$.setForm($('#dynamic-form-form'),r);
 
- 		$.urlParam('id',r.id);
 
- 		window.unsavedModifications = null;
 
- 		dynamicform_field_search();
 
- 		$.message('success','Enregistré');
 
- 	});
 
- }
 
- //Suppression formulaire
 
- function dynamicform_form_delete(element){
 
- 	if(!confirm('Êtes vous sûr de vouloir supprimer cet item ?')) return;
 
- 	var line = $(element).closest('tr');
 
- 	
 
- 	$.action({
 
- 		action: 'dynamicform_form_delete',
 
- 		id: line.attr('data-id')
 
- 	},function(r){
 
- 		line.remove();
 
- 		$.message('info','Item supprimé');
 
- 	});
 
- }
 
- /** CHAMP **/
 
- //Récuperation d'une liste  champ dans le tableau #dynamicfields
 
- function dynamicform_field_search(callback){
 
- 	$.action({
 
- 		action : 'dynamicform_field_search',
 
- 		form : $('#dynamic-form-form').attr('data-id')
 
- 	},function(response){
 
- 		dynamicform_form_reset();
 
- 		var layout = $('#form-layout');
 
- 		for (var k in response.rows) {
 
- 			var currentRow = dynamicform_row_add();
 
- 			for (var i in response.rows[k]) {
 
- 				var currentColumn = dynamicform_column_add(currentRow);
 
- 				for (var u in response.rows[k][i]) {
 
- 					var data = response.rows[k][i][u];
 
- 					dynamicform_field_add(null,currentColumn,data);
 
- 				}
 
- 			}
 
- 			currentRow.find('.column:eq(0)').remove();
 
- 		}
 
- 		if(layout.find('>.row').length>1) layout.find('>.row:eq(0)').remove();
 
- 		if(callback!=null) callback();
 
- 	});
 
- }
 
- //Ajout ou modification champ
 
- function dynamicform_field_save(){	
 
- 	var data = $('.dynamic-field-main').toJson();
 
- 	var settings = {};
 
- 	$('.dynamic-field-settings span').find('>input,select,textarea').each(function(){
 
- 		var value = $(this).val();
 
- 		if(is_json_string(value))
 
- 			value = JSON.parse(value);
 
- 		
 
- 		settings[$(this).attr('id')] = value;
 
- 	});
 
- 	$('.dynamic-field-main #deleted-operators').find('input:checked').each(function(){
 
- 		if(!settings['operator-delete']) settings['operator-delete'] = [];
 
- 		settings['operator-delete'].push($(this).val());
 
- 	});
 
- 	if($('#show-filter').prop('checked'))
 
- 		settings['show-filter'] = true;
 
- 	
 
- 	if(Object.keys(settings).length > 0)
 
-    	data.meta = btoa_unicode(JSON.stringify(settings));
 
- 	var field = $('#dynamic-field-form').data('field');
 
- 	data.type = JSON.parse(atob($('#type option:selected').attr('data-options')));	
 
- 	data.id = $('#dynamic-field-form').attr('data-id');
 
- 	
 
- 	$('#dynamic-field-form').clear();
 
- 	$('#dynamic-field-form').data('field',null);
 
- 	dynamicform_field_add(field,null,data);
 
- 	$('.dynamic-field-panel').addClass('fold');
 
- 	window.unsavedModifications = true;
 
- }
 
- //Mofdification du type de champ
 
- function dynamicform_fieldtype_change(meta){
 
- 	$('.dynamic-field-settings').html('');
 
- 	$.action({
 
- 		action:'dynamicform_field_setting_change',
 
- 		type:$('#type').val(),
 
- 		settings:meta != null ? meta : ''
 
- 	},function(response){
 
- 		$('.dynamic-field-settings').append(response);
 
- 		init_components($('.dynamic-field-settings'));
 
- 	});
 
- }
 
 
  |