Description du script

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.

Explication détaillée de l’algorithme

  1. Vérification de l'URL : Le script s'exécute uniquement si l'URL contient "moremember.pl" ou "circulation.pl".
  2. Attente d'une seconde : Un délai de 1000 millisecondes (1 seconde) est appliqué pour s'assurer que le contenu de la page est chargé.
  3. Extraction des informations :
  4. Création du bouton d'impression :
  5. Affichage dans la console : Les informations extraites sont également affichées dans la console pour vérification.

Inclusion du code

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

Éléments à modifier

Points clés pour les mises à jour de Koha

Dépendances