# Comprendre la DB Typo3

Voici les principales tables sur lesquelles on est amené à intervenir. Toutes les autres tables sont soient
rendues inutiles par le fonctionnement spécifiques de l'instance Opentalent (comme `sys_domain`), ou ne nécessitent
quasiment jamais d'intervention manuelles.


## Règles générales

Toutes les tables ont pour clé primaire un champs `uid`.

La majorité des tables définissent un champ `pid`, pour "parent id". C'est l'uid de l'objet parent, par exemple
la page qui le contient pour contenu.

La majorité des tables définissent un champ `deleted`. Par défaut, le QueryBuilder typo3 ignorera de lui-même 
les champs dont ce champ est à 1.


## La table `pages`

La table `pages` contient un enregistrement pour chaque page d'un site.
Un champs spécifique Opentalent (`ot_website_uid`) permet de faire le lien entre une page et son site.

Chaque site est constitué d'une page racine (`is_siteroot=1`). Ensuite l'arborescence des pages du site est 
définie par l'intermédiaire du champs pid, le pid d'une page étant l'uid de sa page parente.

Le champs `dokType` définit le type d'une page (standard, raccourci, dossier...). Une page standard a pour dokType 1. 

Le champs `slug` est responsable du routing à l'intérieur du site.


## La table `ot_websites`

> Voir [le chapitre dédié](ot_websites.md)

## La table `tt_content`

La table `tt_content` contient un enregistrement pour chaque contenu d'une page.

Le champs `pid` correspond à l'uid de la page qui le contient.

Le type de contenu est défini par le champs `CType`

Le corps du contenu est défini par le champs `bodytext`


## Les tables `fe_users` et `fe_groups`

La table `fe_users` contient un enregistrement pour chaque frontend user.

Ces enregistrements sont générés automatiquement via l'extension [OtConnect](/ot_connect).

> Plus d'info [ici](auth.md)

Chaque fe_user peut être affecté à un ou plusieurs fe_group par l'intermédiaire du champs `usergroup` (plusieurs valeurs
possibles en séparant les uids avec une virgule)

Les groupes sont lié à un site par l'intermédiaire du champs `pid`, qui contient l'uid de la page racine du site
auquel le groupe est lié.

## La table `be_users` et `be_groups`

La table `be_users` contient un enregistrement pour chaque backend user.

Chaque be_user peut être affecté à un ou plusieurs be_group par l'intermédiaire du champs `usergroup` (plusieurs valeurs
possibles en séparant les uids avec une virgule)

> Plus d'infos [ici](be_users.md)

## Les tables `sys_file` et `sys_file_reference`


Chaque fichier uploadé depuis le backend a un enregistrement correspondant dans la table `sys_file`.

C'est ensuite la table `sys_file_reference` qui fait le lien entre cette table et la table étrangère qui référence ce 
fichier (pages, tt_content...)

La table ciblée et la clé étrangère sont indiquées par les champs `tablenames` et `uid_foreign` de la table `sys_file_reference`, 
tandis que l'id du fichier dans `sys_file` est contenu dans le champs `uid_local`


## Les tables `sys_log` et `ot_log`

Les tables `sys_log` et `ot_log` contiennent les logs typo3 pour la première, et spécifiques aux extensions 
Opentalent pour la seconde.
