Advertisement
akaReup

e-PPNator

Jun 25th, 2012
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 15.91 KB | None | 0 0
  1. <html>
  2. <head>
  3. <title>e-PPNator - Rapport du contrôle qualité des notices</title>
  4. <link rel="icon" type="image/png" href="http://akareup.alwaysdata.net/images/maPomme.png">
  5. <link rel="stylesheet" type="text/css" href="./css/controlequalite.css">
  6. <script type="text/javascript">
  7. function restreindre()
  8. {
  9. nbPPN=document.getElementById("tableau").rows.length;
  10. if (document.getElementById("aBouton").innerHTML.match(/anomalies/))
  11.     {
  12.     document.getElementById("aBouton").innerHTML="Afficher toutes les notices ("+nbPPN+")";
  13.     document.getElementById("bouton").style.border="6px inset #0000CC";
  14.     document.getElementById("aBouton").style.color="#696969";
  15.     i=0;
  16.     for (i=0;i<nbPPN;i++)
  17.         {
  18.         if (document.getElementById("tableau").rows[i].className=="sansAnomalie")
  19.             {document.getElementById("tableau").rows[i].style.visibility="collapse";}
  20.         }
  21.     }
  22. else    {
  23.     i=0;
  24.     j=0;
  25.     for (i=0;i<nbPPN;i++)
  26.         {
  27.         if (document.getElementById("tableau").rows[i].className=="sansAnomalie")
  28.             {j++;}
  29.         document.getElementById("tableau").rows[i].style.visibility="visible";
  30.         }
  31.     k=nbPPN-j;
  32.     document.getElementById("aBouton").innerHTML="N'afficher que les notices présentant des anomalies ("+k+"/"+nbPPN+")";
  33.     document.getElementById("bouton").style.border="6px outset #0000CC";
  34.     document.getElementById("aBouton").style.color="#FFFFFF";
  35.     }
  36. }
  37. </script>
  38. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  39. <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />
  40. <meta name="DC.title" content="e-PPNator - rapport du contrôle qualité des notices" />
  41. <meta name="DC.creator" content="Pierre Marige" />
  42. <meta name="DC.subject" content="Sudoc ; Unimarc" />
  43. <link rel="DC.relation" href="http://akareup.hypotheses.org/383" />
  44. <meta name="DC.language" content="fr-FR" />
  45. <link rel="DC.identifier" href="http://akareup.alwaysdata.net/rapportcontrolequalite.php" />
  46. <meta name="DC.rights" content="BeerWare" />
  47. </head>
  48. <body style="font-family:Verdana, Geneva, sans-serif;">
  49. <?php
  50. // On sépare les PPN et on les compte
  51. $ppn=explode(" ",$_POST["saisiePPN"]);
  52. $nbPPN=count($ppn);
  53.  
  54. // On affiche un message d'attente
  55. echo('<script type="text/javascript">
  56.     attente=document.createElement("div");
  57.     attente.id="attente";
  58.     messAttente=document.createElement("span");
  59.     messAttente.id="messAttente";
  60.     txtMessage=document.createTextNode("Vérification en cours - cela peut prendre du temps");
  61.     barre=document.createElement("table");
  62.     barre.id="barre";
  63.     messAttente.appendChild(txtMessage);
  64.     attente.appendChild(messAttente);
  65.     attente.appendChild(barre);
  66.     document.body.appendChild(attente);');
  67. $prog=100/$nbPPN;
  68.  for ($h=0; $h<$nbPPN; $h++)
  69.     {
  70.     echo('
  71.         avancee=document.createElement("td");
  72.         avancee.style.borderStyle="none";
  73.         avancee.style.margin="0";
  74.         avancee.style.padding="0";
  75.         avancee.style.width="'.$prog.'%";
  76.         document.getElementById("barre").appendChild(avancee);');
  77.     }
  78. echo('</script>');     
  79. // On crée le tableau où s'afficheront les résultats
  80. echo('<script type="text/javascript">
  81.         tableau=document.createElement("table");
  82.         tableau.id="tableau";');
  83. $nbTotalAnomalies=0;
  84. $donneesXport="PPN;Titre;Type de document;Auteur(s);Fonction(s);Collection;Sujet(s);Anomalie(s)";
  85.  
  86.   // On va vérifier la qualité pour chacune des notices
  87.   for ($i=0; $i<$nbPPN; $i++)
  88.     {
  89.     // Le script made by @symac pour récupérer la page du Sudoc à distance
  90.     $url = "http://www.sudoc.abes.fr/DB=2.1/SRCH?IKT=12&TRM=".$ppn[$i];
  91.     $ch = curl_init();
  92.     curl_setopt($ch, CURLOPT_URL,$url);
  93.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  94.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  95.     $res = curl_exec($ch);
  96.  
  97.     // On crée la ligne et la cellule "PPN"
  98.     echo('ligne=document.createElement("tr");
  99.         ligne.id="PPN'.$ppn[$i].'";
  100.         cellPPN=document.createElement("td");
  101.         cellPPN.className="cellPPN";
  102.         lienPPN=document.createElement("a");
  103.         lienPPN.href="'.$url.'";
  104.         lienPPN.target="_blank";
  105.         lienPPN.className="lienPPN";
  106.         lienPPN.title="voir sur le Sudoc";
  107.         noPPN=document.createTextNode("PPN '.$ppn[$i].'");
  108.         lienPPN.appendChild(noPPN);
  109.         cellPPN.appendChild(lienPPN);
  110.         ligne.appendChild(cellPPN);');
  111.     $nbAnomalies=0;
  112.     $ligneXport="+PPN ".$ppn[$i];
  113.  
  114.     // On vérifie qu'il s'agissait bien d'un PPN de document (par la présence d'un titre)
  115.     if (preg_match('/<span>Titre[\d\D]*?rec_lable/', $res, $matches))
  116.         {
  117.         // Si oui, on récupére la zone de titre et on crée les cellule "Titre" et "Type"
  118.         $zoneTitre=$matches[0];
  119.         echo('cellTitre=document.createElement("td");
  120.                 cellTitre.className="cellResu";
  121.                 cellType=document.createElement("td");
  122.                 cellType.className="cellResu";');
  123.  
  124.         // On y cherche les doubles espaces, et affiche le résultat
  125.         if (preg_match('/>[^<]*[[:blank:]]{2,}|>[^<]*\'[[:blank:]]/', $zoneTitre))
  126.             {
  127.             echo('cellTitre.style.backgroundColor="#FF0000";
  128.                 resuTitre=document.createTextNode("Double espace dans le titre");');
  129.             $nbAnomalies++;
  130.             $ligneXport=$ligneXport.";Double espace dans le titre";
  131.             }
  132.             else
  133.                 {
  134.             echo('cellTitre.style.backgroundColor="#00CC00";
  135.                 resuTitre=document.createTextNode("Aucun double espace dans le titre");');
  136.             $ligneXport=$ligneXport.";Aucun double espace dans le titre";
  137.             }
  138.         echo('cellTitre.appendChild(resuTitre);
  139.             ligne.appendChild(cellTitre);');
  140.        
  141.         // On y cherche la mention de type de document, et affiche le résultat
  142.         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))
  143.             {
  144.             echo('cellType.style.backgroundColor="#00CC00";
  145.                 resuType=document.createTextNode("Type de document spécifié");');
  146.             $ligneXport=$ligneXport.";Type de document spécifié";
  147.             }
  148.         else
  149.                 {
  150.             echo('cellType.style.backgroundColor="#FF0000";
  151.                 resuType=document.createTextNode("Aucun type de document spécifié");');
  152.             $nbAnomalies++;
  153.             $ligneXport=$ligneXport.";Aucun type de document spécifié";
  154.             }
  155.         echo('cellType.appendChild(resuType);
  156.             ligne.appendChild(cellType);');
  157.  
  158.      
  159.         // On récupère la zone des auteurs et on crée les cellules "Auteur(s)" et "Fonctions"
  160.         preg_match('/<span>Auteur\(s\)[\d\D]*?rec_lable/', $res, $matches);
  161.         $zoneAuteurs=$matches[0];
  162.         echo('cellAuteurs=document.createElement("td");
  163.             cellAuteurs.className="cellResu";
  164.             cellFonctions=document.createElement("td");
  165.             cellFonctions.className="cellResu";');
  166.  
  167.         // On y récupère les liens et on les compte
  168.         // (il y a un lien par auteur qu'il soit lié à sa notice ou non)
  169.         preg_match_all('/<a[^>]*>/', $zoneAuteurs, $matches);
  170.         $liensAuteurs=$matches[0];
  171.         $nbLiensAuteurs=count($liensAuteurs);
  172.         // On vérifie la présence de lien vers l'autorité sur chacun, et affiche le résultat
  173.         // (les liens vers l'autorité se distinguent par la mention REL?PPN)
  174.         $j=0;
  175.         for ($k=0; $k<$nbLiensAuteurs; $k++)
  176.             {
  177.             if (preg_match('/REL\?PPN/', $liensAuteurs[$k]))
  178.                 {$j++;}
  179.             }
  180.         $nbAuteursSansLien=$nbLiensAuteurs-$j;
  181.         if ($nbAuteursSansLien==0)
  182.             {
  183.                 echo('cellAuteurs.style.backgroundColor="#00CC00";
  184.                 resuAuteurs=document.createTextNode("Auteurs liés à leur notice");');
  185.             $ligneXport=$ligneXport.";Auteurs liés à leur notice";
  186.             }
  187.         else
  188.             {
  189.             echo('cellAuteurs.style.backgroundColor="#FF0000";
  190.                 resuAuteurs=document.createTextNode("Tous les auteurs ne sont pas liés");');
  191.             $nbAnomalies++;
  192.             $ligneXport=$ligneXport.";Tous les auteurs ne sont pas liés";
  193.             }
  194.         echo('cellAuteurs.appendChild(resuAuteurs);
  195.             ligne.appendChild(cellAuteurs);');
  196.        
  197.         // On y récupère les fonctions, on les compte, et affiche le résultat
  198.         preg_match_all('/<span>/', $zoneAuteurs, $matches);
  199.         $spanAuteurs=$matches[0];
  200.         $nbFonctions=count($spanAuteurs)-$nbLiensAuteurs-1;
  201.         if ($nbFonctions<0)
  202.             {$nbAuteursSansFonction=0;}
  203.         else {$nbAuteursSansFonction=$nbLiensAuteurs-$nbFonctions;}
  204.         if ($nbAuteursSansFonction==0)
  205.             {
  206.             echo('cellFonctions.style.backgroundColor="#00CC00";
  207.                 resuFonctions=document.createTextNode("Auteurs avec fonctions");');
  208.             $ligneXport=$ligneXport.";Auteurs avec fonctions";
  209.             }
  210.         else
  211.             {
  212.             echo('cellFonctions.style.backgroundColor="#FF0000";
  213.                 resuFonctions=document.createTextNode("'.$nbAuteursSansFonction.' auteur(s) sans fonction");');
  214.             $nbAnomalies++;
  215.             $ligneXport=$ligneXport.";".$nbAuteursSansFonction." auteur(s) sans fonction";
  216.             }
  217.         echo('cellFonctions.appendChild(resuFonctions);
  218.             ligne.appendChild(cellFonctions);');
  219.  
  220.  
  221.         // On récupère et compte les zones de collection et on crée la cellule "Collection"
  222.         preg_match_all('/<span>Collection\(s\)[\d\D]*?rec_lable/', $res, $matches);
  223.         $zonesCollection=$matches[0];
  224.         $nbZonesCollection=count($zonesCollection);
  225.         echo('cellCollection=document.createElement("td");
  226.             cellCollection.className="cellResu";');
  227.  
  228.         // S'il n'y a pas de zone de collection    
  229.         if ($nbZonesCollection==0)
  230.             {
  231.             echo('cellCollection.style.backgroundColor="#00CC00";
  232.                 resuCollection=document.createTextNode("Pas de collection");');
  233.             $ligneXport=$ligneXport.";Pas de collection";
  234.             }  
  235.         else
  236.             {
  237.             // On compte les collections et les liens dans la dernière zone
  238.             /* (si la forme de titre est annoncée identique à la forme de titre de l'autorité,
  239.             il n'y a qu'une zone de collection, sinon il y en a deux, et le lien est attendu dans la deuxième :
  240.             c'est donc la dernière qui nous intéresse.
  241.             S'il s'agit d'une monographie en plusieurs volumes, la deuxième zone est nommée "Dans :".
  242.             Comme la première zone - la seule qui sera reconnue - comporte toujours un lien,
  243.             le script la considèrera valide) */
  244.             preg_match_all('/<\/div>/', $zonesCollection[$nbZonesCollection-1], $matches);
  245.             $collections=$matches[0];
  246.             $nbCollections=count($collections)-1;
  247.             preg_match_all('/<a[^>]*>/', $zonesCollection[$nbZonesCollection-1], $matches);
  248.             $liensCollections=$matches[0];
  249.             $nbLiensCollections=count($liensCollections);
  250.             // On vérifie la présence de lien vers la notice pour chacune, et affiche le résultat
  251.             // (si la collection n'est pas liée à sa notice, il n'y aura pas de lien)
  252.             $nbCollectionsSansLien=$nbCollections-$nbLiensCollections;
  253.             if ($nbCollectionsSansLien==0)
  254.                 {
  255.                 echo('cellCollection.style.backgroundColor="#00CC00";
  256.                     resuCollection=document.createTextNode("Collections liées à leur notice");');
  257.                 $ligneXport=$ligneXport.";Collections liées à leur notice";
  258.                 }
  259.             else
  260.                 {
  261.                 echo('cellCollection.style.backgroundColor="#FF0000";
  262.                     resuCollection=document.createTextNode("Toutes les collections ne sont pas liées");');
  263.                 $nbAnomalies++;
  264.                 $ligneXport=$ligneXport.";Toutes les collections ne sont pas liées";
  265.                 }
  266.             }
  267.         echo('cellCollection.appendChild(resuCollection);
  268.             ligne.appendChild(cellCollection);');
  269.  
  270.      
  271.         // On récupère la zone des sujets et on crée la cellule "Sujets"
  272.         preg_match('/<span>Sujets[\d\D]*?rec_lable/', $res, $matches);
  273.         $zoneSujets=$matches[0];
  274.         echo('cellSujets=document.createElement("td");
  275.             cellSujets.className="cellResu";');
  276.  
  277.         // On y récupère les liens et on les compte
  278.         // (il y a un lien par sujet qu'il soit lié à la notice ou non)
  279.         preg_match_all('/<a[^>]*>/', $zoneSujets, $matches);
  280.         $liensSujets=$matches[0];
  281.         $nbLiensSujets=count($liensSujets);
  282.         // On vérifie la présence de lien vers l'autorité sur chacun, et affiche le résultat
  283.         // (les liens vers l'autorité se distinguent par la mention REL?PPN)
  284.         $l=0;
  285.         for ($m=0; $m<$nbLiensSujets; $m++)
  286.             {
  287.             if (preg_match('/REL\?PPN/', $liensSujets[$m]))
  288.                 {$l++;}
  289.             }
  290.         $nbSujetsSansLien=$nbLiensSujets-$l;
  291.         if ($nbSujetsSansLien==0)
  292.             {
  293.             echo('cellSujets.style.backgroundColor="#00CC00";
  294.                 resuSujets=document.createTextNode("Sujets liés à leur notice");');
  295.             $ligneXport=$ligneXport.";Sujets liés à leur notice";
  296.             }
  297.         else
  298.             {
  299.             echo('cellSujets.style.backgroundColor="#FF0000";
  300.                 resuSujets=document.createTextNode("Tous les sujets ne sont pas liés");');
  301.             $nbAnomalies++;
  302.             $ligneXport=$ligneXport.";Tous les sujets ne sont pas liés";
  303.             }
  304.         echo('cellSujets.appendChild(resuSujets);
  305.             ligne.appendChild(cellSujets);');
  306.  
  307.         }
  308.  
  309.     // Cas où il ne s'agissait pas d'un PPN valide
  310.     else
  311.         {
  312.         echo('nonValide=document.createElement("td");
  313.             nonValide.className="nonValide";
  314.             nonValide.colSpan="6";
  315.             txtNonValide=document.createTextNode("PPN non valide");
  316.             nonValide.appendChild(txtNonValide);
  317.             ligne.appendChild(nonValide);');
  318.         $nbAnomalies++;
  319.         $ligneXport=$ligneXport.";PPN non valide;PPN non valide;PPN non valide;PPN non valide;PPN non valide;PPN non valide";
  320.         }
  321.  
  322.     // On ajoute la ligne au tableau, et on signale l'avancée
  323.     if ($nbAnomalies==0)
  324.         {
  325.         echo('ligne.className="sansAnomalie";');
  326.         $ligneXport=$ligneXport.";Non";
  327.         }
  328.     else
  329.         {
  330.         $nbTotalAnomalies++;
  331.         $ligneXport=$ligneXport.";Oui";
  332.         }
  333.     echo('tableau.appendChild(ligne);
  334.         document.getElementById("barre").getElementsByTagName("td")['.$i.'].style.backgroundColor="#0000CC";
  335.         </script>
  336.         <script type="text/javascript">');
  337.     $donneesXport=$donneesXport.$ligneXport;
  338.     }
  339.  
  340. // Quand tous les PPN sont vérifiés, on efface le message d'attente, et on annonce la fin du processus
  341. echo('document.getElementById("attente").style.display="none";
  342.     termine=document.createElement("div");
  343.     termine.id="termine";
  344.     txtTermine=document.createTextNode("Vérification terminée");
  345.     termine.appendChild(txtTermine);
  346.     document.body.appendChild(termine);');
  347.  
  348. // On ajoute le bouton de restriction aux anomalies
  349. echo('bouton=document.createElement("div");
  350.     bouton.id="bouton";
  351.     aBouton=document.createElement("a");
  352.     aBouton.href="#";
  353.     aBouton.id="aBouton";
  354.     aBouton.onclick=restreindre;
  355.     txtBouton=document.createTextNode("N'."'".'afficher que les notices présentant des anomalies ('.$nbTotalAnomalies.'/'.$nbPPN.')");
  356.     aBouton.appendChild(txtBouton);
  357.     bouton.appendChild(aBouton);
  358.     document.body.appendChild(bouton);');
  359.  
  360. // On ajoute le bouton d'export
  361. echo('divXport=document.createElement("div");
  362.     divXport.id="divXport";
  363.     formXport=document.createElement("form");
  364.     formXport.action="export.php";
  365.     formXport.method="post";
  366.     formXport.target="_blank";
  367.     donXport=document.createElement("input");
  368.     donXport.name="donnees";
  369.     donXport.type="hidden";
  370.     donXport.value="'.$donneesXport.'";
  371.     subXport=document.createElement("input");
  372.     subXport.id="subXport";
  373.     subXport.name="bouton";
  374.     subXport.value="Exporter le tableau";
  375.     subXport.type="submit";
  376.     formXport.appendChild(donXport);
  377.     formXport.appendChild(subXport);
  378.     divXport.appendChild(formXport);
  379.     document.body.appendChild(divXport);');
  380.  
  381. // On affiche le tableau et le bouton de retour
  382. echo('document.body.appendChild(tableau);
  383.     retour=document.createElement("p");
  384.     urlRetour=document.createElement("a");
  385.     urlRetour.href="http://akareup.alwaysdata.net/controlequalite.html";
  386.     txtRetour=document.createTextNode("retour à la page d'."'".'accueil");
  387.     urlRetour.appendChild(txtRetour);
  388.     retour.appendChild(urlRetour);
  389.     document.body.appendChild(retour);');
  390.  
  391. // On affiche les crédits
  392. echo('credits=document.createElement("div");
  393.     credits.id="credits";
  394.     pCredits=document.createElement("p");
  395.     txtCredits=document.createTextNode("Créateur : Pierre Marige, aka Reup");
  396.     site=document.createElement("a");
  397.     site.href="http://akareup.hypotheses.org/";
  398.     site.id="lienSite";
  399.     txtSite=document.createTextNode("http://akareup.hypotheses.org/");
  400.     aLicence=document.createElement("a");
  401.     aLicence.href="http://fr.wikipedia.org/wiki/Beerware";
  402.     licence=document.createElement("img");
  403.     licence.src="./images/beer-ware.png";
  404.     licence.id="licence";
  405.     pCredits.appendChild(txtCredits);
  406.     credits.appendChild(pCredits);
  407.     site.appendChild(txtSite);
  408.     credits.appendChild(site);
  409.     aLicence.appendChild(licence);
  410.     credits.appendChild(aLicence);
  411.     document.body.appendChild(credits);
  412.     </script>');
  413. ?>
  414.    
  415. </body>
  416. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement