BTS-SIO – E4 SLAM 2015 – Contexte EGS

Transcription

BTS-SIO – E4 SLAM 2015 – Contexte EGS
BTS-SIO - E4 SLAM 2015 - Contexte EGS 1
ENC – Gestion de stages
Application EGS
Sommaire
Cahier des Charges ........................................................................................................................................ 2
Spécifications fonctionnelles ........................................................................................................................... 4
Spécifications techniques .............................................................................................................................. 17
Conception de la solution .............................................................................................................................. 18
Codage du composant com_egs .................................................................................................................. 20
Tests et recette fonctionnelle ........................................................................................................................ 26
Déploiement .................................................................................................................................................. 27
BTS-SIO - E4 SLAM 2015 - Contexte EGS 2
Cahier des Charges
Présentation de l’ENC
L'ENC est un Établissement Public Local d'Enseignement (EPLE) qui accueille dans un cadre
public 1900 élèves.
Conçue dès sa création, en 1957, pour développer un enseignement technique du second
degré dans les domaines de l'administration et de la gestion des entreprises, du commerce et
du tourisme, l'École Nationale de Commerce assure cette mission depuis presque 60 ans.
(à compléter par Aurélien)
Objectif du projet EGS
L’objectif du projet EGS (ENC – Gestion des stages) limité au BTS-SIO dans un premier
temps est de permettre à des étudiants de trouver des stages durant leur 2 années, pour
cela le site va devoir contenir des offres de stages venant de différentes entreprises, les
étudiants pourront poster leur candidatures, qui seront traités par les entreprises concernées,
les professeurs pourront consulter les offres postés par les entreprises et pourront ainsi dire
aux étudiants si l'offre des entreprises qu'ils ont choisi correspondent aux critères des stages
que qu'ils doivent respecter.
Analyse de l’existant
La gestion des stages des étudiants en BTS-SIO à l’ENC est actuellement réalisée…
La gestion des stages des étudiants en BTS-SIO à l’ENC est actuellement réalisée par un
groupe de 17 étudiants de 2ème année de BTS SIO. Chaque étudiant possède les compétences
nécessaires à la bonne réalisation du site. Le projet est réalisé dans une salle informatique
comportant 20 ordinateurs reliés au même réseau et à internet avec à leur disposition tout
document pouvant les aider à la réalisation du site.
Le développement du site se fera sous l’environnement de développement XAMPP et grâce au
CMS Joomla.
Actuellement, les étudiants devaient se débrouiller par leurs propres moyens pour trouver
une entreprise pour leur stage, il n’y a pas de site à disposition pour faciliter leurs recherches
Analyse des besoins
Les besoins d’évolution du système de gestion des stages des étudiants en BTS-SIO à l’ENC
sont les suivants…
Les besoins d’évolution du système de gestion des stages des étudiants en BTS-SIO à l’ENC
sont les suivants…
- Facilité le contact avec les Entreprises, Etudiants & Professeurs
- Centraliser les documents pour que tous les concernées puissent avoir accès
- Augmentation des chances de trouver un stage pour les élèves et de trouver des
stagiaires pour les entreprises
BTS-SIO - E4 SLAM 2015 - Contexte EGS 3
-
Facilité pour les professeurs de filtrer les offres de stages afin que ces dernières soient
en adéquation avec le cursus de l’élève
Organisation du projet EGS
L’organisation du projet EGS est la suivante…
(à compléter par Muhammed)
BTS-SIO - E4 SLAM 2015 - Contexte EGS 4
Spécifications fonctionnelles
Le système EGS se décompose en deux sous-systèmes :


Le back-end EGS, site d’administration du portail EGS.
Le front-end EGS, portail EGS constitué d’un site public et d’un site à accès réservé
aux étudiants, entreprises et professeurs.
Les présentes spécifications fonctionnelles définissent les acteurs, les cas d’utilisation, les
diagrammes de séquence associés en notation UML, les interfaces utilisateurs de ces deux
systèmes et le modèle des données commun aux deux systèmes.
Acteurs et cas d’utilisation
Au sens UML, les acteurs concernés par le système EGS sont les suivants :


