Rapport de Stage - Antoine Gamelin

Transcription

Rapport de Stage - Antoine Gamelin
Université du littoral
IUT Calais-Boulogne
Rue Louis David – 62 100 Calais
SISA SARL
6 Rue Jean Jaures
62100 Calais
Rapport de stage
De la programmation orienté objet
et l'utilisation des frameworks
à la découverte de la Business Intelligence
Antoine GAMELIN
Maître de Stage : Ridha KERKENI
Tuteur de stage : François ROUSELLE
Dates du stage : 8 avril au 15 juin 2013
Année universitaire : 2012 / 2013
Remerciements
Je tiens à remercier, dans un premier temps, Monsieur Ridha KERKENI, Directeur de SISA
SARL, mais également mon tuteur lors de ce stage, qui a bien voulu m'accueillir dans son entreprise
et m'a permis de découvrir le monde professionnel. De plus il s'est montré très disponible pour
répondre à mes diverses questions.
J'adresse également mes remerciement à Monsieur François ROUSELLE, mon tuteur au
sein de l'IUT, pour son accompagnement lors de ce stage.
Je remercie également Dimitri FOURNY, étudiant et apprenti à l'IUT Informatique de Calais
qui m'a aidé à s'intégrer dans l'entreprise.
Enfin, je tiens à remercier l'équipe pédagogique du département informatique de l'IUT de
Calais pour m'avoir apporté les connaissances théoriques et pratiques, durant ces deux années de
DUT, qui ont permis le bon déroulement de ce stage.
Page de contrôle
Historique des versions :
Date de création : 21/05/13
Date
Versions
Auteur
Principale modification
21/05/13
1.0
Gamelin Antoine -Création du document
-Création de la charte graphique du document
-Rédaction de la page de contrôle
22/05/13
1.1
Gamelin Antoine Rédaction de l'introduction
23/05/13
1.2
Gamelin Antoine Rédaction de la partie de présentation de
l'entreprise
25/05/13
1.3
Gamelin Antoine Rédaction partie (projet n°1)
26/05/13
1.4
Gamelin Antoine Correction de l'orthographe
29/05/13
1.5
Gamelin Antoine Création du glossaire.
01/06/13
1.6
Gamelin Antoine Rédaction partie (projet n°2)
02/06/13
1.7
Gamelin Antoine Rédaction partie (projet n°3)
08/06/13
1.8
Gamelin Antoine Rédaction de la conclusion
Ajout de l'annexe
09/06/13
1.9
Gamelin Antoine Reformulation / Correction de l'orthographe
Distribution :
Destinataires :
•
•
Enseignants à l'Institut Universitaire de Technologies Informatique de Calais
M. Ridha KERKENI
Sécurité et confidentialité :
Aucune clause de confidentialité
Note sur cette édition :
Rien à signaler
Table des matières
1.Introduction.......................................................................................................................................7
1.1.But du document........................................................................................................................7
1.2.Contexte.....................................................................................................................................7
1.3.Besoins de l'entreprise...............................................................................................................7
1.4.Contenu du document................................................................................................................7
2.Présentation de l'entreprise................................................................................................................8
2.1.Présentation générale.................................................................................................................8
2.2.Les secteurs d'activités...............................................................................................................8
2.3.Politique et orientations technologiques de l'entreprise.............................................................9
3.Présentation des projets...................................................................................................................11
3.1.Projet n°1 : Implémentation des services autour d'une application de Business Intelligence. 11
3.2.Projet n°2: Mise en place d'un dispositif d'enquête en ligne....................................................11
3.3.Projet n°3 : Mise en place d'un nouveau système de newsletter..............................................11
3.4.Méthodologie...........................................................................................................................12
3.5.Planning ..................................................................................................................................12
4.Travaux réalisés...............................................................................................................................13
4.1.Projet n°1 : Implémentation des services autour d'une application de Business Intelligence 13
4.2.Projet n°2: Mise en place d'un dispositif d'enquête en ligne...................................................21
4.3.Projet n°3 : Mise en place d'un nouveau système de newsletter..............................................26
5.Bilan................................................................................................................................................35
5.1.Difficultés rencontrées.............................................................................................................35
5.2.Apports de ce stage..................................................................................................................35
6.Glossaire..........................................................................................................................................36
7.Bibliographie...................................................................................................................................41
Index des illustrations
Figure 1: Comparaison Web 1.0 et Web 2.0.......................................................................................10
Figure 2: Fonctionnement de la BI.....................................................................................................14
Figure 3: Modèle en étoile..................................................................................................................15
Figure 4: Modèle en flocon................................................................................................................15
Figure 5: Société proposant des services BI.......................................................................................16
Figure 6: Prix d'implémentation d'un service BI................................................................................16
Figure 7: Nombre de personnes pouvant intervenir sur la solution de BI..........................................17
Figure 8: Aperçu de l'interface de pentaho.........................................................................................18
Figure 9: Aperçu de l'interface de Talend...........................................................................................18
Figure 10: Aperçu de l'interface de Saiku...........................................................................................19
Figure 11: Aperçu de l'interface de C-Tools.......................................................................................19
Figure 12: Aperçu d'un tableau de bord..............................................................................................19
Figure 13: Aperçu des fonctionnalités de Modalisa...........................................................................21
Figure 14: Aperçu de l'interface de Geany.........................................................................................22
Figure 15: Aperçu d'une enquête réalisée...........................................................................................23
Figure 16: Aperçu de la gestion des scénarios....................................................................................24
Figure 17: Aperçu des statistiques du backoffice...............................................................................24
Figure 18: Aperçu de la tendance des recherches de framework sur google......................................25
Figure 19: Aperçu de l'interface d'import de fichier (ancien site)......................................................27
Figure 20 : Aperçu de l'interface d'e-mailing (ancienne version) ......................................................28
Figure 21: MCD de la nouvelle base d'emailing................................................................................29
Figure 22: Aperçu de la template responsive de base.........................................................................30
Figure 23: Aperçu de l'interface adapté à la charte graphique de SISA.............................................31
Figure 24: Interface de connexion......................................................................................................32
Figure 25: Interface de gestion des contacts.......................................................................................32
Figure 26: Interface d'emailing...........................................................................................................33
Rapport de stage SISA
1.
Année : 2013
Introduction
1.1. But du document
Ce document a pour but de présenter la démarche des différents projets effectués pendant mon
stage dans l'entreprise SISA SARL.
1.2. Contexte
Étudiant de deuxième année à l'Institut Universitaire de Technologie (IUT) Informatique de
Calais un stage est nécessaire afin de valider l'année.
Le stage s'est déroulé à l'entreprise SISA SARL à Calais, il a débuté le 8 avril et prit fin le 15
juin, l'équivalent de 10 semaines.
Ce stage a permis de mettre en pratique les connaissances acquises pendant ces deux années de
Diplôme Universitaire de Technologie (DUT) Informatique à Calais et m'a également permis de
découvrir le monde de l’entreprise.
1.3. Besoins de l'entreprise
L'entreprise désire réaliser un service d'informatique décisionnelle (Business Intelligence) pour
les Petites et Moyennes Entreprises (PME).
En parallèle à ce projet l'entreprise souhaite mettre à jour différents projets datant de 2003.
1.4. Contenu du document
Dans la section 2, de ce rapport, je commence par présenter l'entreprise. La section 3 est
consacrée à décrire les projets à développer. Je détaillerais, dans la section 4, les différents travaux.
Dans la section 5, je présenterais un bilan de ces dix semaines de stage en insistant sur les apports et
les difficultés rencontrés.
Gamelin Antoine
Page : 7/47
Rapport de stage SISA
2.
Année : 2013
Présentation de l'entreprise
2.1. Présentation générale
La société a pour dénomination sociale : Solutions Informatiques & Statistiques Appliquées. Le
siège social est fixé à : 8, rue Jean Jaures 62100 CALAIS. Les associés apportent à la société la
somme de 15.000 euros.
Solutions Informatiques & Statistiques Appliquées SARL est administrée par Monsieur Ridha
KERKENI en qualité de gérant pour la durée de la société. C'est une entreprise d’ingénierie et de
conseil en systèmes informatiques.
2.2. Les secteurs d'activités
L'entreprise est spécialisée dans le domaine de l'informatique, des statistiques et de l'analyse de
données. Le champ d’action de SISA couvre les activités suivantes :
•
Conseil en systèmes informatiques : SISA offre les service de l'étude et du conseil en
matière de systèmes informatiques, du matériels, des logiciels, des progiciels et des
réseaux.
•
Réalisation de logiciels : Les services de développement, production, fourniture et
documentation de logiciels et prologiciels (utilitaires d’application, développements, etc.),
ainsi que leur édition.
-
Les services de développement, production, fourniture et documentation de logiciels
" à la demande ", réalisés sur cahier des charges.
•
•
Les services de conseils informatiques et de suivi des applications.
Traitement de données qui concernent :
-
Le traitement des données fournies par le client, sans étude de logiciel.
-
Les travaux spécialisés de saisie de données ou de conversion de fichiers.
Études de marché et sondages : Ce service permet la réalisation puis l'analyse des
enquêtes. Les sondages et études de marchés font partie intégrante du métier de
l'entreprise. Ce service de traitement d'enquêtes a pour objectif :
-
la fourniture d’études portant sur le marché et le comportement de la clientèle,
préalables à la mise au point de produits nouveaux ou à la conception de campagnes
publicitaires.
Gamelin Antoine
Page : 8/47
Rapport de stage SISA
-
Année : 2013
la réalisation, pour des tiers, de sondages d’opinions sur des questions politiques,
économiques et sociales.
•
Organisations de foires et salons : SISA s’intéresse à l’organisation et l’accueil de
manifestations économiques tel que les salons ou les expositions professionnels,
périodiques et également à la fourniture et la mise en place de matériels et services
d’exposition.
2.3. Politique et orientations technologiques de l'entreprise
Depuis sa création SISA SARL appris à bras le corps les technologies Open Source, son
adhésion à l'architecture client/serveur orientée WEB 2.0 lui ont permis de mettre en place des
dispositifs légers pour le compte de ses clients.
Cette politique a été dictée particulièrement par la taille de l'entreprise ainsi que les orientations
informatiques de la direction.
2.3.1. Open Source
Open Source signifie source ouverte en français. Cette notion comprend donc les logiciels qui
ont un code source ouvert, c'est à dire que l'on peut consulter librement.
La notion Open Source telle qu'elle est établie par l'OSI (Open Source Initiative, organisation
créée en 1998 pour la promotion de l'Open Source) étend largement ses possibilités.
On peut, par exemple, redistribuer librement le logiciel, effectuer sur celui-ci des travaux
dérivés, ou même le vendre. La notion Open Source décrite par l'OSI est comparable à celle du
logiciel libre. Il existe de nombreuses licences permettant de mieux fixer les licences libres. Les
plus connues sont sans doutes les licences GPL et LGPL. Il existe des sites qui regroupe des scripts
open source tel que github.
Attention, il ne faut pas confondre Open Source et gratuit ! En effet, si une entreprise développe
des logiciels Open Source, il faut aussi qu'elle puisse rémunérer ses employés.
Les entrées d'argent vont alors provenir d'un support technique professionnel, de formations, ou
de l'ajout de modules supplémentaires payants, même si cela est généralement beaucoup moins cher
que l'achat d'un logiciel propriétaire
2.3.2. Architecture Client/Serveur
Dans l'architecture client/serveur, un groupe de machines, les serveurs, ont pour rôle de servir un
autre groupe, les utilisateurs, que l'on nomme les clients (on prend ici une définition au niveau
Gamelin Antoine
Page : 9/47
Rapport de stage SISA
Année : 2013
machine, on pourrait également en donner une au niveau processus).
Par servir, on désigne la réalisation d'une tâche demandée par le client.
Sur la machine cliente, les utilisateurs disposent de l'interface. Sur les serveurs, c'est la gestion
des bases de données qui est effectuée (analyse et optimisation des requêtes répartition). On peut
distinguer deux types de clients.
•
Le client lourd
L'utilisateur est obligé de se connecter explicitement à tous les serveurs dont il a besoin pour la
requête qu'il veut formuler.
•
Le client léger
Il offre plus de transparence. L'utilisateur ne se connecte qu'à la base de données via un serveur
unique. Le système de gestion des bases données se charge alors de gérer les différentes connexions
que nécessitera la requête de l'utilisateur.
2.3.3. WEB 2.0
Le terme WEB 2.0 a été inventé en 2004 par Dale Dougherty de la société O'Reilly_Media pour
signifier une évolution / transition dans le web.
Comme on peut l'apercevoir sur la figure 1 : la grande différence entre le WEB1.0 et le WEB 2.0,
c'est que les utilisateurs puisse interagir avec le site en ayant la possibilité d'ajouter des contenus sur
le site.
Figure 1: Comparaison Web 1.0 et Web 2.0
Gamelin Antoine
Page : 10/47
Rapport de stage SISA
3.
Année : 2013
Présentation des projets
3.1. Projet n°1 : Implémentation des services autour d'une application de
Business Intelligence
L'entreprise souhaite mettre en place une application d'informatique décisionnelle (Business
Intelligence) pour le compte d'un client. En effet, l'objectif annoncé est d'avoir une solution open
source (Version communautaire et gratuite) pour traiter des « Big Data ». Lors de notre recherche
documentaire, il s'est avéré que la plupart des solutions commercialisées se compte en dizaine de
milliers d'euros et concerne plutôt les grands comptes (assurances, banques, etc...).
Le choix que SISA a présenté à son client consiste à l'utilisation d'une solution 100 % gratuite et
open source. Cette solution est un mixte de Pentaho, Saiku et C-Tools.
Ce projet sera développé dans la partie 4.1.
3.2. Projet n°2: Mise en place d'un dispositif d'enquête en ligne
L'entreprise a déjà réalisé auparavant des enquêtes, mais celles-ci était développé en procédurale.
L'intervention sur le code des enquêtes ainsi que la plate-forme d'e-mailing de l'entreprise s'est
révélée fastidieuse et a nécessité un temps considérable.
M. Kerkeni m'a demandé de développer un dispositif de recueil de données en utilisant le modèle
MVC. (Modèle Vue Contrôleurs) afin de simplifier la réutilisation et la maintenabilité du dispositif.
Ce dispositif a été mise en place dans le cadre d'un partenariat avec l'acces paneliste Respondi.
Un access panel est un panel qualifié d’individus volontaires créé à l’initiative d’une société
d’étude et dont une partie de la population peut être rapidement interrogée en fonction d’une
problématique annonceur.
Respondi propose à des Internautes de s'inscrire sur leur site, de répondre à des enquêtes en
échange de points. Ces derniers peuvent être échangé contre de l'argent ou des cadeaux sur des sites
partenaires. L'utilisation de Respondi a permit de réaliser un e-mailing plus ciblé à la demande du
client.
Ce projet sera développé dans la partie 4.2.
3.3. Projet n°3 : Mise en place d'un nouveau système de newsletter
La demande est de réaliser une nouvelle interface du système d'e-mailing. En ayant la possibilité
de gérer les contacts, de rédiger des mails à l'aide d'un éditeur WYSIWYG.
Gamelin Antoine
Page : 11/47
Rapport de stage SISA
Année : 2013
Les contraintes sont la réalisation d'une interface responsive design pour la partie utilisateur, un
back-office sécurisé pour les administrateurs. L'autre contrainte de taille est de tout développer en
programmation orientée objet (POO) via un framework.
Ce projet sera développé dans la partie 4.3.
3.4. Méthodologie
Le travail que j'ai mené durant ce stage peut être décomposé en trois phases :
• La première phase consiste à l'étude et/ou l'analyse de l'existant afin d'avoir une vision de
l'ensemble et des détails de chaque sujet traité.
• La deuxième phase consiste à se familiariser avec les outils technologiques nécessaire à
l'exploitation. Cette phase m'a permis d'approfondir des connaissances déjà acquises. Les outils
technologiques sont principalement des langages (AJAX, HTML, PHP, SQL, JavaScript...), base de
données (PostgreSQL, MySQL...).
• La troisième phase concerne l'intervention sur les différents projets.
3.5. Planning
Date
Du 8 avril au 22 avril
Tâches
- Recherche documentaire sur la Business Intelligence
- Analyse de l'existant
- Approfondissement des connaissances en javascript
Du 22 avril au 29 avril - Étude de l'interface de pentaho et du plugin C-Tools
Du 29 avril au 6 mai
- Création d'un générateur de tri à plats
Du 6 mai au 13 mai
- Maintenance de divers projets (Correction de Bug )
- Étude sur le responsive design
- Étude du framework CodeIgniter
Du 13 mai au 27 mai
- Création d'une enquête sur le dressing
Du 27 au 3 juin
- Implémentation d'un theme responsive design pour une newsletter en
utilisant le framework CodeIgniter
Du 3 juin au 10 juin
- Poursuite d'implémentation de la newsletter
Gamelin Antoine
Page : 12/47
Rapport de stage SISA
4.
Année : 2013
Travaux réalisés
4.1. Projet n°1 : Implémentation des services autour d'une application de
Business Intelligence
4.1.1. Étude Bibliographique
Le terme Business Intelligence est apparu la première fois en octobre 1958 dans un article de
IBM Journal rédigé par Hans-Peter LUHN.
La Business Intelligence est une partie de l'informatique consistant à effectuer du reporting
automatisé et des analyses numériques à partir de données existantes.
Les domaines d'application de la Business Intelligence
Toutes les activités de l’entreprise sont concernées par les systèmes décisionnels et en sont des
utilisateurs potentiels :
•
Le contrôle de gestion pour l’analyse des coûts, l’analyse de la rentabilité, l’élaboration
budgétaire, les indicateurs de performance...
•
Le marketing pour le ciblage, le pilotage de gamme, les applications de géomarketing, de
fidélisation clients...
•
La direction commerciale pour le pilotage des réseaux (directs ou indirects), les prévisions
des ventes, l’optimisation des territoires...
•
Les ressources humaines pour la gestion des carrières, la gestion collective...
•
La direction de la production pour l’analyse qualité, la prévision des stocks, la gestion des
flux, la fiabilité industrielle...
•
La direction générale pour les tableaux de bord, indicateurs de pilotage, gestion d’alertes...
Gamelin Antoine
Page : 13/47
Rapport de stage SISA
Année : 2013
Fonctionnement d'une application Business Intelligence
Figure 2: Fonctionnement de la BI
Idéalement, les données sont extraites par un ETL des bases de production ou autres sources
(fichiers plats, tableurs, etc.) et intégrées dans un Datawarehouse, agrégées dans un ou plusieurs
Datamart. Elles sont lues soit directement par un outil de reporting, soit à travers une couche
sémantique pour une analyse ad hoc(requêtes à la demande).
Il est important de savoir que la réalisation de l'ETL constitue 70% d'un projet décisionnel en
moyenne. Et ce n'est pas pour rien, ce système est complexe et ne doit rien laisser s'échapper, sous
peine d'avoir une mauvaise information dans l'entrepôt, donc des données fausses, donc
inutilisables.
L'objectif du DataWarehouse est de stocker les données de façon intégrée (codage et
représentation unique) et historisée.
Les différents modèles d'entrepôt de données
La modélisation de l'entrepôt de données (DataWarehouse) peut suivre le modèle étoile ou le
modèle flocon
Modèle en étoile : (cf Figure 3)
Le modèle de données «en étoile» est typique des structures multidimensionnelles stockant des
données atomiques ou agrégées, elle est implémenté sur un SGBD relationnel classique.
La table située au centre de l'étoile est la table des faits ou mesures (ou encore métriques) : ce
Gamelin Antoine
Page : 14/47
Rapport de stage SISA
Année : 2013
sont les éléments mesurés dans l'analyse comme les montants, les quantités, les taux, etc.
Les tables situées aux extrémités de l'étoile sont les tables de dimensions (ou encore axes
d'analyse) ou niveaux de suivi. Ce sont les dimensions explorées dans l'analyse comme par exemple
le temps (jour, mois, période, ...), la nomenclature des produits (référence, famille, ...), la
segmentation clientèle (tranche d'âge, marché, ...), etc.
Le principe d'optimisation de ce modèle en étoile est le suivant : une clé calculée "technique"
(clé générique) sert de jointure relationnelle entre les tables de dimensions et la table des faits. La
requête SQL réalise d'abord sa sélection sur les tables de dimensions (peu volumineuses) et ensuite
seulement, à partir des clés ainsi sélectionnées, la jointure avec la volumineuse table des faits.
Un ensemble d'étoiles ou de flocons dans lequel les tables de faits se partagent certaines tables de
dimensions forme un modèle « en constellation ».
Modèle en flocon: (cf Figure 4)
Le principe est le même que pour le modèle en étoile, mais en plus les dimensions sont
décomposées. Le but est d'économiser ainsi de la place.
Cela permet également d'instaurer une hiérarchie au sein des dimensions. Cela engendre par
contre une complexification du modèle.
Le modèle de données dit « en flocon » est une variante du modèle en étoile : chaque table de
dimension est re-normalisée pour faire apparaître la hiérarchie sous-jacente (nomenclature, ...).
La normalisation n'est pas indispensable car ni mises à jour ni suppressions ne sont effectuées
directement sur l'entrepôt de données. L'intérêt principal du modèle en flocon réside dans le gain en
espace de stockage qui est de l'ordre de 5 à 10 %.
Figure 3: Modèle en étoile
Figure 4: Modèle en flocon
Qui propose une application Business Intelligence
Gamelin Antoine
Page : 15/47
Rapport de stage SISA
Année : 2013
Figure 5: Société proposant des services BI
Comme on peut l'apercevoir sur la figure 5, il y a peu challengers et aucun visionnaires qui
propose des solutions Business Intelligence
On peut apercevoir dans les leader de grande Entreprise tel que IBM, Microsoft, Oracle …
Et en parallèle de nombreux niche players comme Pentaho, Jaspersoft...
Quel est le prix d'une application business intelligence
Figure 6: Prix d'implémentation d'un service BI
Gamelin Antoine
Page : 16/47
Rapport de stage SISA
Année : 2013
Sur la figure 6, on peut apercevoir à combien reviens l'implémentation d'une application de
Business Intelligence. On peut apercevoir Pentaho avec une licence gratuite et propose un support
payant.
La taille (size) permet de définir le nombre de personnes pouvant intervenir sur la solution de
Business Intelligence (cf figure 7)
Figure 7: Nombre de personnes pouvant intervenir sur la solution de BI
4.1.2. Technologies
Ce projet a nécessité l'utilisation de plusieurs applicatifs:
Pentaho :
Pentaho est une plate-forme décisionnelle open source développé en JAVA. Il est possible d'y
intégrer divers api(Application Programing Interface).
Un aperçu de l'interface est visible à la figure 8.
Talend
Talend est un éditeur de logiciel Open Source spécialisé dans l'extraction, l'intégration et le
chargement de données. (ETL)
Il a été utilisé pour importer dans une base de donnée des fichiers de données au format CSV
Un aperçu de l'interface est visible à la figure 9.
Saiku
Saik est une interface Javascript permettant d'exécuter des requêtes MDX(MultiDimensionnal
eXpression) afin de générer des tableaux croisés et/ou des graphiques. Cette interface peut être
Gamelin Antoine
Page : 17/47
Rapport de stage SISA
Année : 2013
implémenter dans Pentaho
Un aperçu de l'interface est visible à la figure 10.
Gamelin Antoine
Page : 18/47
Rapport de stage SISA
Année : 2013
C-Tools :
C-Tools est une API implémentable dans Pentaho permettant de réaliser des tableaux de Bords
pour le reporting.
Cette interface est décomposé en 4 parties :
•
la structure du tableau de bord (le « Layout »)
•
les différents composants (« Components ») du tableau de bord : graphiques, tableaux de
données, objets web (listes déroulantes, cases à cocher, calendrier…) ;
•
les interactions entre les composants, au travers de paramètres (« Parameters ») ;
•
les sources de données nécessaires à l'alimentation des composants (« Data Sources »).
Un aperçu de l'interface est visible à la figure 11.
Figure 8: Aperçu de l'interface de pentaho
Figure 9: Aperçu de l'interface de Talend
Gamelin Antoine
Page : 19/47
Rapport de stage SISA
Année : 2013
Figure 10: Aperçu de l'interface de Saiku
Figure 11: Aperçu de l'interface de C-Tools
4.1.3. Réalisation
Lors de ce projet ma contribution était :
- Importer des fichiers CSV issue de différentes base de données via Talend,
- Réalisation des cubes OLAP via Pentaho,
- Création d'un tableau de bord via C-Tools
Figure 12: Aperçu d'un tableau de bord
Gamelin Antoine
Page : 20/47
Rapport de stage SISA
Année : 2013
4.2. Projet n°2: Mise en place d'un dispositif d'enquête en ligne
4.2.1. Étude Bibliographique
Le MVC (Model-View-Controller, soit Modèle-Vue-Contrôleur) est une architecture qui intègre
trois niveaux de conception suivants :
•
Le Modèle : il s'agit du comportement de l'application. Ce niveau intègre l'ensemble des
interactions avec la base de données et le traitement des données : il contient et manipule
toutes les données, en gérant leur sélection, leur insertion, leur modification ou leur
suppression (« CRUD »). Pour cela, il propose des méthodes spécifiques à la bonne tenue
de ces actions.
•
La Vue : il s'agit de l'interface que l'utilisateur va manipuler. Elle habille les données
transmises par le modèle et reçoit toutes les actions effectuées par l'utilisateur, sans en
assurer le traitement : les actions sont transférées au contrôleur.
•
Le Contrôleur : il prend en charge la gestion des événements pour mettre à jour la vue ou
synchroniser des informations via le modèle. Il reçoit toutes les actions effectuées par
l'utilisateur, et effectue la détection d'erreurs (vérification du remplissage correct des
champs d'un formulaire, par exemple). Tout comme la vue, le contrôleur n'effectue aucune
modification sur les données, il est uniquement chargé d'appeler le modèle et de renvoyer
la vue concernée.
Exemple : Une application doit afficher une liste de clients et permettre les mises à jour.
•
Le Modèle lit en base de données toutes les informations sur les clients, et procède à
l'enregistrement des modifications apportées à ceux-ci.
•
La Vue se charge de décorer les données issues du modèle (mise en gras, code html, etc.),
afficher des liens d'édition et de suppression ainsi que le formulaire de modification des
fiches clients.
•
Le Contrôleur, quand à lui, vérifie que les informations saisies dans le formulaire de
modification d'un client sont bien formatées, et que tous les champs obligatoires ont été
remplis par des données correctement formatées (que l'adresse email est bien conforme aux
standards ou que le numéro de téléphone est valide, par exemple).
Pour résumer le principe de fonctionnement du MVC, lorsqu'un client effectue un appel à une
application, la requête est analysée par le contrôleur qui demande au modèle concerné d'effectuer
les opérations. Enfin, c'est ce même contrôleur qui va renvoyer la vue concernée au client.
Gamelin Antoine
Page : 21/47
Rapport de stage SISA
Année : 2013
4.2.2. Technologies
Pour réaliser ce projet, de nombreuses technologies ont été utilisées. Concernant les langages de
programmations j'ai utilisé de l'AJAX, CSS 3, HTML5 Javascript, Jquery, PHP ainsi que divers
logiciels.
Modalisa
Logiciel regroupant de nombreuses fonctionnalités visible à la figure 13.
Il a été utilisé pour générer des formulaires HTML et sera -in fine- l'outil de traitement et
d'analyse des résultats chez le client.
Geany
Geany est un IDE(ce référer au glossaire) proposant de nombreuses fonctionnalités.
L'interface est décomposé en 4 parties.(cf figure 14)
Tout en haut la barre des menus, permettant d'ouvrir les fichier, de les enregistrer, la
personnalisation des couleurs et beaucoup d'autres fonctions.
La deuxième partie est une la fenêtre sur la gauche, qui liste toutes les fonctions avec le numéro
de la lignes, ainsi que les lignes des affection des différentes variables.
La troisième partie contient la fenêtre avec le contenu du code. Cette IDE permet l'autocomplete
avec les fonctions de base de PHP. De plus lorsqu'on définit une fonction dans un fichier, il propose
aussi une autocomplete.
Figure 13: Aperçu des fonctionnalités de Modalisa
Gamelin Antoine
Page : 22/47
Rapport de stage SISA
Année : 2013
Figure 14: Aperçu de l'interface de Geany
4.2.3. Réalisation
Le client nous a envoyé un fichier MsWord avec les différentes questions. M. Kerkeni à générer
le formulaire HTML à l'aide du logiciel Modalisa.
Modalisa propose la vérification des différents champs si c'est un nombre, si la saisie est
obligatoire... Il propose aussi la gestion des pages. Mais j'ai eu en charge d'ajouter d'autre
fonctionnalités :
– Implémentation d'une barre de progression JQUERY pour informer l'état de l'avancement du
questionnaire.
– Rajout des contrôles Javascript pour emmener l'utilisateur en fin de questionnaire en
fonction de certains filtres
– Rajout d'un système de visualisation de questions caché selon des scénarios de réponses
Une des grandes difficultés de ce projet est de rendre cette enquête portable en fonction des
différents navigateurs.
Une fois l'implémentation du questionnaire, il a fallu créer une base de données pour recueillir
les réponses des panelistes.
Pour une navigations simplifié, les utilisateurs était directement redirigé au début du
questionnaire, la connexion se faisait avec des paramètres dans l'url.
La dernière tâche consistait à implémenter l'administration du site Web et de l'adapter avec le
questionnaire.
Gamelin Antoine
Page : 23/47
Rapport de stage SISA
Année : 2013
4.2.4. Aperçus
Figure 15: Aperçu d'une enquête réalisée
On peut apercevoir, la barre de progression en haut à droite, la possibilité d'accéder à la suite du
formulaire en bas à droite.
Gamelin Antoine
Page : 24/47
Rapport de stage SISA
Année : 2013
Sur la figure 16 on peut apercevoir la gestion des scénarios de réponse, c'est à dire que si on
clique sur oui à la première question, une nouvelle question va apparaître.
Figure 16: Aperçu de la gestion des scénarios
Dans le back-office j'ai adapté les statistiques selon les profils des répondants à l'enquête.
Figure 17: Aperçu des statistiques du backoffice
Gamelin Antoine
Page : 25/47
Rapport de stage SISA
Année : 2013
Les « Screen Out » sont des personnes dont les réponses n'intéressent pas le client
Les « complete » sont ceux qui ont répondu à toutes les questions.
La signalétique est un questionnaire ou les panelistes se présentent
4.3. Projet n°3 : Mise en place d'un nouveau système de newsletter
4.3.1. Étude bibliographique
L'interêt d'un framework
Le terme de « framework » se traduit littéralement par « cadre de travail » : dans le cas des
frameworks Web, concrètement, il s'agit d'un ensemble de bibliothèques et d'outils qui permettent
d'améliorer la conception d'applications Web, en apportant des fonctionnalités supplémentaires tout
en ajoutant de la rigueur dans leur développement.
Utiliser un framework, c'est donc avoir la garantie de disposer d'une architecture cohérente, où la
rigueur de développement est primordiale. C'est aussi une réflexion sur l'avenir, puisqu'un code
léger, optimisé et cohérent est bien plus simple à maintenir et améliorer.
Cependant, utiliser un framework introduit de nombreuses exigences et de la complexité, dans la
mesure où certaines habitudes de développement devront être mises de côté lors de son adoption.
Ainsi, bien qu'il soit censé améliorer la productivité de vos développements, il existe toujours une
phase au cours de laquelle le coût est plus important que le gain : ce choix dont donc être mûrement
réfléchi.
Les différents frameworks
Les 5 plus gros frameworks PHP sont CakePHP, CodeIgniter, Symfony, Yii, Zend Framework
Figure 18: Aperçu de la tendance des recherches de framework sur google
Gamelin Antoine
Page : 26/47
Rapport de stage SISA
Année : 2013
La figure 18 montre la tendance de recherche sur google par rapport au différents
framework PHP
C'est une des raisons du choix du framework CodeIgniter
Présentation du CodeIgniter
Origines et motivation du Framework
CodeIgniter est apparu en 2006 sous l'impulsion du développeur Rick Ellis. Il est activement
développé depuis.
L'objectif est de produire un framework rapide et peu gourmand en mémoire, pouvant être
facilement et rapidement déployé, proposant une courbe d'apprentissage rapide et restant simple
d'utilisation.
Le développement du framework est largement orienté vers la vitesse d'exécution de ce dernier.
A ce titre, de nombreux choix ont été faits, rejetant certaines propositions d'enrichissement de
fonctionnalités afin de concentrer les efforts de développement sur le cœur du framework. Le choix
a également été fait de ne pas imposer de conventions contraignantes aux développeurs et de les
laisser librement appliquer les leurs.
De ce point de vue, CodeIgniter est une vrai réussite, respectant totalement ses motivations de
départ.
Points fort du framework
Les points forts du framework sont de manière évidente sa versatilité et son faible impact sur les
infrastructures. CodeIgniter est vraiment rapide, s'installe rapidement sur toutes les plateformes
(PHP4 et PHP5) et propose une prise en main excessivement aisée. Un programmeur PHP habitué à
coder lui-même ses contrôleurs et ses vues augmentera ainsi son rendement. Il trouvera beaucoup
de fonctionnalités pratiques couvrant les besoins les plus basiques mais aussi les plus récurrents
(logs, cache, cookies, etc.).
La documentation a fait l'objet de gros efforts de la part de la communauté. Elle est relativement
simple à appréhender et suffit largement à un démarrage efficace.
La compatibilité PHP4 peut être un avantage si vos plateformes ne supportent pas PHP5, bien
qu'il soit à l'heure actuelle vivement recommandé d'effectuer la migration, PHP4 n'étant plus
maintenu ou en passe de ne plus l'être.
Points faibles du framework
CodeIgniter est un framework « léger ». Par conception, il laisse au développeur beaucoup de
Gamelin Antoine
Page : 27/47
Rapport de stage SISA
Année : 2013
choses à faire à la main comme l'escaping des données ou l'appel des vues.
4.3.2. L'existant
Sisaweb disposait d'un système d'emailing fonctionnelle datant de 2003. Cette interface dispose
de nombreuses lacunes ergonomique. Par exemple, la rédaction des formulaires étaient réalisée à
l'aide de Microsoft Word, enregistrer au format HTML. Ce fichier HTML devait par la suite être
épuré car le générateur de Microsoft Word n'est pas très performant. Voici quelques aperçu de
l'interface existante :
Le système d'import de fichier html.
Figure 19: Aperçu de l'interface d'import de fichier (ancien site)
La page d'envoi de fichier
Tous les contacts étant listé sur la même page, ce qui rend difficile l'accès au bouton envoyer.
L'interface propose de rechercher, d'ajouter , consulter , modifier , supprimer, importer et
exporter les contacts.
Gamelin Antoine
Page : 28/47
Rapport de stage SISA
Année : 2013
Figure 20 : Aperçu de l'interface d'e-mailing (ancienne version)
4.3.3. Technologiess
Pour ce projet les langages de programmations utilisés sont :
• Côté Client : AJAX, CSS , HTML, JavaScript, Jquery
• Côté Serveur:PHP
L'utilisation du Framework CodeIgniter et d'une template responsive design ainsi que du logiciel
GEANY comme IDE.
Gamelin Antoine
Page : 29/47
Rapport de stage SISA
Année : 2013
4.3.4. Analyse et conception de la nouvelle base de donnée
Figure 21: MCD de la nouvelle base d'emailing
4.3.5. La nouvelle interface
Pour réaliser la nouvelle interface graphique nous avons cherché des templates libre de droit et
qui étaient responsive
.Après quelque recherches nous avons intégré le design de Derby WebDesign (cf. figure ci
dessous).
Gamelin Antoine
Page : 30/47
Rapport de stage SISA
Année : 2013
Figure 22: Aperçu de la template responsive de base
Une fois cette interface implémenté nous l'avons adapté avec la charte graphique du site sisaweb
Nous avons intégrer un nouveau système de menu plus ergonomique. Voici des aperçus de la
nouvelle interface
Gamelin Antoine
Page : 31/47
Rapport de stage SISA
Année : 2013
Figure 23: Aperçu de l'interface adapté à la charte graphique de SISA
4.3.6. Les fonctionnalités
Le site est toujours en cours de développement, les fonctionnalités actuellement disponible sont :
-
La sécurisation de l'interface avec un login et un password
Gamelin Antoine
Page : 32/47
Rapport de stage SISA
Année : 2013
Figure 24: Interface de connexion
-
La gestion des contacts avec une fonction de recherche, d'ajout, de modification & de
suppression
Figure 25: Interface de gestion des contacts
Gamelin Antoine
Page : 33/47
Rapport de stage SISA
-
Année : 2013
La rédaction des emails avec un système WYSIWYG (Redactor JS)
Figure 26: Interface d'emailing
4.3.7. Les futurs ajouts
Afin de rendre le système de newsletter fonctionnel, il reste :
•
La gestion de l'envoi de mail
•
La gestion des droits des utilisateurs (Visualiser les contacts, Importer / Exporter des
contacts , l'envoi de mail …)
•
Un système de logs (Lors de l'envoi de mail, d'import de contacts …)
•
La création d'un système d'historique des mails (Enregistrement des versions)
Gamelin Antoine
Page : 34/47
Rapport de stage SISA
5.
Année : 2013
Bilan
5.1. Difficultés rencontrées
La principale difficulté rencontrée lors de mon stage, c'était la notion de la Business Intelligence.
Cela m'a amené à réaliser une étude sur le fonctionnement de celle-ci.
J'ai rencontré également un problème lors de la mise en production du projet « Mise en place
d'un dispositif d'enquête en ligne » et ceci à cause de l'absence d'un cahier des charges technique et
le nombre de modifications demandé par le client.
5.2. Apports de ce stage
Ce stage m'a permis à être plus autonome.
J'ai eu la possibilité d'approfondir la programmation orientée objet en PHP et également
l'utilisation du framework CodeIgniter. Très utile pour le travail de groupe ou pour les petits projets.
L'apprentissage du modèle MVC (Modèle Views Controller).
Une découverte du métier des chargés d'études grâce à l'étude et l'utilisation de différents outils
afférant à la Business Intelligence.
Pour conclure, ce stage m'a permis de mettre en pratique les connaissances acquises lors de mes
deux années à l'IUT, l'utilisation des frameworks, la programmation orientée objet ainsi que
plusieurs langages et base de données.
Gamelin Antoine
Page : 35/47
Rapport de stage SISA
6.
Année : 2013
Glossaire
AJAX (Asynchronous JavaScript And XML)
L' AJAX permet l'actualisation de certaines données d'une page sans procéder au
rechargement total de cette page.
Back Office :
Une application de back-office est la partie d'un système informatique qui n'est
pas accessible aux utilisateurs finaux ou aux clients, par opposition à une
application de front office. Une traduction possible de back-office est arrièreboutique, service d'appui, ou encore arrière-guichet.
Business Intelligence :
L’informatique décisionnelle (en anglais : BI pour Business Intelligence1) est
l'informatique à l'usage des décideurs et des dirigeants des entreprises. Elle
désigne les moyens, les outils et les méthodes qui permettent de collecter,
consolider, modéliser et restituer les données, matérielles ou immatérielles,
d'une entreprise en vue d'offrir une aide à la décision et de permettre à un
décideur d’avoir une vue d’ensemble de l’activité traitée.
CSS (Cascading Style Sheets: feuilles de style en cascade)
Le CSS est apparu en 1996, il permet de mettre en forme des fichiers HTML,
c'est à dire de définir les couleurs, les positions des différents blocs ... Ce
langage est un complément du langage HTML. Ce langage est un langage
interprếté par le client.
Data-warehouse : (Entrepôt de Données)
Base de données regroupant, sur un serveur dédié, l'ensemble des données de
l'entreprise qui sont utilisées par des applications décisionnelles
Datamart :
Base de données destinée à l'analyse, comportant des données agrégées et
modélisées en dimensions et indicateurs. L'objectif d'un datamart est d'offrir à
ses utilisateurs un temps de réponse optimal pour leur besoin analytique.
Techniquement, un DM peut être sous forme relationnelle (étoile, flocon) ou
multidimensionnelle (hypercube). Dans le premier cas, il est généralement
hébergé sur la même base de donnée physique que le Datawarehouse dont il est
issu, et avec lequel il partage un certain nombre de tables
Gamelin Antoine
Page : 36/47
Rapport de stage SISA
Année : 2013
ETL, (Extraction, Transformation, Loading)
ETL est un système de chargement de données depuis les différentes sources
d'information de l'entreprise (hétérogènes) jusqu'à l'entrepôt de données
(modèles multidimensionnels). Ce système ne se contente pas de charger les
données, il doit les faire passer par un tas de moulinettes pour les dé-normaliser,
les nettoyer, les contextualiser, puis de les charger de la façon adéquate.
Framework
Un framework est une bibliothèque contenant plusieurs fonctions permettant de
simplifier le code. Il existe des frameworks pour php (Code Igniter, Yii ...),
d'autre pour le javascript (Angular Js …)
Github :
GitHub est un service web d'hébergement et de gestion de développement de
logiciels, utilisant le programme Git, qui est un logiciel de gestion de versions
décentralisé. GitHub propose des comptes professionnels payants, ainsi que des
comptes gratuits pour les projets de logiciels libres.
La licence GPL (GNU General Public License),
Créée en 1989, est utilisée par la plus grande partie des pro jets Op en Source.
Elle p ermet de consulter, mo dier et redistribuer le travail mais il est interdit de
rediuser le pro duit à des ns commerciales. Dans le cadre d'une redistribution, il
faut imp érativement fournir le code source (c'est la condition CopyLeft).
La licence LGPL(Lesser GNU General Public License)
Créée en 1991 dans le but d'offrir une licence moins restrictive que la GPL.
Cette licence n'a plus la notion de CopyLeft, il est donc possible de fusionner un
logiciel propriétaire avec un logiciel LGPL sans garder la licence LGPL.
Cependant si un utilisateur veut modier le code source sous LGPL, il devra le
redistribuer sous cette même licence.
HTML (HyperText Markup Language)
Le HTML est un langage informatique orienté WEB inventé en 1990 par un
scientifique nommé Tim Berners-Lee (Informaticien dans un centre de
recherche). Ce langage permet de mettre en forme le contenu des pages,
d'inclure des images, vidéos d'un site web.
IDE(Integrated Development Environment : Environnement de développement)
Il existe de nombreux IDE, ces logiciels permettent de proposer une interface
plus agréable pour le développeur.
Gamelin Antoine
Page : 37/47
Rapport de stage SISA
Année : 2013
Javascript
Le javascript est un langage orienté Web créé en 1995 par Brendan Eich. Ce
langage permet de créer des interractions avec le clients . Par exemple, il permet
d'actualisé le contenu d'une page en cliquant sur un bouton, vérifier si les
champs des formulaires sont correctement rempli. Ou encore afficher l'heure sur
le site qui s'actualise (se met à jour) toutes les minutes.
Jquery
Le Jquery est un framework Javascript disposant de nombreuses fonctions
permettant de simplifier le code Javascript. Il permet aussi l'implémentation de
script AJAX. Ce langage a été créé par John Resig en 2006.
JSON (JavaScript Object Notation)
Le JSON est un format de données textuelles permettant de représenter de
représenter de l'information structurée.
Linux :
Linux ou GNU/Linux est un système d'exploitation libre fonctionnant avec
le noyau Linux. Ce système est né de la rencontre entre le mouvement
du logiciel libre et le modèle de développementcollaboratif et décentralisé
via Internet. Son nom vient du créateur du noyau Linux, Linus Torvalds.
MDX (MultiDimensional Expressions)
MDX est un langage de requête créé pour manipuler les données
multidimensionnelles provenant d'un moteur OLAP.
MySQL :
MySQL est un système de gestion de base de données (SGBD). Il est distribué
sous une double licence GPL et propriétaire. Il fait partie des logiciels de gestion
de base de données les plus utilisés au monde1, autant par le grand public
(applications web principalement) que par des professionnels.
Navigateur Internet
Un navigateur est un logiciel permettant se connecter à Internet, par exemple
Internet Explorer, Opera, Firefox, Google Chrome …
OLAP (Online Analytical Processing : Traitement Analytique en ligne)
Le but de l'OLAP est de permettre une analyse multidimensionnelle sur des
bases de données volumineuses afin de mettre en évidence une analyse
particulière des données.
Gamelin Antoine
Page : 38/47
Rapport de stage SISA
Année : 2013
PHP (Personnal Home Page ou Hypertext Preprocessor: acronyme récursif)
PHP est un lanage de programmation orienté Web, il a été créé en 1994 par
Rasmus
Lerdorf . Ce langage permet de créer des pages Web interractive. Ce
langage peut être relié par exemple à une base de données, récupérer les
réponses d'un formulaire ou encore envoyer des mails.
POO :
La programmation orientée objet (POO), ou programmation par objet, est un
paradigme de programmation informatique.
Il consiste en la définition et l'interaction de briques logicielles appelées objets ;
un objet représente un concept, une idée ou toute entité du monde physique,
comme une voiture, une personne ou encore une page d'un livre. Il possède une
structure interne et un comportement, et il sait communiquer avec ses pairs. Il
s'agit donc de représenter ces objets et leurs relations ; la communication entre
les objets via leurs relations permet de réaliser les fonctionnalités attendues, de
résoudre le ou les problèmes.
PostgreSQL :
PostgreSQL est un système de gestion de base de données relationnelle et objet
(SGBDRO). C'est un outil libre disponible selon les termes d'une licence de type
BSD.
Ce système est concurrent d'autres systèmes de gestion de base de données,
qu'ils soient libres (comme MySQL et Firebird), ou propriétaires (comme
Oracle, Sybase, DB2, Informix et Microsoft SQL Server). Comme les projets
libres Apache et Linux, PostgreSQL n'est pas contrôlé par une seule entreprise,
mais est fondé sur une communauté mondiale de développeurs et d'entreprises.
Reporting :
Les outils de reporting proposent la réalisation de rapports selon un format
prédéterminé. Les bases de données sont interrogées selon les requêtes SQL
préparées lors de l'élaboration du modèle.
Responsive Web Design :
La notion de Responsive Web Design regroupe différents principes et
technologies dont le but est que l’utilisateur peut ainsi consulter le même site
Web à travers une large gamme d'appareils (moniteurs d'ordinateur,
smartphones, tablettes, TV, etc.).
Saiku :
Saiku est un logiciel open-source modulable qui permet d’effectuer une analyse
très rapide sur une architecture de type OLAP. Il permet d’avoir une
visualisation des données sous forme de tableau ou graphiques.
Gamelin Antoine
Page : 39/47
Rapport de stage SISA
Année : 2013
SGBDR (Système de gestion de base de données Relationnelle)
Il existe plusieurs SGBD mais les plus utilisées pour le développement Web sont
le MySQL ou le PostgreSQL.
Un SGBD contient plusieurs base base de données afin de stocker différentes
données.
SQL (Structured Query Language)
Le SQL est un langage permettant d’interagir avec une base de données en
envoyant des requêtes.
Système d’exploitation :
En informatique, un système d'exploitation (souvent appelé OS pour Operating
System, le terme anglophone) est un ensemble de programmes qui dirige
l'utilisation des capacités d'un ordinateur par des logiciels applicatifs.
XML (Extensible Markup Language)
XML est un langage informatique qui sert à enregistrer des données textuelles.
Contrairement à l'HTML qui présente un nombre finit de balises, le XML donne
la possibilité de créer de nouvelles balises à volonté.
Web 2.0 :
Le Web 2.0 est l'évolution du Web vers plus de simplicité (ne nécessitant pas de
connaissances techniques ni informatiques pour les utilisateurs) et d'interactivité
(permettant à chacun, de façon individuelle ou collective, de contribuer,
d'échanger et de collaborer sous différentes formes).
Gamelin Antoine
Page : 40/47
Rapport de stage SISA
7.
Année : 2013
Bibliographie
Ressources pour l'étude bibliographique de la Business Intelligence
•
Présentation de la BI
Commentçamarche.net:http://www.commentcamarche.net/contents/307-informatiquedecisionnelle-business-intelligence
Developpez.com:http://business-intelligence.developpez.com/tutoriels/presentationpentaho/
•
Les services proposant une application Business Intelligence
Enterpriseappstoday:http://www.enterpriseappstoday.com/business-intelligence/gartners2012-magic-quadrant-do-business-intelligence-vendors-lack-vision.html)
•
Les coûts d'une application business intelligence
PDF : Lowering the Cost of Business - Intelligence With Open Source (de Third Nature)
Autres ressources
•
Framework
PDF :Frameworks PHP MVC pour l'entreprise (de Clever Age)
SiteDuZero : http://siteduzero.com/
•
Glossaire
Wikipedia : http://wikipedia.org/
Gamelin Antoine
Page : 41/47
Rapport de stage SISA
Année : 2013
Annexe
Code PHP utilisant le modèle MVC (Utilisé dans le projet n°2)
Modèle
<?php
1. class InsertResult {
2.
protected $_values = array();
3.
protected $_titreChamp = array();
4.
protected $_nomTable;
5.
6.
public function __construct($values, $table, $exclus="fin") {
7.
$i = 0;
8.
foreach($values as $keys => $value) {
9.
10.
if(!empty($value) && $keys != $exclus && $keys != "finForm" && !
preg_match("/^M/",$keys) ) {
11.
12.
/*Dans le cas de choix ordonnés */
13.
if(preg_match("/^o/",$keys))
14.
{
15.
$res = "";
16.
for($j = 1; $j<=count($_POST[$keys]); $j++) {
17.
$k = 1;
18.
foreach($_POST[$keys] as $value) {
19.
20.
if($j == $value) {
21.
$res .= $k."/";
22.
break;
23.
}
24.
$k++;
25.
}
26.
if($k == count($_POST[$keys])+1){
27.
$res .= " /";
28.
}
29.
}
30.
$keys = substr($keys, 1);
31.
$value = substr($res, 0, -1);
32.
33.
}
34.
/* Dans le cas ou c'est un choix multiple */
35.
else if(preg_match("/^c/",$keys)) {
36.
$keys = substr($keys, 1);
37.
$value = implode('/',$value);
38.
}
39.
40.
/*Dans le cas de liste ordonnée vide */
41.
if(!empty($value)) {
42.
43.
if($i == 0)
44.
{
45.
$this->_titreChamp[$i] = $keys;
46.
$this->_values[$i] =
"'".htmlspecialchars(addslashes($value))."'";
47.
$i++;
48.
}
49.
else
50.
{
51.
if($this->_titreChamp[$i-1] != $keys) {
52.
$this->_titreChamp[$i] = $keys;
53.
$this->_values[$i] =
"'".htmlspecialchars(addslashes($value))."'";
54.
$i++;
Gamelin Antoine
Page : 42/47
Rapport de stage SISA
Année : 2013
55.
}
56.
}
57.
58.
59.
}
60.
61.
}
62.
63.
}
64.
$this->_nomTable = $table;
65.
}
66.
67.
public function haveAlreadyAnswer($numClient)
68.
{
69.
$req = "SELECT COUNT(*) as bool FROM ".$this->_nomTable." WHERE num_client =
".intval($numClient);
70.
$exec = Connexion::bdd()->query($req);
71.
$result = $exec->fetch();
72.
if($result['bool'] == 1) {
73.
return true;
74.
} else {
75.
return false;
76.
}
77.
78.
79.
}
80.
81.
82.
public function updateData($numClient) {
83.
84.
$req = "UPDATE ".$this->_nomTable." SET ";
85.
for($i = 0; $i<count($this->_values); $i++) {
86.
$req .= $this->_titreChamp[$i].' = '.$this->_values[$i].', ';
87.
}
88.
$req = substr($req, 0, -2); //Permet de retirer la dernière virgule
89.
$req .= ' WHERE num_client = '.intval($numClient);
90.
91.
try {
92.
93.
Connexion::bdd()->exec($req);
94.
return "pdb"; //On retourne qu'il n'y a pas de problème
95.
96.
}catch (Exception $e) {
97.
98.
return 'Erreur reçue : '. $e->getMessage() ."\n"; // On retourne
l'erreur de la modification
99.
}
100.
101.
}
102.
103.
public function addResult($numClient) {
104.
105.
$allTitle = "num_client, ";
106.
$allValue = $numClient.', ';
107.
108.
foreach($this->_values as $value)
109.
{
110.
$allValue .= $value.', ';
111.
}
112.
113.
foreach($this->_titreChamp as $value)
114.
{
115.
$allTitle .= $value.', ';
116.
}
117.
118.
$allTitle = substr($allTitle, 0, -2); //Permet de retirer la dernière virgule
119.
$allValue = substr($allValue, 0, -2); //Permet de retirer la dernière virgule
120.
121.
$reqAjout = "INSERT INTO ".$this->_nomTable."(".$allTitle.") VALUES(".
Gamelin Antoine
Page : 43/47
Rapport de stage SISA
Année : 2013
$allValue.")";
122.
123.
try {
124.
Connexion::bdd()->exec($reqAjout);
125.
return "pdb"; //On retourne qu'il n'y a pas de problème
126.
}catch (Exception $e) {
127.
return 'Erreur reçue : '. $e->getMessage() ."\n"; // On retourne
l'erreur d'ajout
128.
}
129.
130.
131.
}
132.
public function submitEnq($numClient) {
133.
134.
if($this->haveAlreadyAnswer(intval($numClient))) {
135.
return $this->updateData($numClient);
136.
} else {
137.
return $this->addResult($numClient);
138.
}
139.
140.
}
141.
public function stopAcces($numClient, $type) {
142.
143.
$sql = "UPDATE clients SET reponse = 1, date_reponse = now() WHERE num_client
=".intval($numClient);
144.
try {
145.
Connexion::bdd()->exec($sql);
146.
}catch (Exception $e) {
147.
return 'Erreur reçue : '. $e->getMessage() ."\n";
148.
}
149.
unset($sql);
150.
151.
if(htmlentities(strtolower($type)) != 'consommateur') { return "pdb"; } //On ne
change pas l'accès aux gens qui ne sont pas consommateur
152.
153.
$sql = "UPDATE login SET acces = 0 WHERE num_client =".intval($numClient);
154.
try {
155.
Connexion::bdd()->exec($sql);
156.
return "pdb";
157.
}catch (Exception $e) {
158.
return 'Erreur reçue : '. $e->getMessage() ."\n";
159.
}
160.
161.
}
162.
163.}
164.?>
Controleurs
<?php
include("class/User.class.php");
include("class/InsertResult.class.php");
if(isset($_GET['login']) && isset($_GET['password']) && isset($_GET['tic'])) {
$user = new User($_GET['login'], $_GET['password']);
$user->setTic($_GET['tic']);
/* Identifiant de connexion incorrect */
if(!$user->canDoEnq($_GET['login'], $_GET['password'], $_GET['tic']))
{
header('location: index.php?page=identification');
exit();
}
else
{
$user->connexion();
}
} else if(!Session::isLogged()) {
//Dans le cas ou le client n'est pas connecté
Gamelin Antoine
Page : 44/47
Rapport de stage SISA
Année : 2013
header('location: index.php?page=identification');
}
if(isset($_POST['finSignaletique'])) {
$ajout = new InsertResult($_POST,"signaletique", 'finSignaletique');
$result = $ajout->submitEnq($_SESSION['numUser']);
/*Fin de création */
if($result == "pdb") {
if($_POST["Q7"] != 1) {
echo "OUT SCREEN";
include("delSess.php");
}
else if($_POST["Q10"] == 1)
{
header("location: index.php?page=dressing");
}
else if($_POST["Q10"] == 2)
{
if($_POST["Q11"] == 1) {
header("location: index.php?page=intention");
}
else {
echo "OUT SCREEN";
include("delSess.php");
}
}
}
else {
echo $result;
}
}
?>
Views
<?php include("controlers/signaletique.controlers.php"); ?>
<HTML>
<HEAD>
<meta http-equiv="pragma" content="no-cache">
<meta charset="utf-8">
<TITLE><?php echo $infoPage->getTitlePage(); ?></TITLE>
<noscript>
<font color="red" size="2">
Cette page requiert un navigateur avec support de Javascript.<br />
Votre navigateur ne prend pas en charge Javascript ou le support Javascript est
d&eacute;sactiv&eacute;.<br />
Les contr&ocirc;les de saisie ne seront pas actifs et le formulaire ne pourra pas &ecirc;tre
enregistr&eacute;.<br />
V&eacute;rifiez les options de votre navigateur.
</font>
</noscript>
<SCRIPT name='js_ctl' LANGUAGE='JavaScript' src="js/signaletique.js"></script>
<script src="js/jquery.js" type="text/javascript"></script>
<link rel="stylesheet" href="css/global.css">
<script> $(document).ready(function() {
//$("#" + 'slickbox1').hide();
});
function toggleme(targetId) {
$("#" + 'slickbox' + targetId).toggle(400);
}
function hideme(targetId) {
$("#" + 'slickbox' + targetId).hide(400);
}
function cpIsValid(cp) {
Gamelin Antoine
Page : 45/47
Rapport de stage SISA
Année : 2013
var cp = cp.value;
if(isNaN(parseFloat(cp)) || cp.length < 5){
alert("Code postal incorrect!");
$("#CP").val("");
}
}
</script>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="<?php echo $_SERVER['REQUEST_URI']; ?>" ENCTYPE=application/x-wwwform-urlencoded NAME="fML" ONSUBMIT="return fEnv()">
<input type='hidden' name='ModalisaMP' value='sign'>
<input type='hidden' name='MLST'
value='1t1t1t2p2t2t4ttt1930t1995p3t3t1t9p4t4t5tt80p6t5t4tttt100000p7t6t1t4p8t7t1t3p107t8t1t3p9t9t5tt
5p10t10t4tttt500p11t11t1t2p109t12t1t2p'>
<input type='hidden' name='MLDA' value='0'>
<input type='hidden' name='MLHO' value='0'>
<input type='hidden' name='MLID' value='I'>
<input type='hidden' name='MLIM' value='I'>
<input type='hidden' name='MLTS' value='1'>
<input type='hidden' name='MLNF' value='sign%2EHTM'>
<input type='hidden' name='MLNbSubm'>
<input type='hidden' name='MLTi' value='0'>
<input type='hidden' name='MLNboL' value='0'>
<input type='hidden' name='MLAA' value='A'>
<table align='center' id="contentEnq" width='800'>
<tr>
<td class="titForm">
<?php echo $infoPage->getTitleSign(); ?>
<hr>
</td>
</tr>
<tr>
<td>
<h4><a name="tq1">Vous &ecirc;tes ?</a></h4>
<BLOCKQUOTE>
<INPUT id="Q1_1" TYPE="RADIO" NAME="Q1" VALUE="1" OnClick="tstS(this)"><label for="Q1_1">Une
femme</label><br />
<INPUT id="Q1_2" TYPE="RADIO" NAME="Q1" VALUE="2" OnClick="tstS(this)"><label for="Q1_2">Un
homme</label>
</BLOCKQUOTE>
<h4><a name="tq2">Quelle est votre ann&eacute;e de naissance ? </a>&nbsp;<INPUT TYPE="TEXT"
NAME="Q2" SIZE="5" MAXLENGTH="4" OnChange="tstS(this)"><span class='styleprp'>&nbsp;AAAA, exemple :
1981</span></h4>
<h4><a name="tq3">Quelle est la profession du chef de famille ? </a></h4>
<BLOCKQUOTE>
<INPUT id="Q3_1" TYPE = "RADIO" NAME ="Q3" VALUE = "1"
OnClick="tstS(this);javascript:hideme(1);"><label for="Q3_1">Agriculteur</label><br />
<INPUT id="Q3_2" TYPE = "RADIO" NAME ="Q3" VALUE = "2"
OnClick="tstS(this);javascript:hideme(1);"><label for="Q3_2">Artisan, commer&ccedil;ant</label><br />
<INPUT id="Q3_3" TYPE = "RADIO" NAME ="Q3" VALUE = "3"
OnClick="tstS(this);javascript:hideme(1);"><label for="Q3_3">Profession lib&eacute;rale, cadre
sup&eacute;rieur</label><br />
<INPUT id="Q3_4" TYPE = "RADIO" NAME ="Q3" VALUE = "4"
OnClick="tstS(this);javascript:hideme(1);"><label for="Q3_4">Profession
interm&eacute;diare</label><br />
<INPUT id="Q3_6" TYPE = "RADIO" NAME ="Q3" VALUE = "6"
OnClick="tstS(this);javascript:hideme(1);"><label for="Q3_6">Employé</label><br />
<INPUT id="Q3_7" TYPE = "RADIO" NAME ="Q3" VALUE = "7"
OnClick="tstS(this);javascript:hideme(1);"><label for="Q3_7">Ouvrier</label><br />
<INPUT id="Q3_8" TYPE = "RADIO" NAME ="Q3" VALUE = "8"
OnClick="tstS(this);javascript:hideme(1);"><label for="Q3_8">Retrait&eacute;</label><br />
<INPUT id="Q3_9" TYPE = "RADIO" NAME ="Q3" VALUE = "9"
OnClick="tstS(this);javascript:hideme(1);"><label for="Q3_9">Inactif</label><br />
</BLOCKQUOTE>
<h4><a name="tq4">Quels sont les revenus mensuels du foyer ?</a>&nbsp;<INPUT TYPE="TEXT" NAME="Q4"
SIZE="7" MAXLENGTH="6" OnChange="tstS(this)"><span class='styleprp'>&nbsp;&euro;uros</span></h4>
<h4><a name="tq5">Quel est votre statut marital?</a></h4>
Gamelin Antoine
Page : 46/47
Rapport de stage SISA
Année : 2013
<BLOCKQUOTE>
<INPUT id="Q5_1" TYPE="RADIO" NAME="Q5" VALUE="1" OnClick="tstS(this)"><label
for="Q5_1">C&eacute;libataire</label><br />
<INPUT id="Q5_2" TYPE="RADIO" NAME="Q5" VALUE="2" OnClick="tstS(this)"><label
for="Q5_2">Mari&eacute;(e) ou vivant maritalement</label><br />
<INPUT id="Q5_3" TYPE="RADIO" NAME="Q5" VALUE="3" OnClick="tstS(this)"><label
for="Q5_3">Divorc&eacute;(e)</label><br />
<INPUT id="Q5_4" TYPE="RADIO" NAME="Q5" VALUE="4" OnClick="tstS(this)"><label for="Q5_4">Veuve,
veuf</label>
</BLOCKQUOTE>
<h4><a name="tq6">Vous habitez</a></h4>
<BLOCKQUOTE>
<INPUT id="Q6_1" TYPE="RADIO" NAME="Q6" VALUE="1" OnClick="tstS(this)"><label for="Q6_1">Une
maison</label><br />
<INPUT id="Q6_2" TYPE="RADIO" NAME="Q6" VALUE="2" OnClick="tstS(this)"><label for="Q6_2">Un
appartement</label><br />
<INPUT id="Q6_3" TYPE="RADIO" NAME="Q6" VALUE="3" OnClick="tstS(this)"><label
for="Q6_3">Autre</label>
</BLOCKQUOTE>
<h4><a name="tq7">Vous &ecirc;tes</a></h4>
<BLOCKQUOTE>
<INPUT id="Q7_1" TYPE="RADIO" NAME="Q7" VALUE="1" OnClick="tstS(this)"><label
for="Q7_1">Propri&eacute;taire</label><br />
<INPUT id="Q7_2" TYPE="RADIO" NAME="Q7" VALUE="2" OnClick="tstS(this)"><label
for="Q7_2">Locataire</label><br />
<INPUT id="Q7_3" TYPE="RADIO" NAME="Q7" VALUE="3" OnClick="tstS(this)"><label
for="Q7_3">Autre</label>
</BLOCKQUOTE>
<h4><a name="tq8">Quel est votre code postal ?</a>&nbsp;<INPUT TYPE="TEXT" id="CP" NAME="Q8"
SIZE="5" MAXLENGTH="5" OnChange="tstS(this);cpIsValid(this)"></h4>
<h4><a name="tq9">Merci d'indiquer la taille de la chambre parentale ? </a>&nbsp;<INPUT
TYPE="TEXT" NAME="Q9" SIZE="4" MAXLENGTH="3" OnChange="tstS(this)"><span
class='styleprp'>&nbsp;m<sup>2</sup></span></a></h4>
<h4><a name="tq10">Poss&eacute;dez-vous un dressing ? </a></h4>
<BLOCKQUOTE>
<INPUT id="Q10_1" TYPE="RADIO" NAME="Q10" VALUE="1"
OnClick="tstS(this);javascript:hideme(2);"><label for="Q10_1">Oui</label><br />
<INPUT id="Q10_2" TYPE="RADIO" NAME="Q10" VALUE="2"
OnClick="tstS(this);javascript:toggleme(2);"><label for="Q10_2">Non</label>
</BLOCKQUOTE>
<BLOCKQUOTE>
<div id="slickbox2" style="display:none">
<P style="width:600px">
<h4><a name="tq11">Avez-vous l'intention d'en acheter un dans les 3 prochaines
ann&eacute;es ?</a></h4>
<BLOCKQUOTE>
<INPUT id="Q11_1" TYPE="RADIO" NAME="Q11" VALUE="1" OnClick="tstS(this)"><label
for="Q11_1">Oui</label><br />
<INPUT id="Q11_2" TYPE="RADIO" NAME="Q11" VALUE="2" OnClick="tstS(this)"><label
for="Q11_2">Non</label>
</BLOCKQUOTE>
</div>
</BLOCKQUOTE>
<tr>
<td align='center'>
<hr>
<input type='hidden' name='MLZZ' value='Z'><INPUT TYPE="SUBMIT" name="finSignaletique"
VALUE=" Suivant "><br /><br /><br />
</td>
</tr>
</td>
</tr>
</table>
</FORM>
</BODY>
</HTML>
Gamelin Antoine
Page : 47/47