# Introduction

## Objectifs

Les objectifs principaux de cette usine à site sont les suivants:

* Fournir un site internet à chaque structure cliente, ainsi qu'un compte administrateur pour ce même site
* Permettre à chaque structure de créer, modifier, et supprimer les pages et leurs contenus, dans la limite des droits 
  que leurs confèrent leur licence Opentalent
* Intégrer automatiquement les flux de données issues du réseau Opentalent (évènements, partenaires, structures adhérentes...)
* Donner un lien d'accès à l'espace membres de la structure (i.e. le logiciel Opentalent)


A ces objectifs initiaux s'ajoutent certaines fonctionnalités attendues, dont les principales:

* la possibilité de choisir entre plusieurs templates de site
* l'intégration des réseaux sociaux
* un système de gestion des actualités
* le respect de la réglementation (cookies, RGPD, mentions légales)
* la possibilité de restreindre l'accès à certaines pages aux seuls adhérents
* la possibilité d'attribuer les droits d'éditions à d'autres utilisateurs membres de la structure
* un système de suivi des statistiques de consultation du site
* un formulaire de contact

## Difficultés et choix techniques

### Modularité et dépendances

Typo3 intègre un système d'extensions bien conçu, ce qui autorise un 
développement organisé et modulaire dans lequel chaque problématique peut correspondre à une extension dédiée.

Cependant, le risque lié à une multiplication des extensions reste une interdépendance de ces extensions (l'effet "spaghetti")

Pour éviter ça, on se tiendra donc à ce principe: 

* l'extension "noyau" [OtCore](/ot_core) ne dépend d'aucune autre extension 
* toutes les autres extensions ne peuvent dépendre que de la seule extension: [OtCore](/ot_core)

```mermaid
graph TD;
    OtCore-->OtAdmin;
    OtCore-->OtTemplating;
    OtCore-->OtConnect;
    OtCore-->OtStats;
    OtCore-->...etc.;
```

### Design

La multiplicité des contenus, des templates et des supports rend le design graphique délicat à maintenir.

Afin de permettre une maintenabilité du code front, les choix suivants ont été faits:

* une extension unique est responsable du templating: [OtTemplating](/ot_templating)
* chaque template est indépendant des autres, et dispose de ses propres layouts, partials, assets
* cependant, tous les templates implémentent les même modèles de page (page d'accueil, liste des évènements, liste des adhérents...)
* les assets de chaque template sont organisés de manière similaire, en respectant entre autre la méthode [SMACCS](http://smacss.com/files/smacss-fr.pdf)
* un/des site(s) de démonstration, contenant tous les types de pages et de contenus, permettent de constater l'aspect graphique de ces éléments.

### Authentification

Le partage d'une authentification entre le logiciel et les sites est effectué par l'intermédiaire de cookies.

L'extension dédiée [OtConnect](/ot_connect) permet de soumettre ces cookies à l'API pour obtenir l'identité de l'utilisateur connecté.

Ce fonctionnement rencontre cependant des difficultés liées aux règles de sécurité des navigateurs liées aux cookies,
ainsi qu'aux structures possédant leur propre nom de domaine (domaines qui ne sont donc plus en `.opentalent.fr`)

### Nombre de sites

Tout adapté qu'il soit à l'architecture multi-sites, Typo3 n'a pas été pensé pour héberger une telle quantité de sites.
De nombreuses difficultés liées à ce nombre ont donc dû être contournées.

C'est la raison d'être de l'extension [OtOptimizer](/ot_admin), dont le rôle est de surcharger le fonctionnement de certaines fonctions
natives de Typo3 pour des raisons de performance.

### Cohérence avec les données Opentalent

Les sites doivent être à tout moment cohérents avec les données de la base de données Opentalent (structures, utilisateurs, paramètre...).

Pour ce faire, l'extension [OtAdmin](/ot_admin) fournit une API accessible par HTTP et en ligne de commande.
Cette API est appellées par des hooks côté logiciel et permet de déclencher par exemple la création d'un nouveau site, sa mise à jour,
ou son archivage.

### Typoscript

LE Typoscript. C'est le langage historique de Typo3. Très puissant, mais... [fiou](https://docs.typo3.org/m/typo3/tutorial-typoscript-in-45-minutes/master/en-us/TypoScriptFunctions/If/Index.html).

Bref, le Typoscript étant assez difficile d'accès, le choix a été fait de privilégier l'usage du langage de 
templating [Fluid](https://typo3.org/fluid/) dès que c'était possible.

Plus d'infos [ici](dependencies.md).

-------------------------

Et si vous avez lu jusqu'ici, vous avez mérité un cookie:

![cookie](images/cookie.png)
