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.
$(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 :
SID_getServicesProprietaires
Permet de récupérer la liste des services propriétaires.SID_create_docx_by_service_proprietaire
Permet de créer un fichier.docx
par service propriétaireSID_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.
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 :
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)
.
// 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.