47
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

Rapport de stage De la programmation orienté objet et …antoinegamelin.fr/realisation/sisa/rapport.pdf · Université du littoral IUT Calais-Boulogne Rue Louis David – 62 100

Embed Size (px)

Citation preview

Université du littoral IUT Calais-BoulogneRue Louis David – 62 100 Calais

SISA SARL6 Rue Jean Jaures62100 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/13Date 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 conclusionAjout 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ères1.Introduction.......................................................................................................................................7

1.1.But du document........................................................................................................................71.2.Contexte.....................................................................................................................................71.3.Besoins de l'entreprise...............................................................................................................71.4.Contenu du document................................................................................................................7

2.Présentation de l'entreprise................................................................................................................82.1.Présentation générale.................................................................................................................82.2.Les secteurs d'activités...............................................................................................................82.3.Politique et orientations technologiques de l'entreprise.............................................................9

3.Présentation des projets...................................................................................................................113.1.Projet n°1 : Implémentation des services autour d'une application de Business Intelligence. 113.2.Projet n°2: Mise en place d'un dispositif d'enquête en ligne....................................................113.3.Projet n°3 : Mise en place d'un nouveau système de newsletter..............................................113.4.Méthodologie...........................................................................................................................123.5.Planning ..................................................................................................................................12

4.Travaux réalisés...............................................................................................................................134.1.Projet n°1 : Implémentation des services autour d'une application de Business Intelligence 134.2.Projet n°2: Mise en place d'un dispositif d'enquête en ligne...................................................214.3.Projet n°3 : Mise en place d'un nouveau système de newsletter..............................................26

5.Bilan................................................................................................................................................355.1.Difficultés rencontrées.............................................................................................................355.2.Apports de ce stage..................................................................................................................35

6.Glossaire..........................................................................................................................................367.Bibliographie...................................................................................................................................41

Index des illustrationsFigure 1: Comparaison Web 1.0 et Web 2.0.......................................................................................10Figure 2: Fonctionnement de la BI.....................................................................................................14Figure 3: Modèle en étoile..................................................................................................................15Figure 4: Modèle en flocon................................................................................................................15Figure 5: Société proposant des services BI.......................................................................................16Figure 6: Prix d'implémentation d'un service BI................................................................................16Figure 7: Nombre de personnes pouvant intervenir sur la solution de BI..........................................17Figure 8: Aperçu de l'interface de pentaho.........................................................................................18Figure 9: Aperçu de l'interface de Talend...........................................................................................18Figure 10: Aperçu de l'interface de Saiku...........................................................................................19Figure 11: Aperçu de l'interface de C-Tools.......................................................................................19Figure 12: Aperçu d'un tableau de bord..............................................................................................19Figure 13: Aperçu des fonctionnalités de Modalisa...........................................................................21Figure 14: Aperçu de l'interface de Geany.........................................................................................22Figure 15: Aperçu d'une enquête réalisée...........................................................................................23Figure 16: Aperçu de la gestion des scénarios....................................................................................24Figure 17: Aperçu des statistiques du backoffice...............................................................................24Figure 18: Aperçu de la tendance des recherches de framework sur google......................................25Figure 19: Aperçu de l'interface d'import de fichier (ancien site)......................................................27Figure 20 : Aperçu de l'interface d'e-mailing (ancienne version) ......................................................28Figure 21: MCD de la nouvelle base d'emailing................................................................................29Figure 22: Aperçu de la template responsive de base.........................................................................30Figure 23: Aperçu de l'interface adapté à la charte graphique de SISA.............................................31Figure 24: Interface de connexion......................................................................................................32Figure 25: Interface de gestion des contacts.......................................................................................32Figure 26: Interface d'emailing...........................................................................................................33

Rapport de stage SISA Année : 2013

1. 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 Année : 2013

2. 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.

Gamelin Antoine Page : 10/47

Figure 1: Comparaison Web 1.0 et Web 2.0

Rapport de stage SISA Année : 2013

3. 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 TâchesDu 8 avril au 22 avril - 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 Année : 2013

4. 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

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

Figure 2: Fonctionnement de la BI

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 %.

Qui propose une application Business Intelligence

Gamelin Antoine Page : 15/47

Figure 3: Modèle en étoile Figure 4: Modèle en flocon

Rapport de stage SISA Année : 2013

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

Gamelin Antoine Page : 16/47

Figure 5: Société proposant des services BI

Figure 6: Prix d'implémentation d'un service BI

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)

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

Figure 7: Nombre de personnes pouvant intervenir sur la solution de BI

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.

Gamelin Antoine Page : 19/47

Figure 8: Aperçu de l'interface de pentaho

Figure 9: Aperçu de l'interface de Talend

Rapport de stage SISA Année : 2013

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

Gamelin Antoine Page : 20/47

Figure 11: Aperçu de l'interface de C-Tools

Figure 12: Aperçu d'un tableau de bord

Figure 10: Aperçu de l'interface de Saiku

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.

Gamelin Antoine Page : 22/47

Figure 13: Aperçu des fonctionnalités de Modalisa

Rapport de stage SISA Année : 2013

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

Figure 14: Aperçu de l'interface de Geany

Rapport de stage SISA Année : 2013

4.2.4. Aperçus

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

Figure 15: Aperçu d'une enquête réalisée

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.

Dans le back-office j'ai adapté les statistiques selon les profils des répondants à l'enquête.

Gamelin Antoine Page : 25/47

Figure 16: Aperçu de la gestion des scénarios

Figure 17: Aperçu des statistiques du backoffice

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

Gamelin Antoine Page : 26/47

Figure 18: Aperçu de la tendance des recherches de framework sur google

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.

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

Figure 19: Aperçu de l'interface d'import de fichier (ancien site)

Rapport de stage SISA Année : 2013

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

Figure 20 : Aperçu de l'interface d'e-mailing (ancienne version)

Rapport de stage SISA Année : 2013

4.3.4. Analyse et conception de la nouvelle base de donnée

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

Figure 21: MCD de la nouvelle base d'emailing

Rapport de stage SISA Année : 2013

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

Figure 22: Aperçu de la template responsive de base

Rapport de stage SISA Année : 2013

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

Figure 23: Aperçu de l'interface adapté à la charte graphique de SISA

Rapport de stage SISA Année : 2013

- La gestion des contacts avec une fonction de recherche, d'ajout, de modification & de

suppression

Gamelin Antoine Page : 33/47

Figure 24: Interface de connexion

Figure 25: Interface de gestion des contacts

Rapport de stage SISA Année : 2013

- La rédaction des emails avec un système WYSIWYG (Redactor JS)

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

Figure 26: Interface d'emailing

Rapport de stage SISA Année : 2013

5. 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 Année : 2013

6. GlossaireAJAX (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ère-boutique, 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.

FrameworkUn 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

JavascriptLe 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 InternetUn 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 Année : 2013

7. Bibliographie

Ressources pour l'étude bibliographique de la Business Intelligence

• Présentation de la BI

Commentçamarche.net:http://www.commentcamarche.net/contents/307-informatique-

decisionnelle-business-intelligence

Developpez.com:http://business-intelligence.developpez.com/tutoriels/presentation-

pentaho/

• Les services proposant une application Business Intelligence

Enterpriseappstoday:http://www.enterpriseappstoday.com/business-intelligence/gartners-

2012-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

AnnexeCode PHP utilisant le modèle MVC (Utilisé dans le projet n°2)

Modèle<?php1. 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 virgule89. $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 modification99. }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 virgule119. $allValue = substr($allValue, 0, -2); //Permet de retirer la dernière virgule120.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'ajout128. }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 consommateur152.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 <?phpinclude("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-www-

form-urlencoded NAME="fML" ONSUBMIT="return fEnv()"> <input type='hidden' name='ModalisaMP' value='sign'> <input type='hidden' name='MLST'

value='1t1t1t2p2t2t4ttt1930t1995p3t3t1t9p4t4t5tt80p6t5t4tttt100000p7t6t1t4p8t7t1t3p107t8t1t3p9t9t5tt5p10t10t4tttt500p11t11t1t2p109t12t1t2p'>

<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