<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Servan.Charlot</id>
	<title>air - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Servan.Charlot"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php/Special:Contributions/Servan.Charlot"/>
	<updated>2026-05-30T17:34:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45408</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45408"/>
		<updated>2019-03-19T15:48:05Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Documents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;br /&gt;
&lt;br /&gt;
== Platforme ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 P1.png&lt;br /&gt;
File:EDCampus 2019 P2.png&lt;br /&gt;
File:EDCampus 2019 P3.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vitrine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 VitrineUni.png&lt;br /&gt;
File:EDCampus 2019 Vitrine1.png&lt;br /&gt;
File:EDCampus 2019 Vitrine2.png&lt;br /&gt;
File:EDCampus 2019 Vitrine3.png&lt;br /&gt;
File:EDCampus 2019 Vitrine4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Documents =&lt;br /&gt;
&lt;br /&gt;
*[[Media:Rapport-Projet-EDCampus-2019.pdf|Rapport Final]].&lt;br /&gt;
*[[Media:EDCampus-Final-CHANET-CHARLOT.pdf|Presentation Finale]].&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;br /&gt;
&lt;br /&gt;
=== 18/03/19 ===&lt;br /&gt;
* Ouverture de certains liens dans un autre onglet pour plus de simplicité&lt;br /&gt;
* Gestion des liens externes dans l&#039;overview des fichiers des projets&lt;br /&gt;
* Retrait des livrables actuels de la liste des fichiers des projets pour éviter les doublons&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=45407</id>
		<title>Projets 2018-2019</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=45407"/>
		<updated>2019-03-19T15:47:00Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Affectations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2017-2018]] | [[Projets]] | [[Projets 2019-2020]]&amp;gt;&amp;gt;&lt;br /&gt;
