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> | \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> \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…)