component.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /**
  2. * Initialisation du composant export modèle
  3. *
  4. * data-force : (facultatif) slug du modèle d'export à utiliser obligatoirement, si renseigné et que le modèle existe on exporte obligatoirement avec ce modèle
  5. * data-default : (facultatif) slug du modèle d'export à mettre par défaut
  6. * data-parameters : les paramètres à renseigner pour l'export modèle
  7. * => doit contenir les clés suivantes :
  8. * - plugin (obligatoire) : le plugin ciblé
  9. * - dataset (obligatoire) : le jeu de données ciblé
  10. * - destination (facultatif) : chemin où enregistrer le fichier, ne pas mettre si on veut télécharger le fichier généré à la volée
  11. * - autres paramètres personnalisés...
  12. * data-pre-callback : string de la fonction appelée avant export (juste après affichage de modal)
  13. * data-post-callback : string de la fonction appelée après export
  14. *
  15. * @param jQuery object input l'input qui servira de support pour le composant
  16. * @return rien Affiche le modal avec les modèles trouvés pour le plugin et dataset défini
  17. */
  18. function init_components_export_model(input){
  19. var preCallback = input.attr('data-pre-callback') ? input.attr('data-pre-callback') : null;
  20. var postCallback = input.attr('data-post-callback') ? input.attr('data-post-callback') : null;
  21. $(document).ready(function(e){
  22. input.off('click').on('click', function(e){
  23. $.ajax({
  24. type: 'GET',
  25. url: 'plugin/export/modal.export.model.php',
  26. async: true,
  27. success : function(modal){
  28. if(preCallback!=null && window[preCallback]) window[preCallback](input);
  29. }
  30. }).done(function(modalContent){
  31. var parameters = JSON.parse(input.attr('data-parameters'));
  32. if(!$('#export-modal').length)
  33. $('body').append(modalContent);
  34. var modal = $('#export-modal');
  35. reset_inputs(modal);
  36. $.action({
  37. action: 'export_model_search',
  38. params: parameters
  39. }, function(r){
  40. var selectExport = $('#exportModel', modal);
  41. if(r.rows){
  42. var forceExport = input.attr('data-force');
  43. var defaultExport = input.attr('data-default');
  44. selectExport.find('option').remove();
  45. $.each(r.rows,function(i, option){
  46. var opt = $('<option value="'+option.id+'">'+option.label+(option.description.length?' - '+option.description:'')+'</option>');
  47. if(forceExport && forceExport.length && option.slug === forceExport) opt.addClass('force');
  48. if(defaultExport && defaultExport.length && option.slug === defaultExport) opt.attr('selected', true);
  49. selectExport.append(opt);
  50. });
  51. }
  52. $('#exportmodel-form').attr('data-parameters', JSON.stringify(parameters));
  53. if($('> option',selectExport).length == 1 || $('> option.force',selectExport).length == 1){
  54. selectExport.val($('>option'+($('> option.force',selectExport).length==1?'.force':''),selectExport).val());
  55. if(selectExport.val()=='none'){
  56. $.message('warning', "Aucun modèle d'export existant");
  57. return;
  58. }
  59. input.find('.btn').addClass('btn-preloader');
  60. export_model_export(postCallback);
  61. return;
  62. }
  63. init_components($('#export-modal'));
  64. modal.modal('show');
  65. if(postCallback!=null) modal.attr('data-post-callback', postCallback);
  66. });
  67. });
  68. });
  69. });
  70. }