=INFO=&lt;br /&gt;
==INFO3==&lt;br /&gt;
&lt;br /&gt;
==INFO4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
* Dates : Lundi après-midi, Mardi après-midi  &lt;br /&gt;
* Lancement: &#039;&#039;&#039;21/01/19 à 14h30&#039;&#039;&#039;&lt;br /&gt;
* Soutenance à mi-parcours: A définir&lt;br /&gt;
* Soutenance: A définir&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi/mardi ???&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l&#039;auteur du code si il y a lieu, écrire un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), soumettre un patch/pull request, contacter l&#039;enseignant ou la personne référente du projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par info4_2018_2019. &#039;&#039;&#039;Cette fiche compte pour la note finale&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Votre code&#039;&#039;&#039; pour doit être hébergé sur le gitlab et à l&#039;URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19 , vous utiliserez votre compte UGA.&lt;br /&gt;
&lt;br /&gt;
* Chaque projet doit avoir &#039;&#039;&#039;aux moins 2 dépôts git&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Un pour les documents&#039;&#039;&#039; demandés rapport, présentation de pré-soutenante, de soutenance, flyer. &#039;&#039;&#039;Il sera appelé documents.&#039;&#039;&#039;&lt;br /&gt;
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. &lt;br /&gt;
&lt;br /&gt;
* Les documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;La note obtenue&#039;&#039;&#039; tiendra compte du &#039;&#039;&#039;nombre et de la qualité des commits&#039;&#039;&#039; observé dans &#039;&#039;&#039;vos dépots git et la branche master&#039;&#039;&#039; (or depot documents). La qualité comprend l&#039;intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n&#039;est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).&lt;br /&gt;
&lt;br /&gt;
* Il est fortement conseillé de suivre un &#039;&#039;&#039;développement incrémental&#039;&#039;&#039; qui permette d&#039;avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d&#039;une succession de &#039;&#039;&#039;démonstrateurs présentables séparément&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Vous devez faire aussi des &#039;&#039;&#039;schémas d&#039;architectures générales et/ou spéficiques, des diagrammes de séquence&#039;&#039;&#039;, et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.&lt;br /&gt;
&lt;br /&gt;
===Propositions de projets===&lt;br /&gt;
&lt;br /&gt;
* [[LoRaGAN]] : LoRa in the Space, Didier Donsez avec le [https://www.csug.fr/ CSUG] (S)&lt;br /&gt;
* [[LoRaRescueBalloon]], Didier Donsez avec le [https://www.csug.fr/ CSUG] et des élèves IESE 3 et 4. (S)&lt;br /&gt;
* Agriculture connectée à [[ASAC/AP|Polytech]] et à [[ASAC/SJC|St Cassien]] en partenariat avec les projets collectifs IESE/MAT&lt;br /&gt;
*# [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]] - Projet embarqué sur STM32 ou RPi3 + LoRa (S)&lt;br /&gt;
*# [[ASAC/AP/AP-2019-2|Serre Polytech - Kiosk]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
*# [[ASAC/SJC/SJC-2019|Serre St Cassien]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
* [[Projet FICHA - tri sélectif connecté]], Sylvain Toru.&lt;br /&gt;
* [[Dataviz de la qualité de l&#039;air]], Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT] (M)&lt;br /&gt;
* [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]], Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier] (M)&lt;br /&gt;
* [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Serious game multi-joueurs pour tables tactiles en réseau]] : Anne-Laure Finkel, Tim Lepage, Didier Donsez. (S&amp;amp;M)&lt;br /&gt;
* [[Interface de visualisation mobile du projet e-Tree]]: Anne Delaballe, Didier Donsez. (M)&lt;br /&gt;
* [[OpenHAB UPnP DCS 2018]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]], Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
* [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]], Olivier Richard (S)&lt;br /&gt;
* [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]], Olivier Richard (S)&lt;br /&gt;
* [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]], Olivier Richard (S)&lt;br /&gt;
* [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]], Olivier Richard (S)&lt;br /&gt;
* [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]], Olivier Richard (S&amp;amp;M)&lt;br /&gt;
* [[generate_NIX_expression | Génération d&#039;expression NIX]] (S)&lt;br /&gt;
 &lt;br /&gt;
Non prioritaire&lt;br /&gt;
* [[Précarité numérique]], Didier Donsez, avec [https://disrupt-campus.univ-grenoble-alpes.fr/ Disrupt Campus]&lt;br /&gt;
* [[Covoiturage Solidaire]], Didier Donsez&lt;br /&gt;
* [[CannonBall de voitures autonomes 2018]]&lt;br /&gt;
* Intégration de [[Walabot]] à [[RobAIR]]&lt;br /&gt;
&lt;br /&gt;
==== Affectation  ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO4 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN]]&lt;br /&gt;
 | VINCENT	Mathieu, SAUTON	Tanguy, ANCRENAZ	Ariane&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/1/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[LoRaRescueBalloon]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/2/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/3/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ASAC/AP/AP-2019-2|Serre Polytech]]&lt;br /&gt;
 | RAKOTOARIMALALA 	Andriamahatratra, BARDOU	Eva, GAUFFIER	Léni&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/4/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[ASAC/SJC/SJC-2019|Serre St Cassien]]&lt;br /&gt;
 | DECAMPS	Marceau, LANDI	Estelle, BONASPETTI	GIULIA&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/5/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Projet FICHA - tri sélectif connecté]]&lt;br /&gt;
 | SCHANEN	Loïc, VINCENT	Maxence, VANDAL	Jade&lt;br /&gt;
 | Sylvain Toru&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/6/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Dataviz de la qualité de l&#039;air]]&lt;br /&gt;
 | ZARCOS 	Paul, ZHENG	Jian, REYMOND	Estelle&lt;br /&gt;
 | Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/7/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]]&lt;br /&gt;
 | SERRE	Ancelin, BOUVIER	Baptiste, WYKLAND	Damien&lt;br /&gt;
 | Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/8/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]]&lt;br /&gt;
 | THOMAS	Antoine, RIVOIRE	Antoine, DENIS	Guillaume&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/9/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[Serious game multi-joueurs pour tables tactiles en réseau]]&lt;br /&gt;
 | DUMENIL	Antoine, BETEND	Baptiste, JAN 	Léo&lt;br /&gt;
 | Anne-Laure Finkel, Tim Lepage, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/10/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Interface de visualisation mobile du projet e-Tree]]&lt;br /&gt;
 | SOLVERY	Tom, SALA	Ergi, DUMAX-VORZET	Mathieu&lt;br /&gt;
 | Anne Delaballe, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/11/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[OpenHAB UPnP DCS 2018]]&lt;br /&gt;
 | VARENNE	Rémi, TRESTOUR	Grégory, SOUCHON	Loïc&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/12/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]]&lt;br /&gt;
 | LORDEY	Maxime, LATTARD	Alexis, GILBERT-COLLET	Bertrand&lt;br /&gt;
 | Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/13/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]]&lt;br /&gt;
 | REYGROBELLET 	Lucas, BRES 	Maxence, PELISSON	Antoine&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/14/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/15/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 16&lt;br /&gt;
 | [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]]&lt;br /&gt;
 | DALAINE	Nathan, FONTFREYDE	Joachim, GAUTIER-PIGNONBLANC	Yann&lt;br /&gt;
 | Olivier Richard, Adrien Faure&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/16/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17&lt;br /&gt;
 | [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/17/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 18&lt;br /&gt;
 | [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]]&lt;br /&gt;
 | BADAT	Léya, CUAU	Victor, MASSON	Jérémy&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/18/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 19&lt;br /&gt;
 | [[generate_NIX_expression | Génération d&#039;expression NIX]]&lt;br /&gt;
 | CHABRE	Manon, DE ARAUJO 	Bastien, COSCIA	Daniel&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/19/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 20&lt;br /&gt;
 | [[Gestion des Polypoints]]&lt;br /&gt;
 | CASTANO	Nicolas, SIBUE	Quentin, LAPLANTE	Juliette&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/20/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 21&lt;br /&gt;
 | [[Smart Recruting]]&lt;br /&gt;
 | GUILLOT	Romain, ARNOUX	Thibaut, CHASSEGUET	Corentin&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/21/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 22&lt;br /&gt;
 | [[Aide aux handicaps]]&lt;br /&gt;
 | JALMIN	Hoël, ALACALI	Kadir uraz, MASTOURA	Iheb&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/22/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==INFO5==&lt;br /&gt;
===Projet IoT S9===&lt;br /&gt;
Enseignants responsables : Bernard Tourancheau&lt;br /&gt;
&lt;br /&gt;
Calendrier: ??? Septembre à ??? Décembre 2017.&lt;br /&gt;
&lt;br /&gt;
* Projet IoT 3 : [[Ski-locator]] (Bernard Tourancheau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : [[user:Donsez | Didier Donsez]]&lt;br /&gt;
&lt;br /&gt;
Calendrier: Fin Janvier à Fin Mars 2019.&lt;br /&gt;
&lt;br /&gt;
Séances de Management de projets innovants:&lt;br /&gt;
&lt;br /&gt;
Réunion de présentation : Salle 249 de 11H30 a 12H30, Mercredi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Démarrage : A définir: Salle 251 de 8H30 a 11H00, Lundi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Soutenance à mi-parcours : 5 Mars, 9H00-11H30 (15 minutes par équipe).&lt;br /&gt;
&lt;br /&gt;
Soutenance (puis Pot de la fin) :  21 Mars de 12H00 à 18H30 salle P007.&lt;br /&gt;
&lt;br /&gt;
==== Affectations ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO5 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Documents&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN/INFO5A/2019|LoRaGAN]]&lt;br /&gt;
 | Thibaud VEGREVILLE,Aurélien SURIER GAROFALO&lt;br /&gt;
 | Didier Donsez, Bernard Tourancheau, Mathieu Barthélémy ([https://www.csug.fr/ CSUG])&lt;br /&gt;
 | [[PROJET-INFO5 1819 ThingSat| Fiche de suivi ]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-ThingSat.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Contributions open-source au projet Eclipse EdCampus]]&lt;br /&gt;
 | [[User:Servan.Charlot | CHARLOT Servan]] (chef de projet), [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | Anthony Geourjon, Gérard Pollier, Didier Donsez&lt;br /&gt;
 | [[PROJET-INFO5 1819 EDCampus | Fiche de suivi ]]&lt;br /&gt;
 | [[Media:Rapport-Projet-EDCampus-2019.pdf|Rapport final]] - [[Media:EDCampus-Final-CHANET-CHARLOT.pdf|Presentation finale]] - [[Media:EDCampus_Mi_Parcours_CHARLOT_CHANET.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[RICM5 2018 2019 - UGAChain|UGAChain 2019]] : [[Générateur Hyperledger pour JHipster]] : refactoring du projet [[RICM5 2017 2018 - UGAChain|UGAChain 2018]]&lt;br /&gt;
 | Loris GENTILLON, Jordan JEAN, Enzo MOLION, Léo VALETTE&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-UGAChain.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Aide aux déficients visuelles]] (deep-learning avec [[Intel Movidius]], [https://greenwaves-technologies.com/product/gapduino/ GAPDunio], [[Lidar]] 1D et 2D, ...)&lt;br /&gt;
 | Samuel Bamba, Florian Cuzin, Théo Echevet, Raphaël Manger&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco, Nicolas Vuillerme&lt;br /&gt;
 | [[ PROJET-INFO5_Aide_Deficients_Visuels | Fiche ]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-DeficientsVisuels.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Plateforme CampusIoT]]&lt;br /&gt;
 | &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Guillaume Besnard, Benjamin Besnier, Timothée Depriester, Théo Lévesque&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[PROJET-1FO5_1819_CampusIoT|Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-campusiot.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Rééducation Kiné connecté]]&lt;br /&gt;
 | &#039;&#039;&#039;Sekina Belguendouz (CP)&#039;&#039;&#039;, Vincent Aubert, Amina Boucherima, Najwa Ez-Zine&lt;br /&gt;
 | Sylvain Toru, Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-INFO5_Kiné_Connecté | Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:KinéConnectéMiParcours.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | Projet IoT 3 : [[Ski-locator]]&lt;br /&gt;
 | &#039;&#039;&#039;Quentin Fombaron (CP)&#039;&#039;&#039;, Tim Lepage, Thomas Ozenda, Joffrey Ferreira, Titouan Larnicol&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-1FO5_1819_SkiLocator|Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-skiLocator-2019.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Contributions open-source au projet JHipster]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo GROS-DAILLON (CP)&#039;&#039;&#039;, Julien COURTIAL, Cédric LAFRASSE, Bastien TERRIER&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | [[ PROJET-INFO5_Contributions_JHipster | Fiche ]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:Flyer-Contribution-JHipster-UGA.pdf|Flyer]] - [[Media:Jhipster_Contribution_miparcour_2019.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Réserve&lt;br /&gt;
* [[Contributions à Software Heritage]] (Didier Donsez and co)&lt;br /&gt;
* [[Sécurisation des données IoT avec des blockchains de consortium]] (Didier Donsez) --&amp;gt; commun avec CampusIoT et UGAChain&lt;br /&gt;
&lt;br /&gt;
==== Planning Soutenance Projet S10  ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Soutenance des projets INFO5 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Horaire&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | 12H00-12H45&lt;br /&gt;
 | [[LoRaGAN/INFO5A/2019|LoRaGAN]]&lt;br /&gt;
 | Thibaud VEGREVILLE,Aurélien SURIER GAROFALO&lt;br /&gt;
 | Didier Donsez, Bernard Tourancheau, Mathieu Barthélémy ([https://www.csug.fr/ CSUG])&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | 12H45-13H30&lt;br /&gt;
 | [[Contributions open-source au projet Eclipse EdCampus]]&lt;br /&gt;
 | [[User:Servan.Charlot | CHARLOT Servan]] (chef de projet), [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | Anthony Geourjon, Gérard Pollier, Didier Donsez&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | 13H30-14H15&lt;br /&gt;
 | [[Aide aux déficients visuelles]] (deep-learning avec [[Intel Movidius]], [https://greenwaves-technologies.com/product/gapduino/ GAPDunio], [[Lidar]] 1D et 2D, ...)&lt;br /&gt;
 | Samuel Bamba, Florian Cuzin, Théo Echevet, Raphaël Manger&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco, Nicolas Vuillerme&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | 14H30-15H15&lt;br /&gt;
 | [[Plateforme CampusIoT]]&lt;br /&gt;
 | &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Guillaume Besnard, Benjamin Besnier, Timothée Depriester, Théo Lévesque&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | 15H15-16H00&lt;br /&gt;
 | Projet IoT 3 : [[Ski-locator]]&lt;br /&gt;
 | &#039;&#039;&#039;Quentin Fombaron (CP)&#039;&#039;&#039;, Tim Lepage, Thomas Ozenda, Joffrey Ferreira, Titouan Larnicol&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | 16H00-16H45&lt;br /&gt;
 | [[RICM5 2018 2019 - UGAChain|UGAChain 2019]] : [[Générateur Hyperledger pour JHipster]] : refactoring du projet [[RICM5 2017 2018 - UGAChain|UGAChain 2018]]&lt;br /&gt;
 | &#039;&#039;&#039;Léo VALETTE (CP)&#039;&#039;&#039;, Loris GENTILLON, Jordan JEAN, Enzo MOLION&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | 17H00-17H45&lt;br /&gt;
 | [[Contributions open-source au projet JHipster]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo GROS-DAILLON (CP)&#039;&#039;&#039;, Julien COURTIAL, Cédric LAFRASSE, Bastien TERRIER&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | 17H45-18H30&lt;br /&gt;
 | [[Rééducation Kiné connecté]]&lt;br /&gt;
 | &#039;&#039;&#039;Sekina Belguendouz (CP)&#039;&#039;&#039;, Vincent Aubert, Amina Boucherima, Najwa Ez-Zine&lt;br /&gt;
 | Sylvain Toru, Bernard Tourancheau&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Instructions pour la soutenance====&lt;br /&gt;
Chaque soutenance comporte 5 minutes d&#039;installation et de désinstallation, 20 minutes de présentation, 10 minutes de question et 10 minutes de démonstration.&lt;br /&gt;
* La présentation est constituée des chapitres suivants:&lt;br /&gt;
** Rappel du sujet/besoin et cahier des charges&lt;br /&gt;
** Technologies employées&lt;br /&gt;
** Architecture techniques&lt;br /&gt;
** Réalisations techniques&lt;br /&gt;
** Gestion de projet (méthode, planning prévisionnel et effectif, gestion des risques, rôles des membres, ...)&lt;br /&gt;
** Outils (collaboration, CD/CI par exemple ...)&lt;br /&gt;
** Métriques logiciels : lignes de code, langages, performance, temps ingénieur (d&#039;après vos journaux)...)&lt;br /&gt;
** Conclusion (Retour d&#039;expérience)&lt;br /&gt;
** Transparent introduisant la démonstration&lt;br /&gt;
* Répétez plusieurs fois votre présentation et votre démonstration. Il y aura des personnalités invitées. Prévoyez un démonstration filmée pour palier à l&#039;effet &amp;quot;démo&amp;quot;.&lt;br /&gt;
* L&#039;ensemble des documents (y compris photos, vidéos et &#039;&#039;[[Logiciels#Screencast|screencast]]s&#039;&#039;) doivent être accessibles depuis le tableau ci-dessous et dans chaque fiche de suivi. Prévoyez une copie sur clé USB.&lt;br /&gt;
* &#039;&#039;&#039;TOUT Le matériel prêté devra être rapporté et restitué dans un sac cabas lors de la soutenance.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* L&#039;ensemble des documents demandé doit être accessible sur le wiki avant midi le 21/03. Le rapport final contient les mêmes chapitres que la présentation ainsi qu&#039;un glossaire et une bibliographie. Le rapport ne doit pas dépasser 10 pages (schémas et figures compris). Vous pourrez référencer les autres documents que vous avez produits au cours du projet (spécifications détaillées, algorithmes ...).&lt;br /&gt;
&lt;br /&gt;
= Projets collectifs MAT/IESE =&lt;br /&gt;
&lt;br /&gt;
== Années 3 et 4 ==&lt;br /&gt;
&lt;br /&gt;
* [[ASAC/SJC|Serres connectées @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/GEJC|Gestion de l&#039;eau @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/AP|Aquaponie @ Polytech]]&lt;br /&gt;
&lt;br /&gt;
=[[Projets M2PGI Services Machine-to-Machine et Internet-of-Things]]=&lt;br /&gt;
==[[PM2M/2019/TP|PM2M]]==&lt;br /&gt;
&lt;br /&gt;
=Réserve (boite à idées)=&lt;br /&gt;
# [http://www.opti-solar.com/french/ap_applications.fr.html |Interface contrôleur de charge batterie/PV]&lt;br /&gt;
# [[Sonotone à apprentissage profond]]&lt;br /&gt;
# [[StartAIR2]] (Nicolas Palix)&lt;br /&gt;
# [[Tag et Paint Ball en réalité augmentée]] (Michaël Périn) &lt;br /&gt;
# [[Passe moi ton fichier]] (Michaël Périn) &lt;br /&gt;
# [[Extensions à Fab Server]] (Jean-Michel Molenaar) sous reserve (CM ou SR)&lt;br /&gt;
# [[Table multijeux de café 2.0]]&lt;br /&gt;
# [[ GPIO_Qemu_RasPI| Emulation des GPIO dans QEMU pour le carte Raspberry Pi]] (Olivier Richard)&lt;br /&gt;
# [[ Qemu et STM32F0-Discovery ]] (Olivier Richard)&lt;br /&gt;
# [[Serrure à clé MIDI multifactorielle]] (Didier Donsez)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[iMailbox]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;ambience intelligent) (Didier Donsez)&lt;br /&gt;
# [[PDAmeetPDA]] (synchronisation d&#039;agenda) (Michaël Périn)&lt;br /&gt;
# [[1 000 000 VMs]] (expérimentation d&#039;application distribuée à très grande échelle) (Olivier Richard) (2-3 RICM4)&lt;br /&gt;
# [[Multiple Kinect]] (utilisation simultanée de plusieurs Kinect) (Olivier Richard) (RICM ou 3I)&lt;br /&gt;
# [[Kinect musicale]] (Didier Donsez) (RICM)&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# Ocaml on Cortex-M3&lt;br /&gt;
# [[Arduino on STM32 Discovery]]&lt;br /&gt;
# [[Reverse Geocache Puzzle Box]]&lt;br /&gt;
# [[OSGi ME]] (Didier Donsez)&lt;br /&gt;
# [[Affichage Etudiant à Polytech]]&lt;br /&gt;
# Synthèse 3D + motion capture Kinect&lt;br /&gt;
# Logiciel d&#039;[[apprentissage du calcul]] sur tablette Android (reconnaissance de chiffres manuscrits)&lt;br /&gt;
# Plancher de verre (saint gobain) à la [http://www.wat.tv/video/mickael-jackson-billie-jean-oewj_2ey2h_.html Mickael Jackson dans Billie Jean] ! woo&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[CNC]]&lt;br /&gt;
# [[Idées en Vrac]]&lt;br /&gt;
# Scheme Everywhere (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[Projet Station Météo]]&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;amnbience intelligent) (Didier Donsez)&lt;br /&gt;
# [[Cube pointeur]] d&#039;activité ingénieur&lt;br /&gt;
# [http://www.instructables.com/id/Puppeteer-Motion-Capture-Costume/ Puppeteer Motion-Capture Costume]&lt;br /&gt;
# [[Musical Staircase]] @ Polytech (Didier Donsez, 1 RICM4 + 1 3I4)&lt;br /&gt;
# [[Total Recall]] (Didier Donsez)&lt;br /&gt;
# [[SoundMachine]]&lt;br /&gt;
# [[IGN-OSM|Importation de données IGN publiques dans OSM]]&lt;br /&gt;
# [[Speed-limit-OSM|Analyse de traces GPX pour déterminer les limitations de vitesse]]&lt;br /&gt;
# [[Multi perceptual cameras]] (Didier Donsez)&lt;br /&gt;
# [[Photomaton 3D]] (Didier Donsez)&lt;br /&gt;
# [[ArduCopter]]&lt;br /&gt;
# [[Parking Intelligent]]&lt;br /&gt;
# Frontend Web multi-utilisateur pour un jeu sérieux d&#039;entreprise : Didier Donsez, Stéphanie Diligent, Emmanuelle Tréhoust.&lt;br /&gt;
# Construction d&#039;un roadbook d&#039;ultratrail (mais aussi trek, randonnée, cyclisme, ...) à partir de traces GPX et des réseaux sociaux (Strava, Trace de Trail, ...): Didier Donsez&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus-Final-CHANET-CHARLOT.pdf&amp;diff=45406</id>
		<title>File:EDCampus-Final-CHANET-CHARLOT.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus-Final-CHANET-CHARLOT.pdf&amp;diff=45406"/>
		<updated>2019-03-19T15:45:51Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45394</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45394"/>
		<updated>2019-03-19T15:10:30Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Captures d’écran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;br /&gt;
&lt;br /&gt;
== Platforme ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 P1.png&lt;br /&gt;
File:EDCampus 2019 P2.png&lt;br /&gt;
File:EDCampus 2019 P3.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vitrine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 VitrineUni.png&lt;br /&gt;
File:EDCampus 2019 Vitrine1.png&lt;br /&gt;
File:EDCampus 2019 Vitrine2.png&lt;br /&gt;
File:EDCampus 2019 Vitrine3.png&lt;br /&gt;
File:EDCampus 2019 Vitrine4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Documents =&lt;br /&gt;
&lt;br /&gt;
*[[Media:Rapport-Projet-EDCampus-2019.pdf|Rapport Final]].&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;br /&gt;
&lt;br /&gt;
=== 18/03/19 ===&lt;br /&gt;
* Ouverture de certains liens dans un autre onglet pour plus de simplicité&lt;br /&gt;
* Gestion des liens externes dans l&#039;overview des fichiers des projets&lt;br /&gt;
* Retrait des livrables actuels de la liste des fichiers des projets pour éviter les doublons&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=45393</id>
		<title>Projets 2018-2019</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=45393"/>
		<updated>2019-03-19T15:08:39Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Affectations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2017-2018]] | [[Projets]] | [[Projets 2019-2020]]&amp;gt;&amp;gt;&lt;br /&gt;
=INFO=&lt;br /&gt;
==INFO3==&lt;br /&gt;
&lt;br /&gt;
==INFO4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
* Dates : Lundi après-midi, Mardi après-midi  &lt;br /&gt;
* Lancement: &#039;&#039;&#039;21/01/19 à 14h30&#039;&#039;&#039;&lt;br /&gt;
* Soutenance à mi-parcours: A définir&lt;br /&gt;
* Soutenance: A définir&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi/mardi ???&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l&#039;auteur du code si il y a lieu, écrire un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), soumettre un patch/pull request, contacter l&#039;enseignant ou la personne référente du projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par info4_2018_2019. &#039;&#039;&#039;Cette fiche compte pour la note finale&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Votre code&#039;&#039;&#039; pour doit être hébergé sur le gitlab et à l&#039;URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19 , vous utiliserez votre compte UGA.&lt;br /&gt;
&lt;br /&gt;
* Chaque projet doit avoir &#039;&#039;&#039;aux moins 2 dépôts git&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Un pour les documents&#039;&#039;&#039; demandés rapport, présentation de pré-soutenante, de soutenance, flyer. &#039;&#039;&#039;Il sera appelé documents.&#039;&#039;&#039;&lt;br /&gt;
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. &lt;br /&gt;
&lt;br /&gt;
* Les documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;La note obtenue&#039;&#039;&#039; tiendra compte du &#039;&#039;&#039;nombre et de la qualité des commits&#039;&#039;&#039; observé dans &#039;&#039;&#039;vos dépots git et la branche master&#039;&#039;&#039; (or depot documents). La qualité comprend l&#039;intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n&#039;est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).&lt;br /&gt;
&lt;br /&gt;
* Il est fortement conseillé de suivre un &#039;&#039;&#039;développement incrémental&#039;&#039;&#039; qui permette d&#039;avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d&#039;une succession de &#039;&#039;&#039;démonstrateurs présentables séparément&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Vous devez faire aussi des &#039;&#039;&#039;schémas d&#039;architectures générales et/ou spéficiques, des diagrammes de séquence&#039;&#039;&#039;, et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.&lt;br /&gt;
&lt;br /&gt;
===Propositions de projets===&lt;br /&gt;
&lt;br /&gt;
* [[LoRaGAN]] : LoRa in the Space, Didier Donsez avec le [https://www.csug.fr/ CSUG] (S)&lt;br /&gt;
* [[LoRaRescueBalloon]], Didier Donsez avec le [https://www.csug.fr/ CSUG] et des élèves IESE 3 et 4. (S)&lt;br /&gt;
* Agriculture connectée à [[ASAC/AP|Polytech]] et à [[ASAC/SJC|St Cassien]] en partenariat avec les projets collectifs IESE/MAT&lt;br /&gt;
*# [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]] - Projet embarqué sur STM32 ou RPi3 + LoRa (S)&lt;br /&gt;
*# [[ASAC/AP/AP-2019-2|Serre Polytech - Kiosk]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
*# [[ASAC/SJC/SJC-2019|Serre St Cassien]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
* [[Projet FICHA - tri sélectif connecté]], Sylvain Toru.&lt;br /&gt;
* [[Dataviz de la qualité de l&#039;air]], Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT] (M)&lt;br /&gt;
* [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]], Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier] (M)&lt;br /&gt;
* [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Serious game multi-joueurs pour tables tactiles en réseau]] : Anne-Laure Finkel, Tim Lepage, Didier Donsez. (S&amp;amp;M)&lt;br /&gt;
* [[Interface de visualisation mobile du projet e-Tree]]: Anne Delaballe, Didier Donsez. (M)&lt;br /&gt;
* [[OpenHAB UPnP DCS 2018]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]], Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
* [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]], Olivier Richard (S)&lt;br /&gt;
* [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]], Olivier Richard (S)&lt;br /&gt;
* [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]], Olivier Richard (S)&lt;br /&gt;
* [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]], Olivier Richard (S)&lt;br /&gt;
* [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]], Olivier Richard (S&amp;amp;M)&lt;br /&gt;
* [[generate_NIX_expression | Génération d&#039;expression NIX]] (S)&lt;br /&gt;
 &lt;br /&gt;
Non prioritaire&lt;br /&gt;
* [[Précarité numérique]], Didier Donsez, avec [https://disrupt-campus.univ-grenoble-alpes.fr/ Disrupt Campus]&lt;br /&gt;
* [[Covoiturage Solidaire]], Didier Donsez&lt;br /&gt;
* [[CannonBall de voitures autonomes 2018]]&lt;br /&gt;
* Intégration de [[Walabot]] à [[RobAIR]]&lt;br /&gt;
&lt;br /&gt;
==== Affectation  ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO4 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN]]&lt;br /&gt;
 | VINCENT	Mathieu, SAUTON	Tanguy, ANCRENAZ	Ariane&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/1/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[LoRaRescueBalloon]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/2/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/3/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ASAC/AP/AP-2019-2|Serre Polytech]]&lt;br /&gt;
 | RAKOTOARIMALALA 	Andriamahatratra, BARDOU	Eva, GAUFFIER	Léni&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/4/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[ASAC/SJC/SJC-2019|Serre St Cassien]]&lt;br /&gt;
 | DECAMPS	Marceau, LANDI	Estelle, BONASPETTI	GIULIA&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/5/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Projet FICHA - tri sélectif connecté]]&lt;br /&gt;
 | SCHANEN	Loïc, VINCENT	Maxence, VANDAL	Jade&lt;br /&gt;
 | Sylvain Toru&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/6/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Dataviz de la qualité de l&#039;air]]&lt;br /&gt;
 | ZARCOS 	Paul, ZHENG	Jian, REYMOND	Estelle&lt;br /&gt;
 | Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/7/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]]&lt;br /&gt;
 | SERRE	Ancelin, BOUVIER	Baptiste, WYKLAND	Damien&lt;br /&gt;
 | Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/8/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]]&lt;br /&gt;
 | THOMAS	Antoine, RIVOIRE	Antoine, DENIS	Guillaume&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/9/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[Serious game multi-joueurs pour tables tactiles en réseau]]&lt;br /&gt;
 | DUMENIL	Antoine, BETEND	Baptiste, JAN 	Léo&lt;br /&gt;
 | Anne-Laure Finkel, Tim Lepage, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/10/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Interface de visualisation mobile du projet e-Tree]]&lt;br /&gt;
 | SOLVERY	Tom, SALA	Ergi, DUMAX-VORZET	Mathieu&lt;br /&gt;
 | Anne Delaballe, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/11/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[OpenHAB UPnP DCS 2018]]&lt;br /&gt;
 | VARENNE	Rémi, TRESTOUR	Grégory, SOUCHON	Loïc&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/12/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]]&lt;br /&gt;
 | LORDEY	Maxime, LATTARD	Alexis, GILBERT-COLLET	Bertrand&lt;br /&gt;
 | Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/13/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]]&lt;br /&gt;
 | REYGROBELLET 	Lucas, BRES 	Maxence, PELISSON	Antoine&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/14/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/15/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 16&lt;br /&gt;
 | [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]]&lt;br /&gt;
 | DALAINE	Nathan, FONTFREYDE	Joachim, GAUTIER-PIGNONBLANC	Yann&lt;br /&gt;
 | Olivier Richard, Adrien Faure&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/16/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17&lt;br /&gt;
 | [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/17/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 18&lt;br /&gt;
 | [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]]&lt;br /&gt;
 | BADAT	Léya, CUAU	Victor, MASSON	Jérémy&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/18/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 19&lt;br /&gt;
 | [[generate_NIX_expression | Génération d&#039;expression NIX]]&lt;br /&gt;
 | CHABRE	Manon, DE ARAUJO 	Bastien, COSCIA	Daniel&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/19/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 20&lt;br /&gt;
 | [[Gestion des Polypoints]]&lt;br /&gt;
 | CASTANO	Nicolas, SIBUE	Quentin, LAPLANTE	Juliette&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/20/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 21&lt;br /&gt;
 | [[Smart Recruting]]&lt;br /&gt;
 | GUILLOT	Romain, ARNOUX	Thibaut, CHASSEGUET	Corentin&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/21/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 22&lt;br /&gt;
 | [[Aide aux handicaps]]&lt;br /&gt;
 | JALMIN	Hoël, ALACALI	Kadir uraz, MASTOURA	Iheb&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/22/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==INFO5==&lt;br /&gt;
===Projet IoT S9===&lt;br /&gt;
Enseignants responsables : Bernard Tourancheau&lt;br /&gt;
&lt;br /&gt;
Calendrier: ??? Septembre à ??? Décembre 2017.&lt;br /&gt;
&lt;br /&gt;
* Projet IoT 3 : [[Ski-locator]] (Bernard Tourancheau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : [[user:Donsez | Didier Donsez]]&lt;br /&gt;
&lt;br /&gt;
Calendrier: Fin Janvier à Fin Mars 2019.&lt;br /&gt;
&lt;br /&gt;
Séances de Management de projets innovants:&lt;br /&gt;
&lt;br /&gt;
Réunion de présentation : Salle 249 de 11H30 a 12H30, Mercredi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Démarrage : A définir: Salle 251 de 8H30 a 11H00, Lundi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Soutenance à mi-parcours : 5 Mars, 9H00-11H30 (15 minutes par équipe).&lt;br /&gt;
&lt;br /&gt;
Soutenance (puis Pot de la fin) :  21 Mars de 12H00 à 18H30 salle P007.&lt;br /&gt;
&lt;br /&gt;
==== Affectations ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO5 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Documents&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN/INFO5A/2019|LoRaGAN]]&lt;br /&gt;
 | Thibaud VEGREVILLE,Aurélien SURIER GAROFALO&lt;br /&gt;
 | Didier Donsez, Bernard Tourancheau, Mathieu Barthélémy ([https://www.csug.fr/ CSUG])&lt;br /&gt;
 | [[PROJET-INFO5 1819 ThingSat| Fiche de suivi ]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-ThingSat.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Contributions open-source au projet Eclipse EdCampus]]&lt;br /&gt;
 | [[User:Servan.Charlot | CHARLOT Servan]] (chef de projet), [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | Anthony Geourjon, Gérard Pollier, Didier Donsez&lt;br /&gt;
 | [[PROJET-INFO5 1819 EDCampus | Fiche de suivi ]]&lt;br /&gt;
 | [[Media:Rapport-Projet-EDCampus-2019.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:EDCampus_Mi_Parcours_CHARLOT_CHANET.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[RICM5 2018 2019 - UGAChain|UGAChain 2019]] : [[Générateur Hyperledger pour JHipster]] : refactoring du projet [[RICM5 2017 2018 - UGAChain|UGAChain 2018]]&lt;br /&gt;
 | Loris GENTILLON, Jordan JEAN, Enzo MOLION, Léo VALETTE&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-UGAChain.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Aide aux déficients visuelles]] (deep-learning avec [[Intel Movidius]], [https://greenwaves-technologies.com/product/gapduino/ GAPDunio], [[Lidar]] 1D et 2D, ...)&lt;br /&gt;
 | Samuel Bamba, Florian Cuzin, Théo Echevet, Raphaël Manger&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco, Nicolas Vuillerme&lt;br /&gt;
 | [[ PROJET-INFO5_Aide_Deficients_Visuels | Fiche ]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-DeficientsVisuels.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Plateforme CampusIoT]]&lt;br /&gt;
 | &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Guillaume Besnard, Benjamin Besnier, Timothée Depriester, Théo Lévesque&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[PROJET-1FO5_1819_CampusIoT|Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-campusiot.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Rééducation Kiné connecté]]&lt;br /&gt;
 | &#039;&#039;&#039;Sekina Belguendouz (CP)&#039;&#039;&#039;, Vincent Aubert, Amina Boucherima, Najwa Ez-Zine&lt;br /&gt;
 | Sylvain Toru, Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-INFO5_Kiné_Connecté | Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:KinéConnectéMiParcours.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | Projet IoT 3 : [[Ski-locator]]&lt;br /&gt;
 | &#039;&#039;&#039;Quentin Fombaron (CP)&#039;&#039;&#039;, Tim Lepage, Thomas Ozenda, Joffrey Ferreira, Titouan Larnicol&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-1FO5_1819_SkiLocator|Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-skiLocator-2019.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Contributions open-source au projet JHipster]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo GROS-DAILLON (CP)&#039;&#039;&#039;, Julien COURTIAL, Cédric LAFRASSE, Bastien TERRIER&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | [[ PROJET-INFO5_Contributions_JHipster | Fiche ]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:Flyer-Contribution-JHipster-UGA.pdf|Flyer]] - [[Media:Jhipster_Contribution_miparcour_2019.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Réserve&lt;br /&gt;
* [[Contributions à Software Heritage]] (Didier Donsez and co)&lt;br /&gt;
* [[Sécurisation des données IoT avec des blockchains de consortium]] (Didier Donsez) --&amp;gt; commun avec CampusIoT et UGAChain&lt;br /&gt;
&lt;br /&gt;
==== Planning Soutenance Projet S10  ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Soutenance des projets INFO5 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Horaire&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | 12H00-12H45&lt;br /&gt;
 | [[LoRaGAN/INFO5A/2019|LoRaGAN]]&lt;br /&gt;
 | Thibaud VEGREVILLE,Aurélien SURIER GAROFALO&lt;br /&gt;
 | Didier Donsez, Bernard Tourancheau, Mathieu Barthélémy ([https://www.csug.fr/ CSUG])&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | 12H45-13H30&lt;br /&gt;
 | [[Contributions open-source au projet Eclipse EdCampus]]&lt;br /&gt;
 | [[User:Servan.Charlot | CHARLOT Servan]] (chef de projet), [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | Anthony Geourjon, Gérard Pollier, Didier Donsez&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | 13H30-14H15&lt;br /&gt;
 | [[Aide aux déficients visuelles]] (deep-learning avec [[Intel Movidius]], [https://greenwaves-technologies.com/product/gapduino/ GAPDunio], [[Lidar]] 1D et 2D, ...)&lt;br /&gt;
 | Samuel Bamba, Florian Cuzin, Théo Echevet, Raphaël Manger&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco, Nicolas Vuillerme&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | 14H30-15H15&lt;br /&gt;
 | [[Plateforme CampusIoT]]&lt;br /&gt;
 | &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Guillaume Besnard, Benjamin Besnier, Timothée Depriester, Théo Lévesque&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | 15H15-16H00&lt;br /&gt;
 | Projet IoT 3 : [[Ski-locator]]&lt;br /&gt;
 | &#039;&#039;&#039;Quentin Fombaron (CP)&#039;&#039;&#039;, Tim Lepage, Thomas Ozenda, Joffrey Ferreira, Titouan Larnicol&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | 16H00-16H45&lt;br /&gt;
 | [[RICM5 2018 2019 - UGAChain|UGAChain 2019]] : [[Générateur Hyperledger pour JHipster]] : refactoring du projet [[RICM5 2017 2018 - UGAChain|UGAChain 2018]]&lt;br /&gt;
 | &#039;&#039;&#039;Léo VALETTE (CP)&#039;&#039;&#039;, Loris GENTILLON, Jordan JEAN, Enzo MOLION&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | 17H00-17H45&lt;br /&gt;
 | [[Contributions open-source au projet JHipster]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo GROS-DAILLON (CP)&#039;&#039;&#039;, Julien COURTIAL, Cédric LAFRASSE, Bastien TERRIER&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | 17H45-18H30&lt;br /&gt;
 | [[Rééducation Kiné connecté]]&lt;br /&gt;
 | &#039;&#039;&#039;Sekina Belguendouz (CP)&#039;&#039;&#039;, Vincent Aubert, Amina Boucherima, Najwa Ez-Zine&lt;br /&gt;
 | Sylvain Toru, Bernard Tourancheau&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Instructions pour la soutenance====&lt;br /&gt;
Chaque soutenance comporte 5 minutes d&#039;installation et de désinstallation, 20 minutes de présentation, 10 minutes de question et 10 minutes de démonstration.&lt;br /&gt;
* La présentation est constituée des chapitres suivants:&lt;br /&gt;
** Rappel du sujet/besoin et cahier des charges&lt;br /&gt;
** Technologies employées&lt;br /&gt;
** Architecture techniques&lt;br /&gt;
** Réalisations techniques&lt;br /&gt;
** Gestion de projet (méthode, planning prévisionnel et effectif, gestion des risques, rôles des membres, ...)&lt;br /&gt;
** Outils (collaboration, CD/CI par exemple ...)&lt;br /&gt;
** Métriques logiciels : lignes de code, langages, performance, temps ingénieur (d&#039;après vos journaux)...)&lt;br /&gt;
** Conclusion (Retour d&#039;expérience)&lt;br /&gt;
** Transparent introduisant la démonstration&lt;br /&gt;
* Répétez plusieurs fois votre présentation et votre démonstration. Il y aura des personnalités invitées. Prévoyez un démonstration filmée pour palier à l&#039;effet &amp;quot;démo&amp;quot;.&lt;br /&gt;
* L&#039;ensemble des documents (y compris photos, vidéos et &#039;&#039;[[Logiciels#Screencast|screencast]]s&#039;&#039;) doivent être accessibles depuis le tableau ci-dessous et dans chaque fiche de suivi. Prévoyez une copie sur clé USB.&lt;br /&gt;
* &#039;&#039;&#039;TOUT Le matériel prêté devra être rapporté et restitué dans un sac cabas lors de la soutenance.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* L&#039;ensemble des documents demandé doit être accessible sur le wiki avant midi le 21/03. Le rapport final contient les mêmes chapitres que la présentation ainsi qu&#039;un glossaire et une bibliographie. Le rapport ne doit pas dépasser 10 pages (schémas et figures compris). Vous pourrez référencer les autres documents que vous avez produits au cours du projet (spécifications détaillées, algorithmes ...).&lt;br /&gt;
&lt;br /&gt;
= Projets collectifs MAT/IESE =&lt;br /&gt;
&lt;br /&gt;
== Années 3 et 4 ==&lt;br /&gt;
&lt;br /&gt;
* [[ASAC/SJC|Serres connectées @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/GEJC|Gestion de l&#039;eau @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/AP|Aquaponie @ Polytech]]&lt;br /&gt;
&lt;br /&gt;
=[[Projets M2PGI Services Machine-to-Machine et Internet-of-Things]]=&lt;br /&gt;
==[[PM2M/2019/TP|PM2M]]==&lt;br /&gt;
&lt;br /&gt;
=Réserve (boite à idées)=&lt;br /&gt;
# [http://www.opti-solar.com/french/ap_applications.fr.html |Interface contrôleur de charge batterie/PV]&lt;br /&gt;
# [[Sonotone à apprentissage profond]]&lt;br /&gt;
# [[StartAIR2]] (Nicolas Palix)&lt;br /&gt;
# [[Tag et Paint Ball en réalité augmentée]] (Michaël Périn) &lt;br /&gt;
# [[Passe moi ton fichier]] (Michaël Périn) &lt;br /&gt;
# [[Extensions à Fab Server]] (Jean-Michel Molenaar) sous reserve (CM ou SR)&lt;br /&gt;
# [[Table multijeux de café 2.0]]&lt;br /&gt;
# [[ GPIO_Qemu_RasPI| Emulation des GPIO dans QEMU pour le carte Raspberry Pi]] (Olivier Richard)&lt;br /&gt;
# [[ Qemu et STM32F0-Discovery ]] (Olivier Richard)&lt;br /&gt;
# [[Serrure à clé MIDI multifactorielle]] (Didier Donsez)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[iMailbox]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;ambience intelligent) (Didier Donsez)&lt;br /&gt;
# [[PDAmeetPDA]] (synchronisation d&#039;agenda) (Michaël Périn)&lt;br /&gt;
# [[1 000 000 VMs]] (expérimentation d&#039;application distribuée à très grande échelle) (Olivier Richard) (2-3 RICM4)&lt;br /&gt;
# [[Multiple Kinect]] (utilisation simultanée de plusieurs Kinect) (Olivier Richard) (RICM ou 3I)&lt;br /&gt;
# [[Kinect musicale]] (Didier Donsez) (RICM)&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# Ocaml on Cortex-M3&lt;br /&gt;
# [[Arduino on STM32 Discovery]]&lt;br /&gt;
# [[Reverse Geocache Puzzle Box]]&lt;br /&gt;
# [[OSGi ME]] (Didier Donsez)&lt;br /&gt;
# [[Affichage Etudiant à Polytech]]&lt;br /&gt;
# Synthèse 3D + motion capture Kinect&lt;br /&gt;
# Logiciel d&#039;[[apprentissage du calcul]] sur tablette Android (reconnaissance de chiffres manuscrits)&lt;br /&gt;
# Plancher de verre (saint gobain) à la [http://www.wat.tv/video/mickael-jackson-billie-jean-oewj_2ey2h_.html Mickael Jackson dans Billie Jean] ! woo&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[CNC]]&lt;br /&gt;
# [[Idées en Vrac]]&lt;br /&gt;
# Scheme Everywhere (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[Projet Station Météo]]&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;amnbience intelligent) (Didier Donsez)&lt;br /&gt;
# [[Cube pointeur]] d&#039;activité ingénieur&lt;br /&gt;
# [http://www.instructables.com/id/Puppeteer-Motion-Capture-Costume/ Puppeteer Motion-Capture Costume]&lt;br /&gt;
# [[Musical Staircase]] @ Polytech (Didier Donsez, 1 RICM4 + 1 3I4)&lt;br /&gt;
# [[Total Recall]] (Didier Donsez)&lt;br /&gt;
# [[SoundMachine]]&lt;br /&gt;
# [[IGN-OSM|Importation de données IGN publiques dans OSM]]&lt;br /&gt;
# [[Speed-limit-OSM|Analyse de traces GPX pour déterminer les limitations de vitesse]]&lt;br /&gt;
# [[Multi perceptual cameras]] (Didier Donsez)&lt;br /&gt;
# [[Photomaton 3D]] (Didier Donsez)&lt;br /&gt;
# [[ArduCopter]]&lt;br /&gt;
# [[Parking Intelligent]]&lt;br /&gt;
# Frontend Web multi-utilisateur pour un jeu sérieux d&#039;entreprise : Didier Donsez, Stéphanie Diligent, Emmanuelle Tréhoust.&lt;br /&gt;
# Construction d&#039;un roadbook d&#039;ultratrail (mais aussi trek, randonnée, cyclisme, ...) à partir de traces GPX et des réseaux sociaux (Strava, Trace de Trail, ...): Didier Donsez&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=45392</id>
		<title>Projets 2018-2019</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Projets_2018-2019&amp;diff=45392"/>
		<updated>2019-03-19T15:07:59Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Affectations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;&amp;lt;[[Projets 2017-2018]] | [[Projets]] | [[Projets 2019-2020]]&amp;gt;&amp;gt;&lt;br /&gt;
=INFO=&lt;br /&gt;
==INFO3==&lt;br /&gt;
&lt;br /&gt;
==INFO4==&lt;br /&gt;
===Projet Semestre S8===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : Olivier Richard, Didier Donsez&lt;br /&gt;
&lt;br /&gt;
* Dates : Lundi après-midi, Mardi après-midi  &lt;br /&gt;
* Lancement: &#039;&#039;&#039;21/01/19 à 14h30&#039;&#039;&#039;&lt;br /&gt;
* Soutenance à mi-parcours: A définir&lt;br /&gt;
* Soutenance: A définir&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Evaluation à mi-parcours le lundi/mardi ???&#039;&#039;&#039;: Format: 10min (5min de présentation 3 slides au plus, 5min de discussion). Cette évaluation sera prise en compte dans la note finale.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Consignes générales:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez être pro-actifs !!!&#039;&#039;&#039;: Si des points sont pas ou mals spécifiés, vous le faîtes et vous justifiez vos choix. Pour les problèmes techniques éventuels vous pouvez: creuser la question, contacter l&#039;auteur du code si il y a lieu, écrire un rapport de bug (&#039;&#039;&#039;Attention:&#039;&#039;&#039; ca se prépare !), soumettre un patch/pull request, contacter l&#039;enseignant ou la personne référente du projet.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Vous devez maintenir une fiche de suivi de projet&#039;&#039;&#039;: elle doit être mise à jour chaque semaine, elle rassemble les élements essentiels du projet, elle indique les évolutions du projet et présente sa feuille de route. &#039;&#039;&#039;Note:&#039;&#039;&#039; le nom de la fiche doit être composé du nom du projet et suffixé par info4_2018_2019. &#039;&#039;&#039;Cette fiche compte pour la note finale&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Votre code&#039;&#039;&#039; pour doit être hébergé sur le gitlab et à l&#039;URL suivante https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19 , vous utiliserez votre compte UGA.&lt;br /&gt;
&lt;br /&gt;
* Chaque projet doit avoir &#039;&#039;&#039;aux moins 2 dépôts git&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Un pour les documents&#039;&#039;&#039; demandés rapport, présentation de pré-soutenante, de soutenance, flyer. &#039;&#039;&#039;Il sera appelé documents.&#039;&#039;&#039;&lt;br /&gt;
** Un ou plusieurs pour le code, les tests, les évaluations, les preuves de concept, la ou les documentations afférentes. &lt;br /&gt;
&lt;br /&gt;
* Les documents public doivent être rédigés en anglais (README, documentation, commentaires de code, nom de variables et de fonctions). Une bonnification sera accordée si le rapport et les transparents sont en anglais (la soutenance sera en francais).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;La note obtenue&#039;&#039;&#039; tiendra compte du &#039;&#039;&#039;nombre et de la qualité des commits&#039;&#039;&#039; observé dans &#039;&#039;&#039;vos dépots git et la branche master&#039;&#039;&#039; (or depot documents). La qualité comprend l&#039;intitulé du commit et son contenu. Les notes pourront être différentiées dans un groupe, il n&#039;est pas acceptable de pas avoir de commit dans le(s) dépôt(s) du projet (or dépôt documents).&lt;br /&gt;
&lt;br /&gt;
* Il est fortement conseillé de suivre un &#039;&#039;&#039;développement incrémental&#039;&#039;&#039; qui permette d&#039;avoir à tout moment un démonstrateur à présenter, un projet peut être constituer d&#039;une succession de &#039;&#039;&#039;démonstrateurs présentables séparément&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Vous devez faire aussi des &#039;&#039;&#039;schémas d&#039;architectures générales et/ou spéficiques, des diagrammes de séquence&#039;&#039;&#039;, et autre documents de spécification si nécessaire. Ces documents vous serviront de base de discussion/brainstorming interne ainsi que dans vos différents documents (rapport, présentations, documentation). Ces schémas sont avant tout conceptuels et techniques.&lt;br /&gt;
&lt;br /&gt;
===Propositions de projets===&lt;br /&gt;
&lt;br /&gt;
* [[LoRaGAN]] : LoRa in the Space, Didier Donsez avec le [https://www.csug.fr/ CSUG] (S)&lt;br /&gt;
* [[LoRaRescueBalloon]], Didier Donsez avec le [https://www.csug.fr/ CSUG] et des élèves IESE 3 et 4. (S)&lt;br /&gt;
* Agriculture connectée à [[ASAC/AP|Polytech]] et à [[ASAC/SJC|St Cassien]] en partenariat avec les projets collectifs IESE/MAT&lt;br /&gt;
*# [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]] - Projet embarqué sur STM32 ou RPi3 + LoRa (S)&lt;br /&gt;
*# [[ASAC/AP/AP-2019-2|Serre Polytech - Kiosk]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
*# [[ASAC/SJC/SJC-2019|Serre St Cassien]] - Kiosk, App. mobile Android et site web de visualisation des données (M)&lt;br /&gt;
* [[Projet FICHA - tri sélectif connecté]], Sylvain Toru.&lt;br /&gt;
* [[Dataviz de la qualité de l&#039;air]], Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT] (M)&lt;br /&gt;
* [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]], Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier] (M)&lt;br /&gt;
* [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Serious game multi-joueurs pour tables tactiles en réseau]] : Anne-Laure Finkel, Tim Lepage, Didier Donsez. (S&amp;amp;M)&lt;br /&gt;
* [[Interface de visualisation mobile du projet e-Tree]]: Anne Delaballe, Didier Donsez. (M)&lt;br /&gt;
* [[OpenHAB UPnP DCS 2018]], Didier Donsez (S&amp;amp;M)&lt;br /&gt;
* [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]], Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
* [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]], Olivier Richard (S)&lt;br /&gt;
* [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]], Olivier Richard (S)&lt;br /&gt;
* [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]], Olivier Richard (S)&lt;br /&gt;
* [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]], Olivier Richard (S)&lt;br /&gt;
* [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]], Olivier Richard (S&amp;amp;M)&lt;br /&gt;
* [[generate_NIX_expression | Génération d&#039;expression NIX]] (S)&lt;br /&gt;
 &lt;br /&gt;
Non prioritaire&lt;br /&gt;
* [[Précarité numérique]], Didier Donsez, avec [https://disrupt-campus.univ-grenoble-alpes.fr/ Disrupt Campus]&lt;br /&gt;
* [[Covoiturage Solidaire]], Didier Donsez&lt;br /&gt;
* [[CannonBall de voitures autonomes 2018]]&lt;br /&gt;
* Intégration de [[Walabot]] à [[RobAIR]]&lt;br /&gt;
&lt;br /&gt;
==== Affectation  ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO4 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Dépot git&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN]]&lt;br /&gt;
 | VINCENT	Mathieu, SAUTON	Tanguy, ANCRENAZ	Ariane&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/1/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[LoRaRescueBalloon]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Didier Donsez avec le [https://www.csug.fr/ CSUG]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/2/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[ASAC/AP/AP-2019-1|Serre Polytech - Système embarqué]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/3/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[ASAC/AP/AP-2019-2|Serre Polytech]]&lt;br /&gt;
 | RAKOTOARIMALALA 	Andriamahatratra, BARDOU	Eva, GAUFFIER	Léni&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/4/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[ASAC/SJC/SJC-2019|Serre St Cassien]]&lt;br /&gt;
 | DECAMPS	Marceau, LANDI	Estelle, BONASPETTI	GIULIA&lt;br /&gt;
 | Nicolas Palix&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/5/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Projet FICHA - tri sélectif connecté]]&lt;br /&gt;
 | SCHANEN	Loïc, VINCENT	Maxence, VANDAL	Jade&lt;br /&gt;
 | Sylvain Toru&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/6/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | [[Dataviz de la qualité de l&#039;air]]&lt;br /&gt;
 | ZARCOS 	Paul, ZHENG	Jian, REYMOND	Estelle&lt;br /&gt;
 | Didier Donsez, avec Atmo AURA et [https://github.com/CampusIoT/campusiot.github.io CampusIoT]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/7/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Application mobile Ionic pour Cages à marmotte connectées en LoRaWAN]]&lt;br /&gt;
 | SERRE	Ancelin, BOUVIER	Baptiste, WYKLAND	Damien&lt;br /&gt;
 | Didier Donsez, Franck Delbard, avec le [https://www.jardinalpindulautaret.fr/ Station alpine Joseph Fourier]&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/8/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 9&lt;br /&gt;
 | [[Testeur radio LoRaWAN en Ionic pour la plateforme CampusIoT]]&lt;br /&gt;
 | THOMAS	Antoine, RIVOIRE	Antoine, DENIS	Guillaume&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/9/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 10&lt;br /&gt;
 | [[Serious game multi-joueurs pour tables tactiles en réseau]]&lt;br /&gt;
 | DUMENIL	Antoine, BETEND	Baptiste, JAN 	Léo&lt;br /&gt;
 | Anne-Laure Finkel, Tim Lepage, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/10/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 11&lt;br /&gt;
 | [[Interface de visualisation mobile du projet e-Tree]]&lt;br /&gt;
 | SOLVERY	Tom, SALA	Ergi, DUMAX-VORZET	Mathieu&lt;br /&gt;
 | Anne Delaballe, Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/11/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 12&lt;br /&gt;
 | [[OpenHAB UPnP DCS 2018]]&lt;br /&gt;
 | VARENNE	Rémi, TRESTOUR	Grégory, SOUCHON	Loïc&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/12/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 13&lt;br /&gt;
 | [[Application mobile Ionic pour cabine de biathlon connectée en LoRa]]&lt;br /&gt;
 | LORDEY	Maxime, LATTARD	Alexis, GILBERT-COLLET	Bertrand&lt;br /&gt;
 | Didier Donsez et d&#039;autres avec Neoxia&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/13/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 14&lt;br /&gt;
 | [[P2P_IPFS | Réseau social pair-à-pair basé sur IPFS]]&lt;br /&gt;
 | REYGROBELLET 	Lucas, BRES 	Maxence, PELISSON	Antoine&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/14/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 15&lt;br /&gt;
 | [[proxy_web_oar | Service de Proxy web pour un gestionnaire de tâches]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/15/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 16&lt;br /&gt;
 | [[Colmet_energy | Mesure de consommation d&#039;énergie et de perfomance pour cluster]]&lt;br /&gt;
 | DALAINE	Nathan, FONTFREYDE	Joachim, GAUTIER-PIGNONBLANC	Yann&lt;br /&gt;
 | Olivier Richard, Adrien Faure&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/16/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 17&lt;br /&gt;
 | [[kanixfs | Diffusion de fichiers pour le gestionnaire de paquets NIX sur supercalculateur]]&lt;br /&gt;
 | Non attribué&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/17/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 18&lt;br /&gt;
 | [[dashboard_sci | Générateur de tableau de bord pour applications scientifiques]]&lt;br /&gt;
 | BADAT	Léya, CUAU	Victor, MASSON	Jérémy&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/18/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 19&lt;br /&gt;
 | [[generate_NIX_expression | Génération d&#039;expression NIX]]&lt;br /&gt;
 | CHABRE	Manon, DE ARAUJO 	Bastien, COSCIA	Daniel&lt;br /&gt;
 | Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/19/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 20&lt;br /&gt;
 | [[Gestion des Polypoints]]&lt;br /&gt;
 | CASTANO	Nicolas, SIBUE	Quentin, LAPLANTE	Juliette&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/20/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 21&lt;br /&gt;
 | [[Smart Recruting]]&lt;br /&gt;
 | GUILLOT	Romain, ARNOUX	Thibaut, CHASSEGUET	Corentin&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/21/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 22&lt;br /&gt;
 | [[Aide aux handicaps]]&lt;br /&gt;
 | JALMIN	Hoël, ALACALI	Kadir uraz, MASTOURA	Iheb&lt;br /&gt;
 | Didier Donsez, Olivier Richard&lt;br /&gt;
 | [https://gricad-gitlab.univ-grenoble-alpes.fr/Projets-INFO4/18-19/22/docs/README.md Fiche]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:xxx.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==INFO5==&lt;br /&gt;
===Projet IoT S9===&lt;br /&gt;
Enseignants responsables : Bernard Tourancheau&lt;br /&gt;
&lt;br /&gt;
Calendrier: ??? Septembre à ??? Décembre 2017.&lt;br /&gt;
&lt;br /&gt;
* Projet IoT 3 : [[Ski-locator]] (Bernard Tourancheau)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Projet Semestre S10===&lt;br /&gt;
&lt;br /&gt;
Enseignants responsables : [[user:Donsez | Didier Donsez]]&lt;br /&gt;
&lt;br /&gt;
Calendrier: Fin Janvier à Fin Mars 2019.&lt;br /&gt;
&lt;br /&gt;
Séances de Management de projets innovants:&lt;br /&gt;
&lt;br /&gt;
Réunion de présentation : Salle 249 de 11H30 a 12H30, Mercredi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Démarrage : A définir: Salle 251 de 8H30 a 11H00, Lundi 23 Janvier. Faire couler le café.&lt;br /&gt;
&lt;br /&gt;
Soutenance à mi-parcours : 5 Mars, 9H00-11H30 (15 minutes par équipe).&lt;br /&gt;
&lt;br /&gt;
Soutenance (puis Pot de la fin) :  21 Mars de 12H00 à 18H30 salle P007.&lt;br /&gt;
&lt;br /&gt;
==== Affectations ====&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Affectation des projets INFO5 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Fiche de suivi&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Documents&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | [[LoRaGAN/INFO5A/2019|LoRaGAN]]&lt;br /&gt;
 | Thibaud VEGREVILLE,Aurélien SURIER GAROFALO&lt;br /&gt;
 | Didier Donsez, Bernard Tourancheau, Mathieu Barthélémy ([https://www.csug.fr/ CSUG])&lt;br /&gt;
 | [[PROJET-INFO5 1819 ThingSat| Fiche de suivi ]]&lt;br /&gt;
 | [[Media:xxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-ThingSat.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | [[Contributions open-source au projet Eclipse EdCampus]]&lt;br /&gt;
 | [[User:Servan.Charlot | CHARLOT Servan]] (chef de projet), [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | Anthony Geourjon, Gérard Pollier, Didier Donsez&lt;br /&gt;
 | [[PROJET-INFO5 1819 EDCampus | Fiche de suivi ]]&lt;br /&gt;
 | [[File:Rapport-Projet-EDCampus-2019.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:EDCampus_Mi_Parcours_CHARLOT_CHANET.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | [[RICM5 2018 2019 - UGAChain|UGAChain 2019]] : [[Générateur Hyperledger pour JHipster]] : refactoring du projet [[RICM5 2017 2018 - UGAChain|UGAChain 2018]]&lt;br /&gt;
 | Loris GENTILLON, Jordan JEAN, Enzo MOLION, Léo VALETTE&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | TBD&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-UGAChain.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | [[Aide aux déficients visuelles]] (deep-learning avec [[Intel Movidius]], [https://greenwaves-technologies.com/product/gapduino/ GAPDunio], [[Lidar]] 1D et 2D, ...)&lt;br /&gt;
 | Samuel Bamba, Florian Cuzin, Théo Echevet, Raphaël Manger&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco, Nicolas Vuillerme&lt;br /&gt;
 | [[ PROJET-INFO5_Aide_Deficients_Visuels | Fiche ]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-DeficientsVisuels.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | [[Plateforme CampusIoT]]&lt;br /&gt;
 | &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Guillaume Besnard, Benjamin Besnier, Timothée Depriester, Théo Lévesque&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 | [[PROJET-1FO5_1819_CampusIoT|Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-campusiot.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | [[Rééducation Kiné connecté]]&lt;br /&gt;
 | &#039;&#039;&#039;Sekina Belguendouz (CP)&#039;&#039;&#039;, Vincent Aubert, Amina Boucherima, Najwa Ez-Zine&lt;br /&gt;
 | Sylvain Toru, Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-INFO5_Kiné_Connecté | Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:KinéConnectéMiParcours.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | Projet IoT 3 : [[Ski-locator]]&lt;br /&gt;
 | &#039;&#039;&#039;Quentin Fombaron (CP)&#039;&#039;&#039;, Tim Lepage, Thomas Ozenda, Joffrey Ferreira, Titouan Larnicol&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 | [[PROJET-1FO5_1819_SkiLocator|Fiche]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:xxx.pdf|Flyer]] - [[Media:Presentation-MiParcours-skiLocator-2019.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | [[Contributions open-source au projet JHipster]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo GROS-DAILLON (CP)&#039;&#039;&#039;, Julien COURTIAL, Cédric LAFRASSE, Bastien TERRIER&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 | [[ PROJET-INFO5_Contributions_JHipster | Fiche ]]&lt;br /&gt;
 | [[Media:Presentationxxx.pdf|Rapport final]] - [[Media:xxx.pdf|Presentation finale FR]] - [[Media:xxx.pdf|Final Presentation EN]] - [[Media:Flyer-Contribution-JHipster-UGA.pdf|Flyer]] - [[Media:Jhipster_Contribution_miparcour_2019.pdf|Presentation de mi-parcours]]&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Réserve&lt;br /&gt;
* [[Contributions à Software Heritage]] (Didier Donsez and co)&lt;br /&gt;
* [[Sécurisation des données IoT avec des blockchains de consortium]] (Didier Donsez) --&amp;gt; commun avec CampusIoT et UGAChain&lt;br /&gt;
&lt;br /&gt;
==== Planning Soutenance Projet S10  ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
 |+ Soutenance des projets INFO5 2018-2019&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Horaire&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Sujet&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Etudiants&lt;br /&gt;
 !scope=&amp;quot;col&amp;quot;| Enseignant(s)&lt;br /&gt;
&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 1&lt;br /&gt;
 | 12H00-12H45&lt;br /&gt;
 | [[LoRaGAN/INFO5A/2019|LoRaGAN]]&lt;br /&gt;
 | Thibaud VEGREVILLE,Aurélien SURIER GAROFALO&lt;br /&gt;
 | Didier Donsez, Bernard Tourancheau, Mathieu Barthélémy ([https://www.csug.fr/ CSUG])&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 2&lt;br /&gt;
 | 12H45-13H30&lt;br /&gt;
 | [[Contributions open-source au projet Eclipse EdCampus]]&lt;br /&gt;
 | [[User:Servan.Charlot | CHARLOT Servan]] (chef de projet), [[User:Zoran.Chanet | CHANET Zoran]]&lt;br /&gt;
 | Anthony Geourjon, Gérard Pollier, Didier Donsez&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 4&lt;br /&gt;
 | 13H30-14H15&lt;br /&gt;
 | [[Aide aux déficients visuelles]] (deep-learning avec [[Intel Movidius]], [https://greenwaves-technologies.com/product/gapduino/ GAPDunio], [[Lidar]] 1D et 2D, ...)&lt;br /&gt;
 | Samuel Bamba, Florian Cuzin, Théo Echevet, Raphaël Manger&lt;br /&gt;
 | Didier Donsez, Marie-Paule Balicco, Nicolas Vuillerme&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 5&lt;br /&gt;
 | 14H30-15H15&lt;br /&gt;
 | [[Plateforme CampusIoT]]&lt;br /&gt;
 | &#039;&#039;&#039;William Weill (CP)&#039;&#039;&#039;, Guillaume Besnard, Benjamin Besnier, Timothée Depriester, Théo Lévesque&lt;br /&gt;
 | Didier Donsez&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 7&lt;br /&gt;
 | 15H15-16H00&lt;br /&gt;
 | Projet IoT 3 : [[Ski-locator]]&lt;br /&gt;
 | &#039;&#039;&#039;Quentin Fombaron (CP)&#039;&#039;&#039;, Tim Lepage, Thomas Ozenda, Joffrey Ferreira, Titouan Larnicol&lt;br /&gt;
 | Bernard Tourancheau&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 3&lt;br /&gt;
 | 16H00-16H45&lt;br /&gt;
 | [[RICM5 2018 2019 - UGAChain|UGAChain 2019]] : [[Générateur Hyperledger pour JHipster]] : refactoring du projet [[RICM5 2017 2018 - UGAChain|UGAChain 2018]]&lt;br /&gt;
 | &#039;&#039;&#039;Léo VALETTE (CP)&#039;&#039;&#039;, Loris GENTILLON, Jordan JEAN, Enzo MOLION&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 8&lt;br /&gt;
 | 17H00-17H45&lt;br /&gt;
 | [[Contributions open-source au projet JHipster]]&lt;br /&gt;
 | &#039;&#039;&#039;Hugo GROS-DAILLON (CP)&#039;&#039;&#039;, Julien COURTIAL, Cédric LAFRASSE, Bastien TERRIER&lt;br /&gt;
 | Didier Donsez, Anthony Geourjon&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
!scope=&amp;quot;row&amp;quot;| 6&lt;br /&gt;
 | 17H45-18H30&lt;br /&gt;
 | [[Rééducation Kiné connecté]]&lt;br /&gt;
 | &#039;&#039;&#039;Sekina Belguendouz (CP)&#039;&#039;&#039;, Vincent Aubert, Amina Boucherima, Najwa Ez-Zine&lt;br /&gt;
 | Sylvain Toru, Bernard Tourancheau&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Instructions pour la soutenance====&lt;br /&gt;
Chaque soutenance comporte 5 minutes d&#039;installation et de désinstallation, 20 minutes de présentation, 10 minutes de question et 10 minutes de démonstration.&lt;br /&gt;
* La présentation est constituée des chapitres suivants:&lt;br /&gt;
** Rappel du sujet/besoin et cahier des charges&lt;br /&gt;
** Technologies employées&lt;br /&gt;
** Architecture techniques&lt;br /&gt;
** Réalisations techniques&lt;br /&gt;
** Gestion de projet (méthode, planning prévisionnel et effectif, gestion des risques, rôles des membres, ...)&lt;br /&gt;
** Outils (collaboration, CD/CI par exemple ...)&lt;br /&gt;
** Métriques logiciels : lignes de code, langages, performance, temps ingénieur (d&#039;après vos journaux)...)&lt;br /&gt;
** Conclusion (Retour d&#039;expérience)&lt;br /&gt;
** Transparent introduisant la démonstration&lt;br /&gt;
* Répétez plusieurs fois votre présentation et votre démonstration. Il y aura des personnalités invitées. Prévoyez un démonstration filmée pour palier à l&#039;effet &amp;quot;démo&amp;quot;.&lt;br /&gt;
* L&#039;ensemble des documents (y compris photos, vidéos et &#039;&#039;[[Logiciels#Screencast|screencast]]s&#039;&#039;) doivent être accessibles depuis le tableau ci-dessous et dans chaque fiche de suivi. Prévoyez une copie sur clé USB.&lt;br /&gt;
* &#039;&#039;&#039;TOUT Le matériel prêté devra être rapporté et restitué dans un sac cabas lors de la soutenance.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* L&#039;ensemble des documents demandé doit être accessible sur le wiki avant midi le 21/03. Le rapport final contient les mêmes chapitres que la présentation ainsi qu&#039;un glossaire et une bibliographie. Le rapport ne doit pas dépasser 10 pages (schémas et figures compris). Vous pourrez référencer les autres documents que vous avez produits au cours du projet (spécifications détaillées, algorithmes ...).&lt;br /&gt;
&lt;br /&gt;
= Projets collectifs MAT/IESE =&lt;br /&gt;
&lt;br /&gt;
== Années 3 et 4 ==&lt;br /&gt;
&lt;br /&gt;
* [[ASAC/SJC|Serres connectées @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/GEJC|Gestion de l&#039;eau @ Jardin du coteau]]&lt;br /&gt;
* [[ASAC/AP|Aquaponie @ Polytech]]&lt;br /&gt;
&lt;br /&gt;
=[[Projets M2PGI Services Machine-to-Machine et Internet-of-Things]]=&lt;br /&gt;
==[[PM2M/2019/TP|PM2M]]==&lt;br /&gt;
&lt;br /&gt;
=Réserve (boite à idées)=&lt;br /&gt;
# [http://www.opti-solar.com/french/ap_applications.fr.html |Interface contrôleur de charge batterie/PV]&lt;br /&gt;
# [[Sonotone à apprentissage profond]]&lt;br /&gt;
# [[StartAIR2]] (Nicolas Palix)&lt;br /&gt;
# [[Tag et Paint Ball en réalité augmentée]] (Michaël Périn) &lt;br /&gt;
# [[Passe moi ton fichier]] (Michaël Périn) &lt;br /&gt;
# [[Extensions à Fab Server]] (Jean-Michel Molenaar) sous reserve (CM ou SR)&lt;br /&gt;
# [[Table multijeux de café 2.0]]&lt;br /&gt;
# [[ GPIO_Qemu_RasPI| Emulation des GPIO dans QEMU pour le carte Raspberry Pi]] (Olivier Richard)&lt;br /&gt;
# [[ Qemu et STM32F0-Discovery ]] (Olivier Richard)&lt;br /&gt;
# [[Serrure à clé MIDI multifactorielle]] (Didier Donsez)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[iMailbox]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;ambience intelligent) (Didier Donsez)&lt;br /&gt;
# [[PDAmeetPDA]] (synchronisation d&#039;agenda) (Michaël Périn)&lt;br /&gt;
# [[1 000 000 VMs]] (expérimentation d&#039;application distribuée à très grande échelle) (Olivier Richard) (2-3 RICM4)&lt;br /&gt;
# [[Multiple Kinect]] (utilisation simultanée de plusieurs Kinect) (Olivier Richard) (RICM ou 3I)&lt;br /&gt;
# [[Kinect musicale]] (Didier Donsez) (RICM)&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# Ocaml on Cortex-M3&lt;br /&gt;
# [[Arduino on STM32 Discovery]]&lt;br /&gt;
# [[Reverse Geocache Puzzle Box]]&lt;br /&gt;
# [[OSGi ME]] (Didier Donsez)&lt;br /&gt;
# [[Affichage Etudiant à Polytech]]&lt;br /&gt;
# Synthèse 3D + motion capture Kinect&lt;br /&gt;
# Logiciel d&#039;[[apprentissage du calcul]] sur tablette Android (reconnaissance de chiffres manuscrits)&lt;br /&gt;
# Plancher de verre (saint gobain) à la [http://www.wat.tv/video/mickael-jackson-billie-jean-oewj_2ey2h_.html Mickael Jackson dans Billie Jean] ! woo&lt;br /&gt;
# [[Ktechlab Simavr Arduino | Ktechlab et integration de Simavr(Arduino)]] (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[CNC]]&lt;br /&gt;
# [[Idées en Vrac]]&lt;br /&gt;
# Scheme Everywhere (Olivier Richard) (2-3 RICM4-SR)&lt;br /&gt;
# [[Projet Station Météo]]&lt;br /&gt;
# Ocaml on AVR (Arduino)&lt;br /&gt;
# [[Table interactive musicale]] (Didier Donsez)&lt;br /&gt;
# [[AmILight]] (eclairage d&#039;amnbience intelligent) (Didier Donsez)&lt;br /&gt;
# [[Cube pointeur]] d&#039;activité ingénieur&lt;br /&gt;
# [http://www.instructables.com/id/Puppeteer-Motion-Capture-Costume/ Puppeteer Motion-Capture Costume]&lt;br /&gt;
# [[Musical Staircase]] @ Polytech (Didier Donsez, 1 RICM4 + 1 3I4)&lt;br /&gt;
# [[Total Recall]] (Didier Donsez)&lt;br /&gt;
# [[SoundMachine]]&lt;br /&gt;
# [[IGN-OSM|Importation de données IGN publiques dans OSM]]&lt;br /&gt;
# [[Speed-limit-OSM|Analyse de traces GPX pour déterminer les limitations de vitesse]]&lt;br /&gt;
# [[Multi perceptual cameras]] (Didier Donsez)&lt;br /&gt;
# [[Photomaton 3D]] (Didier Donsez)&lt;br /&gt;
# [[ArduCopter]]&lt;br /&gt;
# [[Parking Intelligent]]&lt;br /&gt;
# Frontend Web multi-utilisateur pour un jeu sérieux d&#039;entreprise : Didier Donsez, Stéphanie Diligent, Emmanuelle Tréhoust.&lt;br /&gt;
# Construction d&#039;un roadbook d&#039;ultratrail (mais aussi trek, randonnée, cyclisme, ...) à partir de traces GPX et des réseaux sociaux (Strava, Trace de Trail, ...): Didier Donsez&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Rapport-Projet-EDCampus-2019.pdf&amp;diff=45391</id>
		<title>File:Rapport-Projet-EDCampus-2019.pdf</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Rapport-Projet-EDCampus-2019.pdf&amp;diff=45391"/>
		<updated>2019-03-19T15:07:03Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45347</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45347"/>
		<updated>2019-03-18T18:25:09Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;br /&gt;
&lt;br /&gt;
== Platforme ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 P1.png&lt;br /&gt;
File:EDCampus 2019 P2.png&lt;br /&gt;
File:EDCampus 2019 P3.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vitrine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 VitrineUni.png&lt;br /&gt;
File:EDCampus 2019 Vitrine1.png&lt;br /&gt;
File:EDCampus 2019 Vitrine2.png&lt;br /&gt;
File:EDCampus 2019 Vitrine3.png&lt;br /&gt;
File:EDCampus 2019 Vitrine4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_P3.png&amp;diff=45346</id>
		<title>File:EDCampus 2019 P3.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_P3.png&amp;diff=45346"/>
		<updated>2019-03-18T18:24:18Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_P2.png&amp;diff=45345</id>
		<title>File:EDCampus 2019 P2.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_P2.png&amp;diff=45345"/>
		<updated>2019-03-18T18:24:10Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45344</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45344"/>
		<updated>2019-03-18T18:23:56Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Captures d’écran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;br /&gt;
&lt;br /&gt;
== Platforme ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 P1.png&lt;br /&gt;
File:EDCampus 2019 P2.png&lt;br /&gt;
File:EDCampus 2019 P3.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vitrine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:EDCampus 2019 VitrineUni.png&lt;br /&gt;
File:EDCampus 2019 Vitrine1.png&lt;br /&gt;
File:EDCampus 2019 Vitrine2.png&lt;br /&gt;
File:EDCampus 2019 Vitrine3.png&lt;br /&gt;
File:EDCampus 2019 Vitrine4.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_P1.png&amp;diff=45343</id>
		<title>File:EDCampus 2019 P1.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_P1.png&amp;diff=45343"/>
		<updated>2019-03-18T18:23:34Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_Vitrine4.png&amp;diff=45342</id>
		<title>File:EDCampus 2019 Vitrine4.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_Vitrine4.png&amp;diff=45342"/>
		<updated>2019-03-18T18:22:39Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_Vitrine3.png&amp;diff=45341</id>
		<title>File:EDCampus 2019 Vitrine3.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_Vitrine3.png&amp;diff=45341"/>
		<updated>2019-03-18T18:22:27Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_Vitrine2.png&amp;diff=45340</id>
		<title>File:EDCampus 2019 Vitrine2.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_Vitrine2.png&amp;diff=45340"/>
		<updated>2019-03-18T18:22:15Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_Vitrine1.png&amp;diff=45339</id>
		<title>File:EDCampus 2019 Vitrine1.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_Vitrine1.png&amp;diff=45339"/>
		<updated>2019-03-18T18:21:47Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_VitrineUni.png&amp;diff=45338</id>
		<title>File:EDCampus 2019 VitrineUni.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_VitrineUni.png&amp;diff=45338"/>
		<updated>2019-03-18T18:20:30Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45337</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45337"/>
		<updated>2019-03-18T18:16:43Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* PLatforme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;br /&gt;
&lt;br /&gt;
== Platforme ==&lt;br /&gt;
&lt;br /&gt;
== Vitrine ==&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45336</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45336"/>
		<updated>2019-03-18T18:16:36Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Captures d’écran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;br /&gt;
&lt;br /&gt;
== PLatforme ==&lt;br /&gt;
&lt;br /&gt;
== Vitrine ==&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45335</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45335"/>
		<updated>2019-03-18T18:15:58Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Carnet de bord */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;br /&gt;
&lt;br /&gt;
= Captures d’écran =&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45329</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45329"/>
		<updated>2019-03-18T15:55:01Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction de ce soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45328</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45328"/>
		<updated>2019-03-18T15:42:40Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer un label d&#039;un nom au choix si il y a déjà un label de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45323</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45323"/>
		<updated>2019-03-18T15:11:55Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait une vérification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a déjà une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45321</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45321"/>
		<updated>2019-03-18T14:37:54Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* 11/03/19 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un versification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a déjà une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 - Vitrine ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;)&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
* Création d&#039;une page vitrine de projet&lt;br /&gt;
** Ecriture de cette page comme un composant AngularJS, pour coller à la nouvelle méthode&lt;br /&gt;
** Création des sections principales (titre, description, membres)&lt;br /&gt;
* Harmonisation du visuel&lt;br /&gt;
** Beaucoup de CSS&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
* Ajout de nouvelles sections&lt;br /&gt;
** Modification des requêtes et des droits pour rendre public les informations souhaitées&lt;br /&gt;
** Sections dates, thèmes, mots-clés, organisations&lt;br /&gt;
* Réunion/démonstration avec Gérard&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
* Création de la section livrables&lt;br /&gt;
** Nombreux ajustements sur les requêtes&lt;br /&gt;
* Implémentation des url externes comme livrable&lt;br /&gt;
** Section url externe à la remise des livrables&lt;br /&gt;
** Gestion des url en base&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;br /&gt;
* Gestion des droits de téléchargement des livrables depuis la vitrine&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Youtube&lt;br /&gt;
* Réunion/démonstration avec l&#039;équipe Disrupt campus&lt;br /&gt;
* Gestion des url externes de vidéo comme vidéo embarquées&lt;br /&gt;
** Vimeo&lt;br /&gt;
** Dailymotion&lt;br /&gt;
* Gestion du renommage des url&lt;br /&gt;
** Ajout d&#039;un champ de renommage à la remise des livrables&lt;br /&gt;
** Prise en compte de ce nom dans l&#039;affichage de la vitrine&lt;br /&gt;
* Correction de l&#039;affichage d&#039;aperçu lors de l&#039;ajout d&#039;un url externe&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45258</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45258"/>
		<updated>2019-03-11T14:25:24Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Semaine 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un versification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a déjà une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 7 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45257</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45257"/>
		<updated>2019-03-11T14:25:12Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un versification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a déjà une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45256</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45256"/>
		<updated>2019-03-11T14:25:03Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un versification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a déjà une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
Vacances d&#039;hiver.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45255</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45255"/>
		<updated>2019-03-11T14:23:46Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus valu de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], présentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du système de fichier et son implémentation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Élève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un versification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a déjà une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du système événementiel pour corriger les défauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problèmes des mise a jour a de la vue du système de tache. Le soucis étant que les taches et le petit menu qui indique les détails ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualiser l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le système de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il était censé récupérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45254</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45254"/>
		<updated>2019-03-11T14:21:33Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développée par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumise à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Système de droits entièrement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui vérifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un versification pour empêcher tout utilisateur non administrateur d’exécuter une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numéro pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il décide que si le nom n&#039;est que des numéros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifier la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s’exécute exclusivement sur une string. J&#039;ai donc réalise un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que nécessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutôt que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appelée après la suppression.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
* Correction des projets affichés en vitrine&lt;br /&gt;
** Affichage des projets fils et indépendants seulement (pas les portefeuilles)&lt;br /&gt;
** Explicitation du nom des projets fils (Si &#039;&#039;Equipe A&#039;&#039; appartient au portefeuille &#039;&#039;Défi 3&#039;&#039;, son nom affiché sera &#039;&#039;Défi 3 &amp;gt; Equipe A&#039;&#039;&lt;br /&gt;
* Ajout d&#039;un texte de remplacement lorsqu&#039;une section est vide (plus élégant qu&#039;un grand espace vide)&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45251</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45251"/>
		<updated>2019-03-11T12:24:08Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Archéologie sur le prototype de vitrine&lt;br /&gt;
* Réparation des appels au serveur opérés par le prototype de vitrine existant&lt;br /&gt;
** La vitrine étant écrite en php et non en utilisant AngularJS comme le reste du front-end, la gestion des appels est différente&lt;br /&gt;
** Correction du lien par lequel le serveur est appelé&lt;br /&gt;
** Correction des arguments et de la commande donnés lors de l&#039;appel au serveur&lt;br /&gt;
* Correction du nombre de projets affichés avant extension&lt;br /&gt;
* Prospection pour l&#039;utilisation future de la vitrine&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. L&#039;administrateur peut choisir dans son profil quel est son campus principal, et cela est utile entre autres dans la partie communication de son dashboard. C&#039;est à cet endroit qu&#039;il peut choisir de rendre publique la page de son université (ie. la vitrine). A cet endroit, la vitrine est renseignée par un lien (&amp;lt;code&amp;gt;http://localhost/app/campus/?u=UGA&amp;lt;/code&amp;gt;), contenant le nom du campus au bout (UGA). Le bug faisait que ce nom n&#039;était pas affiché et donc l&#039;URL était incomplet. Le soucis venait du backend, ou la requête du campus à la base ne demandait pas le champ nom.&lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45249</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45249"/>
		<updated>2019-03-11T12:18:04Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Correction d&#039;un bug empêchant l&#039;envoi d&#039;e-mail lors de l&#039;ajout d&#039;un utilisateur à un projet&lt;br /&gt;
* Prospection dans le code et la base de donnée pour permettre l&#039;affichage ou non des évaluations dans le menu des projets. La section des évaluations étant gérée différemment des autres sections, ce travail nécessitera plus de temps que prévu et a donc été reporté au profit de la vitrine&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Semaine 6 ==&lt;br /&gt;
&lt;br /&gt;
=== 11/03/19 ===&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug d&#039;affichage. &lt;br /&gt;
&lt;br /&gt;
=== 12/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 13/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 14/03/19 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 15/03/19 ===&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45246</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45246"/>
		<updated>2019-03-11T12:15:37Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Succès de la mise en place d&#039;HTTPS dans un docker&lt;br /&gt;
** Modification de &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; pour lier les ports 443 de l&#039;hôte et du conteneur&lt;br /&gt;
** Finalisation de la configuration d&#039;Apache dans le conteneur&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allait être difficile à mettre en place sur le backend du projet. En effet, toutes les fonctions sont en &#039;&#039;static&#039;&#039; et il est impossible de mocker les fonctions statiques avec PHPUnit. Il faudrait donc revoir l&#039;architecture du code pour mocker le statique, et donc remplacer les appels à la base de données par des appels simulés. Cela éviterait d&#039;avoir à créer une base externe accessible ou construire une base dans le runner du pipeline. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donné priorité à la vitrine, suite à une réunion avec les membres de Disrupt campus. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peut consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peut consulter la liste des projets d&#039;une université, et des pages de projet individuelles avec une image, une description et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction d&#039;un bug en rapport avec les accents dans les noms. Lorsque qu&#039;un utilisateur possède un accent dans son nom (ex: Amélie), au moment de la création du login la chaîne de caractère est mal interprétée et le login est tronqué au niveau de l&#039;accent (ex: amY). L&#039;architecture fait que lors du transfert du nom du front vers le back, l&#039;accent est codé avec des caractères classiques, qui sont ensuite interprétés correctement lors de l&#039;ajout en base. Mais cela veux dire que pendant tout le passage en backend on travaille avec des accents codés. Le login était créé à partir du nom et du prénom de l&#039;utilisateur, qui peuvent donc être temporairement corrompus par des accents codés. La correction à se soucis est donc détecter la présence d&#039;accents dans les noms, et si il y en a, créer le login à partir de la première partie de l&#039;adresse mail de l&#039;utilisateur (avant le @), sinon, on fait comme avant avec les noms.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45242</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45242"/>
		<updated>2019-03-11T12:03:49Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allais être difficile à mettre ne place sur le backend du projet. En effet, toutes les fonctions sont en static et PHPUnit ne marche pas sur le static. Il faudrait donc revoir l&#039;architecture du code pour masquer le statique. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donner priorité à la vitrine. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peuvent consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peux consulter la liste des projets d&#039;une université, et des pages de projets individuelles avec une image, une descriptions et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45232</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45232"/>
		<updated>2019-03-08T16:06:09Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allais être difficile à mettre ne place sur le backend du projet. En effet, toutes les fonctions sont en static et PHPUnit ne marche pas sur le static. Il faudrait donc revoir l&#039;architecture du code pour masquer le statique. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donner priorité à la vitrine. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peuvent consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peux consulter la liste des projets d&#039;une université, et des pages de projets individuelles avec une image, une descriptions et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png|border]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45231</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45231"/>
		<updated>2019-03-08T16:02:52Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allais être difficile à mettre ne place sur le backend du projet. En effet, toutes les fonctions sont en static et PHPUnit ne marche pas sur le static. Il faudrait donc revoir l&#039;architecture du code pour masquer le statique. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donner priorité à la vitrine. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peuvent consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peux consulter la liste des projets d&#039;une université, et des pages de projets individuelles avec une image, une descriptions et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Archéologie sur le prototype de vitrine.&lt;br /&gt;
* Rédaction de documentation générale sur l&#039;architecture End-To-End du projet (ci-dessous).&lt;br /&gt;
&lt;br /&gt;
[[File:EDCampus 2019 EndToEnd.png]]&lt;br /&gt;
&lt;br /&gt;
Détails de la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
* La commande en cours est envoyée à &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; sous forme de string.&lt;br /&gt;
* On vérifie d&#039;abord si elle fait partie des commandes publiques, que l&#039;on peux exécuter lorsque l&#039;on a pas de session. (Via une comparaison avec un tableau contenant toutes les commandes publiques.)&lt;br /&gt;
* Si ce n&#039;est pas la cas, on récupère ensuite les informations de session et l&#039;identifiant utilisateur.&lt;br /&gt;
* Si on ne trouve pas d&#039;utilisateur, on regarde si on essai d’accéder a une page publique, sinon on bloque l&#039;accès.&lt;br /&gt;
* On a maintenant un utilisateur avec une session, qui essaie d&#039;agir sur une page non publique.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est super-administrateur.&lt;br /&gt;
* On vérifie si l&#039;utilisateur essai d’exécuter une commande administrateur, en tant qu&#039;administrateur.&lt;br /&gt;
* Puisque la page est non-publique et que l&#039;on est pas administrateur, il s&#039;agit forcement d&#039;une page de projet. &lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet parent et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est propriétaire du projet courant et que cette commande est autorisée.&lt;br /&gt;
* On vérifie si l&#039;utilisateur est membre du projet courant et que cette commande est autorisée.&lt;br /&gt;
* Si aucun des tests ci dessus n&#039;a raté (ou n&#039;a déjà accordé l&#039;accès), on accorde l&#039;accès.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:EDCampus_2019_EndToEnd.png&amp;diff=45230</id>
		<title>File:EDCampus 2019 EndToEnd.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:EDCampus_2019_EndToEnd.png&amp;diff=45230"/>
		<updated>2019-03-08T15:59:46Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: Architecture End-To-End du projet EDCampus.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Architecture End-To-End du projet EDCampus.&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45229</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45229"/>
		<updated>2019-03-08T15:56:51Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan et Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allais être difficile à mettre ne place sur le backend du projet. En effet, toutes les fonctions sont en static et PHPUnit ne marche pas sur le static. Il faudrait donc revoir l&#039;architecture du code pour masquer le statique. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donner priorité à la vitrine. &lt;br /&gt;
&lt;br /&gt;
La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peuvent consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peux consulter la liste des projets d&#039;une université, et des pages de projets individuelles avec une image, une descriptions et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45228</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45228"/>
		<updated>2019-03-08T15:56:31Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Mise à Jour de templates de mail (&amp;gt;100 templates)&lt;br /&gt;
** Remplacement des références à Waza Education par EDCampus&lt;br /&gt;
** Production d&#039;une banière et remplacement de l&#039;ancienne&lt;br /&gt;
* Tests des fichiers de configuration des tests unitaires&lt;br /&gt;
* Recherches sur le passage de l&#039;HTTP vers HTTPS avec [https://letsencrypt.org/ Let&#039;s Encrypt] : voir le [[Let&#039;s Encrypt | résumé rapide]]&lt;br /&gt;
** Choix d&#039;utilisation de [https://certbot.eff.org/ Certbot]&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Sauvegarde de la base de données de l&#039;ancienne plateforme&lt;br /&gt;
* Passage de l&#039;ancienne plateforme de l&#039;HTTP à l&#039;HTTPS&lt;br /&gt;
** Réparation de la configuration d&#039;Apache&lt;br /&gt;
** Génération des certificats&lt;br /&gt;
** Configuration d&#039;Apache pour l&#039;HTTPS&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Recherches sur l&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Découverte et compréhension d&#039;une [https://github.com/BirgerK/docker-apache-letsencrypt image existante]&lt;br /&gt;
* Tentative de passage de l&#039;HTTP à l&#039;HTTPS dans un Docker&lt;br /&gt;
** Sur la VM de l&#039;ancienne plateforme (pour ne pas briser la version en prod)&lt;br /&gt;
** Fusion du Dockerfile existant et du Dockerfile de l&#039;image trouvée&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Poursuite de la tentative d&#039;utilisation de [[Let&#039;s Encrypt]] avec [[Docker]]&lt;br /&gt;
** Succès de la création de certificat&lt;br /&gt;
** L&#039;HTTPS ne fonctionne toujours pas (sans doute à cause de la configuration d&#039;Apache)&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug trouvé lors que hackaton qui empêchait les étudiants de télécharger un fichier hérité appartenant à un tuteur. &lt;br /&gt;
* Début d&#039;un travail sur les tests unitaires du backend. Le but est de vérifier les tests existants, essayer de les faire fonctionner, et s&#039;en inspirer pour en créer d&#039;autres et à terme, couvrir tout le code.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan et Zoran ====&lt;br /&gt;
&lt;br /&gt;
* Lecture de la [https://phpunit.readthedocs.io/en/8.0/ documentation de PHPUNit.]&lt;br /&gt;
Après un travail de recherche, nous nous sommes rendu compte que PHPUnit allais être difficile à mettre ne place sur le backend du projet. En effet, toutes les fonctions sont en static et PHPUnit ne marche pas sur le static. Il faudrait donc revoir l&#039;architecture du code pour masquer le statique. Cependant cela est trop long a mettre en place sachant que l&#039;on arrive sur la fin du projet, donc nous avons donner priorité à la vitrine. La vitrine est un endroit où le public (étudiants/professeurs/entreprises) peuvent consulter les projets réalisés ou en cours. Cette vitrine se décompose en un endroit ou l&#039;on peux consulter la liste des projets d&#039;une université, et des pages de projets individuelles avec une image, une descriptions et les livrables.&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Contributions_open-source_au_projet_Eclipse_EdCampus&amp;diff=45227</id>
		<title>Contributions open-source au projet Eclipse EdCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Contributions_open-source_au_projet_Eclipse_EdCampus&amp;diff=45227"/>
		<updated>2019-03-08T15:47:36Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Fiche de suivi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=EDCampus=&lt;br /&gt;
&lt;br /&gt;
La plateforme EDCampus est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
==Axes de travail==&lt;br /&gt;
&lt;br /&gt;
===Industrialisation et consolidation de l&#039;actuel (mise en production septembre 2019)===&lt;br /&gt;
&lt;br /&gt;
* Industrialisation de la plateforme existante avec un processus DevOps&lt;br /&gt;
* Ajout et améliorations de fonctionnalités (Paperboard partagé en temps réel, kanban, interconnexion avec annuaire partagé SAML, etc)&lt;br /&gt;
* Participation au cycle de vie de l&#039;application : corrections de bug, déploiement des nouvelles features, tests d&#039;intégration, tests de charge (Gatling), etc --&amp;gt; le monde réel quoi ! &lt;br /&gt;
&lt;br /&gt;
Technologies : Docker, Gitlab, PHP, AngularJS, MySQL &lt;br /&gt;
&lt;br /&gt;
===Refonte technique===&lt;br /&gt;
&lt;br /&gt;
La plateforme EDCampus sera disponible à Grenoble pour tous les étudiants (Polytech, UGA, INP P* P* P*, GEM, etc) et mis à des dispositions des autres universités sous forme de PaaS. De vrais problèmes de passage à l&#039;échelle et de robustesse seront inévitables et la plateforme actuelle ne sera assez armée pour cela. L&#039;objectif sera donc de développer un POC qui servira de base à la future refonte. La stack retenue sera *roulement de tambour* JHipster et une architecture en micro-services. &lt;br /&gt;
&lt;br /&gt;
* Architecture micro-services&lt;br /&gt;
* Inspiration de l&#039;existant en évitant de refaire les mêmes écueils que l&#039;actuel&lt;br /&gt;
* Itérations courtes et livraisons fréquentes afin d&#039;avoir un prototype minimal fonctionnel rapidement et capitaliser dessus.&lt;br /&gt;
&lt;br /&gt;
Technologies : DevOps, JHipster&lt;br /&gt;
&lt;br /&gt;
==Encadrement==&lt;br /&gt;
&lt;br /&gt;
* Anthony Geourjon&lt;br /&gt;
* Didier Donsez&lt;br /&gt;
* Le reste de l&#039;équipe Disrupt Campus Grenoble&lt;br /&gt;
&lt;br /&gt;
[[File:edc.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Fiche de suivi==&lt;br /&gt;
&lt;br /&gt;
[[PROJET-INFO5 1819 EDCampus | Vers la fiche de suivi.]]&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Contributions_open-source_au_projet_Eclipse_EdCampus&amp;diff=45226</id>
		<title>Contributions open-source au projet Eclipse EdCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Contributions_open-source_au_projet_Eclipse_EdCampus&amp;diff=45226"/>
		<updated>2019-03-08T15:46:59Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=EDCampus=&lt;br /&gt;
&lt;br /&gt;
La plateforme EDCampus est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !).&lt;br /&gt;
&lt;br /&gt;
==Axes de travail==&lt;br /&gt;
&lt;br /&gt;
===Industrialisation et consolidation de l&#039;actuel (mise en production septembre 2019)===&lt;br /&gt;
&lt;br /&gt;
* Industrialisation de la plateforme existante avec un processus DevOps&lt;br /&gt;
* Ajout et améliorations de fonctionnalités (Paperboard partagé en temps réel, kanban, interconnexion avec annuaire partagé SAML, etc)&lt;br /&gt;
* Participation au cycle de vie de l&#039;application : corrections de bug, déploiement des nouvelles features, tests d&#039;intégration, tests de charge (Gatling), etc --&amp;gt; le monde réel quoi ! &lt;br /&gt;
&lt;br /&gt;
Technologies : Docker, Gitlab, PHP, AngularJS, MySQL &lt;br /&gt;
&lt;br /&gt;
===Refonte technique===&lt;br /&gt;
&lt;br /&gt;
La plateforme EDCampus sera disponible à Grenoble pour tous les étudiants (Polytech, UGA, INP P* P* P*, GEM, etc) et mis à des dispositions des autres universités sous forme de PaaS. De vrais problèmes de passage à l&#039;échelle et de robustesse seront inévitables et la plateforme actuelle ne sera assez armée pour cela. L&#039;objectif sera donc de développer un POC qui servira de base à la future refonte. La stack retenue sera *roulement de tambour* JHipster et une architecture en micro-services. &lt;br /&gt;
&lt;br /&gt;
* Architecture micro-services&lt;br /&gt;
* Inspiration de l&#039;existant en évitant de refaire les mêmes écueils que l&#039;actuel&lt;br /&gt;
* Itérations courtes et livraisons fréquentes afin d&#039;avoir un prototype minimal fonctionnel rapidement et capitaliser dessus.&lt;br /&gt;
&lt;br /&gt;
Technologies : DevOps, JHipster&lt;br /&gt;
&lt;br /&gt;
==Encadrement==&lt;br /&gt;
&lt;br /&gt;
* Anthony Geourjon&lt;br /&gt;
* Didier Donsez&lt;br /&gt;
* Le reste de l&#039;équipe Disrupt Campus Grenoble&lt;br /&gt;
&lt;br /&gt;
[[File:edc.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Fiche de suivi==&lt;br /&gt;
&lt;br /&gt;
[[Projets 2018-2019 | Vers la fiche de suivi.]]&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45128</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45128"/>
		<updated>2019-03-04T07:02:00Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Semaine 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;br /&gt;
&lt;br /&gt;
=== 05/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 06/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 07/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 08/03/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45127</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45127"/>
		<updated>2019-03-04T07:00:38Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Semaine 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;br /&gt;
&lt;br /&gt;
== Semaine 5 ==&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45056</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45056"/>
		<updated>2019-02-18T13:03:51Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Zoran */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
== Semaine 4 ==&lt;br /&gt;
&lt;br /&gt;
Hack ton campus.&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45055</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45055"/>
		<updated>2019-02-18T12:58:15Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Correction superficielle des problemes des mise a jour a de la vue du systeme de tache. Le soucis etant que les taches et le petit menu qui indique les details ne sont pas le même module et n&#039;interagissent pas vraiment entre eux, donc on ne peux pas actualier l&#039;un depuis l&#039;autre.&lt;br /&gt;
* Correction du fait que dans le systeme de fichier, on ne pouvait pas délacer un fichier/dossier vers le dossier parent en le glissant sur la flèche retour. &lt;br /&gt;
** Le soucis venait du fichier html, qui avait l&#039;air correct mais la variable qu&#039;il etait censé recuppérer renvoyait undefined au lieu de l&#039;identifiant du dossier parent.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45054</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45054"/>
		<updated>2019-02-18T12:57:48Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Backend corrigé, on ne peux plus créer une tache d&#039;un nom au choix si il y a deja une tache de cette couleur avec un nom dans le projet.&lt;br /&gt;
* Etude approfondie du front-end et du systeme evenementiel pour corriger les defauts de mise à jour.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45053</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45053"/>
		<updated>2019-02-18T12:57:24Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Nouvelle tâche assignée : Améliorer les tâches, faire en sorte que si un nom est placé sur un label d&#039;une couleur au sein d&#039;un projet, tous les labels de cette couleur auront ce même nom.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45052</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=45052"/>
		<updated>2019-02-18T12:57:03Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Configuration des scanners sonar dans le pipeline (redirection vers une branche du projet sonarcloud nommée selon la branche GitLab sur laquelle le pipeline est lancé)&lt;br /&gt;
* Aide à la correction du système de droits&lt;br /&gt;
* Réalisation de tâches mineures importantes pour le Hackaton&lt;br /&gt;
** Retirer la vidéo Waza de l&#039;accueil de la plateforme&lt;br /&gt;
** Redirection de l&#039;utilisateur vers la plateforme lorsqu&#039;il accède à l&#039;url du dossier : [[Apache mod_rewrite]]&lt;br /&gt;
** Correction de l&#039;url donné lors de l&#039;appel au service de mails pour la validation de compte&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
* Systeme de droits entierement corrigé pour le cas des fichiers.&lt;br /&gt;
** Privilèges administrateurs.&lt;br /&gt;
*** Dans la fonction qui verifie les droits &amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;, le cas de l&#039;administrateur n&#039;était pas vraiment traité. Il y avait un verification pour empecher tout utilisateur non administrateur d&#039;executer une commande administrateur, mais sinon l&#039;administrateur était traité comme un utilisateur lambda. J&#039;ai donc ajouté un test permettant de donner les pleins pouvoirs. Presque. Il fallait aussi ajouter un test dans la fonction &amp;lt;code&amp;gt;File.php _checkFileAccess(...)&amp;lt;/code&amp;gt; qui pour certaines actions sur les fichiers, agit comme une surcouche à la fonction &amp;lt;code&amp;gt;checkRights&amp;lt;/code&amp;gt; (ce qui permet entre autres des actions sur les fichiers hérités pour le tuteur et les membres).&lt;br /&gt;
** Cas du déplacement de fichier hérités.&lt;br /&gt;
*** Avec l&#039;accord d&#039;Anthony, on a conclu que le déplacement de fichier hérité était une mauvaise idée, donc cela reste non autorisé, même pour les admins.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être supprimés.&lt;br /&gt;
** Les appels à la base effectuait une comparaison avec un &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt; au lieu d&#039;un &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; dans la requête SQL, ce qui ne marchait pas dans le cas présent.&lt;br /&gt;
* Correction du fait que les fichiers ayant un numero pour nom ne peuvent pas être renommés.&lt;br /&gt;
** Le nom du fichier est traité et enregistré par le fichier JS, qui est non typé donc il decide que si le nom n&#039;est que des numeros, alors ce ne sera pas une string. Or pour renommer le fichier, on veux modifer la partie du nom qui est avant le point (de l&#039;extension), donc on fait un appel à &amp;lt;code&amp;gt;name.lastIndexOf(&amp;quot;.&amp;quot;);&amp;lt;/code&amp;gt;, qui s&#039;execute eclusivement sur une string. J&#039;ai donc realisé un &amp;lt;code&amp;gt;.toString()&amp;lt;/code&amp;gt; sur le nom à chaque fois que necessaire.&lt;br /&gt;
* Correction du fait que lorsque l&#039;on supprimait un fichier dans un dossier, on était renvoyé à la racine du projet plutot que dans le dossier.&lt;br /&gt;
** Il manquait un paramètre (le dossier) à la fonction &amp;lt;code&amp;gt;getFiles(...)&amp;lt;/code&amp;gt; appalée après la suppréssion.&lt;br /&gt;
* Transformation du bouton &amp;quot;Ajouter&amp;quot; en deux boutons, un pour les dossiers, un pour les fichiers.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44893</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44893"/>
		<updated>2019-02-11T07:08:24Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Semaine 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;br /&gt;
&lt;br /&gt;
=== 12/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 13/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 14/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
=== 15/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44892</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44892"/>
		<updated>2019-02-11T07:07:27Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* 08/02/19 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
&lt;br /&gt;
== Semaine 3 ==&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44891</id>
		<title>PROJET-INFO5 1819 EDCampus</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=PROJET-INFO5_1819_EDCampus&amp;diff=44891"/>
		<updated>2019-02-11T07:05:52Z</updated>

		<summary type="html">&lt;p&gt;Servan.Charlot: /* Servan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Logo_EDCampus.png|thumb|right| Logo EDCampus]]&lt;br /&gt;
= Le projet en quelques mots =&lt;br /&gt;
La plateforme [[Contributions open-source au projet Eclipse EdCampus | EDCampus]] est une plateforme de gestion de projet développé par Disrupt Campus Grenoble. La plateforme est actuellement en train d’être soumis à la fondation Eclipse afin d’être mise en open source sous licence Eclipse. Dans le cadre du projet Disrupt Campus, les étudiants sont invités à contribuer à la plateforme. Dans le cadre de vos formations c’est une vraie plus value de contribuer à de réels projets plutôt qu’à des projets one-shot qui seront mis à la poubelle sitôt votre soutenance terminée. EDCampus est donc une opportunité de contribuer au logiciel libre et à la fondation Eclipse (et de s&#039;assurer une jolie ligne sur son CV plutôt qu&#039;un projet qui sera aussi vite oublié que l&#039;ECOM !). &lt;br /&gt;
&lt;br /&gt;
= L&#039;équipe et leurs rôles =&lt;br /&gt;
&lt;br /&gt;
* GEOURJON Anthony - Chef de projet (EXT)&lt;br /&gt;
* [[User:Servan.Charlot | CHARLOT Servan]] - Chef de groupe&lt;br /&gt;
* [[User:Zoran.Chanet | CHANET Zoran]] - Responsable DevOps&lt;br /&gt;
&lt;br /&gt;
= Roadmap =&lt;br /&gt;
* &#039;&#039;&#039;20-22 février 2019 :&#039;&#039;&#039; Hack Ton Campus, la plateforme EDCampus sera utilisée pour la gestion des défis.&lt;br /&gt;
* &#039;&#039;&#039;Avril 2019 :&#039;&#039;&#039; Projet pilote, un projet mêlant une entreprise, l&#039;UGA et des étudiants servira de test à la plateforme.&lt;br /&gt;
* &#039;&#039;&#039;Septembre 2019 :&#039;&#039;&#039; Mise en production globale.&lt;br /&gt;
&lt;br /&gt;
= Carnet de bord =&lt;br /&gt;
&lt;br /&gt;
== Semaine 1 ==&lt;br /&gt;
&lt;br /&gt;
=== 28/01/19 ===&lt;br /&gt;
&lt;br /&gt;
Assignation du sujet [[Contributions open-source au projet Eclipse EdCampus | EDCampus]].&lt;br /&gt;
&lt;br /&gt;
=== 29/01/19 ===&lt;br /&gt;
&lt;br /&gt;
* Rencontre avec Anthony au [http://fabmstic.liglab.fr/ Fablab], presentation du sujet, des enjeux, et de la roadmap&lt;br /&gt;
* Installation du projet&lt;br /&gt;
** Difficultés dues au DNS des réseaux universitaires (impossible de télécharger le contenu nécessaire depuis les containers)&lt;br /&gt;
&lt;br /&gt;
=== 30/01/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $scope._getProjectParent()&amp;lt;/code&amp;gt; qui ne marchait pas du tout. Il y avait une faute dans la plupart des variables qui s&#039;appelaient &amp;lt;code&amp;gt;currentParentProject&amp;lt;/code&amp;gt; au lieu de &amp;lt;code&amp;gt;currentProjectParent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Correction de la fonction &amp;lt;code&amp;gt;app/shared/main.js $rootScope._checkProject()&amp;lt;/code&amp;gt; qui oubliait un paramètre dans son appel à &amp;lt;code&amp;gt;$scope._setProject()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation d&#039;une première tâche : réparer la création d&#039;un projet indépendant&lt;br /&gt;
* Découverte du code du projet&lt;br /&gt;
* Poursuite de l&#039;arborescence des appels depuis le bouton jusqu&#039;à l&#039;appel à la base de données&lt;br /&gt;
&lt;br /&gt;
=== 01/02/19 ===&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Assignation de la tâche consistant à réparer le système de fichier.&lt;br /&gt;
* Exploration du systeme de fichier et son implementation.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Production d&#039;une méthode permettant des logs personnalisés&lt;br /&gt;
* Recherches sur le rewriting d&#039;URL&lt;br /&gt;
* Correction du problème (lié au rewriting)&lt;br /&gt;
* Production d&#039;une fiche explicative de la solution&lt;br /&gt;
&lt;br /&gt;
== Semaine 2 ==&lt;br /&gt;
&lt;br /&gt;
=== 04/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Correction des bugs suivants :&lt;br /&gt;
&lt;br /&gt;
* Affichage des fichiers du portefeuille père ssi il y a au moins un fichier présent dans le projet fils.&lt;br /&gt;
** Dans le backend, la fonction qui get les fichiers exécutait un &amp;lt;code&amp;gt;return false&amp;lt;/code&amp;gt; avant de get les fichiers parents dans le cas ou il n&#039;y avait pas de fichier à la base.&lt;br /&gt;
* N&#039;actualise pas la liste des fichiers si on supprime le dernier fichier.&lt;br /&gt;
* Tous les dossiers sont affichés comme des fichiers. Lors de la première sélection à la souris, si on sélectionne le fichier-dossier, il se transforme en dossier et on peut y accéder. Rien ne se passe pour les sélections suivantes.&lt;br /&gt;
** Dans le backend, un paramètre était traité comme chaîne de caractère alors qu&#039;il représentait un booléen. Le résultat de ça est que l&#039;on entrait dans la mauvaise partie d&#039;un if, qui exécutait la mauvaise requête SQL nous privant de l&#039;information concernant le type de fichier lu (un dossier est un type de fichier).&lt;br /&gt;
* Le bouton qui permet de revenir en arrière, sortir du dossier ne fonctionne pas.&lt;br /&gt;
* On ne peut pas entrer dans un dossier hérité.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Assignation de la mise en place de techniques DevOps&lt;br /&gt;
* Recherches sur la mise en place de pipeline dans GitLab : voir [[GitLab CI/CD | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un pipeline à chaque push&lt;br /&gt;
* Production d&#039;un tutoriel de création de runner GitLab : voir [[GitLab Runners | tutoriel]]&lt;br /&gt;
* Recherches sur SonarQube et les tests unitaires&lt;br /&gt;
** Priorisation de SonarQube&lt;br /&gt;
&lt;br /&gt;
=== 05/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que lors de la suppression d&#039;un dossier, les fichiers à l&#039;intérieur ne sont pas supprimés (le champ statut dans le BDD ne passe pas à 0).&lt;br /&gt;
** La fonctionnalité de suppression récursive n&#039;était pas implémentée dans &amp;lt;code&amp;gt;File.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Début de l&#039;analyse du système de droit des utilisateurs (Administrateur/Tuteur/Elève) sur les fichiers et dossiers (hérités ou non).&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Compréhension des scanners sonar : voir [[SonarQube Scanner | compte-rendu]]&lt;br /&gt;
* Mise en place d&#039;un scan dans le pipeline&lt;br /&gt;
** Nécessité d&#039;un serveur sonar exposé&lt;br /&gt;
** Décision d&#039;utiliser SonarCloud&lt;br /&gt;
** Configuration du scanner pour envoyer le rapport dans le bon projet sonarcloud&lt;br /&gt;
** Réussite du premier scan&lt;br /&gt;
&lt;br /&gt;
=== 06/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
&lt;br /&gt;
Suite de la correction du système de droits des fichiers/dossiers.&lt;br /&gt;
&lt;br /&gt;
* Correction d&#039;un bug qui faisait que les utilisateurs ne peuvent pas entrer dans les dossiers hérites (ou télécharger les fichiers hérites).&lt;br /&gt;
** Le check de droit se fait dans une fonction qui check d&#039;abord le &amp;lt;code&amp;gt;ownerId&amp;lt;/code&amp;gt;, puis le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt; et puis enfin si le fichier appartient à un parent. Pour cela elle fait appel à la base pour récupérer la relation d’héritage. IL y avait une erreur de comparaison entre le résultat de la requête et les information fichier (erreur de type parce que PHP).&lt;br /&gt;
* Analyse complète du système de droit création d&#039;un tableau explicatif de l&#039;état actuel et l&#039;état voulu.&lt;br /&gt;
[[File:EDCampus_2019_Tableau_de_droits.png|center]]&lt;br /&gt;
* Suite au tableau, mise en place de la protection des fichiers hérités.&lt;br /&gt;
** Ajout d&#039;une vérification sur le &amp;lt;code&amp;gt;projectId&amp;lt;/code&amp;gt;, empêchant les utilisateurs non propriétaires du fichier de le supprimer, renommer ou déplacer.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;br /&gt;
* Extension du scan sonar dans le pipeline à toutes les sections du projet&lt;br /&gt;
* Affichage de badges d&#039;état du pipeline sur la page de présentation de chaque section du projet&lt;br /&gt;
* Reprise des recherches concernant les tests unitaires&lt;br /&gt;
* Tentative de systématisation des tests dans le pipeline&lt;br /&gt;
** Difficulté : les tests nécessitent des fichiers de configurations qui ne sont pas présents sur le repository git&lt;br /&gt;
* Recherche de contournement pour ne pas exposer des configurations privées dans le projet public&lt;br /&gt;
&lt;br /&gt;
=== 08/02/19 ===&lt;br /&gt;
&lt;br /&gt;
==== Servan ====&lt;br /&gt;
Suppression de la vue pour les non membres et correction partielle du système de droits.&lt;br /&gt;
* Lorsque qu&#039;une commande est envoyée par le front-end vers le back-end, elle passe dans une fonction qui vérifie les droits (&amp;lt;code&amp;gt;Right.php checkRights($command)&amp;lt;/code&amp;gt;). La fonction compare la commande utilisée par l&#039;utilisateur aux commandes que cet utilisateur a en général le droit d&#039;utiliser. Le problème était que le tableau de commandes au sein de la fonction (permettant la comparaison) contenait des commandes mal formatées. J&#039;ai donc corrigé celle qui m&#039;intéressais pour empêcher les non membres d&#039;un projet à consulter les fichiers, et j&#039;en ai profiter pour corriger toutes les autres.&lt;br /&gt;
&lt;br /&gt;
==== Zoran ====&lt;/div&gt;</summary>
		<author><name>Servan.Charlot</name></author>
	</entry>
</feed>