2007-07-23 16:28:29 +02:00
|
|
|
|
#!/usr/bin/perl -w
|
|
|
|
|
|
|
|
|
|
# trombi_constr, version 1.0
|
|
|
|
|
# licence tuteurs
|
|
|
|
|
# Version 1.0<EFBFBD>: Baptiste M<>l<EFBFBD>s, 23<32>juillet 2007
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
# Ce programme construit un trombinoscope pour les tuteurs.
|
|
|
|
|
#
|
|
|
|
|
# Pr<50>requis<69>:
|
|
|
|
|
#
|
|
|
|
|
# - le fichier trombi.xml doit se trouver dans le m<>me r<>pertoire que ce
|
|
|
|
|
# programme<6D>;
|
|
|
|
|
#
|
|
|
|
|
#
|
|
|
|
|
#
|
|
|
|
|
# Comment utiliser le programme<6D>:
|
|
|
|
|
#
|
|
|
|
|
# 1.<2E>"trombi_constr > trombi.tml" (par d<>faut, "trombi_constr" envoie le
|
|
|
|
|
# fichier TML sur la sortie standard)
|
|
|
|
|
#
|
|
|
|
|
# 2. "tmlcheck trombi.tml" (pour v<>rifier la validit<69> du code TML.
|
|
|
|
|
# Normalement il ne devrait pas y avoir de probl<62>me, sinon le
|
|
|
|
|
# programme est bugu<67> et il faut pr<70>venir les personnes autoris<69>es)
|
|
|
|
|
#
|
|
|
|
|
# 3. "build trombi.tml" (pour convertir le fichier TML en XHTML)
|
|
|
|
|
#
|
|
|
|
|
# 4. v<>rifiez le r<>sultat avec votre navigateur (en particulier,
|
|
|
|
|
# v<>rifiez que toutes les photos soient bien pr<70>sentes. S'il en
|
|
|
|
|
# manque, rajoutez-les dans le r<>pertoire photos/).
|
|
|
|
|
#
|
|
|
|
|
################################################################
|
|
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
|
use XML::Parser;
|
|
|
|
|
use XML::Simple;
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
# Note sur le fichier trombi.xml
|
|
|
|
|
#
|
|
|
|
|
# Le fichier trombi.xml contient la liste de tous les tuteurs, ainsi que
|
|
|
|
|
# les informations <20> leur sujet (nom, pr<70>nom, promo, fichier de photo,
|
|
|
|
|
# site perso, etc.)
|
|
|
|
|
#
|
|
|
|
|
# Voici un fichier trombi.xml type<70>:
|
|
|
|
|
#
|
|
|
|
|
# <?xml version="1.0" encoding="iso-8859-1" ?>
|
|
|
|
|
#
|
|
|
|
|
# <trombi>
|
|
|
|
|
# <tuteur>
|
|
|
|
|
# <nom>Nguyen</nom>
|
|
|
|
|
# <prenom>Marie-Lan</prenom>
|
|
|
|
|
# <promo>A/L<>1998</promo>
|
|
|
|
|
# <surnom>M-L</surnom>
|
|
|
|
|
# <siteperso>http://www.eleves.ens.fr/home/mlnguyen</siteperso>
|
|
|
|
|
# <login>mlnguyen</login>
|
|
|
|
|
# <photo>photos/mlnguyen.jpg</photo>
|
|
|
|
|
# </tuteur>
|
|
|
|
|
#
|
|
|
|
|
# <tuteur>
|
|
|
|
|
# <nom>Robin</nom>
|
|
|
|
|
# <prenom><3E>milia</prenom>
|
|
|
|
|
#
|
|
|
|
|
# [etc.]
|
|
|
|
|
#
|
|
|
|
|
# </trombi>
|
|
|
|
|
|
|
|
|
|
my $trombi_XML = "trombi.xml";
|
|
|
|
|
|
|
|
|
|
my $tuteur;
|
|
|
|
|
|
|
|
|
|
my @liste_tuteurs;
|
|
|
|
|
my @rangee;
|
|
|
|
|
|
|
|
|
|
my $compte_tuteurs;
|
|
|
|
|
my $tuteur_nb = 0;
|
|
|
|
|
|
|
|
|
|
sub echo;
|
|
|
|
|
sub affiche_page ();
|
|
|
|
|
sub affiche_tableau ();
|
|
|
|
|
sub affiche_rangee (@);
|
|
|
|
|
sub affiche_nom ($);
|
|
|
|
|
|
|
|
|
|
# Comme la commande "echo" en shell
|
|
|
|
|
sub echo {
|
|
|
|
|
my ($texte) = @_;
|
|
|
|
|
print "$texte" if (defined($texte));
|
|
|
|
|
print "\n";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
# Affiche le fichier TML entier
|
|
|
|
|
################################################################
|
|
|
|
|
|
|
|
|
|
sub affiche_page () {
|
|
|
|
|
my $entete = << "EOF";
|
|
|
|
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
|
|
|
|
<!DOCTYPE html PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN" "tuteurs://DTD/tml.dtd">
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
|
|
|
|
<title>Trombinoscope</title>
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
<body>
|
|
|
|
|
<h1>Trombinoscope</h1>
|
|
|
|
|
|
|
|
|
|
<!--
|
|
|
|
|
|
|
|
|
|
NE MODIFIEZ PAS CETTE PAGE <20> LA MAIN !!!
|
|
|
|
|
|
|
|
|
|
Elle est g<>n<EFBFBD>r<EFBFBD>e par le script trombi_constr. Pour savoir comment
|
|
|
|
|
utiliser ce script, <20>ditez-le<6C>: il contient une documentation.
|
|
|
|
|
|
|
|
|
|
Sinon, renseignez-vous aupr<70>s des autres tuteurs.
|
|
|
|
|
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
<p> Ils sont grands, ils sont beaux, ils sont forts, ils sont
|
|
|
|
|
Tuteurs. Mais qui sont-ils vraiment ? Les Tuteurs sont actuellement 39,
|
|
|
|
|
dont 3<>filles et 6<>litt<74>raires (dont 2<>filles litt<74>raires<65>; faut-il
|
|
|
|
|
<EFBFBD>galement rappeler que la fondatrice des tuteurs est une fille
|
|
|
|
|
litt<EFBFBD>raire<EFBFBD>?). </p>
|
|
|
|
|
|
|
|
|
|
<p> Seulement<6E>? Il ne tient qu'<27> vous de faire changer <20>a<EFBFBD>: si vous vous
|
|
|
|
|
sentez l'<27>toffe d'un tuteur, <20>crivez-nous pour candidater<65>! Rendez-vous
|
|
|
|
|
sur <a href="&url.tuteurs;meta/recrutement.html">notre page
|
|
|
|
|
recrutement</a> pour plus de renseignements. </p>
|
|
|
|
|
|
|
|
|
|
<p> Remarque<75>: toutes les photographies de tuteurs ne figurent pas sur
|
|
|
|
|
cette page. </p>
|
|
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
my $pieddepage = << "EOF";
|
|
|
|
|
<div class="metainformation">
|
|
|
|
|
Auteurs<EFBFBD>: Marie-Lan Nguyen (version d'origine), Baptiste M<>l<EFBFBD>s (version
|
|
|
|
|
automatis<EFBFBD>e). Derni<6E>re modification le
|
2007-07-23 17:02:45 +02:00
|
|
|
|
<date value="\$Date: 2007-07-23 15:02:45 $" />.
|
2007-07-23 16:28:29 +02:00
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
print $entete;
|
|
|
|
|
affiche_tableau;
|
|
|
|
|
print $pieddepage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
# Construit et affiche le tableau des tuteurs
|
|
|
|
|
################################################################
|
|
|
|
|
|
|
|
|
|
sub affiche_tableau () {
|
|
|
|
|
print << "EOF";
|
|
|
|
|
<div style="text-align: center;">
|
|
|
|
|
<table style="margin-left: auto; margin-right: auto;" class="tableau">
|
|
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
# Je prends chaque tuteur
|
|
|
|
|
foreach $tuteur (@liste_tuteurs) {
|
|
|
|
|
# Je compte o<> j'en suis
|
|
|
|
|
$tuteur_nb++;
|
|
|
|
|
|
|
|
|
|
# J'ajoute le tuteur au groupe de quatre (qui correspond <20> une rang<6E>e
|
|
|
|
|
# dans le trombi)
|
|
|
|
|
push @rangee, $tuteur;
|
|
|
|
|
# Si le nombre o<> j'en suis est un multiple de quatre, alors on affiche
|
|
|
|
|
# la rang<6E>e
|
|
|
|
|
if ($tuteur_nb % 4 == 0) {
|
|
|
|
|
affiche_rangee(@rangee);
|
|
|
|
|
# Et je vide la rang<6E>e apr<70>s son affichage
|
|
|
|
|
for (my $i = 0; $i < 4; $i++) { shift @rangee; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# La derni<6E>re rang<6E>e ne contient pas n<>cessairement quatre personnes<65>:
|
|
|
|
|
# c'est souvent une rang<6E>e incompl<70>te. Il faut donc laisser des cases
|
|
|
|
|
# vides en fin de rang<6E>e.
|
|
|
|
|
|
|
|
|
|
if (scalar @rangee != 0) { affiche_rangee(@rangee); }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print << "EOF";
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
# La fonction suivante affiche une rang<6E>e de quatre tuteurs, selon le
|
|
|
|
|
# format suivant<6E>:
|
|
|
|
|
#
|
|
|
|
|
# | photo1 | photo2 | photo3 | photo4
|
|
|
|
|
# |-----------------------------------------
|
|
|
|
|
# | Pr<50>nom Nom | etc.
|
|
|
|
|
# | (<28><>Surnom<6F><6D>). |
|
|
|
|
|
# | Promo |
|
|
|
|
|
################################################################
|
|
|
|
|
|
|
|
|
|
sub affiche_rangee (@) {
|
|
|
|
|
my (@rangee) = @_;
|
|
|
|
|
|
|
|
|
|
# J'affiche la rang<6E>e des photos
|
|
|
|
|
echo "<tr>";
|
|
|
|
|
my $case_nb = 0;
|
|
|
|
|
|
|
|
|
|
foreach my $tuteur (@rangee) {
|
|
|
|
|
$case_nb++;
|
|
|
|
|
echo "<td>";
|
|
|
|
|
echo '<img ' . 'src="' . $tuteur->{photo} . '" '
|
|
|
|
|
. 'alt="[Photo de ' . $tuteur->{prenom} . " "
|
|
|
|
|
. $tuteur->{nom} . ']" '
|
|
|
|
|
. 'width="125" ' . '/>';
|
|
|
|
|
echo "</td>";
|
|
|
|
|
echo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Remplissage des cases vides en fin de tableau
|
|
|
|
|
while ($case_nb < 4) {
|
|
|
|
|
echo "<td></td>";
|
|
|
|
|
$case_nb++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
echo "</tr>";
|
|
|
|
|
echo;
|
|
|
|
|
|
|
|
|
|
# Et maintenant, la rang<6E>e des noms
|
|
|
|
|
echo "<tr>";
|
|
|
|
|
|
|
|
|
|
$case_nb = 0;
|
|
|
|
|
foreach my $tuteur (@rangee) {
|
|
|
|
|
$case_nb++;
|
|
|
|
|
echo "<td>";
|
|
|
|
|
affiche_nom($tuteur);
|
|
|
|
|
echo ". " . $tuteur->{promo};
|
|
|
|
|
echo "</td>";
|
|
|
|
|
echo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Remplissage des cases vides en fin de tableau
|
|
|
|
|
while ($case_nb < 4) {
|
|
|
|
|
echo "<td></td>";
|
|
|
|
|
$case_nb++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
echo "</tr>";
|
|
|
|
|
echo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub affiche_nom ($) {
|
|
|
|
|
my ($tuteur) = @_;
|
|
|
|
|
|
|
|
|
|
# Lien vers le site perso, si la balise <siteperso> existe
|
|
|
|
|
print '<a href="' . $tuteur->{siteperso} . '">'
|
|
|
|
|
if (defined($tuteur->{siteperso}));
|
|
|
|
|
|
|
|
|
|
# Affichage du nom
|
|
|
|
|
print $tuteur->{prenom} . " " . $tuteur->{nom};
|
|
|
|
|
|
|
|
|
|
print '</a>'
|
|
|
|
|
if (defined($tuteur->{siteperso}));
|
|
|
|
|
|
|
|
|
|
# Affichage du surnom, si pr<70>cis<69>
|
|
|
|
|
print " (<28> " . $tuteur->{surnom} . " <20>)"
|
|
|
|
|
if (defined($tuteur->{surnom}));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
################################################################
|
|
|
|
|
################################################################
|
|
|
|
|
################################################################
|
|
|
|
|
################################################################
|
|
|
|
|
|
|
|
|
|
# Si le fichier trombi.xml n'existe pas, ce n'est m<>me pas la peine de
|
|
|
|
|
# commencer.
|
|
|
|
|
|
|
|
|
|
if (! -e $trombi_XML) {
|
|
|
|
|
die "Erreur<75>: Le fichier $trombi_XML n'existe pas.";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Je v<>rifie la validit<69> du code XML
|
|
|
|
|
my $parser = new XML::Parser();
|
|
|
|
|
eval {$parser->parsefile($trombi_XML)}
|
|
|
|
|
or die "Erreur : $trombi_XML n'est pas un fichier XML valide. $@.";
|
|
|
|
|
|
|
|
|
|
# Je d<>chiffre le fichier trombi.xml
|
|
|
|
|
my $xml = new XML::Simple();
|
|
|
|
|
my $trombi = $xml->XMLin($trombi_XML);
|
|
|
|
|
|
|
|
|
|
# Je remplis un tableau avec tous les tuteurs <20> partir du fichier XML
|
|
|
|
|
foreach $tuteur (@{$trombi->{tuteur}}) {
|
|
|
|
|
push @liste_tuteurs, $tuteur;
|
|
|
|
|
|
|
|
|
|
# Et j'en profite pour les compter (attention<6F>! ce chiffre ne prend en
|
|
|
|
|
# compte que les tuteurs figurant dans le fichier trombi.xml, et non
|
|
|
|
|
# TOUS les tuteurs<72>!)
|
|
|
|
|
$compte_tuteurs++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Afficher le fichier TML (vers la sortie standard)
|
|
|
|
|
affiche_page;
|