04.07.2013 Views

Rapport de stage « PubLimsi » Pierre BARUSSAUD

Rapport de stage « PubLimsi » Pierre BARUSSAUD

Rapport de stage « PubLimsi » Pierre BARUSSAUD

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!