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'));
- });
- }
|