Skip to main content

1. Interraction JS

La génération du guide de recherche repose sur plusieurs interactions JavaScript, déclenchées par les actions de l'utilisateur dans l'interface du site. Le processus commence lorsque l'utilisateur remplit et soumet le formulaire de génération du guide de recherche.

Initialisation et Collecte des Paramètres

Le formulaire de génération du guide est inclus dans la page précédement sélectionnée dans les options globale du site.

Le JavaScript écoute la soumission du formulaire et collecte les options choisies par l'utilisateur, telles que l'inclusion d'une introduction, d'un sommaire, et d'annexes.

/templates/page-guide-recherche.twig
$(document).ready(function() {
// Activation du bouton CTA de génération du guide
$('#formGenerationGuide').on('submit', function(e) {
e.preventDefault();
var options = {
transparence3945: $('#transparence_3945').is(':checked'),
introduction: $('#generateIntro').is(':checked'),
sommaire: $('#generateSommaire').is(':checked'),
annexes: $('#generateAnnexes').is(':checked'),
};
generateGuide(options);
});
});

Génération du guide

Le module JS va principalement effectuer 3 requetes AJAX :

  1. SID_getServicesProprietaires
    Permet de récupérer la liste des services propriétaires.
  2. SID_create_docx_by_service_proprietaire
    Permet de créer un fichier .docx par service propriétaire
  3. SID_guide_fusion_des_docx
    Permet de générer tous les fichiers .docx temporaire, de les fusionner en un seul fichier, d'y ajouter ou non les sommaires et autres annexes puis de lancer son téléchargement à l'utilisateur.

1. Récupération des services propriétaires

La fonction generateGuide(options) déclenche la génération du guide de recherche. Cette fonction utilise une série de requêtes AJAX pour traiter les données de manière asynchrone. Chaque service propriétaire est traité séparément pour optimiser les performances et éviter les limitations du serveur.

/templates/page-guide-recherche.twig
function generateGuide(options) {
// Initialisation de la queue de traitement
let queue = Promise.resolve();

// Requête AJAX pour obtenir la liste des services propriétaires
$.ajax({
url: '/wp-admin/admin-ajax.php',
type: 'POST',
data: {
action: 'SID_getServicesProprietaires',
options: options,
},
success: function(services) {
services.forEach(service => {
queue = queue.then(() => {
return createDocxByServiceProprietaire(service, options);
});
});

// Après le traitement de tous les services
queue.then(() => {
mergeDocx(options);
});
},
});
}

L'action PHP getServicesProprietaires récupère la liste des services propriétaires existants. Elle est définie dans le fichier /inc/guideRecherche/v2-guide.php et sera détaillée dans les pages suivantes concernant les fonctions php.

2. Récupération des archives pour un service propriétaire

La fonction JS createDocxByServiceProprietaire (dans le code précédent) éxécute elle aussi un call AJAX :

/templates/page-guide-recherche.twig
function createDocxByServiceProprietaire(service, key, callback) {
return new Promise((resolve, reject) => {
$.ajax({
type: 'POST',
dataType: "json",
url: "/wp-admin/admin-ajax.php",
data: {
action: 'SID_create_docx_by_service_proprietaire',
key: key,
service: service.meta_value
},
success: function(result) {
callback(result, null);
resolve();
},
error: function(jqXHR, textStatus, errorThrown) {
callback(null, errorThrown);
resolve({ error: true, message: errorThrown }); // Continue malgré l'erreur
}
});
});
}

L'action PHP SID_create_docx_by_service_proprietaire créer un fichier .docx temporaire pour service propriétaire courant. Elle est définie dans le fichier /inc/guideRecherche/v2-guide.php et sera détaillée dans les pages suivantes concernant les fonctions php.

3. Fusion des documents et création du fichier exporté

La fonction createDocxByService(service, options) s'occupe de générer un document .docx pour chaque service propriétaire. Après la création de tous les documents, ils sont fusionnés en un seul fichier final via la fonction mergeDocx(options).

/templates/page-guide-recherche.twig
// Fin de boucle  _________________________________________________________________________
queue.then(() => {
console.log('Lancement de la fusion des sous-documents');
$.ajax({
type: 'POST',
dataType: "json",
url: "/wp-admin/admin-ajax.php",
data: {
action: 'SID_guide_fusion_des_docx',
isIntroduction: isIntroduction,
isSommaire: isSommaire,
isAnnexes: isAnnexes,
},
success: function(response) {
if (response.url) {
window.location.href = response.url; // Déclenche le téléchargement
} else {
console.error("Erreur : URL du fichier fusionné non fournie");
}
console.error(response.message);
},
error: function(error) {
console.error('Erreur lors de la fusion', error);
}
});
}).catch((error) => {
console.error('Erreur dans le traitement des posts:', error);
});

Conclusion

Ce processus est conçu pour être évolutif et adaptable à l'ajout de nouvelles fonctionnalités ou à l'optimisation du code existant. Par exemple, il est conseillé de déplacer progressivement le JavaScript du formulaire vers un fichier main.js centralisé pour une meilleure maintenance et de continuer à optimiser les fonctions PHP pour gérer efficacement les grandes quantités de données.