Ce script a pour objectif d'extraire et d'afficher diverses informations relatives aux membres et à la circulation dans Koha. Il s'exécute sur les pages contenant "moremember.pl" ou "circulation.pl" et récupère des données telles que le nom, le téléphone, l'email, la date de naissance, le genre, le numéro de carte, ainsi que des informations sur les cautions et messages. De plus, il ajoute un bouton permettant d'imprimer ces informations dans une nouvelle fenêtre.
<h1>).href commence par "tel:").href commence par "mailto:").li avec une balise span.label contenant "Date de naissance".#patron-cardnumber.data-code="checkinslip".// Extraction et impression d'informations sur plusmember.pl et circulation.pl
if (window.location.pathname.includes("moremember.pl") || window.location.pathname.includes("circulation.pl")) {
setTimeout(function() {
// Action après 1 seconde
console.log('1 seconde après le clic');
// Extraire les informations de l'en-tête
const nameElement = document.querySelector('h1');
const name = nameElement ? nameElement.textContent.trim() : 'Non disponible';
// Extraire les informations de contact
const phoneElement = document.querySelector('a[href^="tel:"]');
const phone = phoneElement ? phoneElement.textContent.trim() : 'Non disponible';
const emailElement = document.querySelector('a[href^="mailto:"]');
const email = emailElement ? emailElement.textContent.trim() : 'Non disponible';
// Extraire la date de naissance et l'âge
const birthdateElement = Array.from(document.querySelectorAll('li span.label')).find(el => el.textContent.includes("Date de naissance"));
const birthdate = birthdateElement ? birthdateElement.nextElementSibling.textContent.trim() : 'Non disponible';
// Extraire le genre
const genderElement = Array.from(document.querySelectorAll('li span.label')).find(el => el.textContent.includes("Genre"));
const gender = genderElement ? genderElement.nextElementSibling.textContent.trim() : 'Non disponible';
// Extraire le numéro de carte
const cardNumberElement = document.querySelector('#patron-cardnumber');
const cardNumber = cardNumberElement ? cardNumberElement.textContent.trim() : 'Non disponible';
// Extraire les cautions
const guarantorsList = [];
document.querySelectorAll('li a[href*="moremember.pl"]').forEach(guarantor => {
guarantorsList.push(guarantor.textContent.trim());
});
// Extraire les messages de suspension et autres messages
const suspensionMessages = [];
const messagesList = document.querySelectorAll('#patron_messages .blocker, #patron_messages .userdebarred');
messagesList.forEach(msg => {
suspensionMessages.push(msg.innerText.trim());
});
// Extraire les messages (général)
const messageElements = [];
const messagesItems = document.querySelectorAll('#messages ul li');
messagesItems.forEach(item => {
const message = item.querySelector('span.circ-hlt') ? item.querySelector('span.circ-hlt').innerText.trim() : '';
const details = item.querySelector('em') ? item.querySelector('em').innerText.trim() : '';
messageElements.push(`${message} ${details}`);
});
// Affichage des données extraites dans la console
console.log('Nom:', name);
console.log('Téléphone:', phone);
console.log('Email:', email);
console.log('Date de naissance:', birthdate);
console.log('Genre:', gender);
console.log('Numéro de carte:', cardNumber);
console.log('Cautions:', guarantorsList.join(', '));
console.log('Messages de suspension:', suspensionMessages.join('\n'));
console.log('Messages:', messageElements.join('\n'));
// Sélectionner le lien "Imprimer le ticket de retour"
const returnTicketLink = document.querySelector('li a[data-code="checkinslip"]');
if (returnTicketLink) {
// Créer un bouton et l'ajouter à la page
const button = document.createElement('a');
button.id = 'infoButton'; // Ajouter un ID pour identifier le bouton si nécessaire
button.classList.add('btn', 'btn-default');
button.href = '#'; // Lien vers une action ou une page, ici un lien fictif
button.innerHTML = '<i class="fa fa-print"></i> Imprimer les informations';
// Ajouter un événement de clic pour le bouton
button.addEventListener('click', function() {
// Créer le contenu imprimable
const printableContent = `
<h1>${name}</h1>
<p><strong>Nom:</strong> ${name}</p>
<p><strong>Téléphone:</strong> ${phone}</p>
<p><strong>Email:</strong> ${email}</p>
<p><strong>Date de naissance:</strong> ${birthdate}</p>
<p><strong>Genre:</strong> ${gender}</p>
<p><strong>Numéro de carte:</strong> ${cardNumber}</p>
<p><strong>Cautions:</strong> ${guarantorsList.join(', ')}</p>
<p><strong>Messages de suspension:</strong><br>${suspensionMessages.join('<br>')}</p>
<p><strong>Messages:</strong><br>${messageElements.join('<br>')}</p>
`;
// Créer une nouvelle fenêtre pour l'impression
const printWindow = window.open('', '', 'height=800,width=600');
printWindow.document.write('<html><head><title>Impression des informations</title></head><body>');
printWindow.document.write(printableContent); // Ajouter le contenu à imprimer
printWindow.document.write('</body></html>');
printWindow.document.close(); // Nécessaire pour IE
printWindow.print(); // Lancer l'impression
});
// Insérer le bouton juste après le lien "Imprimer le ticket de retour"
returnTicketLink.insertAdjacentElement('afterend', button);
} else {
console.log('Le lien "Imprimer le ticket de retour" n\'existe pas.');
}
}, 1000);
}
1000 millisecondes) pour s'assurer que le contenu est chargé.