Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head>
- <title>e-PPNator - Rapport du contrôle qualité des notices</title>
- <link rel="icon" type="image/png" href="http://akareup.alwaysdata.net/images/maPomme.png">
- <link rel="stylesheet" type="text/css" href="./css/controlequalite.css">
- <script type="text/javascript">
- function restreindre()
- {
- nbPPN=document.getElementById("tableau").rows.length;
- if (document.getElementById("aBouton").innerHTML.match(/anomalies/))
- {
- document.getElementById("aBouton").innerHTML="Afficher toutes les notices ("+nbPPN+")";
- document.getElementById("bouton").style.border="6px inset #0000CC";
- document.getElementById("aBouton").style.color="#696969";
- i=0;
- for (i=0;i<nbPPN;i++)
- {
- if (document.getElementById("tableau").rows[i].className=="sansAnomalie")
- {document.getElementById("tableau").rows[i].style.visibility="collapse";}
- }
- }
- else {
- i=0;
- j=0;
- for (i=0;i<nbPPN;i++)
- {
- if (document.getElementById("tableau").rows[i].className=="sansAnomalie")
- {j++;}
- document.getElementById("tableau").rows[i].style.visibility="visible";
- }
- k=nbPPN-j;
- document.getElementById("aBouton").innerHTML="N'afficher que les notices présentant des anomalies ("+k+"/"+nbPPN+")";
- document.getElementById("bouton").style.border="6px outset #0000CC";
- document.getElementById("aBouton").style.color="#FFFFFF";
- }
- }
- </script>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
- <meta name="DC.title" content="e-PPNator - rapport du contrôle qualité des notices" />
- <meta name="DC.creator" content="Pierre Marige" />
- <meta name="DC.subject" content="Sudoc ; Unimarc" />
- <link rel="DC.relation" href="http://akareup.hypotheses.org/383" />
- <meta name="DC.language" content="fr-FR" />
- <link rel="DC.identifier" href="http://akareup.alwaysdata.net/rapportcontrolequalite.php" />
- <meta name="DC.rights" content="BeerWare" />
- </head>
- <body style="font-family:Verdana, Geneva, sans-serif;">
- <?php
- // On sépare les PPN et on les compte
- $ppn=explode(" ",$_POST["saisiePPN"]);
- $nbPPN=count($ppn);
- // On affiche un message d'attente
- echo('<script type="text/javascript">
- attente=document.createElement("div");
- attente.id="attente";
- messAttente=document.createElement("span");
- messAttente.id="messAttente";
- txtMessage=document.createTextNode("Vérification en cours - cela peut prendre du temps");
- barre=document.createElement("table");
- barre.id="barre";
- messAttente.appendChild(txtMessage);
- attente.appendChild(messAttente);
- attente.appendChild(barre);
- document.body.appendChild(attente);');
- $prog=100/$nbPPN;
- for ($h=0; $h<$nbPPN; $h++)
- {
- echo('
- avancee=document.createElement("td");
- avancee.style.borderStyle="none";
- avancee.style.margin="0";
- avancee.style.padding="0";
- avancee.style.width="'.$prog.'%";
- document.getElementById("barre").appendChild(avancee);');
- }
- echo('</script>');
- // On crée le tableau où s'afficheront les résultats
- echo('<script type="text/javascript">
- tableau=document.createElement("table");
- tableau.id="tableau";');
- $nbTotalAnomalies=0;
- $donneesXport="PPN;Titre;Type de document;Auteur(s);Fonction(s);Collection;Sujet(s);Anomalie(s)";
- // On va vérifier la qualité pour chacune des notices
- for ($i=0; $i<$nbPPN; $i++)
- {
- // Le script made by @symac pour récupérer la page du Sudoc à distance
- $url = "http://www.sudoc.abes.fr/DB=2.1/SRCH?IKT=12&TRM=".$ppn[$i];
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL,$url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
- $res = curl_exec($ch);
- // On crée la ligne et la cellule "PPN"
- echo('ligne=document.createElement("tr");
- ligne.id="PPN'.$ppn[$i].'";
- cellPPN=document.createElement("td");
- cellPPN.className="cellPPN";
- lienPPN=document.createElement("a");
- lienPPN.href="'.$url.'";
- lienPPN.target="_blank";
- lienPPN.className="lienPPN";
- lienPPN.title="voir sur le Sudoc";
- noPPN=document.createTextNode("PPN '.$ppn[$i].'");
- lienPPN.appendChild(noPPN);
- cellPPN.appendChild(lienPPN);
- ligne.appendChild(cellPPN);');
- $nbAnomalies=0;
- $ligneXport="+PPN ".$ppn[$i];
- // On vérifie qu'il s'agissait bien d'un PPN de document (par la présence d'un titre)
- if (preg_match('/<span>Titre[\d\D]*?rec_lable/', $res, $matches))
- {
- // Si oui, on récupére la zone de titre et on crée les cellule "Titre" et "Type"
- $zoneTitre=$matches[0];
- echo('cellTitre=document.createElement("td");
- cellTitre.className="cellResu";
- cellType=document.createElement("td");
- cellType.className="cellResu";');
- // On y cherche les doubles espaces, et affiche le résultat
- if (preg_match('/>[^<]*[[:blank:]]{2,}|>[^<]*\'[[:blank:]]/', $zoneTitre))
- {
- echo('cellTitre.style.backgroundColor="#FF0000";
- resuTitre=document.createTextNode("Double espace dans le titre");');
- $nbAnomalies++;
- $ligneXport=$ligneXport.";Double espace dans le titre";
- }
- else
- {
- echo('cellTitre.style.backgroundColor="#00CC00";
- resuTitre=document.createTextNode("Aucun double espace dans le titre");');
- $ligneXport=$ligneXport.";Aucun double espace dans le titre";
- }
- echo('cellTitre.appendChild(resuTitre);
- ligne.appendChild(cellTitre);');
- // On y cherche la mention de type de document, et affiche le résultat
- if (preg_match('/\[Document cartographique\]|\[Enregistrement sonore\]|\[Images animées\]|\[Image fixe\]|\[Ensemble multimédia\]|\[Texte manuscrit\]|\[Microforme\]|\[Braille\]|\[Texte imprimé\]|\[Multimédia multisupport\]|\[Musique imprimée\]|\[Musique en braille\]|\[Ressource électronique\]/i', $zoneTitre))
- {
- echo('cellType.style.backgroundColor="#00CC00";
- resuType=document.createTextNode("Type de document spécifié");');
- $ligneXport=$ligneXport.";Type de document spécifié";
- }
- else
- {
- echo('cellType.style.backgroundColor="#FF0000";
- resuType=document.createTextNode("Aucun type de document spécifié");');
- $nbAnomalies++;
- $ligneXport=$ligneXport.";Aucun type de document spécifié";
- }
- echo('cellType.appendChild(resuType);
- ligne.appendChild(cellType);');
- // On récupère la zone des auteurs et on crée les cellules "Auteur(s)" et "Fonctions"
- preg_match('/<span>Auteur\(s\)[\d\D]*?rec_lable/', $res, $matches);
- $zoneAuteurs=$matches[0];
- echo('cellAuteurs=document.createElement("td");
- cellAuteurs.className="cellResu";
- cellFonctions=document.createElement("td");
- cellFonctions.className="cellResu";');
- // On y récupère les liens et on les compte
- // (il y a un lien par auteur qu'il soit lié à sa notice ou non)
- preg_match_all('/<a[^>]*>/', $zoneAuteurs, $matches);
- $liensAuteurs=$matches[0];
- $nbLiensAuteurs=count($liensAuteurs);
- // On vérifie la présence de lien vers l'autorité sur chacun, et affiche le résultat
- // (les liens vers l'autorité se distinguent par la mention REL?PPN)
- $j=0;
- for ($k=0; $k<$nbLiensAuteurs; $k++)
- {
- if (preg_match('/REL\?PPN/', $liensAuteurs[$k]))
- {$j++;}
- }
- $nbAuteursSansLien=$nbLiensAuteurs-$j;
- if ($nbAuteursSansLien==0)
- {
- echo('cellAuteurs.style.backgroundColor="#00CC00";
- resuAuteurs=document.createTextNode("Auteurs liés à leur notice");');
- $ligneXport=$ligneXport.";Auteurs liés à leur notice";
- }
- else
- {
- echo('cellAuteurs.style.backgroundColor="#FF0000";
- resuAuteurs=document.createTextNode("Tous les auteurs ne sont pas liés");');
- $nbAnomalies++;
- $ligneXport=$ligneXport.";Tous les auteurs ne sont pas liés";
- }
- echo('cellAuteurs.appendChild(resuAuteurs);
- ligne.appendChild(cellAuteurs);');
- // On y récupère les fonctions, on les compte, et affiche le résultat
- preg_match_all('/<span>/', $zoneAuteurs, $matches);
- $spanAuteurs=$matches[0];
- $nbFonctions=count($spanAuteurs)-$nbLiensAuteurs-1;
- if ($nbFonctions<0)
- {$nbAuteursSansFonction=0;}
- else {$nbAuteursSansFonction=$nbLiensAuteurs-$nbFonctions;}
- if ($nbAuteursSansFonction==0)
- {
- echo('cellFonctions.style.backgroundColor="#00CC00";
- resuFonctions=document.createTextNode("Auteurs avec fonctions");');
- $ligneXport=$ligneXport.";Auteurs avec fonctions";
- }
- else
- {
- echo('cellFonctions.style.backgroundColor="#FF0000";
- resuFonctions=document.createTextNode("'.$nbAuteursSansFonction.' auteur(s) sans fonction");');
- $nbAnomalies++;
- $ligneXport=$ligneXport.";".$nbAuteursSansFonction." auteur(s) sans fonction";
- }
- echo('cellFonctions.appendChild(resuFonctions);
- ligne.appendChild(cellFonctions);');
- // On récupère et compte les zones de collection et on crée la cellule "Collection"
- preg_match_all('/<span>Collection\(s\)[\d\D]*?rec_lable/', $res, $matches);
- $zonesCollection=$matches[0];
- $nbZonesCollection=count($zonesCollection);
- echo('cellCollection=document.createElement("td");
- cellCollection.className="cellResu";');
- // S'il n'y a pas de zone de collection
- if ($nbZonesCollection==0)
- {
- echo('cellCollection.style.backgroundColor="#00CC00";
- resuCollection=document.createTextNode("Pas de collection");');
- $ligneXport=$ligneXport.";Pas de collection";
- }
- else
- {
- // On compte les collections et les liens dans la dernière zone
- /* (si la forme de titre est annoncée identique à la forme de titre de l'autorité,
- il n'y a qu'une zone de collection, sinon il y en a deux, et le lien est attendu dans la deuxième :
- c'est donc la dernière qui nous intéresse.
- S'il s'agit d'une monographie en plusieurs volumes, la deuxième zone est nommée "Dans :".
- Comme la première zone - la seule qui sera reconnue - comporte toujours un lien,
- le script la considèrera valide) */
- preg_match_all('/<\/div>/', $zonesCollection[$nbZonesCollection-1], $matches);
- $collections=$matches[0];
- $nbCollections=count($collections)-1;
- preg_match_all('/<a[^>]*>/', $zonesCollection[$nbZonesCollection-1], $matches);
- $liensCollections=$matches[0];
- $nbLiensCollections=count($liensCollections);
- // On vérifie la présence de lien vers la notice pour chacune, et affiche le résultat
- // (si la collection n'est pas liée à sa notice, il n'y aura pas de lien)
- $nbCollectionsSansLien=$nbCollections-$nbLiensCollections;
- if ($nbCollectionsSansLien==0)
- {
- echo('cellCollection.style.backgroundColor="#00CC00";
- resuCollection=document.createTextNode("Collections liées à leur notice");');
- $ligneXport=$ligneXport.";Collections liées à leur notice";
- }
- else
- {
- echo('cellCollection.style.backgroundColor="#FF0000";
- resuCollection=document.createTextNode("Toutes les collections ne sont pas liées");');
- $nbAnomalies++;
- $ligneXport=$ligneXport.";Toutes les collections ne sont pas liées";
- }
- }
- echo('cellCollection.appendChild(resuCollection);
- ligne.appendChild(cellCollection);');
- // On récupère la zone des sujets et on crée la cellule "Sujets"
- preg_match('/<span>Sujets[\d\D]*?rec_lable/', $res, $matches);
- $zoneSujets=$matches[0];
- echo('cellSujets=document.createElement("td");
- cellSujets.className="cellResu";');
- // On y récupère les liens et on les compte
- // (il y a un lien par sujet qu'il soit lié à la notice ou non)
- preg_match_all('/<a[^>]*>/', $zoneSujets, $matches);
- $liensSujets=$matches[0];
- $nbLiensSujets=count($liensSujets);
- // On vérifie la présence de lien vers l'autorité sur chacun, et affiche le résultat
- // (les liens vers l'autorité se distinguent par la mention REL?PPN)
- $l=0;
- for ($m=0; $m<$nbLiensSujets; $m++)
- {
- if (preg_match('/REL\?PPN/', $liensSujets[$m]))
- {$l++;}
- }
- $nbSujetsSansLien=$nbLiensSujets-$l;
- if ($nbSujetsSansLien==0)
- {
- echo('cellSujets.style.backgroundColor="#00CC00";
- resuSujets=document.createTextNode("Sujets liés à leur notice");');
- $ligneXport=$ligneXport.";Sujets liés à leur notice";
- }
- else
- {
- echo('cellSujets.style.backgroundColor="#FF0000";
- resuSujets=document.createTextNode("Tous les sujets ne sont pas liés");');
- $nbAnomalies++;
- $ligneXport=$ligneXport.";Tous les sujets ne sont pas liés";
- }
- echo('cellSujets.appendChild(resuSujets);
- ligne.appendChild(cellSujets);');
- }
- // Cas où il ne s'agissait pas d'un PPN valide
- else
- {
- echo('nonValide=document.createElement("td");
- nonValide.className="nonValide";
- nonValide.colSpan="6";
- txtNonValide=document.createTextNode("PPN non valide");
- nonValide.appendChild(txtNonValide);
- ligne.appendChild(nonValide);');
- $nbAnomalies++;
- $ligneXport=$ligneXport.";PPN non valide;PPN non valide;PPN non valide;PPN non valide;PPN non valide;PPN non valide";
- }
- // On ajoute la ligne au tableau, et on signale l'avancée
- if ($nbAnomalies==0)
- {
- echo('ligne.className="sansAnomalie";');
- $ligneXport=$ligneXport.";Non";
- }
- else
- {
- $nbTotalAnomalies++;
- $ligneXport=$ligneXport.";Oui";
- }
- echo('tableau.appendChild(ligne);
- document.getElementById("barre").getElementsByTagName("td")['.$i.'].style.backgroundColor="#0000CC";
- </script>
- <script type="text/javascript">');
- $donneesXport=$donneesXport.$ligneXport;
- }
- // Quand tous les PPN sont vérifiés, on efface le message d'attente, et on annonce la fin du processus
- echo('document.getElementById("attente").style.display="none";
- termine=document.createElement("div");
- termine.id="termine";
- txtTermine=document.createTextNode("Vérification terminée");
- termine.appendChild(txtTermine);
- document.body.appendChild(termine);');
- // On ajoute le bouton de restriction aux anomalies
- echo('bouton=document.createElement("div");
- bouton.id="bouton";
- aBouton=document.createElement("a");
- aBouton.href="#";
- aBouton.id="aBouton";
- aBouton.onclick=restreindre;
- txtBouton=document.createTextNode("N'."'".'afficher que les notices présentant des anomalies ('.$nbTotalAnomalies.'/'.$nbPPN.')");
- aBouton.appendChild(txtBouton);
- bouton.appendChild(aBouton);
- document.body.appendChild(bouton);');
- // On ajoute le bouton d'export
- echo('divXport=document.createElement("div");
- divXport.id="divXport";
- formXport=document.createElement("form");
- formXport.action="export.php";
- formXport.method="post";
- formXport.target="_blank";
- donXport=document.createElement("input");
- donXport.name="donnees";
- donXport.type="hidden";
- donXport.value="'.$donneesXport.'";
- subXport=document.createElement("input");
- subXport.id="subXport";
- subXport.name="bouton";
- subXport.value="Exporter le tableau";
- subXport.type="submit";
- formXport.appendChild(donXport);
- formXport.appendChild(subXport);
- divXport.appendChild(formXport);
- document.body.appendChild(divXport);');
- // On affiche le tableau et le bouton de retour
- echo('document.body.appendChild(tableau);
- retour=document.createElement("p");
- urlRetour=document.createElement("a");
- urlRetour.href="http://akareup.alwaysdata.net/controlequalite.html";
- txtRetour=document.createTextNode("retour à la page d'."'".'accueil");
- urlRetour.appendChild(txtRetour);
- retour.appendChild(urlRetour);
- document.body.appendChild(retour);');
- // On affiche les crédits
- echo('credits=document.createElement("div");
- credits.id="credits";
- pCredits=document.createElement("p");
- txtCredits=document.createTextNode("Créateur : Pierre Marige, aka Reup");
- site=document.createElement("a");
- site.href="http://akareup.hypotheses.org/";
- site.id="lienSite";
- txtSite=document.createTextNode("http://akareup.hypotheses.org/");
- aLicence=document.createElement("a");
- aLicence.href="http://fr.wikipedia.org/wiki/Beerware";
- licence=document.createElement("img");
- licence.src="./images/beer-ware.png";
- licence.id="licence";
- pCredits.appendChild(txtCredits);
- credits.appendChild(pCredits);
- site.appendChild(txtSite);
- credits.appendChild(site);
- aLicence.appendChild(licence);
- credits.appendChild(aLicence);
- document.body.appendChild(credits);
- </script>');
- ?>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement