Vous êtes sur la page 1sur 70

UNIVERSITÉ MOHAMMED V de Rabat

Faculté des Sciences

Département d’Informatique
Filière Licence fondamentale
en Sciences Mathématiques et Informatique

PROJET DE FIN D’ÉTUDES

intitulé :

Réalisation d’un portail web de presse monitoring


Présenté par :
Ibrahima BARRY
soutenu le 30 Juin 2017 devant le Jury

M. Said SLAOUI Professeur à la Faculté des Sciences - Rabat Encadrant


Mme Salma MOULINE Professeur à la Faculté des Sciences - Rabat Examinatrice

Année universitaire 2016-2017


Remerciements

Au terme de ce travail, nous tenons à exprimer notre profonde gratitude et nos sincères
Remerciements à notre encadrant Monsieur SLAOUI Saïd, pour tout le temps
qu’il nous a consacré, ses conseils précieux, et pour la qualité de son suivi durant
toute la période de notre projet.

Nos remerciements vont aussi à Madame MOULINE Salma membre du jury pour
avoir accepté de juger notre travail.

Nous remercions également notre chef de projet Monsieur Issam CHICHAOUI et à


toutes l’équipe au sein de la société ITELSYS.

Nous tenons aussi à remercier vivement tous les membres de jury pour l’honneur
qu’ils nous fonts en acceptant de juger notre travail.

Nos plus vifs remerciements s’adressent aussi à nos chères parents qui nous ont soutenu
et ont placé leur confiance en nous.

Nos remerciements vont enfin à toute personne qui a contribué de près ou de loin à
l’élaboration de ce travail.

i
Table des matières

Remerciements i

Introduction vi

1 Contexte général du projet 1


1.1 Présentation de l’organisme d’accueil ITELSYS . . . . . . . . . . . . . . 1
1.1.1 Savoir-faire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Présentation globale du projet . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 Contexte du projet . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Objectif visé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Analyse et conception 6
2.1 Règles de gestion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Diagrammes UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 Diagrammes de cas d’utilisation . . . . . . . . . . . . . . . . . . . 7
2.2.2 Diagramme de séquence . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.3 Diagramme de classe . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 Modèle logique de données . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.1 Authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.2 Administration du portail . . . . . . . . . . . . . . . . . . . . . . 16
2.4.3 Interface utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4.4 Administration du client . . . . . . . . . . . . . . . . . . . . . . . 18

3 Réalisation du projet 19
3.1 Outils et technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1.1 Langages utilisés . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.2 Exemple de framework PHP . . . . . . . . . . . . . . . . . . . . . 20
3.2.3 Choix du framework . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.4 Framework LARAVEL . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Moteur de recherche Solr . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3.2 Caractéristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

ii
4 Démonstration 32
4.1 Ajouter un client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2 Liste des clients ajoutés . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3 Profil du client ajouté . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4 Tableau de bord administration client . . . . . . . . . . . . . . . . . . . . 35
4.5 Ajout d’un groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.6 Ajout d’un utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Annexe 40

iii
Table des figures

1.2.1 Processus d’accès au portail . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2.1 Diagramme de cas d’utilisation des clients . . . . . . . . . . . . . . . . . 8


2.2.2 Diagramme de cas d’utilisation de l’administrateur du portail . . . . . . 9
2.2.3 Diagramme de séquence d’accès au portail . . . . . . . . . . . . . . . . . 10
2.2.4 Diagramme de classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.1 Modèle logique de données . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4.1 Authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.2 Tableau de bord administration . . . . . . . . . . . . . . . . . . . . . . . 16
2.4.3 interface utilisateurt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4.4 Tableau de bord administration client . . . . . . . . . . . . . . . . . . . . 18

3.2.1 Evolution de l’intérêt pour cette recherche. Source : Google Trends . . . . 21


3.2.2 Intérêt par région. Source : Google Trends . . . . . . . . . . . . . . . . . 21
3.2.3 Structure du projet Sublime Text . . . . . . . . . . . . . . . . . . . . . . 22
3.2.4 Arborescence Modèle Sublime Text . . . . . . . . . . . . . . . . . . . . . 23
3.2.5 Arborescence Vues Sublime Text . . . . . . . . . . . . . . . . . . . . . . 24
3.2.6 Arborescence Controlleurs Sublime Text . . . . . . . . . . . . . . . . . . 24
3.2.7 Arborescence Routes Sublime Text . . . . . . . . . . . . . . . . . . . . . 25
3.2.8 Arborescence Migrations Sublime Text . . . . . . . . . . . . . . . . . . . 27

4.1.1 Ajouter un client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32


4.2.1 Liste des clients créés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3.1 Profil du client ajoutée . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4.1 Tableau de bord administration client . . . . . . . . . . . . . . . . . . . . 35
4.5.1 Ajout d’un groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.6.1 Ajout d’un utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.6.2 La vue template 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.6.3 La vue template 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.6.4 La vue template 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.6.5 La vue template 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.6.6 La vue template 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.6.7 La vue template 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.6.8 Le modèle Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.6.9 Le modèle Keyword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.6.10Le modèle ClientKeyword . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.6.11Le modèle Abonnement . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

iv
4.6.12Le modèle User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.6.13Le modèle Role . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.6.14Le modèle Permission . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.6.15Le modèle PermissionRole . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.6.16Le modèle Newsletter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.6.17LoginController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.6.18RegisterController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.6.19AdminController partie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.6.20AdminController partie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.6.21HomeController partie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.6.22HomeController partie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.6.23HomeController partie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.6.24HomeController partie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.6.25ClientController partie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.6.26ClientController partie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.6.27ClientController partie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.6.28ClientController partie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.6.29ClientController partie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.6.30ClientController partie 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.6.31groupeController partie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.6.32groupeController partie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.6.33UserController partie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.6.34UserController partie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.6.35UserController partie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.6.36UserController partie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

v
Introduction

Ce rapport présente le travail que nous avons effectué en tant que stagiaire en
Développement Informatique au sein de la société ITELSYS.

Il s’est déroulé du 6 Mars 2017 au 06 Juin 2016 , période pendant laquelle nous nous
sommes familiarisé avec un environnement technique.

Le projet réalisé s’est avéré très intéressant et très enrichissant pour notre expérience
professionnelle.

En effet, notre formation s’inscrit précisément dans ce secteur (Développement


Informatique) .

Grace à ce stage, nous avons travaillé sur un projet qui nous a permis d’entrevoir à
quoi consiste la profession de Développeur dans ce secteur d’activité.

Nous vous exposons dans ce rapport en premier lieu la présentation de la société,


Ensuite, nous expliquons les différents aspects de notre travail durant ces quelques mois
et enfin, en conclusion, nous résumons les apports de ce stage.

vi
Chapitre 1

Contexte général du projet

Dans ce chapitre nous allons présenter l’organisme d’accueil et le contexte du projet.

1.1 Présentation de l’organisme d’accueil ITELSYS


ITELSYS est une Entreprise de Services Numériques qui propose une offre globale de
solutions et de services à fortes valeurs ajoutées dans la Gestion du Contenu d’Entreprise
(ECM : Entreprise Content Management).

Sa méthodologie de travail consiste à :

— Comprendre le métier du client et la culture de l’entreprise ;


— Analyser les composants à mettre en oeuvre au regard des fonctionnalités atten-
dues ;
— Apporter les réponses les plus adaptées et les plus opérationnelles ;
— Intégrer les composants dans un système interopérable ;
— Développer des fonctions métiers prenant en compte l’existant ;
— Mettre en ¡uvre une architecture cohérente et sécurisée.

1.1.1 Savoir-faire
Business Process Management (BPM)
L’efficacité avec laquelle, une entreprise exécute ses processus détermine souvent
son succès, c’est pourquoi la maîtrise des processus est devenue primordiale pour toute
organisation. Néanmoins, un grand nombre d’entre elles continuent encore à manipuler
des dossiers papier pour partager des informations ou coordonner des actions liées à
leurs processus métiers, ce qui affecte l’efficacité des collaborateurs et le service rendu
aux clients.

Grâce au BPM, l’entreprise formalise ses processus et obtient les résultats suivants :
1. Visibilité : La description des processus permettra aux collaborateurs au sein
de l’entreprise de mieux comprendre les attentes des clients et d’y contribuer plus

1
efficacement.

2. Agilité : L’automatisation des tâches accélérera l’exécution des processus et


accroîtra la capacité de traitement des équipes.

3. Traçabilité : La mise en place d’indicateur de suivi et l’historique des opérations


(qui ? quand ? pourquoi ? ) vont permettre au management de mieux suivre l’état
d’avancement des dossiers et surtout d’être en mesure de communiquer sur toute
anomalie ou retard d’exécution.

4. Rentabilité : Le BPM va permettre de mieux utiliser le SI existant tout en


répondant aux nouveaux besoins. Il sera ainsi possible d’adapter les processus à
tout changement organisationnel.

Dématérialisation
La dématérialisation est le remplacement dans une entreprise ou une organisation de
ses supports d’informations matériels (souvent en papier) par des fichiers informatiques
et des ordinateurs, jusqu’à la création de « bureau sans papier » ou « zéro papier »
quand la substitution est complète.

L’un des principaux enjeux de la dématérialisation est de pouvoir assurer le suivi, la


traçabilité et l’automatisation des informations circulant dans l’entreprise sous format
électronique.

Dans ce but, ITELSYS propose des modules sur mesure de partage de l’information
sous n’importe quel format électronique, dans le strict respect des normes fiscales et
juridiques : Classement, circuits de validation « dématérialisés », consultation en ligne,
conservation dans des coffres forts électroniques et échanges sécurisé.

Gestion électronique des documents


Avec la gestion électronique des documents, vous améliorez la gestion, l’accessibilité
et l’exploitation de la totalité de vos fichiers et documents quel que soit leur nature :
numériques ou physiques.

1.1.2 Services
1. ERP (Entreprise Resource Planning)

Un groupe de composantes assemblées autour d’une architecture centrale, unifiée


et modulaire, permettant l’administration et la gestion des principaux services de
l’entreprise.

