diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..342c898d04047e5151526b4531fd4a245c329206
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,9 @@
+CHANGELOG
+=========
+
+1.0.0 (19/09/2019)
+------------------
+
+### Ajout
+
+- Embryon d'application.
diff --git a/Dockerfile b/Dockerfile
index fdd316aeea813b395a66127ee4092a42ab82dc99..61f7e518666f10f3b47cd80441bb0db9603ba068 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,9 +1,3 @@
-###########################################################################################
-#
-#                               Image pour le dev.
-#
-###########################################################################################
-
 ARG PHP_VERSION
 
 FROM unicaen-dev-php${PHP_VERSION}-apache
@@ -18,8 +12,7 @@ ENV APACHE_CONF_DIR=/etc/apache2 \
 ## Installation de packages requis.
 RUN apt-get update -qq && \
     apt-get install -y \
-        sqlite3 \
-        php${PHP_VERSION}-pdo-sqlite
+        php${PHP_VERSION}-pgsql
 
 # Nettoyage
 RUN apt-get autoremove -y && apt-get clean && rm -rf /tmp/* /var/tmp/*
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..a9a8acf5df671e66e28847e9c24ddbd214e4ecfc
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,549 @@
+  CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL
+
+Version 2.1 du 2013-06-21
+
+
+    Avertissement
+
+Ce contrat est une licence de logiciel libre issue d'une concertation
+entre ses auteurs afin que le respect de deux grands principes préside à
+sa rédaction:
+
+  * d'une part, le respect des principes de diffusion des logiciels
+    libres: accès au code source, droits étendus conférés aux utilisateurs,
+  * d'autre part, la désignation d'un droit applicable, le droit
+    français, auquel elle est conforme, tant au regard du droit de la
+    responsabilité civile que du droit de la propriété intellectuelle et
+    de la protection qu'il offre aux auteurs et titulaires des droits
+    patrimoniaux sur un logiciel.
+
+Les auteurs de la licence CeCILL (Ce[a] C[nrs] I[nria] L[ogiciel] L[ibre])
+sont:
+
+Commissariat à l'énergie atomique et aux énergies alternatives - CEA,
+établissement public de recherche à caractère scientifique, technique et
+industriel, dont le siège est situé 25 rue Leblanc, immeuble Le Ponant
+D, 75015 Paris.
+
+Centre National de la Recherche Scientifique - CNRS, établissement
+public à caractère scientifique et technologique, dont le siège est
+situé 3 rue Michel-Ange, 75794 Paris cedex 16.
+
+Institut National de Recherche en Informatique et en Automatique -
+Inria, établissement public à caractère scientifique et technologique,
+dont le siège est situé Domaine de Voluceau, Rocquencourt, BP 105, 78153
+Le Chesnay cedex.
+
+
+    Préambule
+
+Ce contrat est une licence de logiciel libre dont l'objectif est de
+conférer aux utilisateurs la liberté de modification et de
+redistribution du logiciel régi par cette licence dans le cadre d'un
+modèle de diffusion en logiciel libre.
+
+L'exercice de ces libertés est assorti de certains devoirs à la charge
+des utilisateurs afin de préserver ce statut au cours des
+redistributions ultérieures.
+
+L'accessibilité au code source et les droits de copie, de modification
+et de redistribution qui en découlent ont pour contrepartie de n'offrir
+aux utilisateurs qu'une garantie limitée et de ne faire peser sur
+l'auteur du logiciel, le titulaire des droits patrimoniaux et les
+concédants successifs qu'une responsabilité restreinte.
+
+A cet égard l'attention de l'utilisateur est attirée sur les risques
+associés au chargement, à l'utilisation, à la modification et/ou au
+développement et à la reproduction du logiciel par l'utilisateur étant
+donné sa spécificité de logiciel libre, qui peut le rendre complexe à
+manipuler et qui le réserve donc à des développeurs ou des
+professionnels avertis possédant des connaissances informatiques
+approfondies. Les utilisateurs sont donc invités à charger et tester
+l'adéquation du logiciel à leurs besoins dans des conditions permettant
+d'assurer la sécurité de leurs systèmes et/ou de leurs données et, plus
+généralement, à l'utiliser et l'exploiter dans les mêmes conditions de
+sécurité. Ce contrat peut être reproduit et diffusé librement, sous
+réserve de le conserver en l'état, sans ajout ni suppression de clauses.
+
+Ce contrat est susceptible de s'appliquer à tout logiciel dont le
+titulaire des droits patrimoniaux décide de soumettre l'exploitation aux
+dispositions qu'il contient.
+
+Une liste de questions fréquemment posées se trouve sur le site web
+officiel de la famille des licences CeCILL 
+(http://www.cecill.info/index.fr.html) pour toute clarification qui
+serait nécessaire.
+
+
+    Article 1 - DEFINITIONS
+
+Dans ce contrat, les termes suivants, lorsqu'ils seront écrits avec une
+lettre capitale, auront la signification suivante:
+
+Contrat: désigne le présent contrat de licence, ses éventuelles versions
+postérieures et annexes.
+
+Logiciel: désigne le logiciel sous sa forme de Code Objet et/ou de Code
+Source et le cas échéant sa documentation, dans leur état au moment de
+l'acceptation du Contrat par le Licencié.
+
+Logiciel Initial: désigne le Logiciel sous sa forme de Code Source et
+éventuellement de Code Objet et le cas échéant sa documentation, dans
+leur état au moment de leur première diffusion sous les termes du Contrat.
+
+Logiciel Modifié: désigne le Logiciel modifié par au moins une
+Contribution.
+
+Code Source: désigne l'ensemble des instructions et des lignes de
+programme du Logiciel et auquel l'accès est nécessaire en vue de
+modifier le Logiciel.
+
+Code Objet: désigne les fichiers binaires issus de la compilation du
+Code Source.
+
+Titulaire: désigne le ou les détenteurs des droits patrimoniaux d'auteur
+sur le Logiciel Initial.
+
+Licencié: désigne le ou les utilisateurs du Logiciel ayant accepté le
+Contrat.
+
+Contributeur: désigne le Licencié auteur d'au moins une Contribution.
+
+Concédant: désigne le Titulaire ou toute personne physique ou morale
+distribuant le Logiciel sous le Contrat.
+
+Contribution: désigne l'ensemble des modifications, corrections,
+traductions, adaptations et/ou nouvelles fonctionnalités intégrées dans
+le Logiciel par tout Contributeur, ainsi que tout Module Interne.
+
+Module: désigne un ensemble de fichiers sources y compris leur
+documentation qui permet de réaliser des fonctionnalités ou services
+supplémentaires à ceux fournis par le Logiciel.
+
+Module Externe: désigne tout Module, non dérivé du Logiciel, tel que ce
+Module et le Logiciel s'exécutent dans des espaces d'adressage
+différents, l'un appelant l'autre au moment de leur exécution.
+
+Module Interne: désigne tout Module lié au Logiciel de telle sorte
+qu'ils s'exécutent dans le même espace d'adressage.
+
+GNU GPL: désigne la GNU General Public License dans sa version 2 ou
+toute version ultérieure, telle que publiée par Free Software Foundation
+Inc.
+
+GNU Affero GPL: désigne la GNU Affero General Public License dans sa
+version 3 ou toute version ultérieure, telle que publiée par Free
+Software Foundation Inc.
+
+EUPL: désigne la Licence Publique de l'Union européenne dans sa version
+1.1 ou toute version ultérieure, telle que publiée par la Commission
+Européenne.
+
+Parties: désigne collectivement le Licencié et le Concédant.
+
+Ces termes s'entendent au singulier comme au pluriel.
+
+
+    Article 2 - OBJET
+
+Le Contrat a pour objet la concession par le Concédant au Licencié d'une
+licence non exclusive, cessible et mondiale du Logiciel telle que
+définie ci-après à l'article 5 <#etendue> pour toute la durée de
+protection des droits portant sur ce Logiciel.
+
+
+    Article 3 - ACCEPTATION
+
+3.1 L'acceptation par le Licencié des termes du Contrat est réputée
+acquise du fait du premier des faits suivants:
+
+  * (i) le chargement du Logiciel par tout moyen notamment par
+    téléchargement à partir d'un serveur distant ou par chargement à
+    partir d'un support physique;
+  * (ii) le premier exercice par le Licencié de l'un quelconque des
+    droits concédés par le Contrat.
+
+3.2 Un exemplaire du Contrat, contenant notamment un avertissement
+relatif aux spécificités du Logiciel, à la restriction de garantie et à
+la limitation à un usage par des utilisateurs expérimentés a été mis à
+disposition du Licencié préalablement à son acceptation telle que
+définie à l'article 3.1 <#acceptation-acquise> ci dessus et le Licencié
+reconnaît en avoir pris connaissance.
+
+
+    Article 4 - ENTREE EN VIGUEUR ET DUREE
+
+
+      4.1 ENTREE EN VIGUEUR
+
+Le Contrat entre en vigueur à la date de son acceptation par le Licencié
+telle que définie en 3.1 <#acceptation-acquise>.
+
+
+      4.2 DUREE
+
+Le Contrat produira ses effets pendant toute la durée légale de
+protection des droits patrimoniaux portant sur le Logiciel.
+
+
+    Article 5 - ETENDUE DES DROITS CONCEDES
+
+Le Concédant concède au Licencié, qui accepte, les droits suivants sur
+le Logiciel pour toutes destinations et pour la durée du Contrat dans
+les conditions ci-après détaillées.
+
+Par ailleurs, si le Concédant détient ou venait à détenir un ou
+plusieurs brevets d'invention protégeant tout ou partie des
+fonctionnalités du Logiciel ou de ses composants, il s'engage à ne pas
+opposer les éventuels droits conférés par ces brevets aux Licenciés
+successifs qui utiliseraient, exploiteraient ou modifieraient le
+Logiciel. En cas de cession de ces brevets, le Concédant s'engage à
+faire reprendre les obligations du présent alinéa aux cessionnaires.
+
+
+      5.1 DROIT D'UTILISATION
+
+Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant
+aux domaines d'application, étant ci-après précisé que cela comporte:
+
+ 1.
+
+    la reproduction permanente ou provisoire du Logiciel en tout ou
+    partie par tout moyen et sous toute forme.
+
+ 2.
+
+    le chargement, l'affichage, l'exécution, ou le stockage du Logiciel
+    sur tout support.
+
+ 3.
+
+    la possibilité d'en observer, d'en étudier, ou d'en tester le
+    fonctionnement afin de déterminer les idées et principes qui sont à
+    la base de n'importe quel élément de ce Logiciel; et ceci, lorsque
+    le Licencié effectue toute opération de chargement, d'affichage,
+    d'exécution, de transmission ou de stockage du Logiciel qu'il est en
+    droit d'effectuer en vertu du Contrat.
+
+
+      5.2 DROIT D'APPORTER DES CONTRIBUTIONS
+
+Le droit d'apporter des Contributions comporte le droit de traduire,
+d'adapter, d'arranger ou d'apporter toute autre modification au Logiciel
+et le droit de reproduire le logiciel en résultant.
+
+Le Licencié est autorisé à apporter toute Contribution au Logiciel sous
+réserve de mentionner, de façon explicite, son nom en tant qu'auteur de
+cette Contribution et la date de création de celle-ci.
+
+
+      5.3 DROIT DE DISTRIBUTION
+
+Le droit de distribution comporte notamment le droit de diffuser, de
+transmettre et de communiquer le Logiciel au public sur tout support et
+par tout moyen ainsi que le droit de mettre sur le marché à titre
+onéreux ou gratuit, un ou des exemplaires du Logiciel par tout procédé.
+
+Le Licencié est autorisé à distribuer des copies du Logiciel, modifié ou
+non, à des tiers dans les conditions ci-après détaillées.
+
+
+        5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION
+
+Le Licencié est autorisé à distribuer des copies conformes du Logiciel,
+sous forme de Code Source ou de Code Objet, à condition que cette
+distribution respecte les dispositions du Contrat dans leur totalité et
+soit accompagnée:
+
+ 1.
+
+    d'un exemplaire du Contrat,
+
+ 2.
+
+    d'un avertissement relatif à la restriction de garantie et de
+    responsabilité du Concédant telle que prévue aux articles 8
+    <#responsabilite> et 9 <#garantie>,
+
+et que, dans le cas où seul le Code Objet du Logiciel est redistribué,
+le Licencié permette un accès effectif au Code Source complet du
+Logiciel pour une durée d'au moins 3 ans à compter de la distribution du
+logiciel, étant entendu que le coût additionnel d'acquisition du Code
+Source ne devra pas excéder le simple coût de transfert des données.
+
+
+        5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE
+
+Lorsque le Licencié apporte une Contribution au Logiciel, les conditions
+de distribution du Logiciel Modifié en résultant sont alors soumises à
+l'intégralité des dispositions du Contrat.
+
+Le Licencié est autorisé à distribuer le Logiciel Modifié, sous forme de
+code source ou de code objet, à condition que cette distribution
+respecte les dispositions du Contrat dans leur totalité et soit
+accompagnée:
+
+ 1.
+
+    d'un exemplaire du Contrat,
+
+ 2.
+
+    d'un avertissement relatif à la restriction de garantie et de
+    responsabilité du Concédant telle que prévue aux articles 8
+    <#responsabilite> et 9 <#garantie>,
+
+et, dans le cas où seul le code objet du Logiciel Modifié est redistribué,
+
+ 3.
+
+    d'une note précisant les conditions d'accès effectif au code source
+    complet du Logiciel Modifié, pendant une période d'au moins 3 ans à
+    compter de la distribution du Logiciel Modifié, étant entendu que le
+    coût additionnel d'acquisition du code source ne devra pas excéder
+    le simple coût de transfert des données.
+
+
+        5.3.3 DISTRIBUTION DES MODULES EXTERNES
+
+Lorsque le Licencié a développé un Module Externe les conditions du
+Contrat ne s'appliquent pas à ce Module Externe, qui peut être distribué
+sous un contrat de licence différent.
+
+
+        5.3.4 COMPATIBILITE AVEC D'AUTRES LICENCES
+
+Le Licencié peut inclure un code soumis aux dispositions d'une des
+versions de la licence GNU GPL, GNU Affero GPL et/ou EUPL dans le
+Logiciel modifié ou non et distribuer l'ensemble sous les conditions de
+la même version de la licence GNU GPL, GNU Affero GPL et/ou EUPL.
+
+Le Licencié peut inclure le Logiciel modifié ou non dans un code soumis
+aux dispositions d'une des versions de la licence GNU GPL, GNU Affero
+GPL et/ou EUPL et distribuer l'ensemble sous les conditions de la même
+version de la licence GNU GPL, GNU Affero GPL et/ou EUPL.
+
+
+    Article 6 - PROPRIETE INTELLECTUELLE
+
+
+      6.1 SUR LE LOGICIEL INITIAL
+
+Le Titulaire est détenteur des droits patrimoniaux sur le Logiciel
+Initial. Toute utilisation du Logiciel Initial est soumise au respect
+des conditions dans lesquelles le Titulaire a choisi de diffuser son
+oeuvre et nul autre n'a la faculté de modifier les conditions de
+diffusion de ce Logiciel Initial.
+
+Le Titulaire s'engage à ce que le Logiciel Initial reste au moins régi
+par le Contrat et ce, pour la durée visée à l'article 4.2 <#duree>.
+
+
+      6.2 SUR LES CONTRIBUTIONS
+
+Le Licencié qui a développé une Contribution est titulaire sur celle-ci
+des droits de propriété intellectuelle dans les conditions définies par
+la législation applicable.
+
+
+      6.3 SUR LES MODULES EXTERNES
+
+Le Licencié qui a développé un Module Externe est titulaire sur celui-ci
+des droits de propriété intellectuelle dans les conditions définies par
+la législation applicable et reste libre du choix du contrat régissant
+sa diffusion.
+
+
+      6.4 DISPOSITIONS COMMUNES
+
+Le Licencié s'engage expressément:
+
+ 1.
+
+    à ne pas supprimer ou modifier de quelque manière que ce soit les
+    mentions de propriété intellectuelle apposées sur le Logiciel;
+
+ 2.
+
+    à reproduire à l'identique lesdites mentions de propriété
+    intellectuelle sur les copies du Logiciel modifié ou non.
+
+Le Licencié s'engage à ne pas porter atteinte, directement ou
+indirectement, aux droits de propriété intellectuelle du Titulaire et/ou
+des Contributeurs sur le Logiciel et à prendre, le cas échéant, à
+l'égard de son personnel toutes les mesures nécessaires pour assurer le
+respect des dits droits de propriété intellectuelle du Titulaire et/ou
+des Contributeurs.
+
+
+    Article 7 - SERVICES ASSOCIES
+
+7.1 Le Contrat n'oblige en aucun cas le Concédant à la réalisation de
+prestations d'assistance technique ou de maintenance du Logiciel.
+
+Cependant le Concédant reste libre de proposer ce type de services. Les
+termes et conditions d'une telle assistance technique et/ou d'une telle
+maintenance seront alors déterminés dans un acte séparé. Ces actes de
+maintenance et/ou assistance technique n'engageront que la seule
+responsabilité du Concédant qui les propose.
+
+7.2 De même, tout Concédant est libre de proposer, sous sa seule
+responsabilité, à ses licenciés une garantie, qui n'engagera que lui,
+lors de la redistribution du Logiciel et/ou du Logiciel Modifié et ce,
+dans les conditions qu'il souhaite. Cette garantie et les modalités
+financières de son application feront l'objet d'un acte séparé entre le
+Concédant et le Licencié.
+
+
+    Article 8 - RESPONSABILITE
+
+8.1 Sous réserve des dispositions de l'article 8.2
+<#limite-responsabilite>, le Licencié a la faculté, sous réserve de
+prouver la faute du Concédant concerné, de solliciter la réparation du
+préjudice direct qu'il subirait du fait du Logiciel et dont il apportera
+la preuve.
+
+8.2 La responsabilité du Concédant est limitée aux engagements pris en
+application du Contrat et ne saurait être engagée en raison notamment:
+(i) des dommages dus à l'inexécution, totale ou partielle, de ses
+obligations par le Licencié, (ii) des dommages directs ou indirects
+découlant de l'utilisation ou des performances du Logiciel subis par le
+Licencié et (iii) plus généralement d'un quelconque dommage indirect. En
+particulier, les Parties conviennent expressément que tout préjudice
+financier ou commercial (par exemple perte de données, perte de
+bénéfices, perte d'exploitation, perte de clientèle ou de commandes,
+manque à gagner, trouble commercial quelconque) ou toute action dirigée
+contre le Licencié par un tiers, constitue un dommage indirect et
+n'ouvre pas droit à réparation par le Concédant.
+
+
+    Article 9 - GARANTIE
+
+9.1 Le Licencié reconnaît que l'état actuel des connaissances
+scientifiques et techniques au moment de la mise en circulation du
+Logiciel ne permet pas d'en tester et d'en vérifier toutes les
+utilisations ni de détecter l'existence d'éventuels défauts. L'attention
+du Licencié a été attirée sur ce point sur les risques associés au
+chargement, à l'utilisation, la modification et/ou au développement et à
+la reproduction du Logiciel qui sont réservés à des utilisateurs avertis.
+
+Il relève de la responsabilité du Licencié de contrôler, par tous
+moyens, l'adéquation du produit à ses besoins, son bon fonctionnement et
+de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens.
+
+9.2 Le Concédant déclare de bonne foi être en droit de concéder
+l'ensemble des droits attachés au Logiciel (comprenant notamment les
+droits visés à l'article 5 <#etendue>).
+
+9.3 Le Licencié reconnaît que le Logiciel est fourni "en l'état" par le
+Concédant sans autre garantie, expresse ou tacite, que celle prévue à
+l'article 9.2 <#bonne-foi> et notamment sans aucune garantie sur sa
+valeur commerciale, son caractère sécurisé, innovant ou pertinent.
+
+En particulier, le Concédant ne garantit pas que le Logiciel est exempt
+d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible
+avec l'équipement du Licencié et sa configuration logicielle ni qu'il
+remplira les besoins du Licencié.
+
+9.4 Le Concédant ne garantit pas, de manière expresse ou tacite, que le
+Logiciel ne porte pas atteinte à un quelconque droit de propriété
+intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout
+autre droit de propriété. Ainsi, le Concédant exclut toute garantie au
+profit du Licencié contre les actions en contrefaçon qui pourraient être
+diligentées au titre de l'utilisation, de la modification, et de la
+redistribution du Logiciel. Néanmoins, si de telles actions sont
+exercées contre le Licencié, le Concédant lui apportera son expertise
+technique et juridique pour sa défense. Cette expertise technique et
+juridique est déterminée au cas par cas entre le Concédant concerné et
+le Licencié dans le cadre d'un protocole d'accord. Le Concédant dégage
+toute responsabilité quant à l'utilisation de la dénomination du
+Logiciel par le Licencié. Aucune garantie n'est apportée quant à
+l'existence de droits antérieurs sur le nom du Logiciel et sur
+l'existence d'une marque.
+
+
+    Article 10 - RESILIATION
+
+10.1 En cas de manquement par le Licencié aux obligations mises à sa
+charge par le Contrat, le Concédant pourra résilier de plein droit le
+Contrat trente (30) jours après notification adressée au Licencié et
+restée sans effet.
+
+10.2 Le Licencié dont le Contrat est résilié n'est plus autorisé à
+utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les
+licences qu'il aura concédées antérieurement à la résiliation du Contrat
+resteront valides sous réserve qu'elles aient été effectuées en
+conformité avec le Contrat.
+
+
+    Article 11 - DISPOSITIONS DIVERSES
+
+
+      11.1 CAUSE EXTERIEURE
+
+Aucune des Parties ne sera responsable d'un retard ou d'une défaillance
+d'exécution du Contrat qui serait dû à un cas de force majeure, un cas
+fortuit ou une cause extérieure, telle que, notamment, le mauvais
+fonctionnement ou les interruptions du réseau électrique ou de
+télécommunication, la paralysie du réseau liée à une attaque
+informatique, l'intervention des autorités gouvernementales, les
+catastrophes naturelles, les dégâts des eaux, les tremblements de terre,
+le feu, les explosions, les grèves et les conflits sociaux, l'état de
+guerre...
+
+11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou
+plusieurs occasions de se prévaloir d'une ou plusieurs dispositions du
+Contrat, ne pourra en aucun cas impliquer renonciation par la Partie
+intéressée à s'en prévaloir ultérieurement.
+
+11.3 Le Contrat annule et remplace toute convention antérieure, écrite
+ou orale, entre les Parties sur le même objet et constitue l'accord
+entier entre les Parties sur cet objet. Aucune addition ou modification
+aux termes du Contrat n'aura d'effet à l'égard des Parties à moins
+d'être faite par écrit et signée par leurs représentants dûment habilités.
+
+11.4 Dans l'hypothèse où une ou plusieurs des dispositions du Contrat
+s'avèrerait contraire à une loi ou à un texte applicable, existants ou
+futurs, cette loi ou ce texte prévaudrait, et les Parties feraient les
+amendements nécessaires pour se conformer à cette loi ou à ce texte.
+Toutes les autres dispositions resteront en vigueur. De même, la
+nullité, pour quelque raison que ce soit, d'une des dispositions du
+Contrat ne saurait entraîner la nullité de l'ensemble du Contrat.
+
+
+      11.5 LANGUE
+
+Le Contrat est rédigé en langue française et en langue anglaise, ces
+deux versions faisant également foi.
+
+
+    Article 12 - NOUVELLES VERSIONS DU CONTRAT
+
+12.1 Toute personne est autorisée à copier et distribuer des copies de
+ce Contrat.
+
+12.2 Afin d'en préserver la cohérence, le texte du Contrat est protégé
+et ne peut être modifié que par les auteurs de la licence, lesquels se
+réservent le droit de publier périodiquement des mises à jour ou de
+nouvelles versions du Contrat, qui posséderont chacune un numéro
+distinct. Ces versions ultérieures seront susceptibles de prendre en
+compte de nouvelles problématiques rencontrées par les logiciels libres.
+
+12.3 Tout Logiciel diffusé sous une version donnée du Contrat ne pourra
+faire l'objet d'une diffusion ultérieure que sous la même version du
+Contrat ou une version postérieure, sous réserve des dispositions de
+l'article 5.3.4 <#compatibilite>.
+
+
+    Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE
+
+13.1 Le Contrat est régi par la loi française. Les Parties conviennent
+de tenter de régler à l'amiable les différends ou litiges qui
+viendraient à se produire par suite ou à l'occasion du Contrat.
+
+13.2 A défaut d'accord amiable dans un délai de deux (2) mois à compter
+de leur survenance et sauf situation relevant d'une procédure d'urgence,
+les différends ou litiges seront portés par la Partie la plus diligente
+devant les Tribunaux compétents de Paris.
+
+
diff --git a/README.md b/README.md
index 8f27b1721cd7730bc371ba1cc52f91aeee0f3995..9138b4107de1b920f1669a940708e22ef35c134d 100644
--- a/README.md
+++ b/README.md
@@ -11,16 +11,22 @@
 
 ## Module Demo
 
-Le module démo fournit une base de données de démonstration permettant d'avoir une authentification locale
-qui fonctionne.
-
-Jetez un oeil à la base de données de démo présente dans le module 'Demo' :
-    
-    $ docker-compose run skeleton-application sqlite3 module/Demo/data/db/demo.sqlite ".schema"
-
-Interrogez la table `user` pour vérifier la présence de l'utilisateur local `demo`, exemple :
-    
-    $ docker-compose run skeleton-application sqlite3 module/Demo/data/db/demo.sqlite "select * from user;"
+Le squelette d'application possède un module "démo" qui utilise une base de données PostgreSQL de démonstration 
+permettant d'avoir une authentification locale qui fonctionne. 
+
+Cette base de données est fournie par le service `db` (fichier de config `docker-compose.yml`).
+Il y a également un service `adminer` fournissant de quoi explorer la base de données avec l'outil 
+["Adminer"](https://www.adminer.org) en vous rendant à l'adresse `http://localhost:9080` et en utilisant les informations
+ de connexion à la bdd présentes dans le `docker-compose.yml`.
+Pour explorer/administrer la base de données de l'extérieur du container (avec PHPStorm par exemple), 
+l'adresse de la base est cette fois `localhost:8432`.
+
+NB :
+- Grâce au montage `./data/db:/var/lib/postgresql/data` spécifié dans `docker-compose.yml`, la base de données est 
+  persistée dans le répertoire `data/db` de l'appli.
+- Les scripts de création de la base de données exécutés au lancement du container (si la base n'existe pas déjà)
+  se trouvent dans le répertoire `./docker/db` de l'appli et sont fournis au container grâce au montage 
+  `./docker/db/:/docker-entrypoint-initdb.d/`. 
 
 ## Configuration du projet
 
diff --git a/bin/bump-version b/bin/bump-version
new file mode 100755
index 0000000000000000000000000000000000000000..6dcd6545284743d203a303d8b3676283fdb54648
--- /dev/null
+++ b/bin/bump-version
@@ -0,0 +1,61 @@
+#!/usr/bin/env php
+<?php
+
+/**
+ * Script à utiliser pour mettre à jour la version courante de l'application,
+ * configurée dans 'config/autoload/version.global.php'.
+ *
+ * Usage:  bump-version [<version>]
+ *
+ * Ex:     bump-version 1.3
+ */
+
+require __DIR__ . '/../vendor/autoload.php';
+
+use Zend\Config\Writer\PhpArray;
+
+$defaultConfig = [
+    'unicaen-app' => [
+        'app_infos' => [
+            'version' => 'Aucune',
+        ],
+    ]
+];
+
+$configFilepath = 'config/autoload/version.global.php';
+echo "Fichier de config: $configFilepath" . PHP_EOL;
+
+if (!is_readable($configFilepath)) {
+    echo "Fichier de config $configFilepath introuvable ou illisible." . PHP_EOL;
+    exit(1);
+}
+
+$config = require $configFilepath;
+
+if (! isset($config['unicaen-app']['app_infos']['version'])) {
+    $config = array_merge_recursive($config, $defaultConfig);
+}
+$current = $config['unicaen-app']['app_infos']['version'];
+echo sprintf("Version actuelle: %s.", $current) . PHP_EOL;
+
+$new = isset($argv[1]) ? $argv[1] : null;
+if ($new === null) {
+    $message = "Nouvelle version ? ";
+    $new = readline($message);
+}
+
+if (version_compare($new, $current) <= 0) {
+    echo ":-( Impossible, la nouvelle version doit être supérieure à l'actuelle." . PHP_EOL;
+    exit(1);
+}
+
+$config['unicaen-app']['app_infos']['version'] = $new;
+$config['unicaen-app']['app_infos']['date'] = date('d/m/Y');
+$config['comment'] = "Fichier généré le " . date('d/m/Y à H:i:s') . ' avec ' . __FILE__;
+
+$phpArray = new PhpArray();
+$phpArray
+    ->setUseBracketArraySyntax(true)
+    ->toFile($configFilepath, $config);
+
+echo "Nouvelle version inscrite: $new" . PHP_EOL;
diff --git a/config/autoload/global.php b/config/autoload/global.php
index 2ff19548ad7448d503c02f06d3b86930ad9c8bbd..823bb91afcf995dc469bd5c1c29e61109091ba7b 100755
--- a/config/autoload/global.php
+++ b/config/autoload/global.php
@@ -1,6 +1,6 @@
 <?php