Back-end EGS : Administrateur.
Front-end EGS : Etudiant, Entreprise et Professeur.
Le diagramme des cas d’utilisation du back-end EGS est le suivant :
BTS-SIO - E4 SLAM 2015 - Contexte EGS 5
Le diagramme des cas d’utilisation du front-end EGS est le suivant :
(à compléter par Yannis)
BTS-SIO - E4 SLAM 2015 - Contexte EGS 6
Diagrammes de séquence du back-end EGS
Les diagrammes de séquence du back-end EGS associés aux cas d’utilisation définis plus haut
pour l’administrateur sont les suivants…
(à compléter par Mohsan)
BTS-SIO - E4 SLAM 2015 - Contexte EGS 7
Diagrammes de séquence du front-end EGS
Les diagrammes de séquence du front-end EGS associés aux cas d’utilisation de l’étudiant
sont les suivants…
(à compléter par Zacharia)
Les diagrammes de séquence du front-end EGS associés aux cas d’utilisation de l’entreprise
sont les suivants…
BTS-SIO - E4 SLAM 2015 - Contexte EGS 8
BTS-SIO - E4 SLAM 2015 - Contexte EGS 9
BTS-SIO - E4 SLAM 2015 - Contexte EGS 10
Les diagrammes de séquence du front-end EGS associés aux cas d’utilisation du professeur
sont les suivants…
(à compléter par Camille)
BTS-SIO - E4 SLAM 2015 - Contexte EGS 11
Interfaces utilisateurs du back-end EGS
Les interfaces utilisateurs du back-end EGS sont les suivantes…
Interface de la base de donnée des entreprises, les données peuvent être triées par colonne
c’est-à-dire selon la raison sociale, le logo, l’activité, l’adresse, la ville, le code postal, le pays
ou l’id.
Afin d’ajouter des données, il faut cliquer sur le bouton nouveau situé en haut à droite de la
page. Ce bouton vous redirige vers une page permettant la saisie des données pour la table
en question. Ici, il s’agit de la table entreprise, les informations demandées seront donc la
raison sociale, le logo, l’activité, le site web, l’adresse, la ville, le code postal le pays et la
publication de ces données ou pas. Pour sauvegarder les données, il suffit de cliquer sur
Enregistrer & Fermer ou bien sur Annuler si vous voulez quitter la page sans sauvegarder les
informations.
A côté du bouton nouveau se trouve le bouton modifié qui permet de corriger les données de
la ou les lignes sélectionnées et redirige vers l’interface suivante :
BTS-SIO - E4 SLAM 2015 - Contexte EGS 12
Une fois les modifications apportées, il suffit de cliquer sur Enregistrer & Fermer pour mettre
les données à jour. Si vous décidez finalement de ne pas modifier les informations, il suffit de
cliquer sur Annuler.
A côté du bouton Modifier ce trouve le bouton supprimer. Afin de supprimer des données, il
vous suffit de cocher la ou les lignes que vous souhaitez supprimées et de cliquer sur
Supprimer.
Afin de publier/ dé publier des données, il suffit de suivre le même procéder que la
suppression, à savoir cocher les informations à publier/ dé publier puis de cliquer sur publier
si vous souhaiter publier les informations ou dé publier si vous souhaiter dé publier les
informations.
Interfaces utilisateurs du front-end EGS
Les interfaces utilisateurs du front-end EGS sont les suivantes…
Suite à la connexion sur le site EGS, plusieurs rubriques sont disponibles et dépendent de la
catégorie de l’utilisateur (étudiant, professeur, entreprise).
BTS-SIO - E4 SLAM 2015 - Contexte EGS 13
Voici l’interface des offres en tant qu’utilisateur de la catégorie entreprise. Il peut ainsi les consulter et les
administrer avec boutons Ajouter, Modifier, et Supprimer.
L’utilisateur peut également consulter les informations relatives à son entreprise et les modifier en cas de
besoin grace au bouton Modifier en haut à droite
BTS-SIO - E4 SLAM 2015 - Contexte EGS 14
Cette interface présente les candidatures disponibles dont le statut n’a pas encore été traiter pour
l’entreprise en question, ici l’entreprise ne peut que consulter les informations relatives aux étudiants
volontaires pour effectuer un stage dans l’entreprise en question.
Une fois la candidature traitée, cette interface va permettre de suivre la candidature jusqu’au
commencement du stage.
BTS-SIO - E4 SLAM 2015 - Contexte EGS 15
BTS-SIO - E4 SLAM 2015 - Contexte EGS 16
Modèle des données EGS
Le modèle des données EGS, commun aux front-end et back-end EGS, est défini par le
diagramme des classes UML suivant…
BTS-SIO - E4 SLAM 2015 - Contexte EGS 17
Spécifications techniques
Framework et CMS Joomla
Afin de réduire les risques liés à la maîtrise d’œuvre d’un tel projet, l’équipe projet EGS a
retenu le principe d’une architecture logicielle ouverte (architecture MVC : Modèle-VueContrôleur) avec Framework/CMS Joomla 2.5 et un développement PHP en deux phases :
1. Développement du back-end EGS et de la base de données « egs » sous la forme d’un
composant « com_egs » installable dans le CMS Joomla 2.5.
2. Développement du front-end EGS par extension du composant « com_egs » pour
implémenter les fonctionnalités attendues des utilisateurs.
La technologie Joomla a été choisie parmi les trois CMS (Content Management System : outil
de gestion de contenu sur Internet) open-source et gratuits les plus populaires du marché :
WordPress, Drupal et Joomla. Sa simplicité d'utilisation, la qualité de ses extensions et le
dynamisme de ses communautés d’utilisateurs et de développeurs en France, en Europe et
dans le monde assurent à Joomla un suivi et une évolution de très grande qualité.
Le schéma d’architecture logicielle est le suivant :
Les éléments coloriés en orange correspondent aux développements relatifs à la première
phase et comprend les deux éléments du socle commun, la base données Joomla sous MySQL
et l’installation de l’API Joomla 2.5, permettant ensuite l’intégration du composant
« com_egs » spécialement développé pour les besoins du portail EGS.
L’élément colorié en bleu correspond à la deuxième phase du développement explicitée cidessus.
BTS-SIO - E4 SLAM 2015 - Contexte EGS 18
Environnements de développement, tests et production
L’environnement de développement choisi est le suivant…
-
-
L’environnement de développement choisi est le suivant Conception de la base de
données egs sous MySQL (11 tables egs_ dans la base Joomla).
Développement du composant com_egs (partie back-end) en PHP/archi. MVC Joomla.
Analyse du cahier des charges, Cas d’utilisation et Diagrammes de séquences.
Modèle conceptuel des données et Schéma relationnel SQL.
Composant com_egs (partie back-end).
Cahier de tests fonctionnels.
Développement en PHP de l’extension du site d’administration sous Joomla 2.5 (Framework et outil
CMS de publication de contenu) sur serveur LAMP (version XAMPP en local et LAMP en distant chez
l’hébergeur OVH) sous la forme d’un composant packagé et facile à déployer.
Conception de la solution
Architecture logicielle MVC
Le choix d’une architecture MVC répond aux besoins d’ouverture et d’évolutivité du portail
tout en facilitant l’organisation du code source. Le but d’une telle architecture est de
structurer le code, pour chaque cas d’utilisation ou bloc fonctionnel, en trois parties :
-
Le modèle gère les données du site. Il récupère les informations dans la base de
données, les organise et les assembles pour qu’elles puissent ensuite être traitées par
le contrôleur et la vue. Cette partie contient donc les requêtes SQL organisées sous
forme de fonctions PHP.
-
La vue gère l’affichage. Elle organise la façon dont les données sont affichées à
l’écran. On y trouve essentiellement du code HTML mais aussi quelques boucles et
conditions PHP très simples.
-
Le contrôleur gère la logique du code et les demandes utilisateurs. Le contrôleur
récupère les données du modèle, les analyse/les traite, et renvoie les données à
afficher à la vue. Le contrôleur contient exclusivement du code PHP, organisé sous
forme de fonctions.
L’architecture du composant com_egs respecte l’arborescence et les règles de nommage
définies pour la plateforme Joomla 2.5.
Architecture du back-end de com_egs
L’arborescence du back-end du composant com_egs est la suivante…
(à compléter par Christopher)
BTS-SIO - E4 SLAM 2015 - Contexte EGS 19
Architecture du front-end de com_egs
L’arborescence du front-end du composant com_egs est la suivante…
(à compléter par Billy)
Architecture matérielle (Aurélien)
(Schéma ci-dessous à reprendre par Aurélien)
L’infrastructure réseau mise en œuvre pour le développement d’EGS est la suivante :
BTS-SIO - E4 SLAM 2015 - Contexte EGS 20
Codage du composant com_egs
Codage MVC de com_egs
Les contrôleurs, modèles, tables et vues constituant le code PHP du composant com_egs
selon l’arborescence et les règles de nommage des fichiers définis plus-haut sont conçus
comme des classes PHP héritant des classes correspondantes du framework Joomla :
JController, JModel, JTable et JView.
Un exemple de code PHP commenté pour ces quatre types de classes est présenté ci-après.
JController :
<?php
/* Copyright (C) 2011-2015 Emmanuel DEROME - All rights reserved */
// Prevents any direct access
defined('_JEXEC') or die();
jimport('joomla.application.component.controller');
class EgsControllerCandidatures extends EgsController
{
function __construct()
// constructor : registers additional tasks to
methods, returns void
{
parent::__construct();
$this->registerTask('add', 'edit');
// registers extra tasks
$this->registerTask('unpublish', 'publish');
}
function edit()
// displays edit form, returns void
{
JRequest::setVar('view', 'candidature');
JRequest::setVar('layout', 'form');
JRequest::setVar('hidemainmenu', 1);
parent::display();
}
function save()
// saves a record and redirect to main page,
returns void
{
$model = $this->getModel('candidature');
if ($model->store($post)) {
$msg = JText::_('COM_EGS_SAVED');
} else {
$msg = JText::_('COM_EGS_SAVING_FAILED');
}
$link = 'index.php?option=com_egs&view=candidatures';
$this->setRedirect( JRoute::_($link, false), $msg );
}
function remove()
// removes record(s), returns void
{
$model = $this->getModel('candidature');
BTS-SIO - E4 SLAM 2015 - Contexte EGS 21
if(!$model->delete()) {
$msg = JText::_('COM_EGS_REC_NOT_DELETED');
} else {
$msg = JText::_('COM_EGS_REC_DELETED');
}
$link = 'index.php?option=com_egs&view=candidatures';
$this->setRedirect( JRoute::_($link, false), $msg );
}
function publish()
// publishes or unpublishes one or more
records
{
$this->setRedirect('index.php?option=com_egs&view=candidatures');
$db
$user
$cid
$task
$publish
$n
=& JFactory::getDBO();
// initialize variables
=& JFactory::getUser();
= JRequest::getVar( 'cid', array(), 'post', 'array' );
= JRequest::getCmd( 'task' );
= ($task == 'publish');
= count( $cid );
if (empty( $cid )) {
return
JText::_('COM_EGS_NO_ITEM_SELECTED'));
}
JError::raiseWarning(500,
JArrayHelper::toInteger( $cid );
$cids = implode( ',', $cid );
$query = 'UPDATE #__egs_candidatures'
. ' SET published = ' . (int) $publish
. ' WHERE id IN ( '. $cids .' )'
;
// echo "queryUD = $query\n";
// TEST/DEBUG
$db->setQuery( $query );
if (!$db->query()) {
return JError::raiseWarning( 500, $row->getError() );
}
$this->setMessage( JText::sprintf( $publish ? 'COM_EGS_PUBLISHED_ITEMS'
: 'COM_EGS_UNPUBLISHED_ITEMS', $n ) );
}
function cancel()
// cancels record editing, returns void
{
$msg = JText::_('COM_EGS_OPERATION_CANCELED');
$link = 'index.php?option=com_egs&view=candidatures';
$this->setRedirect( JRoute::_($link, false), $msg );
}
}
JModel :
<?php
/* Copyright (C) 2011-2015 Emmanuel DEROME - All rights reserved */
defined('_JEXEC') or die();
jimport('joomla.application.component.model');
BTS-SIO - E4 SLAM 2015 - Contexte EGS 22
class EgsModelCandidature extends JModel
{
function __construct()
request, returns void
{
parent::__construct();
// constructor retrieves record id from the
$array = JRequest::getVar('cid', 0, '', 'array');
$this->setId((int)$array[0]);
}
function setId($id)
{
$this->_id
= $id;
$this->_data = null;
}
// sets id and wipe data
function &getData()
// returns object with data
{
if (empty($this->_data)) {
$query = 'SELECT * FROM #__egs_candidatures WHERE id = '.$this>_id;
$this->_db->setQuery($query);
$this->_data = $this->_db->loadObject();
// loads record data
}
if (!$this->_data) {
$this->_data = new stdClass();
$this->_data->id = 0;
$this->_data->etudiants_id = 0;
$this->_data->offres_id = 0;
$this->_data->etatcandidatures_id = 0;
$this->_data->dateDebut = JHtml::date('now' , 'Y-m-d');
$this->_data->dateFin = JHtml::date('now' , 'Y-m-d');
$this->_data->numConvention = null;
$this->_data->professeurs_id = 0;
$this->_data->published = 0;
}
return $this->_data;
}
function store()
// stores record, returns true if done
{
$row =& $this->getTable();
$data = JRequest::get('post');
if (!$row->bind($data)) {
// binds form fields to table
$this->setError($this->_db->getErrorMsg());
return false;
}
if (!$row->check()) {
// makes sure that record is valid
$this->setError($this->_db->getErrorMsg());
return false;
}
if (!$row->store()) {
// stores table in database
$this->setError($row->getErrorMsg());
return false;
}
BTS-SIO - E4 SLAM 2015 - Contexte EGS 23
return true;
}
function delete()
// deletes record and returns true if done
{
$cids = JRequest::getVar( 'cid', array(0), 'post', 'array' );
$row =& $this->getTable();
if (count( $cids ))
{
foreach($cids as $cid) {
if (!$row->delete( $cid )) {
$this->setError( $row->getErrorMsg() );
return false;
}
}
}
return true;
}
}
JView :
<?php
/* Copyright (C) 2011-2015 Emmanuel DEROME - All rights reserved */
defined('_JEXEC') or die();
$linkCap = JRoute::_('index.php?option=com_egs&view=candidatures&cap=0');
echo "<h1><a href=$linkCap>\n";
echo JText::_('COM_EGS_CANDIDATURES');
echo "</a>&nbsp;&nbsp;|&nbsp;\n";
for ($i = 65; $i <= 90; $i++) {
// displays A to Z links
$cap = chr($i);
$linkCap = JRoute::_('index.php?option=com_egs&view=candidatures&cap='. $i);
echo "<a href=$linkCap>$cap</a>&nbsp;\n";
}
echo "</h1>\n";
?>
<form action="<?php echo JRoute::_('index.php?option=com_egs&view=candidatures');?>"
method="post" name="adminForm">
<div id="editcell">
<table class="adminlist">
<thead>
<tr>
<th width="3%">
<input type="checkbox" name="toggle" value=""
onclick="checkAll(<?php echo count( $this->items ); ?>);" />
</th>
<th width="5%" align="center">
<?php echo JHTML::_('grid.sort',
'COM_EGS_PUBLISHED', 'published', $this->sortDirection, $this->sortColumn); ?>
</th>
<th width="10%" align="center">
<?php echo JHTML::_('grid.sort',
BTS-SIO - E4 SLAM 2015 - Contexte EGS 24
'COM_EGS_CANDIDATURES_ETUDIANT', 'etudiant', $this->sortDirection, $this>sortColumn); ?>
</th>
<th width="6%" align="center">
<?php echo JHTML::_('grid.sort',
'COM_EGS_CANDIDATURES_DATE_DEBUT', 'dateDebut', $this->sortDirection, $this>sortColumn); ?>
</th>
<th width="6%" align="center">
<?php echo JHTML::_('grid.sort',
'COM_EGS_CANDIDATURES_DATE_FIN', 'dateFin', $this->sortDirection, $this->sortColumn);
?>
</th>
<th width="24%" align="center">
<?php echo JHTML::_('grid.sort',
'COM_EGS_CANDIDATURES_OFFRE', 'offre', $this->sortDirection, $this->sortColumn); ?>
</th>
<th width="10%" align="center">
<?php echo JHTML::_('grid.sort',
'COM_EGS_CANDIDATURES_ETAT_CANDIDATURE', 'etatCandidature', $this->sortDirection,
$this->sortColumn); ?>
</th>
<th width="10%" align="center">
<?php echo JHTML::_('grid.sort',
'COM_EGS_CANDIDATURES_PROFESSEUR', 'professeur', $this->sortDirection, $this>sortColumn); ?>
</th>
<th width="5%" align="center">
<?php echo JHTML::_('grid.sort', 'Id', 'id', $this>sortDirection, $this->sortColumn); ?>
</th>
</tr>
</thead>
<tbody>
<?php foreach($this->items as $i => $item): ?>
<?php
$checked = JHTML::_('grid.id', $i, $item->id );
$published
= JHTML::_('grid.published', $item, $i );
$link
=
JRoute::_('index.php?option=com_egs&controller=candidatures&task=edit&cid[]='. $item>id);
?>
<tr class="row<?php echo $i % 2; ?>">
<td>
<?php echo $checked; ?>
</td>
<td align="center">
<?php echo $published;?>
</td>
<td>
<?php echo $item->etudiant; ?>
</td>
<td>
<?php echo $item->dateDebut; ?>
</td>
<td>
<?php echo $item->dateFin; ?>
BTS-SIO - E4 SLAM 2015 - Contexte EGS 25
</td>
<td>
<a href="<?php echo $link; ?>"><?php echo
$item->dateDebut; ?> : <?php echo $item->entreprise; ?> : <?php echo $item->offre;
?></a>
</td>
<td>
<?php echo $item->etatCandidature; ?>
</td>
<td>
<?php echo $item->professeur; ?>
</td>
<td>
<?php echo $item->id; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<input
<input
<input
<input
<input
type="hidden"
type="hidden"
type="hidden"
type="hidden"
type="hidden"
name="option" value="com_egs" />
name="task" value="" />
name="boxchecked" value="0" />
name="controller" value="candidatures" />
name="filter_order" value="<?php echo $this->sortColumn;
?>" />
<input type="hidden" name="filter_order_Dir" value="<?php echo $this>sortDirection; ?>" />
</form>
Feuille de style egs.css
Le gabarit (template) Bluestork du back-end de Joomla a été utilisé tel quel, tandis que le
gabarit Beez5 du front-end de Joomla a été adapté au besoin du front-end d’EGS en
redéfinissant des styles propres à cette application dans un fichier egs.css inséré dans le
fichier index.php en dernière position des feuilles de styles.
Les modifications suivantes ont été réalisées…
(à compléter par Nicolas)
BTS-SIO - E4 SLAM 2015 - Contexte EGS 26
Tests et recette fonctionnelle
Tests du back-end EGS
Le cahier de tests du back-end EGS associés aux cas d’utilisation de l’administrateur est
détaillé en annexe…
(à compléter par Mohsan)
Tests du front-end EGS
Le cahier de tests du front-end EGS associés aux cas d’utilisation de l’étudiant est détaillé en
annexe…
(à compléter par Zacharia)
Le cahier de tests du front-end EGS associés aux cas d’utilisation de l’entreprise est détaillé
en annexe…
(à compléter par Beulah)
Le cahier de tests du front-end EGS associés aux cas d’utilisation du professeur est détaillé
en annexe…
(à compléter par Camille)
BTS-SIO - E4 SLAM 2015 - Contexte EGS 27
Déploiement
Un déploiement du portail EGS a été planifié sur une plateforme mutualisée hébergée chez
OVH.
(à compléter…)