2
2. ECM (Entreprise Content Management

ITELSYS est également un intégrateur de solutions complètes d’ECM (Entreprise


Content Management), pour but d’améliorer la gestion de l’information tout au
long de son cycle de vie et renforcer l’efficacité des procédures d ?entreprises.

3. BPO Documentaire

Le BPO (Business Process Outsourcing) consiste en l’externalisation d’un


ensemble de prestations intégrées chez un prestataire de services spécialisé, en
vue de réaliser des économies et d’obtenir un meilleur service à la clientèle.

4. CONSEIL

La mise en place d’une solution ECM ne se réduit pas à l’installation et à la


configuration d’un logiciel. En effet, les besoins en matière de gestion de contenu
sont très variés. C’est pour cette raison qu’elle proposons une prestation de conseil
en stratégie ECM, adaptée à chacun de ses clients.

3
1.2 Présentation globale du projet
1.2.1 Contexte du projet
Un Portail Web est défini par Wikipédia comme étant « un site web qui offre une
entrée commune à un large éventail de ressources et de services accessibles sur internet
et centrés sur un domaine d’intérêt ou une communauté particulière ».

Ce projet à été défini par la société ITELSYS afin de mettre en place un portail
web permettant à ses clients d’accéder à des articles de presse papier et numérique de
différentes sources et tout ceci dans un même endroit.

1.2.2 Objectif visé


Le travail demandé a été de développer ce portail qui affichera des articles indexés
par le moteur de recherche Apach-Solr, le fonctionnement et la mise en place sont décrits
par le schéma ci-dessous.

Figure 1.2.1 – Processus d’accès au portail

Le portail est accessible via navigateur.

1. L’utilisateur s’authentifie en renseignant son e-mail et son mot de passe.


2. Le portail redirige la requête vers la base de données.

4
3. La base de données retourne les mots clés de l’utilisateur.
4. Le portail envoi une requête avec les mots clés au serveur Apach-Solr.
5. Le serveur Apach-Solr retourne un filtre des articles indexés qui contiennent ces
mots clés.
6. Le portail affiche les articles de ce filtre à l’utilisateur.

5
Chapitre 2

Analyse et conception

Ce chapitre est l’occasion pour nous de présenter l’analyse et les étapes de conception
du portail, ce qui nous a permis de connaitre les acteurs, les interfaces, les règles de
gestions de notre système ainsi que la manière dont celui-ci devrait fonctionner.

2.1 Règles de gestion


Le cahier des charges nous a permis d’établir des règles de gestions que nous allons
énumérer ci-dessous :

— Un client est caractérisé par un nom, une adresse et un numéro de téléphone,


peut représenter une ou plusieurs personnes.

— Un mot clés est caractérisé par un nom.

— Un ou plusieurs mots clés sont attribués à un client et un mot clé est attribué à
un ou plusieurs clients.

— Un client peut être soit une personne ou un groupe de personnes ( une société,
une association etc... ).

— Un client qui représente un groupe de personnes a un nombre maximal de comptes


utilisateur et un administrateur client issus de ce groupe de personnes pour gérer
et administrer le compte de ce client.

— Ce même client peut contenir un ou plusieurs groupes créé par son administrateur,
et sont attribués à chacun de ces groupes des mots clés issus de la liste des mots
clés de ce client.

— Si le client est un groupe de personnes chaque membre appartient à un et un


seule groupe et plusieurs membres peuvent appartenir à un même groupe.

— Les comptes utilisateurs de ces personnes sont créés par l’administrateur client.

6
— Un client souscrit à un et un seule abonnement renouvelable et un abonnement
correspond à un seule client.

— Un client peut aussi s’abonner à la newsletter, si c’est le cas il recevra des e-mails
quotidiens qui contiennent un condensé des articles avec les mots clés de ce client.

— Un utilisateur du portail caractérisé par un nom, un e-mail unique et un mot de


passe, a un seule rôle et ce rôle peut avoir un ou plusieurs permissions.

— Un rôle avec un nom et une description, peut être attribué à un ou plusieurs


utilisateurs.

— Une permission avec un nom et une description, est associé à un ou plusieurs rôles.

2.2 Diagrammes UML

Le langage de modélisation UML a été adopté tout au long du projet comme langage de
modélisation et de conception. Ce choix est justifier par le fait qu’UML est un langage de
modélisation de plus en plus utilisé grâce à la puissance des outils qu’il offre et l’efficacité
de ces méthodes.

2.2.1 Diagrammes de cas d’utilisation

Le diagramme de cas d’utilisation représente un élément externe qui réagit avec le


système. Cet élément peut être un utilisateur ou un système tiers (ordinateur, base de
données etc...).

7
Figure 2.2.1 – Diagramme de cas d’utilisation des clients

On a deux acteurs dans le diagramme ci-dessus :


L’utilisateur peut :

— Afficher l’intégralité d’un article ;


— Effectuer une recherche sur les articles ;
— Filtrer les articles par source, date et auteur.

L’administrateur client quant à lui peut en plus :

— Ajouter, modifier et supprimer des groupes ;


— Ajouter, modifier et supprimer des comptes utilisateurs.

8
Figure 2.2.2 – Diagramme de cas d’utilisation de l’administrateur du portail

L’administrateur du portail, après son authentification, peut :


— Afficher le tableau de bord ;
— Manipuler les clients, c’est à dire ajouter, modifier, supprimer un client ;
— Gérer les groupes de chaque client (ajouter, modifier, supprimer) ;
— Gérer les comptes utilisateurs des clients (ajouter, modifier, supprimer).

9
2.2.2 Diagramme de séquence
Le diagramme de séquence permet de montrer les interactions des objets dans le
cadre d’un scénario d’un diagramme de cas d’utilisation.

Figure 2.2.3 – Diagramme de séquence d’accès au portail

Le diagramme de séquence ci-dessus présente le fonctionnement général pour accéder


au portail.
— D’abord l’utilisateur saisie son e-mail et son mot de passe.

— Le système envoi les données à la base de données.

— La base de données vérifie si les informations sont correctes et retourne une


réponse au système.

— Si les données entrées sont incorrectes, le système affiche l’interface d’authentifi-


cation à l’utilisateur.

— Dans le cas où les données sont correctes, la base de données retourne les mots
clés de ce utilisateur au système.

10
— Le système ensuite, envoi ces mots clés au moteur de recherche Solr (serveur
Apache-solr ).

— Le moteur de recherche filtre les articles qu’il a indexé en sélectionnant seulement


les articles qui contiennent ces mots clés.

— Ensuite il retourne ces articles au système.

— Le système va afficher l’interface utilisateur qui affiche les articles.

11
2.2.3 Diagramme de classe

Un diagramme de classes UML décrit les structures d’objets et d’informations utilisées


par un système, à la fois en interne et dans la communication avec ses utilisateurs. Il
décrit les informations sans faire référence à une implémentation particulière. Ses classes
et relations peuvent être implémentées de nombreuses manières, comme les tables de
bases de données, les noeuds XML ou encore les compositions d’objets logiciels.

Figure 2.2.4 – Diagramme de classe

La classe keyword

C’est la classe qui contient les mots clés.

12
La classe client
Elle contient les données d’un client, son nom, son nombre de compte, ses coordonnées
, ses utilisateurs, ses groupes, ses mots clés et son abonnement.

La classe abonnement
Présente la date de début et de fin de l’abonnement d’un client.

La classe groupe
Elle contient les information d’un groupe, ses nom, ses mots clés, le client propriétaire
de ce groupe et ses utilisateurs.

La classe user
Cette classe représente un utilisateur.

La classe rôle
Elle définit le rôle d’un utilisateur et elle permet de connaitre tous les utilisateurs qui
ont ce rôle.

La classe permission
C’est la classe qui définit toutes les permission accordé à un rôle, et aussi de s’avoir
les rôles qui ont cette permission.

La classe newsletter
C’est la classe qui contient les clients abonnés à la newsletter.

La classe password reset


Cette classe permet à un utilisateur de modifier son mot de passe en cas d’oublie.

2.3 Modèle logique de données


Bien qu’UML soit destiné à décrire l’organisation d’un système avec une approche
orientée objet (AOO), et non une base de données relationnelle, il peut servir de base à
sa conception en modélisant le domaine fonctionnel (grâce au diagramme de classes).

Grâce au diagramme de classe nous allons définir ce que nous pensons devoir enregis-
trer comme information
Le schéma qui suit représente le configuration logique de notre base de données rela-
tionnelle.

13
Figure 2.3.1 – Modèle logique de données

14
2.4 Interfaces

2.4.1 Authentification

Figure 2.4.1 – Authentification

c’est ici que l’utilisateur saisit son e-mail et son mot de passe pour pouvoir accéder
au portail.
Il a aussi la possibilité de mémoriser son e-mail et mot de passe en cochant la case se
souvenir de moi.
En cas d’oublie de son mot de passe, l’utilisateur peut le réinitialiser en cliquant sur le
lien "Mot de passe oublié ?", il sera ensuite redirigé vers une autre page où il faudra suivre
les instructions.

15
2.4.2 Administration du portail

Figure 2.4.2 – Tableau de bord administration

C’est une interface qui permet à l’administrateur du portail de gérer toutes les
informations relatives à celui-ci. Il devrait pouvoir en premier lieu afficher le tableau de
bord du portail qui contient :

— le nombre de clients ;

— le nombre de comptes utilisateurs ;

— le nombre d’articles indexés sur le serveur Apach-Solr ;

— le nombre de mots clés etc...

L’administrateur du portail peut aussi :

— Afficher la liste des clients.

— Ajouter un client.

— Supprimer ou modifier un client.

— Afficher le profil d’un client où il y aura la liste de ces utilisateurs, ces infor-
mations personnelles, le statut de son abonnement et aussi la liste de ces mots clés.

16
— Afficher la liste de tous les utilisateurs.

— Ajouter un utilisateur.

— Supprimer ou modifier un utilisateur.

2.4.3 Interface utilisateur

Figure 2.4.3 – interface utilisateurt

Après authentification et vérification de la validité de l’abonnement de l’utilisateur,


il pourra accéder à cette interface dans laquelle il pourra consulter les articles qui
contiennent seulement les mots clés qui lui sont attribués.

Cette interface disposera aussi de différents filtres et tris qui s’appliquent sur les
articles et aussi d’une barre de recherche.

17
2.4.4 Administration du client

Figure 2.4.4 – Tableau de bord administration client

Cette interface, accessible par l’administrateur d’un client qui représente un groupe
d’utilisateurs, il y aura un tableau de bord qui donne les statistiques relatives à ce client :

— Nombre de groupes ;

— Nombre de comptes utilisateurs créer ;

— Nombre de comptes utilisateurs maximum ;

— Deux tableaux des différents groupes et comptes utilisateurs créés.

Elle donne aussi à cet administrateur la possibilité de :

— Créer des groupes et de les attribuer des mots clés dans la listes des mots clés de
ce client.

— Supprimer des groupes.

— Créer des comptes utilisateurs et les affecter à ces groupes.

— Supprimer des comptes utilisateurs.

18
Chapitre 3

Réalisation du projet

Dans ce chapitre sont présenté les différents langages de programmation ainsi que
d’autres outils de développement utilisés pour la réalisation du portail I-Media.

3.1 Outils et technologies


3.1.1 Langages utilisés
HTML5
HTML5 (HyperText Markup Langage 5) est la dernière révision majeure d’HTML
(format de données conçu pour la mise en forme du contenu d’une page web). HTML5 spé-
cifie deux syntaxes d’un modèle abstrait défini en termes de DOM : HTML5 et XHTML5.
Le langage comprend également une couche application avec de nombreuses API, ainsi
qu’un algorithme afin de pouvoir traiter les documents à la syntaxe non conforme.

CSS3
(Cascading Style Sheets : feuilles de style en cascade) est utilisé pour la présentation
des documents HTML. Il sépare la structure d’une page web de ses divers styles de
présentation.

JavaScript
Javascript est un langage de script qui est utilisé dans les pages web interactives.
Javascript apporte des améliorations au langage HTML en permettant d’exécuter des
commandes du côté client, c’est-à-dire au niveau du navigateur.

PHP
PHP est un langage de script côté serveur qui a été conçu spécifiquement pour le Web.
Le code PHP est inclus dans une page HTML et sera exécuté à chaque fois qu’un visiteur
affichera la page. Le code PHP est interprété au niveau du serveur web et génère du code
HTML ou tout autre affichable dans le navigateur de l’utilisateur. PHP a été conçu en
1994 par Rasmus Lerdorf.

19
Twitter Bootstrap
Twitter Bootstrap est un Framework de présentation graphique spécialisé dans la
création de sites et d’applications web. C’est un ensemble qui contient des codes HTML
et CSS, des formulaires, boutons, outils de navigation et autres éléments interactifs, ainsi
que des extensions JavaScript en option. C’est l’un des projets les plus populaires sur la
plateforme de gestion de développement GitHub.

JQuery
JQuery est une bibliothèque JavaScript libre qui porte sur l’interaction entre JavaS-
cript (comprenent AJAX) et HTML.

MySQL
MySql est un serveur de base de données relationnelles SQL. C’est un logiciel libre,
open source développé dans un souci de performances élevées en lecture, ce qui signifie
qu’il est davantage orienté vers le service de données déjà en place que vers celui de mises
à jour fréquentes et fortement sécurisées. Il est multi-thread et multi-utilisateur.

3.2 Framework
3.2.1 Définition
Un framework informatique est un ensemble cohérent de composant logiciels structu-
rels, qui sert à créer les fondations ainsi que les grandes lignes de tout ou d’une partie
d’un logiciel.
L’utilité d’un framework est d’éviter de passer du temps à développer ce qui a déjà été
fait par d’autre.

3.2.2 Exemple de framework PHP


Il existe de nombreux framework PHP aussi bien les un des autres, dont les plus
connus sont :
— Laravel
— Symfony
— CodeIgniter
— Zend Framework

3.2.3 Choix du framework


Choisir un framework pour un projet donné peut se révéler assez compliqué lorsque
l’on ne connaît pas l’ensemble des frameworks PHP existants, et plus particulièrement
leurs points forts et leurs différences. Généralement, lorsqu’un développeur en maîtrise
bien un, il en changera assez rarement, et il peut arriver que son choix ne soit pas forcé-
ment adapté à tous ses projets.

20
Figure 3.2.1 – Evolution de l’intérêt pour cette recherche. Source : Google Trends

Figure 3.2.2 – Intérêt par région. Source : Google Trends

21
Pour réaliser ce projet nous avons utilisé le framework Laravel. Ce framework php est
devenu très populaire ces 5 dernières années et sa communauté devient de plus en plus
grande.

3.2.4 Framework LARAVEL


Laravel est un Framework PHP open source qui a été créer Taylor Otwel. Il a été
construit en se basant sur Symfony, un autre Framework PHP qui est reconnu mondia-
lement pour sa robustesse. De fait, il embarque des logiciels testés et approuvé par une
grande communauté permettant d’améliorer la rapidité de développement et la robustesse
de l’application.

Vue de la structure de l’application depuis Sublime Text


Nous présentons ici la structure des dossiers de l’application.
Cette figure montre l’arborescence du projet sous Sublime Text.

Figure 3.2.3 – Structure du projet Sublime Text

En général, un Framework est basé sur la structure MVC.


Le modèle-vue-contrôleur (en abrégé MVC, de l’anglais Model-View-Controller) est un
patron d’architecture et une méthode de conception qui organise l’interface homme-
machine (IHM) d’une application logicielle. Le principe d’une telle structure est de
diviser l’application en 3 parties distinctes :

22
- Les modèles : ils représentent les données de l’application et permettent l’interac-
tion avec la base de données (ou les web services, etc).

Figure 3.2.4 – Arborescence Modèle Sublime Text

- Les vues : ce sont les représentations (les Templates) des résultats de la requête
que l’utilisateur a effectuée.

23
Figure 3.2.5 – Arborescence Vues Sublime Text

- Les contrôleurs : ils interceptent toutes les requêtes faites par les utilisateurs.

Figure 3.2.6 – Arborescence Controlleurs Sublime Text

En bref, le modèle gère la base de données, la vue produit les pages HTML et le
contrôleur fait tout le reste.

24
Système de routage
Laravel intègre en son sein un système de routage. Il permet de créer des chemins
URL qui sont simples et naturelles pour accéder aux différentes fonctionnalités du site
en développement. Par exemple, au lieu d’avoir index.php?article_id=57 comme URL
pour accéder à la page d’un article, on pourrait mettre en place l’URL suivante : /mon
blogs/article/présentation-de-laravel. Le routeur de Laravel permet de définir des URL
créatives, associables à différentes zones de votre application simultanément.

Figure 3.2.7 – Arborescence Routes Sublime Text

Exemple d’application à notre projet

/∗ chemin v e r s l a page d ’ a c c u e i l ∗/

Route : : g e t ( ’ / home ’ , ’ HomeController@index ’ ) ;

/∗ chemin pour a c c é d e r au t a b l e a u de board du p o r t a i l ∗/

Route : : g e t ( ’ / admin/ dashboard ’ , ’ AdminController@index ’ ) ;

/∗ chemin pour mettre à j o u r l e s i n f o r m a t i o n s d ’ un u t i l i s a t e u r ∗/

Route : : p o s t ( ’ / u s e r s / update /{ i d } ’ , ’ U s e r C o n t r o l l e r @ u p d a t e ’ ) ;

ORM
Un mapping objet-relationnel (en anglais object-relational mapping ou ORM) est
une technique de programmation informatique qui définit des correspondances entre une
base de données et les objets du langage utilisé.
L’utilisation de la programmation orientée objet avec une base de données relationnelle
nécessite de convertir les données relationnelles en objets et vice-versa. Ceci conduit à
programmer cette conversion pour chaque objet et donc à dupliquer énormément de
code similaire. C’est donc principalement à ce problème que tente de répondre un ORM.
Laravel comporte en son sein un ORM performant qui s’appelle Eloquent. Pour mapper
convenablement les données de la base de données et les objets implémentés sous Laravel,

25
il faut utiliser ce qu’on appelle le CRUD. CRUD (Create, Read, Update, Delete) désigne
les quatre opérations de base pour la persistance des données, en particulier le stockage
d’informations en base de données. Concrètement, il s’agit de gérer et d’interroger la
base de données directement avec Laravel, dans du code PHP. Un fichier de configuration
permet de paramétrer la connexion à une base de données, c’est tout ce qu’il y’a à faire.
Laravel s’occupera alors de faire ce que vous lui direz.

Exemple d’application à notre projet

/∗ s é l e c t i o n de t o u s l e s u t i l i s a t e u r s ∗/

User : : a l l ( ) ;

/∗ s é l e c t i o n de u t i l i s a t e u r avec l ’ i d é g a l à 1 e t s u p p r e s s i o n ∗/

$ u s e r = User : : f i n d ( 1 ) ;

$ u s e r −>d e l e t e ( ) ;

/∗ Mise à j o u r du nom du p r e m i e r u t i l i s a t e u r a j o u t é ∗/

$ u s e r = User : : f i r s t ( ) ;

$ u s e r −>name = " nouveau nom " ;

$ u s e r −>s a v e ( ) ;

Query builder

Eloquent est efficace mais n’est pas toujours suffisant pour générer toutes les requêtes.
Il est parfois nécessaire de générer des requêtes qui dépassent les possibilités qu’offre cet
outil. Le Query Builder peut alors être utilisé. Il s’agit d’un outil pratique de génération
de requêtes avec une syntaxe explicite, qui est complète les fonctionnalités d’Eloquent.

Exemple d’application à notre projet

/∗ s é l e c t i o n des u t i l i s a t e u r s groupé par i d e t avec l ’ i d s u p é r i e u r à 17 ∗/

$ u s e r = DB : : t a b l e ( ’ u s e r s ’ )
−>groupBy ( ’ user_id ’ )
−>where ( ’ user_id ’ , ’ > ’ , 17 )
−>g e t ( ) ;

26
Système d’authentification
Laravel fournit plusieurs approches différentes pour valider les données entrantes de
votre application provenant de formulaire par exemple. Le contrôle des valeurs qui sont
transmises entre les pages est alors facilité. En effet, plus besoin de coder en dur cette
analyse de conformité des données, qui peut être un processus lourd, rébarbatif, et en
général non exempts de défaut de conception. Laravel propose des méthodes robustes
améliorant ce travail.

Exemple d’application à notre projet

Il suffit d’enter une ligne de commande dans le terminal à la racine du projet pour
créer les controleurs, les vues et les routes pour l’authentification :
php a r t i s a n make : auth

Système de migration pour les bases de données


Laravel propose un outil permettant de créer et de mettre à jour un schéma de base
de données. Toujours dans le même esprit qu’Eloquent et le Query Builder, il s’agit de
centraliser toute la gestion de la base de données au sein de Laravel. Cet outil permet de
prendre en charge tout ce qui concerne la maintenance des tables d’une base de données
(création de tables, de colonnes, d’index, etc.).

Figure 3.2.8 – Arborescence Migrations Sublime Text

27
Exemple d’application à notre projet

/∗ M i g r a t i o n de l a t a b l e u s e r s ∗/

<?php
us e I l l u m i n a t e \ Support \ Facades \Schema ;
us e I l l u m i n a t e \ Database \Schema\ B l u e p r i n t ;
us e I l l u m i n a t e \ Database \ M i g r a t i o n s \ M i g r a t i o n ;

c l a s s CreateUsersTable extends Migration


{
/∗∗
∗ Run th e m i g r a t i o n s .
∗ @return v o i d
∗/
p u b l i c f u n c t i o n up ( )
{
Schema : : c r e a t e ( ’ u s e r s ’ , f u n c t i o n ( B l u e p r i n t $ t a b l e ) {
$ t a b l e −>i n c r e m e n t s ( ’ id ’ ) ;
$ t a b l e −>s t r i n g ( ’ name ’ ) ;
$ t a b l e −>s t r i n g ( ’ email ’)−> unique ( ) ;
$ t a b l e −>s t r i n g ( ’ password ’ ) ;
$ t a b l e −>i n t e g e r ( ’ groupe_id ’)−> u n s i g n e d ( ) ;
$ t a b l e −>i n t e g e r ( ’ r o l e _ i d ’)−> u n s i g n e d ( ) ;
$ t a b l e −>f o r e i g n ( ’ groupe_id ’ )
−>r e f e r e n c e s ( ’ id ’ )
−>on ( ’ groupes ’ )
−>onUpdate ( ’ cascade ’ )
−>o n D e l e t e ( ’ cascade ’ ) ;
$ t a b l e −>f o r e i g n ( ’ r o l e _ i d ’ )
−>r e f e r e n c e s ( ’ id ’ )
−>on ( ’ r o l e s ’ )
−>onUpdate ( ’ cascade ’ )
−>o n D e l e t e ( ’ cascade ’ ) ;
$ t a b l e −>rememberToken ( ) ;
$ t a b l e −>timestamps ( ) ;
});
}

/∗∗
∗ Re vers e t he m i g r a t i o n s .
∗ @return v o i d
∗/
p u b l i c f u n c t i o n down ( )
{
Schema : : d r o p I f E x i s t s ( ’ u s e r s ’ ) ;

28
}
}

Envoi d’e-mails

Laravel propose des fonctionnalités très pratique permettant d’envoyer des e-mails,
grâce à l’outil SwiftMailer, riche en fonctionnalités.
Encore une fois, dans l’esprit de centraliser toutes les fonctionnalités d’un site au sein d’un
même outil, la construction des vues d’un email est similaire en tout point à la construc-
tion des vues d’une page du site. Il suffit pour cela d’utiliser Blade, le moteur de Template.

Exemple d’application à notre projet

Il faut d’abord créer une classe mail en tapant ceci dans le terminal à la racine du
projet :
php a r t i s a n make : mail nomDeLaClass
La classe est créé dans le dossier App/Mail.

Dans cette classe il y une methode build.

/∗∗
∗ B u i l d t he message .

∗ @return $ t h i s
∗/
public function build ()
{
r e t u r n $ t h i s −>view ( ’ chemin de l a vue c r é é pour c e t e−mail ’ ) ;
}
Le framework Laravel fournit entre autre d’autres caractéristiques comme :

— Un système de cache ;

— Un système d’évenements ;

— Un système d’autorisation ;

— Une getion des sessions.

Conclusion

Laravel est livré avec un gros sac de caractéristiques impressionnantes. Et par consé-
quent, il fait de l’ombre à d’autres frameworks similaires. Il est facile à apprendre et

29
apporte un nombre conséquent de fonctionnalités permettant de construire une appli-
cation plus robuste, mais aussi plus maintenable et de façon plus rapide. Notamment,
Laravel met à disposition une syntaxe simple et élégante, un des ses plus grands atouts.

3.3 Moteur de recherche Solr


3.3.1 Présentation
Solr est un moteur de recherche open-source très performant qui permet l’indexation
de données textuelles et d’attributs divers (titre, auteur, date de publication, description,
ect) dans différentes langues. Ce n’est pas un outil que l’on met à disposition d’utilisa-
teurs tels que peuvent l’être Google ou Bing. Au même titre que des bases de données
comme MySQL ou Mongodb (NoSQL), ces un outil que l’on intègre dans des applications
existantes ou au dessus desquels sont développées des interfaces de recherche. Moteur de
recherche performant signifie qu’il est capable d’indexer en batch ou en temps réel des
millions ou des milliards d ?éléments correspondants à des giga-octets ou des tera-octet
de données et qu ?il peut répondre à plusieurs centaines de requêtes à la secondes en
quelques dixièmes de secondes seulement. Pour atteindre de telles performances et une
très haute disponibilité de service, il peut être nécessaire de le configurer en cluster de
plusieurs serveurs au travers desquels seront réparties les index et les requêtes.

3.3.2 Caractéristiques
Solr s’appuit sur un socle : Apache Lucene. Apache Lucene est une librairie Java
open-source d’indexation et de recherche plein-texte qui existe depuis le début des années
2000. Lucene fournit les mécanismes de base d’indexation et de recherche. De son coté,
Solr apporte des aspects techniques qui fond de lui une véritable solution d’entreprise :

— Indexation et recherche en fonction de la langue (découpage des mots, mots-vides,


synonymes, élisions, etc) ;
— Optimisé pour un grand volume de trafic ;
— Tri par pertinence ;
— Recherche et filtrage par facettes ;
— Recherche spatiale ;
— Suggestion de requêtes en cours de frappe (suggester) ;
— Correction orthographique (spellcheck) ;
— Recherche par similarité (more like this search)
— Mise en évidence dans les résultats des termes de la requête (highlighting) ;
— Interface d ?administration et de monitoring
— Embarquable dans une application JAVA etc...

30
Exemple d’application à notre projet

/∗ code pour e f f e c t u e r une r e c h e r c h e s u r S o l r des a r t i c l e s


q u i c o n t i e n n e n t l a v a l e u r de l a v a r i a b l e $ r e q u e s t ∗/

/∗∗

∗ @return a r r a y $ r e s u l t s e t
∗/
public function search ( $request )
{
$query = A r t i c l e s : : i n i t ( ) ;
$ h e l p e r = $query−>g e t H e l p e r ( ) ;

$thequery = "";

$Textfields = [ ’ Title ’ , ’ Fulltext ’ ] ;

f o r e a c h ( $ T e x t f i e l d s as $ v a l u e ) {
$ t h e q u e r y .= $ v a l u e . " : ( " . $ r e q u e s t . " ) " ;
}
$query−>setQuery ( $ t h e q u e r y ) ;

// t h i s e x e c u t e s t h e query and r e t u r n s th e r e s u l t
r e t u r n $ r e s u l t s e t = $ t h i s −>c l i e n t −>s e l e c t ( $query ) ;
}

31
Chapitre 4

Démonstration

Dans ce chapitre nous allons faire une démonstration de l’ajout d’un client, de la
création de son abonnement à la création de ces groupe et comptes utilisateurs.

4.1 Ajouter un client

Figure 4.1.1 – Ajouter un client

La figure montre l’ajout d’un client qui fournit des champs à remplir par l’adminis-
trateur du portail :

— le nom du client.
— son nombre d’ utilisateurs.

32
— le numéro de téléphone et adresse du client.
— ses mots clés.
— Date du début et de la fin de l’abonnement.
— e-mail et mot de passe de l’administrateur client.

4.2 Liste des clients ajoutés

Figure 4.2.1 – Liste des clients créés

La figure suivante illustre la liste de tous les clients ajoutés.

Ici on peut une recherche parmi les client, choisir de supprimer un client ou d’afficher
toutes les informations relatives à un client.

33
4.3 Profil du client ajouté

Figure 4.3.1 – Profil du client ajoutée

Vue sur le profil du client qui à été ajouté précédemment.

Dans ce menu est afficher les informations du client suivantes :

— Nom , adresse, téléphone

— Nombre de comptes créés.

— Nombre de groupes créés.

— Statut de l’abonnement.

— Liste des utilisateurs.

— Liste des groupes.

— Liste des mots clés.

Dans ce menu on peut aussi modifier ces informations en cliquant sur le bouton Editer
le profil , comme lui ajouter des mots clés ou lui en supprimer d’autres, prolonger son
abonnement etc .

34
4.4 Tableau de bord administration client

Figure 4.4.1 – Tableau de bord administration client

Cette figure illustre le tableau de bord du client

Après authentification grâce à l’adresse e-mail et le mot de passe saisie au moment


de l’ajout du client, l’administrateur du client accède à cette interface à l’interface admi-
nistration client.
Pour le moment aucun groupe n’est créé et un seule utilisateur existe, l’administrateur
du client.

35
4.5 Ajout d’un groupe

Figure 4.5.1 – Ajout d’un groupe

On voit ci-dessus, dans l’onglet Créer un groupe, l’ajout d’un groupe par l’adminis-
trateur du client qui rempli un champs pour le nom du groupe et coche les mots clés pour
ce groupe.

36
4.6 Ajout d’un utilisateur

Figure 4.6.1 – Ajout d’un utilisateur

La figure illustre l’ajout d’un utilisateur en saisissant les informations relatives à cet
utilisateur et en lui affectant à un groupe déjà créé.

L’administrateur du client remplit les champs suivant :

— Nom de l’utilisateur.

— Adresse e-mail de l’utilisateur.

— Le mot de passe de l’utilisateur pour se connecter au portail.

— Confirmer le mot de passe précédent.

— Choisir le rôle ce cet utilisateur, il peut être aussi un administrateur ou un


utilisateur.

— le groupe dans le quel cet utilisateur de l’utilisateur.

37
Conclusion générale

Après l’accomplissement des différents étapes d’analyse et de conceptions, notre


stage s’est achevé par la proposition d’un prototype fonctionnel du portail web I-MEDIA.

D’un point de vue informatique les progrès acquis pendant ce stage ont été notable
de part d’une meilleur compréhension du framework Laravel qui commence à s’imposer
comme standard dans le domaine de développement web en php.
Il aura aussi fallu beaucoup réfléchir et trouver des solutions pour mieux gérer les accès
et les données affichés pour chaque utilisateur. Il a donc fallu faire preuve de patience et
réflexion pour résoudre certains problèmes.

Ce stage au sein de la société ITELSYS nous a aussi permis de vivre l’expérience du


travail , d’apprendre à s’intégrer à une équipe de travail et d’approfondir nos connaissances
pratiques.
La volonté de continuer dans le domaine de développement informatique c’est renforcer
après ce stage qui à été très enrichichant.

38
Bibliographie

[1] Présentation du framework Laravel par Nabil PENOT publié le 29/10/2016 à


20 :53 :40

https://www.supinfo.com/articles/single/3343-presentation-framework-php-laravel

[2] Site officiel Apache Solr

lucene.apache.org/solr/

[3] Site officiel Laravel

laravel.com

[4] Site officiel Laracast

laracast.com

[5] Openclassrooms

https://openclassrooms.com

[6] Google trends date : 06/06/2017

https://trends.google.fr/trends/explore?q=%2Fm%2F09cjcl,%2Fm%
2F0jwy148,%2Fm%2F0cdvjh,%2Fm%2F02qgdkj

39
Annexe

Code source des Vues

Le code source du template de l’interface utilisateur

Figure 4.6.2 – La vue template 1

40
Figure 4.6.3 – La vue template 2

41
Figure 4.6.4 – La vue template 3

42
Figure 4.6.5 – La vue template 4

43
Figure 4.6.6 – La vue template 5

Figure 4.6.7 – La vue template 6

44
Code source des Modèles

Le modèle Client

Figure 4.6.8 – Le modèle Client

45
Le modèle Keyword

Figure 4.6.9 – Le modèle Keyword

Le modèle ClientKeyword

Figure 4.6.10 – Le modèle ClientKeyword

46
Le modèle Abonnement

Figure 4.6.11 – Le modèle Abonnement

47
Le modèle User

Figure 4.6.12 – Le modèle User

48
Le modèle Role

Figure 4.6.13 – Le modèle Role

Le modèle Permission

Figure 4.6.14 – Le modèle Permission

49
Le modèle PermissionRole

Figure 4.6.15 – Le modèle PermissionRole

Le modèle Newsletter

Figure 4.6.16 – Le modèle Newsletter

50
Code source des Contrôleurs

Le contrôleur LoginController

Figure 4.6.17 – LoginController

51
Le contrôleur RegisterController pour enrégister un utilisateur

Figure 4.6.18 – RegisterController

52
Le contrôleur AdminController

Figure 4.6.19 – AdminController partie 1

Figure 4.6.20 – AdminController partie 2

53
Le contrôleur HomeController

Figure 4.6.21 – HomeController partie 1

Figure 4.6.22 – HomeController partie 2

54
Figure 4.6.23 – HomeController partie 3

Figure 4.6.24 – HomeController partie 4

55
Le contrôleur ClientController

Figure 4.6.25 – ClientController partie 1

56
Figure 4.6.26 – ClientController partie 2

Figure 4.6.27 – ClientController partie 3

57
Figure 4.6.28 – ClientController partie 4

Figure 4.6.29 – ClientController partie 5

58
Figure 4.6.30 – ClientController partie 6

59
Le contrôleur GroupeController

Figure 4.6.31 – groupeController partie 1

Figure 4.6.32 – groupeController partie 2

60
Le contrôleur UserController

Figure 4.6.33 – UserController partie 1

61
Figure 4.6.34 – UserController partie 2

62
Figure 4.6.35 – UserController partie 3

Figure 4.6.36 – UserController partie 4

63

Vous aimerez peut-être aussi