Rapport de stage « PubLimsi » Pierre BARUSSAUD
Rapport de stage « PubLimsi » Pierre BARUSSAUD
Rapport de stage « PubLimsi » Pierre BARUSSAUD
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
NOTES ET DOCUMENTS LIMSI N° : 2012-13<br />
5 Juillet 2012<br />
<strong>Rapport</strong> <strong>de</strong> <strong>stage</strong> <strong>«</strong> <strong>PubLimsi</strong> <strong>»</strong><br />
<strong>Pierre</strong> <strong>BARUSSAUD</strong>
Departement Informatique<br />
Diplome préparé : DUT Informatique<br />
jury n°5<br />
"<strong>PubLimsi</strong>"<br />
<strong>Pierre</strong> Barussaud<br />
TP 421<br />
Tuteur enseignant Maître d'apprentissage<br />
Jamal ATIF Elisabeth PIOTELAT<br />
Année universitaire 2011-2012<br />
Perio<strong>de</strong> <strong>de</strong> <strong>stage</strong> : 16 avril 2012 au 6 juillet 2012<br />
Soutenance du 18/06/2012<br />
<strong>Pierre</strong> Barussaud 2 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Remerciements<br />
Je souhaite faire part <strong>de</strong> mes remerciements les plus sincères à l'ensemble du personnel du<br />
LIMSI pourleur soutien et leur accueil chaleureux tout au long du <strong>stage</strong>. Et plus particulièrement :<br />
• E. Piotelat : responsable du <strong>stage</strong>, encadrement et ai<strong>de</strong>, proposition d'un sujet intéressant et<br />
enrichissant.<br />
• M. Brilhac : utilisatrice avançée et testeuse <strong>de</strong> la nouvelle aplication .<br />
• J.C. Barbet : <strong>de</strong>couverte du LIMSI et installation <strong>de</strong>s machine <strong>de</strong> travail .<br />
• N. Pain : dans ses démarches administratives qui ont permis le déroulement du <strong>stage</strong>.<br />
• P. Le Quéré : directeur du LIMSI.<br />
• A. Vilnat : directrice adjointe du LIMSI et pour sa proposition <strong>de</strong> <strong>stage</strong>.<br />
• J. Atif : parrain <strong>de</strong> <strong>stage</strong> .<br />
• P. Gillet : mon binôme pour ce <strong>stage</strong>.<br />
<strong>Pierre</strong> Barussaud 3 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Table <strong>de</strong>s matière<br />
Introduction ...............................................................................1<br />
I.Présentation <strong>de</strong> l'entreprise et du projet ...............................2<br />
Présentation <strong>de</strong> l'entreprise ................................................2<br />
Présentation du projet ........................................................4<br />
II.Fonctionnement <strong>de</strong> l'application ...........................................7<br />
III.Visualisation <strong>de</strong> la nouvelle application "<strong>PubLimsi</strong>" ......10<br />
La base <strong>de</strong> données ...........................................................10<br />
Les utilisateurs ..................................................................12<br />
Nouvelle interface .............................................................13<br />
IV.Developpement <strong>de</strong> la nouvelle application "<strong>PubLimsi</strong>" ...16<br />
Le format MVC..................................................................16<br />
Arborescence du co<strong>de</strong> et <strong>de</strong>scription .................................18<br />
Javascript/Ajax ..................................................................19<br />
Conclusion ..................................................................................21<br />
Co<strong>de</strong> source ................................................................................22<br />
Lexique ......................................................................................28<br />
Référence ...................................................................................28<br />
<strong>Pierre</strong> Barussaud 4 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Introduction<br />
Pour pouvoir vali<strong>de</strong>r mon DUT informatique, je dois effectuer un <strong>stage</strong><br />
conventionné d'environ 10 semaines en entreprise afin <strong>de</strong> mettre à profit mes<br />
compétences acquis pendant ces <strong>de</strong>ux années mais aussi acquerir d'autres compétences.<br />
J'ai effectué mon <strong>stage</strong> au LIMSI (Laboratoire d'Informatique pour la Mécanique et les<br />
Sciences <strong>de</strong> l'Ingénieur ) qui se situe sur le plateau du Moulon à Orsay (91).<br />
J'ai trouvé ce <strong>stage</strong> en feuilletant <strong>de</strong>s offres au secrétariat <strong>de</strong> l'IUT. J'ai ensuite<br />
envoyé une lettre <strong>de</strong> motivation et un C.V. . Après un entretien favorable j'ai été pris<br />
pour une mission spécifique.<br />
La mission consistait à retravailler une application web appellée <strong>PubLimsi</strong>. Il<br />
s'agit d'une sorte <strong>de</strong> bibliothèque en ligne <strong>de</strong>ja utilisée. Les tâches étaient l'analyse et la<br />
refonte <strong>de</strong> la base <strong>de</strong> donnée mysql existante, l'amélioration <strong>de</strong> l'interface <strong>de</strong> saisie,<br />
réorganiser le co<strong>de</strong> source php/html pour qu'il soit plus lisible et implémenter les<br />
fonctionnalités manquantes.<br />
Au terme <strong>de</strong> ce <strong>stage</strong>, l'application <strong>de</strong>veloppée <strong>de</strong>vra remplacer la première version. Il<br />
sera également plus facile <strong>de</strong> <strong>de</strong>veloper sur cette nouvelle version. A long terme, cette<br />
application pourrait être utiliser par d'autres laboratoires.<br />
Dans un premier temps je vais présenter l'entreprise ainsi que les missions qui m'ont été<br />
confié, ensuite je vais présenté l'application présente lors <strong>de</strong> mon arriver, puis je vais<br />
détaillé les chagements que l'on a décidé pour finir avec les explications du co<strong>de</strong><br />
source.<br />
<strong>Pierre</strong> Barussaud 5 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
I. Présentation <strong>de</strong> l'entreprise et du projet<br />
1) Présentation <strong>de</strong> l'entreprise<br />
Situé à Orsay, sur le Plateau <strong>de</strong> Moulon, le LIMSI (Laboratoire d'informatique<br />
pour la mécanique et les sciences <strong>de</strong> l'ingénieur) est une unité propre lié au CNRS. Ce<br />
laboratoire est associé aux Universités <strong>Pierre</strong> et Marie Curie et Paris-Sud. Il mène <strong>de</strong>s<br />
recherches pluridisciplinaires selon <strong>de</strong>ux grands thèmes : la Mécanique Energétique, et<br />
la Communication Homme-Machine.<br />
L'histoire du LIMSI<br />
Anciennement connu sous le nom <strong>de</strong> Centre <strong>de</strong> calcul analogique (CCA), c'est<br />
en 1970 que le CCA, alors rattaché à l'ONERA (Office National d'Etu<strong>de</strong> et <strong>de</strong><br />
Recherche en Aéronautique, sis à Châtillon) vint s'installer sur le campus <strong>de</strong><br />
l'Université <strong>de</strong> Paris XI. En 1972, sous la direction du professeur Malavard, le CCA<br />
n'existe plus, l'enseigne LIMSI prend place.<br />
Les recherches étaient initialement centrées sur les analogies électriques <strong>de</strong>s<br />
phénomènes <strong>de</strong> mécanique <strong>de</strong>s flui<strong>de</strong>s. Un besoin <strong>de</strong> traitement informatique rapproche<br />
le LIMSI du laboratoire <strong>de</strong> calcul analogique <strong>de</strong> l'université d'Orsay ; le laboratoire se<br />
lance dans le calcul numérique dès les années 1970. L'infographie apparaît alors dans<br />
les thèmes <strong>de</strong> recherches du LIMSI et conduit à l'étu<strong>de</strong> <strong>de</strong>s interactions hommemachine.<br />
C'est à cette époque que <strong>de</strong>s spécialistes en infographie du laboratoire ont<br />
conçu le logiciel Eucli<strong>de</strong>, qui fut racheté plus tard par Matra-Datavision.<br />
En 1979, au départ à la retraite <strong>de</strong> L. Malavard, G. Renard a été nommé Directeur, puis<br />
J. S. Liénard en 1984 (avec L. Ta Phuoc comme Directeur-Adjoint). J. Mariani et F.<br />
Meunier sont nommés respectivement directeur et directeur adjoint en 1989. L'équipe<br />
<strong>de</strong> Direction en place du 1er janvier 1997 au 31 décembre 2000 était composée <strong>de</strong> J.<br />
Mariani, directeur et <strong>de</strong> P. Le Quéré, directeur adjoint.<br />
Depuis le 1er janvier 2001, P. Le Quéré est directeur . Anne Vilnat a été nommée<br />
directrice adjointe en 2012.<br />
<strong>Pierre</strong> Barussaud 6 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Illustration 1: organigramme<br />
Une volonté interdisciplinaire<br />
Le LIMSI a l'ambition et la volonté d'allier excellence disciplinaire dans<br />
l'ensemble <strong>de</strong> ses champs scientifiques et développement <strong>de</strong> projets pluridisciplinaires,<br />
en partenariat avec d'autres organismes <strong>de</strong> recherche et <strong>de</strong>s industriels, français et<br />
étrangers. Il s'investit tout particulièrement dans la formation par la recherche et la<br />
diffusion <strong>de</strong> l'information scientifique et technique.<br />
Le laboratoire accueille environ 120 permanents (chercheurs, enseignant-chercheurs et<br />
ITA-IATOS) et une soixantaine <strong>de</strong> doctorants menant <strong>de</strong>s recherches pluridisciplinaires<br />
en Mécanique et Energétique et en Sciences et Technologies <strong>de</strong> l'Information et <strong>de</strong> la<br />
Communication, couvrant un large spectre disciplinaire allant <strong>de</strong> la thermodynamique<br />
au cognitif. Cette diversité <strong>de</strong>s recherches conduisent à cinq grands axes thématiques :<br />
la mécanique <strong>de</strong>s flui<strong>de</strong>s, la thermique et l'énergétique, l'ingénierie <strong>de</strong>s langues, les<br />
interfaces intelligentes et la réalité virtuelle et augmentée.<br />
AMIC : Administration <strong>de</strong>s moyens informatiques communs<br />
L'équipe AMIC a pour rôle <strong>de</strong> maintenir le développement <strong>de</strong> l'équipement<br />
informatique du LIMSI selon trois objectifs principaux : fournir à chaque chercheur<br />
l'outil qui lui sera le mieux adapté et spécifique à ses travaux, faciliter la production <strong>de</strong>s<br />
publications, favoriser les communications avec la communauté scientifique extérieure.<br />
AMIC participe ainsi à la rédaction <strong>de</strong> documentation pour les outils et les divers<br />
services qu'elle propose. Cet équipe est composé <strong>de</strong> six personnes.<br />
<strong>Pierre</strong> Barussaud 7 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Les missions <strong>de</strong> l'équipe se déclinent <strong>de</strong> manière plus précise, notamment dans les<br />
actions suivantes :<br />
• construire et faire progresser une infrastructure Ethernet et Wifi à haut débit,<br />
• mettre en place, faire évoluer et assurer le suivi <strong>de</strong>s moyens nécessaires à une<br />
connectivité IP performante et sécurisée entre le laboratoire et l'extérieur,<br />
• mettre en oeuvre les bases <strong>de</strong> données DNS, NIS, LDAP, Active Directory,<br />
relationnelles, nécessaires à l'i<strong>de</strong>ntification et à la caractérisation <strong>de</strong>s ressources<br />
et <strong>de</strong>s utilisateurs,<br />
• fournir un service <strong>de</strong> messagerie avec double accès en Webmail et en IMAP<br />
sécurisé, mettre à disposition un serveur <strong>de</strong> listes. Mettre en place <strong>de</strong>s dispositifs<br />
anti spam et antivirus et les faire évoluer pour faire face au renouvellement<br />
incessant <strong>de</strong>s nuisances venant <strong>de</strong> l'Internet,<br />
• mettre en place et développer le site web du laboratoire, installer les sites<br />
virtuels hébergés, les wiki, et fournir le support technique aux rédacteurs <strong>de</strong><br />
pages web,<br />
• offrir un service <strong>de</strong> sauvegar<strong>de</strong> en réseau pour les parcs d'ordinateurs sous Linux<br />
et sous Windows,<br />
• développer et maintenir le parc <strong>de</strong> postes <strong>de</strong> travail et <strong>de</strong>s serveurs. Cela<br />
comporte le choix <strong>de</strong>s équipements, les démarches d'acquisition, <strong>de</strong> connexion<br />
et d'enregistrement sur le réseau, l'installation matérielle, l'installation et la<br />
configuration <strong>de</strong>s logiciels systèmes et utilitaires, le dépannage, le support<br />
technique aux utilisateurs,<br />
• gérer les arrivées, départ et changements <strong>de</strong> statut <strong>de</strong>s utilisateurs dans les<br />
annuaires informatiques du réseau,<br />
• concevoir et développer les outils logiciels spécifiques, simples scripts ou<br />
applications web évoluées dédiés à la gestion <strong>de</strong>s personnes et <strong>de</strong>s ressources.<br />
Deux applications créées par AMIC, actuellement en service, font l'objet <strong>de</strong><br />
constantes améliorations:<br />
• une application web écrite en PHP pour la gestion <strong>de</strong>s utilisateurs, la gestion <strong>de</strong>s<br />
arrivées, <strong>de</strong>s changements <strong>de</strong> statut, <strong>de</strong>s départs, et la gestion <strong>de</strong>s ressources<br />
informatiques attachées à ces utilisateurs sur les différents serveurs du<br />
laboratoire : serveurs <strong>de</strong> messagerie, serveur web, etc.<br />
• une application web écrite en PERL pour l'inventoriage <strong>de</strong>s machines et <strong>de</strong> leurs<br />
attributs, pour la gestion <strong>de</strong> leur connexion au réseau, pour le suivi <strong>de</strong> <strong>de</strong>s<br />
équipements pendant toute la durée <strong>de</strong> leur existence.<br />
2) Presentation <strong>de</strong> du projet<br />
Reorganiser la base <strong>de</strong> données et le co<strong>de</strong> afin <strong>de</strong> faciliter le <strong>de</strong>velopement<br />
d'une application déjà utilisée , ainsi que continuer le <strong>de</strong>veloppement <strong>de</strong> cette<br />
application.<br />
Il s'agit donc <strong>de</strong> modifier la base <strong>de</strong> données et <strong>de</strong> transformer le co<strong>de</strong><br />
PHP/html existant pour qu'il soit au format MVC , nécessaire pour pouvoir<br />
programmer à plusieurs.<br />
<strong>Pierre</strong> Barussaud 8 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Analyse<br />
Tout d'abord, il faut savoir que la première application ne comportait pas <strong>de</strong><br />
cahiers <strong>de</strong>s charges, elle a été faite au fur et à mesure <strong>de</strong>s idées et <strong>de</strong>man<strong>de</strong>s <strong>de</strong> chacun.<br />
Le but du <strong>stage</strong> fut donc <strong>de</strong> rendre l'utilisation <strong>de</strong> cette application plus facile pour les<br />
utilisateurs mais aussi pour les développeurs. Cela consiste tout d'abord à réorganiser la<br />
base <strong>de</strong> données, sachant qu'il faut pouvoir gar<strong>de</strong>r toutes les données <strong>de</strong>ja saisies. Il<br />
faut aussi rendre le co<strong>de</strong> plus accessible aux <strong>de</strong>veloppeurs actuels et futurs, pour cela il<br />
faut co<strong>de</strong>r en suivant le format MVC, car le co<strong>de</strong> actuel a été implementé par une<br />
personne et n'est donc pas optimal pour un travail <strong>de</strong> groupe. Certaines fonctionnalités<br />
ne sont pas encore implémenter et d'autres fonctionnent mal, il faut donc également<br />
continuer <strong>de</strong> <strong>de</strong>veloper l'application. Bien sûr il faut également rendre cette application<br />
facile à utiliser pour les utilisateurs lambda, en sachant que les utilisateurs sont surtout<br />
<strong>de</strong>s chercheurs et doctorants , qu'ils n'ont pas forcément beaucoup <strong>de</strong> temps et ne sont<br />
pas tous experts en informatique. Cette application étant déjà utilisée, il ne faut pas trop<br />
toucher à la forme car les utilisateurs se sont habitués à celle ci.<br />
Nous étions <strong>de</strong>ux à travailler sur cette nouvelle version à plein temps, ainsi qu'une<br />
troisième personne aidant <strong>de</strong> temps en temps.<br />
Subversion<br />
Logiciels utilisés<br />
En premier lieu, nous avons travaillé sous ubuntu qui est une distribution Linux.<br />
Subversion (en abrégé svn) est un logiciel <strong>de</strong> gestion <strong>de</strong> versions, distribué sous<br />
licence Apache et BSD. Cela permet <strong>de</strong> stocker un ensemble <strong>de</strong> fichier et <strong>de</strong> conservé la<br />
chronologie <strong>de</strong>s modifiactions. Pour notre projet, le dossier contenant le co<strong>de</strong> <strong>de</strong><br />
l'application se situe sur le serveur limsi et ainsi on peut modifier le co<strong>de</strong> et testé sur un<br />
ordinateur du limsi (il faut les droits tout <strong>de</strong> même), et une fois que cela fonctionne on<br />
utilise la fonction "commit" permettant d'enregistrer pour <strong>de</strong> bon les modifications. Les<br />
autres utilisateurs utilisent quant a eux la fonction "update" pour recuperer la <strong>de</strong>rnière<br />
version enregistrée. Il faut faire cela en étant coordonnés entre les membres du<br />
<strong>de</strong>veloppement car il n'est pas rare d'avoir un conflit.<br />
Netbeans<br />
NetBeans est un environnement <strong>de</strong> développement intégré (EDI), placé en open<br />
source (libre redistribution, d'accès au co<strong>de</strong> source et aux travaux dérivés ) par Sun en<br />
juin 2000 . Netbeans supporte <strong>de</strong> nombreux languages tels que php, html, javascript,<br />
java, C, C++, python, XML ou encore css. De plus, Netbeans s'enrichit a l'ai<strong>de</strong> <strong>de</strong><br />
plugins officilels ou codés par <strong>de</strong>s personnes exterieurs.<br />
A la création d'un projet php il faut indiquer un dossier <strong>de</strong> projet, et pour chaque fichier<br />
ou dossier créé sur netbeans, il sera également créé dans le dossier indiqué à la création.<br />
On peut donc créé facilement un site ou une application web sans passer par <strong>de</strong>s<br />
editeurs <strong>de</strong> texte tel notepad++. On peut également se servir <strong>de</strong> Subversion avec<br />
netbeans, cela créé en même temps que sur l'ordinateur local un autre dossier vers le<br />
<strong>Pierre</strong> Barussaud 9 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
serveur saisi dans la configuration. Pour finir, netbeans facilite la programmation car il<br />
est doté <strong>de</strong> l'autocomplémentation. En fonction <strong>de</strong> se qui est saisi, netbeans nous affiche<br />
les fonctions que l'on peut utiliser ensuite, avec parfois <strong>de</strong>s explications et exemples.<br />
MySQL Workbench<br />
MySQL Workbench est un système <strong>de</strong> conception <strong>de</strong> base <strong>de</strong> données sous<br />
forme graphique qui intègre tous les niveaux <strong>de</strong> conception, <strong>de</strong> modification, <strong>de</strong><br />
création et <strong>de</strong> maintenance sur la structure d'une base <strong>de</strong> données. On peut donc générer<br />
le fichier .sql du graphique crée, mais aussi importer un graphique ou un fichier .sql<br />
pour retravailler sa base .<br />
PhpMyAdmin<br />
Il s'agit <strong>de</strong> l'une <strong>de</strong>s plus célèbres interfaces pour gérer une base <strong>de</strong> données<br />
MySQL sur un serveur PHP. De nombreux hébergeurs, qu'ils soient gratuits ou payants,<br />
le proposent ce qui permet à l'utilisateur <strong>de</strong> ne pas avoir à l'installer.<br />
Cette interface pratique permet d'exécuter, très facilement et sans gran<strong>de</strong>s<br />
connaissances dans le domaine <strong>de</strong>s bases <strong>de</strong> données, <strong>de</strong> nombreuses requêtes comme<br />
les créations <strong>de</strong> table <strong>de</strong> données, les insertions, les mises à jour, les suppressions, les<br />
modifications <strong>de</strong> structure <strong>de</strong> la base <strong>de</strong> données. Ce système est très pratique pour<br />
sauvegar<strong>de</strong>r une base <strong>de</strong> données sous forme <strong>de</strong> fichier .sql et ainsi transférer<br />
facilement ses données. De plus celui-ci accepte la formulation <strong>de</strong> requêtes SQL<br />
directement en langage SQL, cela permet <strong>de</strong> tester ses requêtes par exemple lors <strong>de</strong> la<br />
création d'un site et ainsi <strong>de</strong> gagner un temps précieux.<br />
Phase du projet<br />
Au début nous avons évi<strong>de</strong>mment étudié la base <strong>de</strong> données ainsi que le co<strong>de</strong> <strong>de</strong><br />
l'application et son fonctionnement. Tout d'abord la base <strong>de</strong> données, nous avons eu du<br />
mal à comprendre l'importance <strong>de</strong> certaines tables et nous avons dû <strong>de</strong>man<strong>de</strong>r à <strong>de</strong>s<br />
personnes du limsi à quoi elles correspondaient. Pour le co<strong>de</strong>, vu qu'il a été implémenté<br />
par une seul personne et ne suivant pas <strong>de</strong> modèle précis, seule cette personne<br />
connaissait le co<strong>de</strong>, malgré les commentaires laissés, il fut parfois difficile <strong>de</strong> trouvé le<br />
cheminement pour arriver a un certain niveau sur l'application. Nous avons d'abord<br />
travaillé sur la base <strong>de</strong> données et décidé <strong>de</strong> la refaire complètement. Ensuite on a<br />
chacun travaillé sur une partie différente, l'un sur le codage et l'autre sur la base <strong>de</strong><br />
données. J'ai pour ma part décidé <strong>de</strong> refaire l'application en suivant le modèle MVC car<br />
je trouvais le co<strong>de</strong> déjà en place difficile à comprendre et surtout difficile a modifier<br />
pour que cela ressemble au schéma du MVC. N'ayant jamais programmé du co<strong>de</strong> php<br />
en MVC, j'ai regardé <strong>de</strong>s tutoriaux sur internet pour apprendre comment faire.<br />
<strong>Pierre</strong> Barussaud 10 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
II. Fonctionnement <strong>de</strong> l'application<br />
Les personnes inscrites au LIMSI peuvent accé<strong>de</strong>r à cette aplication, il suffit <strong>de</strong> rentrer<br />
son i<strong>de</strong>ntifiant et son mot <strong>de</strong> passe limsi. Ensuite il a accès aux fonctionalités telles que<br />
ajouter ou rechercher une publication.<br />
Illustration 2: Mes publications<br />
Pour la recherche, il suffit <strong>de</strong> remplir un ou plusieurs champs du formulaire<br />
représentant <strong>de</strong>s critères importants .<br />
Illustration 3: formulaire <strong>de</strong> recherche<br />
<strong>Pierre</strong> Barussaud 11 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Cela affiche ensuite les resultats et l'on peut avoir la fiche <strong>de</strong>taillée <strong>de</strong>s publications.<br />
Les resultats ont une couleur <strong>de</strong>finie selon le type <strong>de</strong> publication.<br />
Illustration 4: resultat recherche<br />
Ici, on voit trois sortes d'exports, ces exports permettent la génération <strong>de</strong> co<strong>de</strong> endNote,<br />
bibtex et html <strong>de</strong>s resultats trouvés.<br />
On peut également cliquer sur le titre <strong>de</strong> chaque publication pour accé<strong>de</strong>r à la fiche<br />
détaillée. Sur cette fiche , un utilisateur a à sa disposition quelques options tel que<br />
l'export bibtex ou le telechargement <strong>de</strong> pdf si il y en a un.<br />
Illustration 5: fiche d'une publication<br />
<strong>Pierre</strong> Barussaud 12 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Pour l'ajout cela se fait en plusieurs étapes : le choix du type d'ajout donc soit par<br />
formulaire soit au format Bibtex (ce <strong>de</strong>rnier n'est pas encore fonctionnel),le choix du<br />
type <strong>de</strong> publication, puis ensuite on saisit le nom <strong>de</strong> l'auteur puis une fois la saisie<br />
validée l'application affiche les auteurs trouvés dans la base <strong>de</strong> données avec un nom<br />
similaire à celui saisi, on coche les cases <strong>de</strong>s auteurs que l'on veut, puis vient ensuite le<br />
formulaire ou l'on saisit les informations <strong>de</strong> la publication (titre, date...) et en fin un<br />
recapitulatif.<br />
Illustration 6: la <strong>de</strong>uxième étape d'un ajout <strong>de</strong> publication : choix du type<br />
Si l'utilisateur est un administrateur dans la base <strong>de</strong> données <strong>de</strong>s membres du limsi<br />
(LDAP) , il a accès a d'autres options. C'est lui qui vali<strong>de</strong> les publications, et il a<br />
également à disposition <strong>de</strong>s options permettant <strong>de</strong> gérer la base <strong>de</strong> données<br />
(suppression <strong>de</strong> donnée, ajout, modification).<br />
Illustration 7: menu <strong>de</strong> gestion pour l'administrateur<br />
<strong>Pierre</strong> Barussaud 13 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
III.Visualisation <strong>de</strong> la nouvelle application<br />
"<strong>PubLimsi</strong>"<br />
1) La base <strong>de</strong> données<br />
Ancienne base <strong>de</strong> données<br />
La base <strong>de</strong> données originale était constituée <strong>de</strong> 40 tables. Cette base ne<br />
comportait aucune liaison entre les tables car le moteur <strong>de</strong> base <strong>de</strong> donnée utilisé était<br />
myIsam et ce <strong>de</strong>rnier ne supporte pas les clés étrangères, il n'y a donc pas <strong>de</strong> contrainte<br />
d'integrité et <strong>de</strong> ce fait pas <strong>de</strong> vérification <strong>de</strong> la base en cas d'ajout par exemple. De plus<br />
on s'est aperçu que certaines tables n'étaient pas ou plus utilisées. En effet, certaines<br />
tables on dû être utilisé à un moment donné mais elle ne sont pas utilisées par la version<br />
actuelle. Au fur et à mesure du développement <strong>de</strong>s tables on dû être ajouté et d'autres<br />
sont <strong>de</strong>venues obsolètes mais restent dans la base <strong>de</strong> données, il a fallut les supprimer.<br />
Illustration 8: base <strong>de</strong> données originale<br />
La nouvelle base <strong>de</strong> donnée<br />
La nouvelle base <strong>de</strong> données utilise le moteur innoDB permettant ainsi <strong>de</strong> lier<br />
<strong>de</strong>s tables entre elles. On a donc ajouté pas mal <strong>de</strong> contraintes , surtout entre la table<br />
<strong>Pierre</strong> Barussaud 14 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
publications et toutes les tables <strong>de</strong> type <strong>de</strong> publications tel que mémoire, ouvrage... . Il a<br />
également fallu changer quelques champs dans certaines tables (modification du type<br />
generalement ou suppression <strong>de</strong> champs).<br />
Illustration 9: nouvelle base <strong>de</strong> données<br />
La table principale est Publications. Elle possè<strong>de</strong>nt <strong>de</strong> nombreuse tables fille. Ces tables<br />
fille possè<strong>de</strong> un atribut permettant <strong>de</strong> faire le lien avec la table publications. Cet attribut<br />
contient l'in<strong>de</strong>x d'une publications. Publications contient quant à elle <strong>de</strong>s attribut<br />
permettant <strong>de</strong> faire le lien avec la table langue et aeres. Ces attributs contiennent un<br />
in<strong>de</strong>x. Entre publications et personnels se trouve une table auteurs. Les personnes se<br />
trouvant dans la table personnels ne sont pas tous <strong>de</strong>s auteurs. Cette table auteur est<br />
nécessaire car une publication peut avoir plusieurs auteurs, ainsin la table auteur<br />
comporte une double clé primaire. L'une <strong>de</strong>s clés prend l'in<strong>de</strong>x d'une publication et<br />
l'autre l'in<strong>de</strong>x d'un auteur. De même pour la liaison entre publication et groupes. Pour<br />
finir un groupe est lié a un département.<br />
Si on supprime une table ou une ligne d'une table utilisé dans une autre table, les lignes<br />
<strong>de</strong> cette autre table seront automatiquement supprimer grâce a la fonction "on <strong>de</strong>lete<br />
casca<strong>de</strong>". Par exemple si on supprime la langue "Chinois", toutes les publications qui<br />
utilisaient cette langue seront supprimées.<br />
Les changements ont cependant apporté leurs lots <strong>de</strong> contraintes. En effet les liasons<br />
créer entre <strong>de</strong>ux tables ajoutent un nouveau champ dans une <strong>de</strong> table en fonction <strong>de</strong>s<br />
cardinalités . Exemple , liaison entre publication et langue, une publication a une langue<br />
<strong>Pierre</strong> Barussaud 15 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
et une langue peut être utilisée par plusieurs publications, dans ce cas un champ est<br />
ajouté dans la table publication qui fera le liens avec la table langue, ce champ ne peut<br />
pas être vi<strong>de</strong> donc il faut mettre une valeur par défaut et ajouter une ligne dans l'autre<br />
table signifiant qu'elle n'est pas liée (ajouter une ligne avec pour valeur textuelle "vi<strong>de</strong>"<br />
par exemple).<br />
Maintenant que la base <strong>de</strong> données a été crée il a fallu la remplir avec les données <strong>de</strong><br />
l'ancienne base. Les tables étant differentes, il a fallu réaliser <strong>de</strong>s scripts bash et php<br />
pour pouvoir transferer les données. Auparavant il a fallu nettoyer la base originale car<br />
<strong>de</strong> nombreuses lignes étaitent incomplètes ou étaient présente dans une table et pas<br />
l'autre (ex : un mémoire était parfois dans la table mémoire mais pas dans la table mère<br />
publication).Cette tâche a été réalisée par une autre personne (cf rapport <strong>de</strong> P.Gillet).<br />
2) Les utilisateurs<br />
Definition <strong>de</strong> chaque utilisateur<br />
Membre du limsi : Il s'agit <strong>de</strong> tout visiteur enregistré dans la base <strong>de</strong> données LDAP<br />
repertoriant les inscrits au limsi. Les utilisateur lambda sont surtout <strong>de</strong>s chercheurs que<br />
ce soit en informtaique, physique .... .<br />
Pour ce faire il doit disposer d'un i<strong>de</strong>ntifiant et mot <strong>de</strong> passe propre au LIMSI . On<br />
caractérise alors les utilisateurs par leurs login et mot <strong>de</strong> passe.<br />
Dévelopeur : C'est le <strong>de</strong>velopeur du site. Il dispose également d'un login et d'un mot <strong>de</strong><br />
passe, et bien sûr il a accès au co<strong>de</strong> source <strong>de</strong> l'application web . Il est aussi considéré<br />
comme un utilisateur <strong>de</strong> l'application.<br />
Gestionnaire : Utilisateur avancé, le gestionnaire obtient <strong>de</strong>s droits particuliers . Son<br />
rôle est d'assister le travail <strong>de</strong> l'administrateur au cours du dévelopement <strong>de</strong><br />
l'application. Une <strong>de</strong>s gestionnaires principale est la bibliothécaire.<br />
Fonctionnalité pour chaque utilisateur<br />
Membre du limsi : Après avoir saisi leur login et mot <strong>de</strong> passe, ils ont accès à leurs<br />
publications personnelles, ils pourront rechercher d'autres publications pour plus<br />
d'information, en ajouter <strong>de</strong>s nouvelles.<br />
Sur leurs propres publications ils ont la possibilité <strong>de</strong> la modifier ou <strong>de</strong> la supprimer. Il<br />
peut également exporter ses publications au format Bibtex ou html pour les mettre sur<br />
son propre site, il peut également télécharger <strong>de</strong>s publications au format pdf.<br />
Developeur : Il détient l'accès total aux données et possè<strong>de</strong> tous les droits. Il a accès<br />
aux fonctions administrateurs tel que la validation d'une publication et <strong>de</strong> nombreuses<br />
fonctions <strong>de</strong> gestion <strong>de</strong> base <strong>de</strong> données (supprimer, modifier ou ajouter <strong>de</strong>s langues ou<br />
groupes par exemple).<br />
Gestionnaire : Le rôle du gestionnaire s'apparente à celui <strong>de</strong> l'administrateur, il a accès<br />
aux fonctions administrateur <strong>de</strong> l'application. Le gestionnaire assiste le travaille du<br />
<strong>de</strong>velopeur dans la conception <strong>de</strong> l'aplication et fait également office <strong>de</strong> testeur. Il ne<br />
peut cependant pas acce<strong>de</strong>r au co<strong>de</strong> source et a la base <strong>de</strong> données.<br />
<strong>Pierre</strong> Barussaud 16 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
3) Nouvelle interface<br />
Pour pouvoir acce<strong>de</strong>r à l'application il faut un compte limsi, mais cela ne se fait<br />
pas à partir <strong>de</strong> l'aplication il faut voir ça avec le service informatique du limsi.<br />
Ensuite le début ne change pas, on doit s'i<strong>de</strong>ntifier à l'ai<strong>de</strong> <strong>de</strong> son login et mot <strong>de</strong> passe.<br />
Le principal changement est la fonction ajouter. Auparavant elle se faisait en 6 étapes<br />
minimum et possédait beaucoup <strong>de</strong> failles. En effet certaines variables était passées<br />
dans la barre url permettant <strong>de</strong> modifier ces variables et donc faire planter le système.<br />
De plus les utilisateurs ont parfois fait <strong>de</strong>s erreurs lors <strong>de</strong> certaines étapes et il ne<br />
pouvait pas retourner en arrière. Ils ont donc dû recommencé <strong>de</strong>puis le <strong>de</strong>but, or le co<strong>de</strong><br />
était fait <strong>de</strong> sorte à ajouter au fur et a mesure <strong>de</strong>s étapes les données saisi, donc si un<br />
utilisateur stoppait sa saisis les données sont tout <strong>de</strong> même enregistrée dans la base <strong>de</strong><br />
données. La base était donc rempli <strong>de</strong> lignes vi<strong>de</strong>s, <strong>de</strong> doublons et <strong>de</strong> donnée fausses.<br />
Pendant les étapes <strong>de</strong> l'ajout, le choix <strong>de</strong> l'auteur n'était pas optimal, l'utilisateur pouvait<br />
se tromper facilement en saisissant un nom. Dorenavant l'ajout se fait en <strong>de</strong>ux étapes et<br />
plus six. La première il s'agit d'un formulaire à remplir . Pour l'ajout <strong>de</strong>s auteurs il<br />
choisit le nombre d'auteur voulu et <strong>de</strong>s listes <strong>de</strong>roulantes sont génerées, grâce a cela il<br />
n'y a plus d'erreur <strong>de</strong> saisie. Le choix d'un type <strong>de</strong> publication génère également les<br />
champs propres a ce type <strong>de</strong> publication. Auparavant il fallait choisir le type <strong>de</strong><br />
publication a la première étape et le formulaire n'apparaissait qu'a la 5ème étape. De<br />
plus, il y a une verification du formulaire au cas ou certains champs obligatoires sont<br />
vi<strong>de</strong>s. Pour la secon<strong>de</strong> étape il s'agit simplement d'un récapitulatif <strong>de</strong>s données saisis<br />
préce<strong>de</strong>mment. Il peut ensuite envoyer sa publication ou revenir en arrière sur le<br />
formulaire. En cas d'envoi, il doit attendre la validation <strong>de</strong> la part <strong>de</strong>s gestionnaires. A<br />
noter que l'utilisateur peut choisir <strong>de</strong> l'enregistrer en tant que brouillon, dans ce cas pas<br />
<strong>de</strong> verification <strong>de</strong>s champs et il peut le modifier et l'envoyer plus tard. Une publication<br />
est modifiable seulement si elle n'a pas été validé auparavant et évi<strong>de</strong>mment seulement<br />
par les auteurs <strong>de</strong> cette publication.<br />
Illustration 10: nouveau format pour l'ajout<br />
<strong>Pierre</strong> Barussaud 17 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
La fonction recherche a elle aussi été modifiée. Auparavant le choix <strong>de</strong> l'auteur<br />
se faisait par saisie, donc en cas <strong>de</strong> faute <strong>de</strong> frappe on ne trouvait rien, j'ai changé cela<br />
par un menu déroulant comme pour l'ajout. Il y avait également <strong>de</strong>s champs accessible<br />
a tout moment mais qui ne fonctionnent pas si d'autres champs sont remplis. Par<br />
exemple si l'utilisateur a choisi comme type mémoire et a en même temps rempli le<br />
champ conférence le resultat sera nul. J'ai donc fait comme pour l'ajout, en fonction du<br />
type <strong>de</strong> publication choisi <strong>de</strong>s champs sont généré.<br />
Illustration 11: formulaire <strong>de</strong> recherche avec comme type chapitre<br />
Illustration 12: formulaire <strong>de</strong> recherche avec comme type article<br />
Pour le reste cela ne change pas, les administrateurs auront cependant <strong>de</strong>s<br />
options <strong>de</strong> gestion differentes, certaines étant <strong>de</strong>venu obsolètes et puis il manquait<br />
quelque fonction d'ajout et <strong>de</strong> suppression (langue, groupe ...) . Par contre les<br />
utilisateurs auront les mêmes options.<br />
Les fichiers pdf seront copier dans un fichier regroupant tous les fichiers pdf . Il se situe<br />
au même emplacement que pour la version originale <strong>de</strong> l'application.<br />
Les exports qui ne sont pas encore implémentés dans la nouvelle version feront la<br />
même chose. Ils génèreront le co<strong>de</strong> et il suffira à l'utilisateur <strong>de</strong> le copier dans son co<strong>de</strong><br />
personnel.<br />
<strong>Pierre</strong> Barussaud 18 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
A noter que le style <strong>de</strong> mise en page est similaire à l'ancienne version. En effet<br />
le co<strong>de</strong> .css est pratiquement le même, quelques modifications et ajouts ont cependant<br />
été fait.<br />
On va également essayer <strong>de</strong> mettre en place un système permettant <strong>de</strong> pouvoir<br />
accé<strong>de</strong>r à l'application même si javascript est désactivé. En clair sans javascript, les<br />
verifications ne marche pas et les champs générés n'apparaissent pas. Pour cela, il va<br />
falloir faire <strong>de</strong>s verifications en php et crée d'autres pages qui seront appelées seulement<br />
si javascript est désactivé. Il s'agit surtout <strong>de</strong> la partie ajout qui, si javascript n'est pas<br />
activé, ressemblera fortement a l'application originale.<br />
<strong>Pierre</strong> Barussaud 19 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
IV.Developpement <strong>de</strong> la nouvelle application<br />
"<strong>PubLimsi</strong>"<br />
1) Le format MVC<br />
Développer une application web en MVC permet <strong>de</strong> separer le co<strong>de</strong>.<br />
L'organisation globale d'une interface graphique est souvent délicate. L'architecture<br />
MVC ne résout pas tous les problèmes. Elle fournit souvent une première approche qui<br />
peut ensuite être adaptée. Elle offre aussi un cadre pour structurer une application.<br />
Ce patron d'architecture impose la séparation entre les données, la présentation et les<br />
traitements, ce qui donne trois parties fondamentales dans l'application finale : le<br />
modèle, la vue et le contrôleur.<br />
Illustration 13: schéma MVC<br />
Le modèle fait la liaison avec la base <strong>de</strong> données. Les fichiers modèles<br />
contiennent <strong>de</strong> nombreuses fonctions qui seront appelées par le contrôleur. Chaque<br />
fonction génère une requête et renvoie le resultat, qui sera utilisé dans le controleur. Les<br />
fonctions peuvent avoir plusieurs paramètres ou aucun, le co<strong>de</strong> commence par la<br />
séléction <strong>de</strong> la base <strong>de</strong> données interrogés suivi d'une variable comportant une rêquete.<br />
Certaines fonctions sont plus imposante car la requête diffère selon les informations<br />
saisies par l'utilisateur. Ensuite la requête est envoyé a la base <strong>de</strong> données courante et<br />
enfin toutes les fonctions retournent le resultat obtenu <strong>de</strong> cette rêquete. L'encodage<br />
UTF-8 est utilisé pour réglé les problèmes d'accent et autres caractères spéciaux.(voir<br />
co<strong>de</strong> source page 23)<br />
<strong>Pierre</strong> Barussaud 20 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Le contrôleur gère les inputs, c'est a dire les données saisies par l'utilisateur ou<br />
recuperées <strong>de</strong> la base <strong>de</strong> données. On utilise <strong>de</strong>s variables pour chaque élément html<br />
comme les formulaires ou les tableaux, ces variables sont parfois remplies au fur et a<br />
mesure et suivant les choix <strong>de</strong> l'utilisateur , par exemple <strong>de</strong>s champs d'un tableau ne<br />
sont pas les mêmes en fonction d'un choix préce<strong>de</strong>nt, dans ce cas la variable n'aura pas<br />
les mêmes valeurs. En général, ces variables ne reçoivent que du texte représentant du<br />
co<strong>de</strong> html, il sera parfois necessaire d'appeler le modèle pour afficher <strong>de</strong>s éléments <strong>de</strong><br />
la base <strong>de</strong> données .<br />
Pour cela on aplique à une autre variable une fonction du modèle, elle comportera donc<br />
les resultats <strong>de</strong> la requête <strong>de</strong> la fonction qui lui est associé, pour recuperer toutes les<br />
valeurs contenues dans cette variable, on réalise une boucle et tant que cette <strong>de</strong>rnière<br />
peut être lue on traite les données. En general les fonctions retournent plusieurs lignes,<br />
la boucle permet <strong>de</strong> traiter les lignes une par une. (voir co<strong>de</strong> source page 23)<br />
La vue gère l'affichage <strong>de</strong>s pages. La plupart du temps, elle affichera la valeur<br />
<strong>de</strong>s variables <strong>de</strong>finies dans le controleur, sachant que les variable contiennent du texte<br />
au format html, il suffit <strong>de</strong> faire echo $nom_<strong>de</strong>_la_variable pour générer le co<strong>de</strong> html et<br />
ainsi afficher une page web. On peut également ajouter quelque petit affichage en plus<br />
tel qu'un titre ou un message d'alerte.La vue doit comporter le minimum <strong>de</strong> co<strong>de</strong> php<br />
autre que <strong>de</strong>s echos pour l'affichage <strong>de</strong>s élements <strong>de</strong> la page.(Pas trop <strong>de</strong> condition,<strong>de</strong><br />
boucle et pas <strong>de</strong> requête). (voir co<strong>de</strong> source page 25)<br />
En général, les contrôleurs font souvent appellent aux fonctionx du modèle, il est donc<br />
indispensable d'importer en haut le ou les modèles nécessaires. De même, il faut pour<br />
pouvoir afficher les éléments d'une page importer en fin <strong>de</strong> co<strong>de</strong> du contrôleur le ou les<br />
vues necessaires. En effet il est possible d'avoir plusieurs vues pour un controleur (une<br />
en cas d'erreur et une en cas <strong>de</strong> succès par exemple). Une autre solution est <strong>de</strong> crée une<br />
variable dans le controleur et suivant sa valeur la vue affiche <strong>de</strong>s choses differentes.<br />
L'assimilation du modèle MVC a été assez rapi<strong>de</strong>. Les erreurs les plus communes ont<br />
été celle lié à la base <strong>de</strong> données ou mes requêtes n'étaient pas correctes. Un autre<br />
problème qui aurait été gênant pour les utilisateurs se sont les caractères spéciaux tels<br />
que les accents . L'encodage <strong>de</strong> la base n'était pas le même que celui utilisé dans le co<strong>de</strong><br />
php. De ce fait les caractères spéciaux étaient remplacés par un caractère inconnu. Pour<br />
corriger cette erreur, il a fallu forcé le type d'encodage dans chaque fonction <strong>de</strong>s<br />
modèles. Il a fallut s'occuper <strong>de</strong>s apostrophes et guillemets lors d'un ajout prévenir qu'il<br />
s'agit d'un caractère d'une chaine <strong>de</strong> caractère et non un élément du co<strong>de</strong>. Pour cela on<br />
utilise la fonction "addlashes" permettant d'ajouter automatiquement un "slash" <strong>de</strong>vant<br />
ces caractères permettant ainsi au script <strong>de</strong> comprendre qu'il s'agit d'un caractère d'une<br />
chaine. Pour l'affichage, on utilise la fonction "striplashes" pour enlever les "slash"<br />
<strong>de</strong>vant les caractère.<br />
Pour terminer, j'ai utilisé <strong>de</strong>s variables <strong>de</strong> session pour gar<strong>de</strong>r en mémoire les données<br />
<strong>de</strong> l'utilisateur actuel. Ces variables peuvent être utilisé par toutes les pages, et<br />
contrairement aux variables globales elles peuvent changer <strong>de</strong> valeurs en cas <strong>de</strong><br />
changement d'utilisateur. A la déconnexion, les variables <strong>de</strong> session sont vidées.<br />
<strong>Pierre</strong> Barussaud 21 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
2) Arborescence du co<strong>de</strong> et <strong>de</strong>scription<br />
Illustration 14: arborescence<br />
du co<strong>de</strong><br />
Le dossier export contient les parsers utilisés pour les exportations. Un parser<br />
permet <strong>de</strong> convertir un fichier d'un type vers un autre.<br />
Le dossier global: Il contient les fichiers nécessaires au bon fonctionnement <strong>de</strong><br />
l'application.<br />
Config.php contient les variables globales, c'est à dire <strong>de</strong>s variables utilisables dans<br />
n'importe quelle page php. Il comporte aussi <strong>de</strong>s racourcis <strong>de</strong> chemin url.<br />
Init.php permet d'initialiser la page web, on y inclut le ou les fichiers <strong>de</strong> configuration .<br />
Haut.php comporte l'entête <strong>de</strong> chaque page web, entièrement en html, indispensable<br />
pour le fonctionnement d'un site web ou d'une application web. C'est dans ce fichier<br />
que l'on inclut le fichier <strong>de</strong> style ainsi que le ou les fichiers <strong>de</strong> javascript. Il en est <strong>de</strong><br />
même pour bas.php qui contient le bas <strong>de</strong> chaque page et <strong>de</strong> menu.php qui contient le<br />
co<strong>de</strong> du menu principal.<br />
Le fichier menu.php est inclu dans le fichier haut.php si l'utilisateur est i<strong>de</strong>ntifié . Le<br />
menu diffère selon les droits <strong>de</strong> l'utilisateur.<br />
Le dossier Ajax comporte les fonctions utilisées par le javascript .<br />
Le dossier images comporte toutes les images utilisées par l'application.Pour les<br />
<strong>Pierre</strong> Barussaud 22 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
afficher il suffit <strong>de</strong> mettre l'url <strong>de</strong> ces image (images/nom_image.extension). Si jamais<br />
elle n'existe elle est remplacée par un texte <strong>de</strong>fini en cas d'absence.<br />
Le dossier mo<strong>de</strong>les comporte les fichiers <strong>de</strong>s modèles. Il y en a <strong>de</strong>ux , un comportant le<br />
modèle pour les membres, il comporte <strong>de</strong>s fonctions nécessaire pour <strong>de</strong>s controleurs <strong>de</strong><br />
page utilisables par <strong>de</strong>s membres et <strong>de</strong>s administrateurs.. Le <strong>de</strong>uxième modèle<br />
comporte quand à lui <strong>de</strong>s fonctions nécessaire pour <strong>de</strong>s controleurs <strong>de</strong> page utilisable<br />
uniquement par les administrateurs.<br />
Le dossier modules comporte tous les controleurs et vues. Il est divisé en <strong>de</strong>ux sous<br />
dossiers admin et membre comportant respectivement les controleurs et vues <strong>de</strong>s pages<br />
admin et controleurs et vues <strong>de</strong>s pages membres. Les vues sont situées dans les dossiers<br />
vues <strong>de</strong>s dossiers membres et admins. Les nom <strong>de</strong> chaque fichier doit pouvoir i<strong>de</strong>ntifier<br />
l'action. Par exemple pour le formulaire <strong>de</strong> recherche le controleur s'appelle<br />
formRecherche.php et la vue s'appelle vueRecherche.php .<br />
Le dossier style contient les fichier .css <strong>de</strong> l'application. Il s'agit du fichier qui gère la<br />
mise en page <strong>de</strong> l'application. On y <strong>de</strong>finit les placement <strong>de</strong>s composants, les couleurs,<br />
les polices <strong>de</strong> caractère et la taille d'écriture entre autres.<br />
Le fichier in<strong>de</strong>x.php est le fichier le plus important car appelé en permanence. Sur<br />
l'application, toute les pages ont un url du type in<strong>de</strong>x?<br />
module=nom_module&action=nom_action. Ici, nom_module a pour valeur soit<br />
membre soit admin permettant <strong>de</strong> chercher dans les dossiers modules a<strong>de</strong>quat,<br />
nom_action représente le nom d'un fichier php présent dans le dossier modules. Donc si<br />
le fichier action existe dans le module donné, in<strong>de</strong>x.php va inclure le co<strong>de</strong> contenu dans<br />
le fichier action entre le co<strong>de</strong> du fichier haut.php et bas.php. Quelques verifications sont<br />
a faire. Il faut vérifier que l'utilisateur se soit i<strong>de</strong>ntifié, il faut empecher l'accès aux<br />
pages si celui ci n'est pas i<strong>de</strong>ntifié, <strong>de</strong> même on doit verifier que l'utilisateur lambda<br />
n'ait pas accès au pages admins, et pour finir le prevenir si une page est inexistante,<br />
c'est a dire si le module n'existe pas ou que l'action n'est pas présente dans le module.<br />
(voir co<strong>de</strong> source page 22)<br />
3) Javascript/ajax<br />
JavaScript est un langage <strong>de</strong> programmation <strong>de</strong> scripts principalement utilisé<br />
dans les pages web interactives mais aussi côté serveur.<br />
Pour notre application, du javascript est utilisé pour générer <strong>de</strong>s champs en<br />
fonction d'un choix, cela se fait dynamiquement et il n'est pas necessaire <strong>de</strong> rafraichir la<br />
page. L'ajout <strong>de</strong> co<strong>de</strong> html se fait à l'ai<strong>de</strong> <strong>de</strong> innerhtml. En premier lieu il faut recuperer<br />
l'i<strong>de</strong>ntifiant d'un champ qui, selon sa valeur, modifira l'interface. En fonction <strong>de</strong> sa<br />
valeur, un autre élement <strong>de</strong> la page actuelle sera modifié. Cet élément est <strong>de</strong> base vi<strong>de</strong><br />
et possè<strong>de</strong> aussi un i<strong>de</strong>ntifiant, ainsi son contenu pourra être modifié (voir co<strong>de</strong> source<br />
page 25) .<br />
Pour la vérification du formulaire d'ajout, du jQuery a été utilisé. jQuery est une<br />
bibliothèque JavaScript gratuite et très pratique, ayant une syntaxe courte et logique.<br />
Pour pouvoir l'utiliser il suffit <strong>de</strong> telecharger le co<strong>de</strong> sur le site officiel, <strong>de</strong> le copier<br />
<strong>Pierre</strong> Barussaud 23 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
dans le repertoire <strong>de</strong> projet et ne pas oublier <strong>de</strong> l'intégrer au co<strong>de</strong> . Une autre métho<strong>de</strong>,<br />
celle que l'on a utilisée, et d'intégrer directement les fichiers jquery hébergé par Google,<br />
cela permet d'alléger la ban<strong>de</strong> passante <strong>de</strong> l'application et d'avoir toujours la versions dit<br />
actuelle <strong>de</strong> jQuery. En effet jQuery est constamment en <strong>de</strong>vellopement, et les fonctions<br />
utilisées ont été testées sur tous les navigateurs, donc , contrairement au javascript ou le<br />
co<strong>de</strong> était different pour chaque navigateur , avec jQuery le co<strong>de</strong> est reconnu par tous<br />
les navigateur. Le co<strong>de</strong> Jquery doit cependant se trouvé en <strong>de</strong>ssous <strong>de</strong>s éléments<br />
auxquels il touche sinon il ne connait pas les i<strong>de</strong>ntifiants <strong>de</strong> ces élements.(voir co<strong>de</strong><br />
source page 26)<br />
Les scripts <strong>de</strong> verification sont appelés au moment du clic sur un bouton. Le<br />
script est alors parcouru, à la fin et après plusieurs verifications <strong>de</strong> champs, soit l'on<br />
passe à la page suivante soit on previent l'utilisateur <strong>de</strong>s erreurs ou oublis<br />
Enfin, l'utilisation <strong>de</strong> co<strong>de</strong> Ajax fut nécessaire pour remplir certains champs.<br />
L'ajax permet la récupération <strong>de</strong> données dans la base <strong>de</strong> données en javascript. La<br />
forme <strong>de</strong>s fonctions est la même que celle située dans les modèles. Ajax a été utilisé<br />
dans certaine page web pour remplir un menu <strong>de</strong>roulant créé à l'ai<strong>de</strong> <strong>de</strong> javascript. Le<br />
co<strong>de</strong> <strong>de</strong> l'ajax a été écrit en jquery.(voir co<strong>de</strong> source page 27)<br />
<strong>Pierre</strong> Barussaud 24 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Conclusion<br />
Ces <strong>de</strong>ux mois et <strong>de</strong>mi <strong>de</strong> <strong>stage</strong> se résument en une somme d'enrichissement tant sur le<br />
plan technique, que culturel, humain et personnel. Le LIMSI m'a accordé une gran<strong>de</strong><br />
liberté <strong>de</strong> choix et d'actions, qui se traduit aussi par <strong>de</strong>s difficultés, car le cahier <strong>de</strong>s<br />
charges n'était pas défini. Néanmoins, ce large tableau d'actions m'a permis <strong>de</strong><br />
m'épanouir pleinement au sein du laboratoire.<br />
En effet, du point <strong>de</strong> vue technique, j'ai eu l'opportunité <strong>de</strong> développer et <strong>de</strong> travailler<br />
entièrement avec <strong>de</strong>s logiciels libres, expérience qui a contribué à l'approfondissement<br />
<strong>de</strong> mes connaissances acquises durant ma formation à l'IUT sur les systèmes<br />
Unix/Linux.<br />
Ma première mission a été d'étudier les outils informatiques déjà existants utilisé pour<br />
la conception . Parmi ceux-ci, on trouve Netbeans et Subversion.<br />
Après avoir mené <strong>de</strong>s entretiens avec diverses personnes du laboratoire, j'ai pris<br />
l'initiative <strong>de</strong> reprogrammer entièrement l'application <strong>PubLimsi</strong> en utilisant le modèle<br />
MVC. Cette entrée en matière dans le développement d'une application <strong>de</strong> gran<strong>de</strong><br />
envergure ne s'est pas déroulée sans investissement personnel. Ainsi, la phase d'analyse,<br />
qui précè<strong>de</strong> la programmation du projet, prend alors toute son importance . Le mo<strong>de</strong> <strong>de</strong><br />
fonctionnement <strong>de</strong> l'application, l'organisation <strong>de</strong>s fonctionnalités en différents fichiers<br />
sont <strong>de</strong>s éléments <strong>de</strong> conception à mettre en évi<strong>de</strong>nce avant <strong>de</strong> se lancer dans le<br />
développement. J'ai <strong>de</strong> ce fait pu constater que l'omission <strong>de</strong> quelques informations<br />
mineures dans l'analyse, mène souvent à <strong>de</strong>s changements significatifs par la suite.<br />
A vrai dire, mon travail m'a <strong>de</strong>mandé un mois et <strong>de</strong>mi <strong>de</strong> développement, tandis que<br />
l'analyse environ 2 semaines, la phase d'analyse a tout <strong>de</strong> même continuer dans la phase<br />
<strong>de</strong> <strong>de</strong>vellopement. Néanmoins une telle approche a contribué à un bel enrichissement<br />
personnel.<br />
Finalement, le <strong>stage</strong> ne s'arrête pas une fois le rapport rendu : si la phase principale <strong>de</strong><br />
développement est bien avancée, il reste <strong>de</strong>s chose a implémenté pour rendre la<br />
nouvelle application totalement utilisable. Le reste du temps sera consacré à la création<br />
d'une documentation efficace du co<strong>de</strong> produit pour qu'il soit facilement compréhensible,<br />
utilisable et adaptable par d'autres programmeurs qui me succé<strong>de</strong>ront.<br />
<strong>Pierre</strong> Barussaud 25 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Il s'agit d'un morceau du fichier membre.php<br />
Modèle MVC<br />
Le modèle<br />
for($i=1970;$i
';<br />
inclu<strong>de</strong> CHEMIN_VUE.'vueAjout.php';?><br />
Il s'agit du fichier vueAjout.php<br />
<br />
Ajout d'une publication<br />
<br />
<br />
<br />
<br />
Il s'agit d'une partie du fichier fonction.js<br />
La vue<br />
Javascript<br />
function ajoutChampAuteur(){<br />
var j;<br />
//on recupère l'i<strong>de</strong>ntifiant <strong>de</strong> l'élément qui, en fonction <strong>de</strong> sa valeur, genère <strong>de</strong>s champs<br />
supplementaire<br />
var i=document.getElementById('nbauteur');<br />
var cpt=0;<br />
//on supprime les champs existant avant d'en recrée<br />
supprChampAuteur();<br />
//on crée un nombre <strong>de</strong>fini <strong>de</strong> menu déroulant en fonction <strong>de</strong> la valeur <strong>de</strong> l'élément <strong>de</strong>fini<br />
auparavant'<br />
for(j=0;j
}<br />
}<br />
element.removeChild(element.firstChild);<br />
Jquery<br />
Ce bout <strong>de</strong> co<strong>de</strong> se situe dans le fichier vueAjout.php, en <strong>de</strong>ssous <strong>de</strong> la partie php visible plus<br />
haut. Il n'est pas en entier car assez long.<br />
function verif_ajout(){<br />
var ok=true;<br />
//si un champ obligatoire est vi<strong>de</strong>, affichage d'un message et renvoi faux<br />
if ($("#titre").val().length
Ajax<br />
Ce bout <strong>de</strong> co<strong>de</strong> se situe dans le fichier vueAjout.php, en <strong>de</strong>ssous <strong>de</strong> la partie php visible plus<br />
haut.<br />
// activer au moment ou la valeur <strong>de</strong> nbauteur change<br />
$("#nbauteur").change(function(){<br />
var i;var aut;<br />
})<br />
$.ajax({<br />
type:"GET",<br />
//appelle la fonction suivante<br />
url:"ajax/getAuteur.php",<br />
//Si la fonction est correct<br />
success: function(retour){<br />
//pout tous les menu <strong>de</strong>roulant generer<br />
for(i=1;i
Lexique<br />
Php : Le langage PHP est un langage <strong>de</strong> programmation web côté serveur, ce qui veut dire<br />
que c'est le serveur qui va interpréter le co<strong>de</strong> PHP (language <strong>de</strong> scripts) et générer du co<strong>de</strong><br />
HTML qui pourra être interprété par votre navigateur .<br />
Html : L’Hypertext Markup Language, généralement abrégé HTML, est le format <strong>de</strong> données<br />
conçu pour représenter les pages web. C’est un langage <strong>de</strong> balisage qui permet d’écrire <strong>de</strong><br />
l’hypertexte, d’où son nom.<br />
Sql : SQL (sigle <strong>de</strong> Structured Query Language) est un langage informatique normalisé qui<br />
sert à <strong>de</strong>man<strong>de</strong>r <strong>de</strong>s opérations sur <strong>de</strong>s bases <strong>de</strong> données. La partie langage <strong>de</strong><br />
manipulation <strong>de</strong> données <strong>de</strong> SQL permet <strong>de</strong> rechercher, d'ajouter, <strong>de</strong> modifier ou <strong>de</strong><br />
supprimer <strong>de</strong>s données dans les bases <strong>de</strong> données.<br />
Ajax : Asynchronous Javascript And Xml (AJAX) : il désigne un nouveau type <strong>de</strong><br />
conception <strong>de</strong> pages Web permettant l'actualisation <strong>de</strong> certaines données d'une page sans<br />
procé<strong>de</strong>r au rechargement total <strong>de</strong> cette page.<br />
<strong>Pierre</strong> Barussaud 32 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Références<br />
Bibliographie et liens utiles<br />
• Web LIMSI : Site web du LIMSI ~ http://www.limsi.fr<br />
• PHP.net : Site du langage PHP, ai<strong>de</strong>s, références, bugs ~ http://www.php.net<br />
• Site du zero : Tutoriaux et ai<strong>de</strong>s pour language html, php, jacascript ... ~<br />
http://www.siteduzero.com/<br />
• Toutjavascript : Ai<strong>de</strong> pour le javascript ~<br />
http://www.toutjavascript.com/main/in<strong>de</strong>x.php3<br />
• Jquery : Telechargement et ai<strong>de</strong> pour le Jquery ~ http://jquery.com/<br />
<strong>Pierre</strong> Barussaud 33 <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong>
Notes et Documents LIMSI N° : 2012-13<br />
Auteurs (Authors) : <strong>Pierre</strong> <strong>BARUSSAUD</strong><br />
Titre : <strong>Rapport</strong> <strong>de</strong> <strong>stage</strong> <strong>«</strong> <strong>PubLimsi</strong> <strong>»</strong><br />
Nombre <strong>de</strong> pages (Number of pages) : 32<br />
Résumé : L'application <strong>PubLimsi</strong> permet au membres du limsi <strong>de</strong> pouvoir stocké leurs publications.Notre a été la<br />
restructuration <strong>de</strong> cette application ainsi que sa base <strong>de</strong> données, en sachant que cette application est déjà utilisé. Nous<br />
avons donc créer une nouvelle base <strong>de</strong> données et le co<strong>de</strong> source <strong>de</strong> l'application suit dorénavant le format MVC. Des<br />
changement on été apporter par rapport à la version précé<strong>de</strong>nte. De nouveaux langage ont été utilisé tel que le jquery ou<br />
ajax.<br />
Mots clés : <strong>PubLimsi</strong>,rapport <strong>de</strong> <strong>stage</strong>,php,javascript/jquery,MVC,sql