-return array(
-    'translator' => array(
+return [
+    'translator' => [
         'locale' => 'fr_FR',
-    ),
-);
+    ],
+];
diff --git a/config/autoload/unicaen-app.global.php b/config/autoload/unicaen-app.global.php
index 98eb16b693f9fd3dfaf6e2f6aa9d3f4b203a05c5..e9d01d906dda9fc09cc67dd3c83f09899777ec8f 100644
--- a/config/autoload/unicaen-app.global.php
+++ b/config/autoload/unicaen-app.global.php
@@ -19,8 +19,8 @@ return [
         'app_infos' => [
             'nom'     => "NomDeVotreApplication",
             'desc'    => "Description succincte de votre application",
-            'version' => "0.0.1",
-            'date'    => "07/11/2017",
+            //'version' => cf. 'version.global.php'
+            //'date'    => cf. 'version.global.php'
             'contact' => ['mail' => "dsi.applications@unicaen.fr", /*'tel' => "01 02 03 04 05"*/],
             'mentionsLegales'        => "http://www.unicaen.fr/acces-direct/mentions-legales/",
             'informatiqueEtLibertes' => "http://www.unicaen.fr/acces-direct/informatique-et-libertes/",
diff --git a/config/autoload/version.global.php b/config/autoload/version.global.php
new file mode 100644
index 0000000000000000000000000000000000000000..53a31bbf45b77134c7c64d6db897f16ff724c487
--- /dev/null
+++ b/config/autoload/version.global.php
@@ -0,0 +1,11 @@
+<?php
+
+return [
+    'unicaen-app' => [
+        'app_infos' => [
+            'version' => '1.0.0',
+            'date' => '19/09/2019',
+        ],
+    ],
+    'comment' => 'Fichier généré le 19/09/2019 à 07:52:13 avec /app/bin/bump-version',
+];
diff --git a/data/.gitignore b/data/.gitignore
index ae8c28abc275267367968fe4b31d3a876b03ddb9..d20dcaf1bc063d14321a4575a9c0fc898238eb2a 100644
--- a/data/.gitignore
+++ b/data/.gitignore
@@ -1 +1,2 @@
 DoctrineORMModule/
+db/
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 1d96644bdb1f96bf244ec232fbd409adfb2fdf64..79216a45d4a1e4cc619baae14fb858a2ed83404f 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -14,3 +14,22 @@ services:
     volumes:
      - .:/app
     working_dir: /app
+
+  db:
+    image: postgres
+    restart: always
+    environment:
+      POSTGRES_USER: admin
+      POSTGRES_PASSWORD: admin
+      POSTGRES_DB: demo
+    ports:
+      - 8432:5432
+    volumes:
+      - ./data/db:/var/lib/postgresql/data
+      - ./docker/db/:/docker-entrypoint-initdb.d/
+
+  adminer:
+    image: adminer
+    restart: always
+    ports:
+      - 9080:8080
diff --git a/docker/db/1-schema.sql b/docker/db/1-schema.sql
new file mode 100644
index 0000000000000000000000000000000000000000..4bb92b1284a3e9e123e58b6112f3b6fdf37312bc
--- /dev/null
+++ b/docker/db/1-schema.sql
@@ -0,0 +1,64 @@
+CREATE TABLE "user" (
+                        id BIGSERIAL PRIMARY KEY,
+                        username VARCHAR(255) DEFAULT NULL,
+                        email VARCHAR(255) DEFAULT NULL,
+                        display_name VARCHAR(64) DEFAULT NULL,
+                        password VARCHAR(128) NOT NULL,
+                        state SMALLINT default 1
+) ;
+CREATE UNIQUE INDEX user_username_unique ON "user" (username);
+
+alter table "user" add PASSWORD_RESET_TOKEN varchar(256) default null;
+
+create unique index USER_PASSWORD_RESET_TOKEN_UN on "user" (PASSWORD_RESET_TOKEN);
+
+CREATE TABLE user_role (
+                           id BIGSERIAL PRIMARY KEY,
+                           role_id VARCHAR(64) NOT NULL,
+                           is_default SMALLINT NOT NULL DEFAULT 0,
+                           parent_id BIGINT DEFAULT NULL,
+                           ldap_filter varchar(255) DEFAULT NULL,
+                           FOREIGN KEY (parent_id) REFERENCES user_role (id) ON DELETE SET NULL
+);
+CREATE UNIQUE INDEX user_role_roleid_unique ON user_role (role_id);
+
+
+CREATE TABLE user_role_linker (
+                                  user_id BIGINT NOT NULL,
+                                  role_id BIGINT NOT NULL,
+                                  PRIMARY KEY (user_id, role_id),
+                                  FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE,
+                                  FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE
+);
+CREATE UNIQUE INDEX user_role_linker_unique ON user_role_linker (user_id, role_id);
+
+
+
+
+CREATE TABLE  IF NOT EXISTS categorie_privilege (
+  id      BIGSERIAL PRIMARY KEY,
+  code    VARCHAR(150) NOT NULL,
+  libelle VARCHAR(200) NOT NULL,
+  ordre   INT
+);
+CREATE UNIQUE INDEX categorie_privilege_unique ON categorie_privilege (code);
+
+
+CREATE TABLE IF NOT EXISTS privilege (
+  id            BIGSERIAL PRIMARY KEY,
+  categorie_id  BIGINT NOT NULL,
+  code          VARCHAR(150) NOT NULL,
+  libelle       VARCHAR(200) NOT NULL,
+  ordre         INT,
+  FOREIGN KEY (categorie_id) REFERENCES categorie_privilege (id) ON DELETE CASCADE
+);
+CREATE UNIQUE INDEX privilege_unique ON privilege (code);
+
+CREATE TABLE IF NOT EXISTS role_privilege (
+  role_id       BIGINT NOT NULL,
+  privilege_id  BIGINT NOT NULL,
+  PRIMARY KEY (role_id, privilege_id),
+  FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE,
+  FOREIGN KEY (privilege_id) REFERENCES privilege (id) ON DELETE CASCADE
+);
+CREATE UNIQUE INDEX role_privilege_unique ON role_privilege (role_id, privilege_id);
diff --git a/docker/db/2-data.sql b/docker/db/2-data.sql
new file mode 100644
index 0000000000000000000000000000000000000000..c3433d0d96d89fe59a84bb1825be74aa14664f88
--- /dev/null
+++ b/docker/db/2-data.sql
@@ -0,0 +1,30 @@
+
+-- Données
+
+INSERT INTO user_role (id, role_id, is_default, parent_id) VALUES
+(1, 'Standard', 1, NULL),
+(2, 'Gestionnaire', 0, 1),
+(3, 'Super-gestionnaire', 0, 2),
+(4, 'Administrateur', 0, 3);
+
+INSERT INTO categorie_privilege (id, code, libelle, ordre) VALUES
+(1, 'droit', 'Gestion des droits', 1);
+
+INSERT INTO privilege (id, categorie_id, code, libelle, ordre) VALUES
+(1, 1, 'role-visualisation', 'Rôles - Visualisation', 1),
+(2, 1, 'role-edition', 'Rôles - Édition', 2),
+(3, 1, 'privilege-visualisation', 'Privilèges - Visualisation', 3),
+(4, 1, 'privilege-edition', 'Privilèges - Édition', 4);
+
+INSERT INTO role_privilege (role_id, privilege_id) VALUES
+(4, 1),
+(4, 2),
+(4, 3),
+(4, 4);
+
+INSERT INTO "user" (username, email, display_name, password, state) VALUES
+    -- utilisateur demo/azerty
+    ('demo', 'demo@mail.fr', 'Demo Crite', '$2y$10$PxXnVLYnGEzEnfqPqRKJSe9AabocES2H4bBK5VzzJlzuj1rVt7Lwu', 1);
+
+INSERT INTO user_role_linker(user_id, role_id)
+SELECT u.id, r.id FROM "user" u, user_role r WHERE u.username = 'demo' and r.role_id = 'Standard';
diff --git a/install.sh b/install.sh
new file mode 100755
index 0000000000000000000000000000000000000000..1bef361a78a0b29436e595da5855edd860ae3605
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,28 @@
+#!/usr/bin/env bash
+
+#
+# This script runs required operations in order to set up the application.
+#
+
+# Composer install
+composer install --no-dev --no-suggest --optimize-autoloader
+
+# mpdf/mpdf/ttfontdata dir access
+#chown -R www-data:root vendor/mpdf/mpdf/ttfontdata && chmod -R 770 vendor/mpdf/mpdf/ttfontdata
+
+# Répertoire d'upload par défaut
+#mkdir -p upload && chown -R www-data:root upload && chmod -R 770 upload
+
+# Répertoires de travail de Doctrine
+mkdir -p data/cache                   && chmod -R 777 data/cache
+mkdir -p data/DoctrineModule/cache    && chmod -R 777 data/DoctrineModule/cache
+mkdir -p data/DoctrineORMModule/Proxy && chmod -R 777 data/DoctrineORMModule/Proxy
+rm -rf data/cache/*
+rm -rf data/DoctrineModule/cache/*
+rm -rf data/DoctrineORMModule/Proxy/*
+
+# Commandes Doctrine
+vendor/bin/doctrine-module orm:clear-cache:query
+vendor/bin/doctrine-module orm:clear-cache:metadata
+vendor/bin/doctrine-module orm:clear-cache:result
+vendor/bin/doctrine-module orm:generate-proxies
diff --git a/module/Demo/bin/create_demo_db.sh b/module/Demo/bin/create_demo_db.sh
deleted file mode 100755
index 33ce16fc2316e678e350dbe1b14ff0c1bd5cc94d..0000000000000000000000000000000000000000
--- a/module/Demo/bin/create_demo_db.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-
-DIR=$(cd `dirname $0` && pwd)
-DBPATH=${DIR}/../data/db/demo.sqlite
-
-sqlite3 ${DBPATH} < ${DIR}/../data/demo.sqlite.sql && \
-chmod 777 ${DBPATH} && \
-chmod 777 `dirname ${DBPATH}`
diff --git a/module/Demo/config/module.config.php b/module/Demo/config/module.config.php
index 046697925e0fe0e2bfd7d91d1d3adf98168bf432..ae6f72a400e63d9a951df4d98f185cde83c74268 100755
--- a/module/Demo/config/module.config.php
+++ b/module/Demo/config/module.config.php
@@ -3,16 +3,26 @@
 namespace Demo;
 
 return [
+    //
+    // ATTENTION: config Doctrine à déplacer dans `APP/config/autoload/`.
+    //
     'doctrine' => [
         'connection' => [
             'orm_default' => [
-                'driverClass' => 'Doctrine\DBAL\Driver\PDOSqlite\Driver',
+                'driverClass' => \Doctrine\DBAL\Driver\PDOPgSql\Driver::class,
                 'params' => [
-                    'path' => __DIR__ . '/../data/db/demo.sqlite',
+                    'host' => 'db',        //
+                    'user' => 'admin',     // cf. docker-compose.yml
+                    'password' => 'admin', //
+                    'dbname' => 'demo',    //
+                    'port' => '5432',
+                    'charset' => 'utf8',
+                    'driverOptions' => [1002 => 'SET NAMES utf8']
                 ],
             ],
         ],
     ],
+
     'bjyauthorize'    => [
         'guards'                => [
             'BjyAuthorize\Guard\Controller'         => [
diff --git a/module/Demo/data/db/demo.sqlite b/module/Demo/data/db/demo.sqlite
deleted file mode 100755
index cede42626ca8e68f5f2e81258866701abacae6d7..0000000000000000000000000000000000000000
Binary files a/module/Demo/data/db/demo.sqlite and /dev/null differ
diff --git a/module/Demo/data/demo.sqlite.sql b/module/Demo/data/demo.sqlite.sql
deleted file mode 100644
index 7de5346fa3d45a4951e5b5cce0fddb3961c0b70b..0000000000000000000000000000000000000000
--- a/module/Demo/data/demo.sqlite.sql
+++ /dev/null
@@ -1,98 +0,0 @@
-CREATE TABLE IF NOT EXISTS user
-(
-    id           INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
-    username     VARCHAR(255) DEFAULT NULL,
-    email        VARCHAR(255) DEFAULT NULL,
-    display_name VARCHAR(64)  DEFAULT NULL,
-    password     VARCHAR(128)                      NOT NULL,
-    state        SMALLINT     default 1
-);
-ALTER TABLE user ADD PASSWORD_RESET_TOKEN varchar(256) DEFAULT NULL;
-CREATE UNIQUE INDEX user_unique_username ON user(username);
-CREATE UNIQUE INDEX USER_PASSWORD_RESET_TOKEN_UN ON user (PASSWORD_RESET_TOKEN);
-
-
-CREATE TABLE IF NOT EXISTS user_role (
-    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
-    role_id VARCHAR(64) NOT NULL,
-    is_default TINYINT(1) NOT NULL DEFAULT 0,
-    parent_id INTEGER NULL DEFAULT NULL,
-    ldap_filter varchar(255) DEFAULT NULL,
-
-    FOREIGN KEY (parent_id) REFERENCES user_role (id) ON DELETE SET NULL
-);
-CREATE UNIQUE INDEX role_unique_role_id ON user_role(role_id);
-CREATE INDEX role_idx_parent_id ON user_role(parent_id);
-
-
-CREATE TABLE IF NOT EXISTS user_role_linker (
-    user_id INTEGER NOT NULL,
-    role_id INTEGER NOT NULL,
-    PRIMARY KEY (user_id, role_id),
-    FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE,
-    FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE
-);
-CREATE INDEX user_role_linker_idx_role_id ON user_role_linker(role_id);
-CREATE INDEX user_role_linker_idx_user_id ON user_role_linker(user_id);
-
-
-CREATE TABLE IF NOT EXISTS categorie_privilege (
-    id            INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
-    code          VARCHAR(150) NOT NULL,
-    libelle       VARCHAR(200) NOT NULL,
-    ordre         INTEGER
-);
-CREATE UNIQUE INDEX categorie_unique_code ON categorie_privilege(code);
-
-
-CREATE TABLE IF NOT EXISTS privilege (
-    id            INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
-    categorie_id  INTEGER NOT NULL,
-    code          VARCHAR(150) NOT NULL,
-    libelle       VARCHAR(200) NOT NULL,
-    ordre         INTEGER,
-    FOREIGN KEY (categorie_id) REFERENCES categorie_privilege (id) ON DELETE CASCADE
-);
-CREATE UNIQUE INDEX privilege_unique_code ON privilege(code);
-
-
-CREATE TABLE IF NOT EXISTS role_privilege (
-    role_id       INTEGER NOT NULL,
-    privilege_id  INTEGER NOT NULL,
-    PRIMARY KEY (role_id,privilege_id),
-    FOREIGN KEY (role_id) REFERENCES user_role (id) ON DELETE CASCADE,
-    FOREIGN KEY (privilege_id) REFERENCES privilege (id) ON DELETE CASCADE
-);
-CREATE INDEX idx_role_id on role_privilege(role_id);
-CREATE INDEX idx_privilege_id on role_privilege(privilege_id);
-
-
--- Données
-
-INSERT INTO user_role (id, role_id, is_default, parent_id) VALUES
-    (1, 'Standard', 1, NULL),
-    (2, 'Gestionnaire', 0, 1),
-    (3, 'Super-gestionnaire', 0, 2),
-    (4, 'Administrateur', 0, 3);
-
-INSERT INTO categorie_privilege (id, code, libelle, ordre) VALUES
-    (1, 'droit', 'Gestion des droits', 1);
-
-INSERT INTO privilege (id, categorie_id, code, libelle, ordre) VALUES
-    (1, 1, 'role-visualisation', 'Rôles - Visualisation', 1),
-    (2, 1, 'role-edition', 'Rôles - Édition', 2),
-    (3, 1, 'privilege-visualisation', 'Privilèges - Visualisation', 3),
-    (4, 1, 'privilege-edition', 'Privilèges - Édition', 4);
-
-INSERT INTO role_privilege (role_id, privilege_id) VALUES
-    (4, 1),
-    (4, 2),
-    (4, 3),
-    (4, 4);
-
-INSERT INTO user (username, email, display_name, password, state) VALUES
-    -- utilisateur demo/azerty
-    ('demo', 'demo@mail.fr', 'Demo', '$2y$10$PxXnVLYnGEzEnfqPqRKJSe9AabocES2H4bBK5VzzJlzuj1rVt7Lwu', 1);
-
-INSERT INTO user_role_linker(user_id, role_id)
-SELECT u.id, r.id FROM user u, user_role r WHERE u.username = 'demo' and r.role_id = 'Standard';