فهرست منبع

move doc to confluence

Olivier Massot 6 ماه پیش
والد
کامیت
40840ef5e1
84فایلهای تغییر یافته به همراه3 افزوده شده و 6423 حذف شده
  1. 1 1
      README.md
  2. 0 106
      doc/auth.md
  3. 0 187
      doc/be_users.md
  4. 0 19
      doc/ci.md
  5. 0 85
      doc/db.md
  6. 0 24
      doc/dependencies.md
  7. 0 44
      doc/docker.md
  8. 0 15
      doc/env.md
  9. 0 0
      doc/faq.md
  10. 0 20
      doc/fe_users.md
  11. 0 8
      doc/forms.md
  12. 0 151
      doc/historic/cross_domain_auth.md
  13. BIN
      doc/historic/images/01.png
  14. BIN
      doc/historic/images/02.png
  15. BIN
      doc/historic/images/03.png
  16. BIN
      doc/historic/images/04.png
  17. BIN
      doc/historic/images/05.png
  18. BIN
      doc/historic/images/06.png
  19. BIN
      doc/historic/images/07.png
  20. BIN
      doc/historic/images/08a.png
  21. BIN
      doc/historic/images/08b.png
  22. BIN
      doc/historic/images/08c.png
  23. BIN
      doc/historic/images/09.png
  24. BIN
      doc/historic/images/10.png
  25. BIN
      doc/historic/images/11.png
  26. BIN
      doc/historic/images/12.png
  27. BIN
      doc/historic/images/13.png
  28. BIN
      doc/historic/images/14.png
  29. BIN
      doc/historic/images/15.png
  30. BIN
      doc/historic/images/16.png
  31. BIN
      doc/historic/images/17.png
  32. BIN
      doc/historic/images/18.png
  33. BIN
      doc/historic/images/19.png
  34. BIN
      doc/historic/images/20.png
  35. BIN
      doc/historic/images/21.png
  36. BIN
      doc/historic/images/22.png
  37. BIN
      doc/historic/images/23.png
  38. BIN
      doc/historic/images/24.png
  39. BIN
      doc/historic/images/25.png
  40. BIN
      doc/historic/images/26.png
  41. BIN
      doc/historic/images/27.png
  42. BIN
      doc/historic/images/28.png
  43. BIN
      doc/historic/images/29.png
  44. BIN
      doc/historic/images/30.png
  45. BIN
      doc/historic/images/31.png
  46. BIN
      doc/historic/images/32.png
  47. BIN
      doc/historic/images/33.png
  48. BIN
      doc/historic/images/34.png
  49. BIN
      doc/historic/images/35.png
  50. BIN
      doc/historic/images/36.png
  51. BIN
      doc/historic/images/37.png
  52. BIN
      doc/historic/images/38.png
  53. BIN
      doc/historic/images/39.png
  54. BIN
      doc/historic/images/gtmetrix_20200915_no_cache.pdf
  55. BIN
      doc/historic/images/gtmetrix_20200915_test_2.pdf
  56. BIN
      doc/historic/images/gtmetrix_20200915_test_3.pdf
  57. BIN
      doc/historic/images/gtmetrix_20200915_test_4.pdf
  58. BIN
      doc/historic/images/gtmetrix_20200915_test_5.pdf
  59. BIN
      doc/historic/images/gtmetrix_20200915_test_6.pdf
  60. BIN
      doc/historic/images/gtmetrix_20200915_test_7.pdf
  61. BIN
      doc/historic/images/gtmetrix_20200915_test_8.pdf
  62. 0 105
      doc/historic/typo3_contrib.md
  63. 0 144
      doc/historic/upgrade_v10.md
  64. 0 262
      doc/historic/upgrade_v11.md
  65. 0 4437
      doc/historic/upgrade_v9.md
  66. 0 19
      doc/hooks.md
  67. BIN
      doc/images/cookie.png
  68. BIN
      doc/images/phpstorm_new_server.png
  69. BIN
      doc/images/routing_blackfire_1.png
  70. 0 198
      doc/images/schema_droits_beusers.svg
  71. 0 1
      doc/images/v.svg
  72. 0 1
      doc/images/x.svg
  73. 0 42
      doc/index.md
  74. 0 101
      doc/installation.md
  75. 0 98
      doc/intro.md
  76. 0 105
      doc/maintenance.md
  77. 0 26
      doc/ot_websites.md
  78. 0 93
      doc/routing.md
  79. 0 23
      doc/social_networks.md
  80. 0 12
      doc/stats.md
  81. 0 33
      doc/templating.md
  82. 0 21
      doc/tests.md
  83. 1 41
      ot_admin/Readme.md
  84. 1 1
      ot_connect/Readme.md

+ 1 - 1
README.md

@@ -4,5 +4,5 @@
 
 ## Opentalent extensions for Typo3
 
-**[Voir la documentation](/doc/index.md)**
+**[Voir la documentation](https://ressources-opentalent.atlassian.net/wiki/spaces/DEV/folder/376307898)**
 

+ 0 - 106
doc/auth.md

@@ -1,106 +0,0 @@
-# Authentification et frontend users
-
-L'extension [OtConnect](/ot_connect) se positionne en amont des services d'authentification Typo3 et utilise l'API Opentalent.
-En somme, un utilisateur connecté sur Opentalent.fr le sera aussi sur le ou les autres sous-domaines TYPO3
-(correspondant à ses structures et à ses droits)
-
-> **Important**: ce système d'authentification ne concerne pour l'instant que les front-end users
-
-## Fonctionnement de l'authentification TYPO3
-
-### Service d'authentification
-
-Pour authentifier un utilisateur, TYPO3 exécute des services par ordre de priorité, jusqu'à ce qu'un de ces services valident l'identité
-de l'utilisateur. Si aucun des services ne valident cette authentification, celle-ci est rejetée.
-
-### Création et enregistrement d'un service d'authentification
-
-Un service d'authentification doit hériter de la classe `TYPO3\CMS\Sv\AbstractAuthenticationService`, et implémenter au moins deux méthodes:
-
-* `getUser` vérifie qu'un utilisateur portant ce nom existe en base et retourne ses informations, ou retourne false en cas d'echec.
-* `authUser` vérifie que l'utilisateur est authentifié. La méthode retourne un code indiquant le résultat:
-    * 0 signifie que l'authentification a échoué et que le process d'authentif doit s'arrêter là
-    * 100 signifie que l'authentification a échoué, mais que les services suivants peuvent essayer à leur tour d'authentifier le user
-    * 200 signifie que l'authentification a réussi
-
-De plus, le service doit être enregistré dans `ext_localconf.php` via la méthode `\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addService`.
-A cette étape, on peut lui donner des rôles (authentification backend et/ou frontend, par exemple).
-
-> **IMPORTANT** : quelle que soit la méthode d'authentification, les users backend et frontend
->doivent avoir leurs enregistrements dans la base TYPO3 (tables `fe_users` et `be_users`)
-
-### Requêtes d'authentification
-
-Typo3 reconnait une requête d'authentification de la manière suivante :
-
-* La requête a un paramètre `logintype` dont la valeur est `login`: c'est une requête d'authentification Frontend
-* La requête a un paramètre `login_status` dont la valeur est `login`: c'est une requête d'authentification Backend
-
-Voilà les formulaires minimaux pour poster une demande d'authentification :
-
-    <-- FrontEnd -->
-    <form action="" method="POST" enctype="multipart/form-data" >
-        <input type="hidden" name="logintype" value="login" />
-        <input type="text" placeholder="Nom d'utilisateur" name="user" required="1" />
-        <input type="password" name="pass" placeholder="Mot de passe" required="1" />
-        <input type="submit" value="Se connecter" />
-    </form>
-
-    <-- BackEnd -->
-    <form action="" method="POST" enctype="multipart/form-data" >
-        <input type="hidden" name="login_status" value="login" />
-        <input type="text" placeholder="Nom d'utilisateur" name="username" required="1" />
-        <input type="password" name="password" placeholder="Mot de passe" required="1" />
-        <input type="submit" value="Se connecter" />
-    </form>
-
-> Côté Frontend, Typo3 attend deux champs dont les attributs 'name' sont 'user' et 'pass'.
-
-### Base de données
-
-Les utilisateurs **Backend** doivent avoir une ligne correspondante dans la table `be_users` de la base TYPO3.
-Ils doivent avoir a minima les champs suivants renseignés :
-
-* `username`
-* `password`: si le mot de passe n'est pas utilisé pour authentifier l'utilisateur,
-  par exemple parce qu'une API l'a déjà authentifié en amont, mettre une random string
-* `usergroup`: le user doit appartenir à un groupe existant (cf. `be_groups`), sauf s'il est admin (champs `admin` = 1)
-
-Les utilisateurs **Frontend** doivent avoir une ligne correspondante dans la table `fe_users` de la base TYPO3.
-Ils doivent avoir a minima les champs suivants renseignés :
-
-* `username`
-* `password` : si le mot de passe n'est pas utilisé pour authentifier l'utilisateur,
-  par exemple parce qu'une API l'a déjà authentifié en amont, mettre une random string
-* `usergroup` : le user doit appartenir à un groupe existant (cf. `be_groups`)
-
-### Plus d'infos
-
-> [Voir la doc officielle](https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Authentication/Index.html)
-
-
-## Fonctionnement de l'extension OtConnect
-
-Un service `OtAuthenticationService` est créé et enregistré avec les caractéristiques suivantes :
-
-* `'subtype' => 'getUserFE,authUserFE,getUserBE,authUserBE'` : le service peut récupérer les infos des users
-  et les authentifier, à la fois pour le Frontend (FE) et pour le Backend (BE)
-* `'priority' => 80`: la priorité est fixée à 80, ce qui place le service en amont des services Typo3.
-
-Enfin, la variable de configuration `FE_fetchUserIfNoSession` force l'appel à la méthode getUser à chaque affichage d'une page frontEnd si une session n'existe pas déjà.
-(sans ça, l'utilisateur doit passer par la page de login même s'il a déjà une session opentalent.fr ouverte)
-
-Voilà les différents scénarios pour un utilisateur nommé Bob.
-
-> Les cas suivants sont donnés pour le Frontend, mais ils sont identiques pour le Backend à deux différences près :
-> * Le user doit saisir son login / mdp (pas d'auto-log)
-> * Seuls les utilisateurs ayant la propriété `admin_access` à true ont accès au Backend.
-
-| Num. | Cas | Comportement |
-| --- | --- | --- |
-| 1 | Bob a une session Typo3-FE existante dans son navigateur (cf. cookie `fe_typo_user`) | Le service n'est pas appelé, Bob est déjà connecté |
-| 2 | Bob n'a pas de session Typo3 ouverte, mais il a une session ouverte dans son navigateur sur Opentalent.fr (cf. cookies `BEARER` et `SFSESSID`) | Une requête GET `/isauthenticated` est envoyée à l'API Opentalent. En cas de succès, une nouvelle requête est envoyée à l'API pour obtenir les données à jour de l'utilisateur, puis la ligne de Bob est créee ou mise à jour dans la table `fe_users` de la base Typo3 (sauf si cette mise à jour a déjà été faite dans les dernières minutes, voir const USER_UPDATE_DELAY) |
-| 3 | Bob n'a ni session Typo3-FE ni session Opentalent.fr ouverte, mais il a envoyé une requête de login valide | Ses données d'authentif sont envoyées à l'API qui lui ouvre une session. La suite se déroule comme pour le cas n°2 |
-| 4 | Bob n'a ni session Typo3-FE ni session Opentalent.fr ouverte, mais il a envoyé une requête de login invalide | Ses données d'authentif sont envoyées à l'API qui essaie de lui ouvrir une session et retourne un code d'echec. Le service, constatant qu'il s'agit tout de même d'un compte Opentalent, s'interrompt et refuse l'accès à Bob (qui pleure) |
-| 5 | Bob se connecte en utilisant un compte créé dans Typo3 ou via un autre service d'authentification (ce compte n'existe donc pas dans la base Opentalent)  | Ses données d'authentif sont envoyées à l'API qui essaie de lui ouvrir une session et retourne un code d'echec. Le service passe la main aux services Typo3 suivants par ordre de priorité |
-

+ 0 - 187
doc/be_users.md

@@ -1,187 +0,0 @@
-# Backend users
- 
-> Voir les spécifications: https://ressources.opentalent.fr/display/SPEC/Droits+typo3
-
-## Users et groupes
-
-Le super admin est l'utilisateur 'oaos', réservé à un usage interne.
-
-Pour chaque site Typo3, il doit exister **un seul** compte admin (admin<subdomain>), et **un seul** groupe d'éditeurs (edit<subdomain>), où <subdomain> est le sous-domaine du site.
-
-Les droits des be-users varient selon le produit acheté par l'organisation.
-
-
-## Droits des backend users sur les sites
-
-Ce paragraphe présente les droits des be_users sur les pages et contenus du site: création, édition, suppression...
-
-
-| Autorisations disponibles sur les pages | Code                                                       |
-|-----------------------------------------|------------------------------------------------------------|
-| Show                                    | Afficher/Copier la page et le contenu                      | 1 |
-| Edit content                            | Modifier/Ajouter/Supprimer/Déplacer le contenu             | 16 |
-| Edit page                               | Modifier la page, par ex. changer le titre de la page, etc | 2 |
-| Delete                                  | Supprimer/déplacer la page et le contenu                   | 4 |
-| New                                     | Créer de nouvelles pages sous cette page                   | 8 |
-
-> Les valeurs de N1 et N2 sont calculées en additionnant les valeurs suivantes: show (1), edit content (16), edit page (2), 
-> delete (4), add (8)
-
-### Licence Premium
-
-#### Admin Premium
-
-| Page                                               | Show               | Edit content       | Edit page          | Delete             | New                | Code |
-|----------------------------------------------------|--------------------|--------------------|--------------------|--------------------|--------------------|------|
-| Home                                               | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![x](images/x.svg) | ![v](images/v.svg) | *27* |
-| footer/* (mentions légales, contact, plan du site) | ![v](images/v.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![v](images/v.svg) | *9*  |
-| Menu Présentation (*)                              | ![v](images/v.svg) | ![x](images/x.svg) | ![v](images/v.svg) | ![x](images/x.svg) | ![v](images/v.svg) | *11* |
-| Autres pages                                       | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | *31* |
-
-#### Editeur Premium
-
-| Page                                               | Show               | Edit content       | Edit page          | Delete             | New                | Code |
-|----------------------------------------------------|--------------------|--------------------|--------------------|--------------------|--------------------|------|
-| Home                                               | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![x](images/x.svg) | ![v](images/v.svg) | *27* |
-| footer/* (mentions légales, contact, plan du site) | ![v](images/v.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![v](images/v.svg) | *9*  |
-| Menu Présentation (*)                              | ![v](images/v.svg) | ![x](images/x.svg) | ![v](images/v.svg) | ![x](images/x.svg) | ![v](images/v.svg) | *11* |
-| Autres pages                                       | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | *31* |
-
-### Licence Standard
-
-#### Admin Standard
-
-| Page                                               | Show               | Edit content       | Edit page          | Delete             | New                | Code |
-|----------------------------------------------------|--------------------|--------------------|--------------------|--------------------|--------------------|------|
-| Home                                               | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![x](images/x.svg) | ![x](images/x.svg) | *19* |
-| footer/* (mentions légales, contact, plan du site) | ![v](images/v.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | *1*  |
-| Menu Présentation (*)                              | ![v](images/v.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | *1*  |
-| Autres pages                                       | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | *0*  |
-| Autres pages (legacy **)                           | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![x](images/x.svg) | *21* |
-
-#### Editeur Standard
-
-| Page                                               | Show               | Edit content       | Edit page          | Delete             | New                | Code |
-|----------------------------------------------------|--------------------|--------------------|--------------------|--------------------|--------------------|------|
-| Home                                               | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![x](images/x.svg) | ![x](images/x.svg) | *19* |
-| footer/* (mentions légales, contact, plan du site) | ![v](images/v.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | *1*  |
-| Menu Présentation (*)                              | ![v](images/v.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | *1*  |
-| Autres pages                                       | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | ![x](images/x.svg) | *0*  |
-| Autres pages (legacy **)                           | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![v](images/v.svg) | ![x](images/x.svg) | *21* |
-
-> (*) Inclut les pages : Adhérents, membres du CA, évènements, évènements des structures, structures adhérentes, informations pratiques
-
-> (**) Les pages créées par les utilisateurs standards avant la correction des droits disposent de droits particuliers (`ot_page_type = 'LEGACY_USER_CREATED'`).
-
-
-## Accès aux menus
-
-Ce paragraphe présente les menus du backend disponibles selon le type de compte.
-
-| Page                                           | Admin Premium      | Editor Premium     |   | Admin Standard     | Editor Standard    |
-|------------------------------------------------|--------------------|--------------------|---|--------------------|--------------------|
-| Web - Page                                     | ![v](images/v.svg) | ![v](images/v.svg) |   | ![v](images/v.svg) | ![v](images/v.svg) |
-| Web - Liste                                    | ![v](images/v.svg) | ![v](images/v.svg) |   | ![v](images/v.svg) | ![v](images/v.svg) |
-| Web - Formulaires                              | ![v](images/v.svg) | ![v](images/v.svg) |   | ![v](images/v.svg) | ![v](images/v.svg) |
-| Web - Corbeille                                | ![x](images/x.svg) | ![x](images/x.svg) |   | ![x](images/x.svg) | ![x](images/x.svg) |
-| Web - Info                                     | ![x](images/x.svg) | ![x](images/x.svg) |   | ![x](images/x.svg) | ![x](images/x.svg) |
-| Web - Personnaliser                            | ![v](images/v.svg) | ![v](images/v.svg) |   | ![v](images/v.svg) | ![v](images/v.svg) |
-| Web - Statistiques                             | ![v](images/v.svg) | ![v](images/v.svg) |   | ![v](images/v.svg) | ![v](images/v.svg) |
-| Web - Gestion des actualités                   | ![v](images/v.svg) | ![v](images/v.svg) |   | ![v](images/v.svg) | ![v](images/v.svg) |
-| Gestionnaire de site - Redirects               | ![x](images/x.svg) | ![x](images/x.svg) |   | ![x](images/x.svg) | ![x](images/x.svg) |
-| Fichier - Fichiers                             | ![v](images/v.svg) | ![v](images/v.svg) |   | ![v](images/v.svg) | ![v](images/v.svg) |
-| Outils Utilisateur - Configuration utilisateur | ![x](images/x.svg) | ![x](images/x.svg) |   | ![x](images/x.svg) | ![x](images/x.svg) |
-| Aide - A propos de...                          | ![x](images/x.svg) | ![x](images/x.svg) |   | ![x](images/x.svg) | ![x](images/x.svg) |
-| Aide -Manuel TYPO3                             | ![x](images/x.svg) | ![x](images/x.svg) |   | ![x](images/x.svg) | ![x](images/x.svg) |
-
-
-## Mise en oeuvre
-
-### Principe de mise en oeuvre
-
-Pour un site 'mywebsite', on va créer un be-user admin et un groupe dédié. Au départ, l'admin est le seul membre de ce groupe, 
-mais d'autres users (les éditeurs) pourront y être ajoutés par la suite.
-
-Ce groupe permet de contrôler les droits de base sur les pages du site (créer, éditer...), droits qui sont communs à l'administrateur et aux éditeurs.  
-L'admin reçoit, en tant que propriétaire des pages du site, des droits d'accès supplémentaires (comme la suppression)
-
-Ce groupe est lui-même un sous-groupe du groupe 'EditorStandard' ou 'EditorPremium', selon le produit acheté par la structure.
-Enfin, les admins sont aussi membres du groupe 'AdminStandard' ou 'AdminPremium', qui leur donnent accès aux modules réservés à l'administration (ex: 'Personnaliser')
-
-![schema](images/schema_droits_beusers.svg)
-
-
-### Nouveau client
-
-A la création d'un site dont le sous domaine serait "mysite", on procède ainsi:
-
-1. Créer un groupe 'edit_mysite'
-2. Créer un be_user 'admin_mysite'
-3. Ajouter le be_user 'admin_mysite' au groupe 'edit_mysite'
-4. Ajouter le be_user 'admin_mysite' au groupe 'AdminStandard' ou 'AdminPremium' (selon le produit)
-5. Ajouter le groupe 'edit_mysite' au groupe WriterBasic ou WriterFull, selon la nature du produit
-
-
-
-On attribue ensuite les droits en mettant à jour les champs suivants:
-
-| perms_userid        | perms_groupid      | perms_user | perms_group | perms_everybody |
-|---------------------|--------------------|------------|-------------|-----------------|
-| uid de admin_mysite | uid de edit_mysite | N1*        | N2*         | 0               |
-
-
-> Toutes ces opérations sont automatisées et peuvent être exécutées via la commande :
->
->    `php /var/www/typo3/vendor/bin/typo3 ot:site:reset-perms --create <organization-id>`
-
-
-### La structure change de produit
-
-Pour mettre à jour les droits des be_users, par exemple après un changement de produit :
-
-1. On met à jour les droits sur les pages de 'admin_mysite' et 'edit_mysite' (cf. paragraphe précédent) avec la commande `ot:site:reset-perms`
-2. On retire le groupe 'edit_mysite' de son groupe actuel
-3. On ajoute le groupe 'edit_mysite' au groupe Editor Standard ou Editor Premium, selon la nature du produit
-
-> Toutes ces opérations sont automatisées et peuvent être exécutées via la commande :
->
->    `php /var/www/typo3/vendor/bin/typo3 ot:site:reset-perms --create <organization-id>`
-
-
-### Si on veut changer les droits associés aux produits
-
-#### Droits issus des groupes de base
-
-Si les droits à modifier sont hérités d'un des groupes de base (Admin Premium, Editor Premium, Admin Standard, 
-Editor Standard, alors il suffit de modifier le ou les groupes concernés.
-
-
-#### Droits d'accès aux pages
-
-Pour modifier les droits sur les pages, on fera d'abord évoluer la commande `ot:site:reset-perms`, puis on l'exécute sur tous les sites avec l'option '–all'
-
-    php /var/www/typo3/vendor/bin/typo3 ot:site:reset-perms --all --create
-
-> (L'opération peut prendre quelques minutes)
-
-### Pour ajouter un utilisateur de type éditeur
-
-On créé le be_user correspondant, et on l'affecte au groupe edit_mysite.
-
-
-###  L'administrateur ou un des éditeurs a été modifié dans le logiciel
-
-On déclenche une update des données des be_users via la commande :
-
-    php /var/www/typo3/vendor/bin/typo3 ot:site:reset-perms <organization-id>
-
-Ou en effectuant une requête HTTP à l'adresse :
-
-    GET https://<typo3_host>/typo3/otadmin/site/reset-perms?organization-id=<organization-id>
-
- 
-
- 
-
- 
-

+ 0 - 19
doc/ci.md

@@ -1,19 +0,0 @@
-# Intégration et déploiement continu
-
-L'intégration continue est exécutée par notre instance [Gitlab](https://gitlab.2iopenservice.com/)
-
-On peut consulter l'état de la CI à cette adresse: <https://gitlab.2iopenservice.com/opentalent/admin/-/pipelines>
-
-### Fonction actuelle
-
-Son rôle actuel est d'exécuter [les test](tests.md) implémentés au niveau de chaque extension à chaque fois
-qu'un nouveau push est effectué sur le dépot.
-
-
-### Fonctions futures
-
-A l'avenir, on pourra envisager:
-
-* l'intégration du git flow à la CI
-* le déploiement automatisé en cas de réussite des tests
-* l'exécution manuelle après une mise à jour du core typo3 ou des autres extensions utilisées

+ 0 - 85
doc/db.md

@@ -1,85 +0,0 @@
-# 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.

+ 0 - 24
doc/dependencies.md

@@ -1,24 +0,0 @@
-# Extensions tierces et dépendances
-
-L'instance Typo3 installée dépend des extensions et librairies suivantes:
-
-## Extensions Typo3
-
-### Fluid
-
-Fluid est un moteur de templating intégré de façon native à typo3 depuis la version 9.
-
-### VHS
-
-VHS est une extension fournissant un grand nombre de viewhelpers utilisables dans les templates
-fluid.
-
-### Flux
-
-Flux permet de configurer le comportement des templates fluid du côté du backend.
-
-### News
-
-Cette extension permet aux administrateurs de site de maintenir un système d'actualités.
-
-

+ 0 - 44
doc/docker.md

@@ -1,44 +0,0 @@
-# Instance docker
-
-Un container est créé sous le nom de 'typo3'.
-
-## Architecture 
-
-Le projet [ot_typo3](https://gitlab.2iopenservice.com/opentalent/ot_typo3) est cloné dans le répertoire 'apps' du projet 
-[docker](https://gitlab.2iopenservice.com/vincent/docker).
-
-On se place ensuite dans le sous-répertoire `docker` de ot_typo3, et on lance dans la console:
-
-    sh clone-install.sh
-
-L'installation de typo3 telle qu'elle existe sur le serveur preprod est compressée, téléchargée et extraite dans le 
-répertoire `docker/typo3` qui **doit être ignoré par git**
-
-De sorte que l'on pourra monter séparément comme volumes docker les extensions (versionnées) et l'installation typo3 (non-versionnée).
-
-L'installation sur le docker suit ensuite [le même principe que celle qui existe sur les serveurs](installation.md) de prod et de test.
-
-
-
-## Répliquer l'instance Typo3 de la prod vers docker
-
-Pour répliquer manuellement l'installation Typo3 telle qu'elle existe sur test:
-
-1. Accéder en SSH au serveur preprod, et lancer:
-
-    cd /var/www/typo3
-    tar --exclude='./public/fileadmin/user_upload' --exclude='./archive.del' --exclude='./public/fileadmin/_processed_' --exclude='./var/log/*.log' -cvzf ./typo3_install.tar.gz .
-
-2. Télécharger l'archive
-
-3. Se placer ensuite à la racine de votre projet [docker](https://gitlab.2iopenservice.com/vincent/docker), et exécuter:
-
-    tar xvzf ./apps/ot_typo3/docker/typo3/typo3_install.tar.gz -C ./apps/ot_typo3/docker/typo3
-
-
-## Configurer le serveur sur Phpstorm
-
-Dans les paramètres de PhpStorm, créer un nouveau serveur sur ce modèle:
-
-![phpstorm_new_server](images/phpstorm_new_server.png)
-

+ 0 - 15
doc/env.md

@@ -1,15 +0,0 @@
-# Gestion des variables d'environnement
-
-Les variables d'environnement (url de l'API, adresse de login...) sont gérées sous formes de variables
-globales, stockées dans une array:
-
-    $GLOBALS['OT'] = ['MY_VAR' => 1, ...]
-
-Cette array est d'abord définie dans le fichier ot_core/ext_localconf.php
-
-Les différentes valeurs peuvent ensuite être remplacées dans un environnement précis, en redéfinissant 
-ces variables dans le fichier typo3/public/typo3conf/AdditionalConfiguration.php
-
-Exemple:
-
-    $GLOBALS['OT']['API_BASE_URI'] = 'http://docker.nginx.opentalent.fr';

+ 0 - 0
doc/faq.md


+ 0 - 20
doc/fe_users.md

@@ -1,20 +0,0 @@
-# Frontend users
-
-Les frontend users sont les utilisateurs authentifiés du côté front.
-Un administrateur de site peut créer des pages et contenus réservées aux utilisateurs authentifiés.
-
-> Pour le fonctionnement de l'authentification, voir : [auth.md](auth.md)
-
-Lorsqu'un utilisateur opentalent, déjà connecté au logiciel, envoie une requête pour une page d'un site
-Typo3, le plugin ot_connect interroge l'API Opentalent pour vérifier si cet utilisateur est bien connecté.
-
-Si oui, un enregistrement est créé ou mis à jour dans la table 'fe_user' (le lien avec la DB Opentalent
-se fait via le champ fe_user.tx_opentalent_opentalentId). À noter que l'enregistrement du fe_user ne sera 
-mis à jour que si la dernière mise à jour remonte à plus de 300s.
-
-Ces fe_users seront affectés à des groupes 'Membres' (fe_group) correspondant à la ou les structures auxquelles 
-la personne a accès.
-
-Ces groupes sont associés via leur pid à un site.
-
-Un administrateur peut alors limiter l'accès à une page ou contenu aux membres de ce groupe.

+ 0 - 8
doc/forms.md

@@ -1,8 +0,0 @@
-# Formulaires
-
-La gestion des formulaires est assurée par l'intermédiaire de l'extension native 'Forms'.
-
-Tous les sites ont un accès en lecture seule au formulaire Contact, qui est défini au sein de l'extension ot_templating.
-
-Chaque site possède ensuite un répertoire dédié: `/var/www/typo3/public/fileadmin/form_definitions/<organization-id>/` 
-dans lequel les définitions des formulaires (fichiers en .form.yaml) créés par le beuser sont enregistrés.

+ 0 - 151
doc/historic/cross_domain_auth.md

@@ -1,151 +0,0 @@
-
-
-## Objectif
-
-Permettre à un site dont le nom de domaine n'est pas en ***.opentalent.fr de s'authentifier auprès de l'API opentalent.
-
-
-## Problème
-
-Les navigateurs restreignent les cookies à un seul nom de domaine.
-
-Les cookies générés par l'authentif auprès de l'api sont donc invisibles pour le site mondomaine.com
-
-
-## Reproduire le problème
-
-Pour tester les solutions, il va falloir simuler un domaine différent.
-
-Dans le cas standard, si je me rend à l'adresse <local.admin.opentalent.fr/#/login>, et que je me connecte 
-en tant que opentalent74, lorsque je me rend à l'adresse <local.sub.opentalent.fr/ohcluses>, 
-j'apparais comme connecté.
-
-
-Je créé l'entrée suivante dans mon /etc/hosts:
-
-    127.0.0.1 local.sub.customdomain.fr
-
-Je créé un certificat pour l'adresse local.sub.customdomain.fr
-
-Je me connecte au docker nginx-proxy, et je remplace les domaines dans la conf de nginx:
-
-    sed -i 's/local\.sub\.opentalent\.fr/local.sub.customdomain.fr/g' /etc/nginx/conf.d/default.conf
-    nginx -s reload
-
-Je me rend à l'adresse local.admin.opentalent.fr/#/login
-
-Je m'authentifie en tant que opentalent74
-
-Je me rend à l'adresse http://local.sub.customdomain.fr/ohcluses
-
-Je ne suis pas connecté.
-
-
-## Solutions envisagées
-
-### 1- Envoyer les cookies au site depuis l'api via un controller dédié
-
-Lors d'une connexion réussie, l'API enverra une requête POST aux sites ayant des domaines custom et pour lesquelles
-le user a un Access
-
-Un controller dédié côté Typo3 (ex: setCookies.php) génèrera ensuite les cookies avec les noms de domaines correspondant.
-
-Pour tester cette solution, j'ajoute une requête curl dans le AuthenticationSuccessListener:
-
-    http://docker.sub.customdomain.fr/typo3conf/ext/ot_connect/setCookies.php?BEARER=' . $data['token']
-
-Côté setCookie.php, le contenu est simplement:
-
-    setcookie('BEARER', $_REQUEST['BEARER'], 0, "/", "customdomain.fr");
-
-Je teste, je m'assure que:
-
-* le fichier setCookie est bien appelé: oui 
-* la variable `$_REQUEST['BEARER']` est bien définie: oui
-
-Je teste dans mon navigateur:
-
-* je vide mes cookies
-* je me rend à https://local.admin.opentalent.fr/#/login
-* je me connecte en tant que opentalent74
-* je me rend à l'adresse https://local.sub.customdomain.fr/ohcluses
-* je ne suis pas authentifié, et aucun cookie n'apparait.
-
-Raté.
-
-### 2- SetCookie.php + `<img>`
-
-Plus de détails sur la solution ici: https://subinsb.com/set-same-cookie-on-different-domains/
-
-Le setcookie.php est de la forme:
-
-    setcookie('BEARER', '123456', 0, "/", "customdomain.fr");
-
-J'ajoute la ligne suivante au front du logiciel:
-
-    <img src="http://local.sub.customdomain.fr/typo3conf/ext/ot_connect/setCookies.php" style="display:none;" />
-
-Je teste de la même façon que pour la solution 1
-
-Le cookie est bien présent: Yes!
-
-
-### 2- SetCookie depuis la page de login
-
-J'ajoute à docker/apps/opentalent-admin-2.0/src/app/config/routing/main.js, ligne 79 :
-
-    setCookie:['getOrganization', 'Restangular', function(getOrganization, Restangular){
-        Restangular.oneUrl('no-x-access-id', 'https://local.sub.customdomain.fr')
-            .withHttpConfig({withCredentials: false})
-            .get()
-            .then(resp => {
-            })
-    }],
-
-Afin de tester plus facilement depuis la page de login du logiciel, je modifie la ligne 14 du fichier 
-docker/apps/opentalent-admin-2.0/src/app/ng-admin-jwt-auth/loginController.js en:
-
-    this.$state.go('switch', { organization_id: response.data.profile.organizationConnected}, {'reload':true, 'inherit':false});
-
-Je relance le `gulp serve`
-
-Le setcookie.php est de la forme:
-
-    setcookie('BEARER', 'azerty', 0, "/", "customdomain.fr");
-
-Je teste de la même façon que pour la solution 1
-
-(...)
-
-Après de nombreuses tentatives et blocages (blocages CORS, variable _POST vide...)
-On décide de laisser tomber cette méthode pour le moment.
-
-
-## Solution retenue et mise en oeuvre
-
-On récupère le champs otherWebsite de la structure(db: opentalent, table: Parameters)
-
-Si ce champs ne matche pas la regex `https?:\/\/.*\.opentalent\.fr`
-
-Alors, on insère la ligne suivante aux pages du logiciel:
-
-    <img src="https://<domain>/typo3conf/ext/ot_connect/setCookies.php?bearer=<bearer>" alt="" style="display:none;" />
-
-où:
-
-* `<domain>` est le champs otherWebsite de la table Parameters de la structure à laquelle le user est connecté
-* `<bearer>` est le token BEARER du user connecté
-
-Le setCookie appelé vérifie que le referer est bien en opentalent.fr. Si oui, et si
-la requête a un paramètre BEARER, alors il créé le cookie correspondant dans le bon domaine.
-
-> https://blog.theodo.com/2016/10/how-to-track-your-users-over-several-domains/
-
-
-## Update
-
-Parce que les règles de sécurité des navigateurs ont semble-t-il encore évolué, la solution retenue et qui 
-fontionnait n'est plus opérationnelle.
-
-Dans l'attente d'une solution durable (serveur d'auth), on se rabat sur une solution temporaire, c'est à dire 
-qu'on réactive les modales d'authentification sur les sites dont le domaines n'est pas en .opentalent.fr

BIN
doc/historic/images/01.png


BIN
doc/historic/images/02.png


BIN
doc/historic/images/03.png


BIN
doc/historic/images/04.png


BIN
doc/historic/images/05.png


BIN
doc/historic/images/06.png


BIN
doc/historic/images/07.png


BIN
doc/historic/images/08a.png


BIN
doc/historic/images/08b.png


BIN
doc/historic/images/08c.png


BIN
doc/historic/images/09.png


BIN
doc/historic/images/10.png


BIN
doc/historic/images/11.png


BIN
doc/historic/images/12.png


BIN
doc/historic/images/13.png


BIN
doc/historic/images/14.png


BIN
doc/historic/images/15.png


BIN
doc/historic/images/16.png


BIN
doc/historic/images/17.png


BIN
doc/historic/images/18.png


BIN
doc/historic/images/19.png


BIN
doc/historic/images/20.png


BIN
doc/historic/images/21.png


BIN
doc/historic/images/22.png


BIN
doc/historic/images/23.png


BIN
doc/historic/images/24.png


BIN
doc/historic/images/25.png


BIN
doc/historic/images/26.png


BIN
doc/historic/images/27.png


BIN
doc/historic/images/28.png


BIN
doc/historic/images/29.png


BIN
doc/historic/images/30.png


BIN
doc/historic/images/31.png


BIN
doc/historic/images/32.png


BIN
doc/historic/images/33.png


BIN
doc/historic/images/34.png


BIN
doc/historic/images/35.png


BIN
doc/historic/images/36.png


BIN
doc/historic/images/37.png


BIN
doc/historic/images/38.png


BIN
doc/historic/images/39.png


BIN
doc/historic/images/gtmetrix_20200915_no_cache.pdf


BIN
doc/historic/images/gtmetrix_20200915_test_2.pdf


BIN
doc/historic/images/gtmetrix_20200915_test_3.pdf


BIN
doc/historic/images/gtmetrix_20200915_test_4.pdf


BIN
doc/historic/images/gtmetrix_20200915_test_5.pdf


BIN
doc/historic/images/gtmetrix_20200915_test_6.pdf


BIN
doc/historic/images/gtmetrix_20200915_test_7.pdf


BIN
doc/historic/images/gtmetrix_20200915_test_8.pdf


+ 0 - 105
doc/historic/typo3_contrib.md

@@ -1,105 +0,0 @@
-## Retour d'expérience - 2021-10-07
-
-Retour d'expérience partagé avec la communauté Typo3 via Slack
-
-> I wanted to share our feedback about the use we make of Typo3 in our company.
-
-> Our company uses Typo3 since more than 12 years now to provide a prebuild website to each of our clients,
-which means that our typo3 instance hosts about 3500 websites, with specific admin accesses for each client,
-different editing rights according to the product they bought, a templating system, and some custom widgets we provide to them.
-
-> We recently upgraded this instance to Typo3 10.4
-
-> I wanted to share with you the pros of this system, and the limits we found by hosting this huge amount of websites on a
-single Typo3 instance.
-
-> 1. Why we chose Typo3
-
-> As far as we could find, Typo3 is the only CMS that allowed us to host hundreds of websites in a single place.
-The page and content edition suited our clients needs, the user and group system allowed us to manage the different 
-access levels, and the other centralized functionnalities, builtin or extension based (files, forms, news...), satisfied our needs.
-
-> The CMS is also well maintained and get regular updates since the beginning.
-
-> 2. What our instance looks like
-
-> We host around 3500 websites. Most of them are really basic, composed of 10-20 pages and a contact form.
-Some others are bigger, with news system, private pages, custom forms, and 30+ pages.
-
-> As I said, we're now using Typo3 10.4.
-This installation is built with composer, uses php7.4 and mariadb 10.3, and is hosted on a dedicated apache server.
-
-> We developed 6 extensions:
-
-> * a core extension giving among other things access to our API
-> * a templating extension that allows admins to choose between two templates (more to come)
-> * a statistics extension, integrating matomo tracking for websites and a module that gives access to the websites admins to the statistics of their websites
-> * an optimization extension, whose only purpose is to make use of xclass / middlewares to overthrow the performance struggles caused by the huge number of websites
-> * an authentication ext, implementing our custom authentication system
-> * an admin ext, providing API and CLI commands to create, delete, or update websites automatically.
-
-> These extensions depends on the fluidtypo3/flux, fluidtypo3/vhs and typo3fluid/fluid exts. We're also using the georgringer/news and the friendsoftypo3/frontend-editing extensions.
-
-> 3. The performance struggles
-
-> The main challenges we faced were about perfs.
-
-> First of all, the website configuration system based on one yaml file per websites and introduced with Typo3 9 caused a
-huge performance loss. The time needed to parse 3500 files is really long, and opening the "Sites" backend module can last something 
-like 30sec.
-We also had to rise the php limit about the max number of files that it can maitain open at the same time.
-
-> The website and page resolution were also problematics. In their primitive form, they triggered one or two db query per site, meaning that
-each page displayed made around 7000 db queries each time! Not only the loading time was near to 6secs, but our hosting machine had some bad times...
-
-> We fixed these issues by:
-* rebuilding an inbase website configuration (we've got a 'website' table hosting those informations). The 'pages' table got a new foreign key linking it to this new table.
-* overriding the \TYPO3\CMS\Frontend\Middleware\PageResolver middleware to resolve the website first with one db query on this 'website' table, then 
-  a second query in the 'pages' table to find the suited page. From 7000 queries, we're now to only 2.
-* also, xclassing the now named TYPO3\CMS\Core\Routing\PageSlugCandidateProvider class, precisely the getPagesFromDatabaseForCandidates method. the way this method is designed makes the while loop to call getSiteByPageId once for each page matching the given 'slug'. But with 3500 websites, we've also got 3500 pages with the '/' slug...
-
-> The last problems we could'nt solve at this time are related to the backend when accessed by the super-admin. Because this admin can see all of the pages, sites, files, or users, the backend performances are really overstretched. I could give more feedback on this matter if needed.
-
-> I'll be glad to answer to any questions you could have about how Typo3 behaves in our use case.
-
-
-
-## Retour d'expérience, version technique abregée pour le canal des core-dev - 2021-10-07
-
-> Hi everyone, @Volker Graubaum suggested me to share this feedback with you.
-> 
-> My company uses typo3 to provide a website to each of our clients, meaning that we host around 3500 websites (i.e. around 120.000 pages) on a single Typo3 installation.
-> We're now using Typo3 10.4. This installation is built with composer, uses php7.4 and mariadb 10.3, and is hosted on a dedicated apache server.
-> 
-> The genereal behaviour is really satisfying, but hosting that many websites and pages also presents some difficulties.
-> 
-> The main challenges we faced were about perfs.
-> 
-> First of all, the website configuration system based on one yaml file per websites and introduced with Typo3 9 caused a
-> huge performance loss. The time needed to parse 3500 files is really long, and opening the "Sites" backend module can last something 
-> like 30sec.
-> We also had to rise the php limit about the max number of files that it can maitain open at the same time.
-> 
-> The website and page resolution were also problematics. In their primitive form, they triggered one or two db query per site, meaning that
-> each page displayed made around 7000 db queries each time! Not only the loading time was near to 6secs, but our hosting machine had some bad times...
-> 
-> We fixed these issues by:
-> * rebuilding an inbase website configuration (we've got a 'website' table hosting those informations). The 'pages' table got a new foreign key linking it to this new table.
-> * overriding the \TYPO3\CMS\Frontend\Middleware\PageResolver middleware to resolve the website first with one db query on this 'website' table, then 
->   a second query in the 'pages' table to find the suited page. From 7000 queries, we're now to only 2.
-> * also, xclassing the now named TYPO3\CMS\Core\Routing\PageSlugCandidateProvider class, precisely the getPagesFromDatabaseForCandidates method. the way this method is designed makes the while loop to call getSiteByPageId once for each page matching the given 'slug'. But with 3500 websites, we've also got 3500 pages with the '/' slug...
-> 
-> The last problems we could'nt solve at this time are related to the backend when accessed by the super-admin. 
-> Because this admin can see all of the pages, sites, files, or users, the backend performances are really overstretched. 
-> I could give more feedback on this matter if needed.
-> 
-> I would be glad to share more informations about the workarounds we found to solve these issues.
-
-
-## Projet publique de démonstration
-
-Pour permettre de reproduire la problématique du grand nombre de sites et de représenter l'effet des 
-correctifs, un container docker est créé et est publié sur github pour être partagé avec la communauté:
-
-* Dépôt gitlab (`origin`): <https://gitlab.2iopenservice.com/olivier/multisites_optim>
-* Dépôt github (`github`): <https://github.com/Opentalent/Typo3MultisitesOptim>

+ 0 - 144
doc/historic/upgrade_v10.md

@@ -1,144 +0,0 @@
-
-## Upgrade docker
-
-php composer.phar update
-./vendor/bin/typo3 referenceindex:update
-> errors
-
-rm public/typo3conf/ext/ot_admin
-rm public/typo3conf/ext/ot_connect
-rm public/typo3conf/ext/ot_core
-rm public/typo3conf/ext/ot_stats
-rm public/typo3conf/ext/ot_templating
-rm public/typo3conf/ext/ot_optimizer
-./vendor/bin/typo3 upgrade:run
-
-> error: ot_templating not loaded
-
-ln -s /var/opentalent/git/ot_typo3/ot_core public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_connect public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_admin public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_stats public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_templating public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_optimizer public/typo3conf/ext/
-php composer.phar dumpautoload
-./vendor/bin/typo3 upgrade:run
-
-> Uncaught TYPO3 Exception Cannot autowire service "Opentalent\OtAdmin\Controller\ScanController": argument "$otWebsiteRepository" of method "Opentalent\OtCore\Controller\ActionController::injectOtWebsiteRepository()" references class "Opentalent\OtCore\Website\OtWebsiteRepository" but no such service exists.
-thrown in file /var/www/typo3/vendor/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php
-in line 54
-
-rm public/typo3conf/ext/ot_admin
-rm public/typo3conf/ext/ot_connect
-rm public/typo3conf/ext/ot_core
-rm public/typo3conf/ext/ot_stats
-rm public/typo3conf/ext/ot_templating
-rm public/typo3conf/ext/ot_optimizer
-php composer.phar dumpautoload
-./vendor/bin/typo3 upgrade:run
-
-> An exception occurred while executing 'SELECT `content` FROM `cache_hash` WHERE (`identifier` = ?) AND (`expires` >= ?)' with params ["cb5eaa637b55d65c307d774a1920fc83", 1633424030]:
-Table 'typo3.cache_hash' doesn't exist                                                                                                                                                  
-
-disable all caches by adding these lines to AdditionalConfiguration.php:
-
-    foreach ($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'] as $cacheName => $cacheConfiguration) {
-    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$cacheName]['backend'] = \TYPO3\CMS\Core\Cache\Backend\NullBackend::class;
-    }
-
-
-./vendor/bin/typo3 upgrade:run
-
-> [ERROR] <error>Error running Database Up-to-Date. Please ensure this prerequisite manually and try again.</error>
-
-./vendor/bin/typo3 upgrade:run extensionManagerTables
-./vendor/bin/typo3 upgrade:run separateSysHistoryFromLog
-./vendor/bin/typo3 upgrade:run rsaauthExtension >> no when asked
-./vendor/bin/typo3 upgrade:run feeditExtension >> no when asked
-./vendor/bin/typo3 upgrade:run taskcenterExtension >> no when asked
-./vendor/bin/typo3 upgrade:run sysActionExtension >> no when asked
-./vendor/bin/typo3 upgrade:run svgFilesSanitization >> no when asked
-./vendor/bin/typo3 upgrade:run databaseRowsUpdateWizard
-
-access to the BE
-
-run remaining upgrade wizard (felogin)
-flush cache
-analyse db
-apply changes to fields
-languages: update all
-reset BE users preferences
-clear persistent tables: all   >> useless, I guess...
-
-./vendor/bin/typo3 referenceindex:update
-
-> long, prévoir 1h+ / voir à lui passer un param quiet ou silent
-
-ln -s /var/opentalent/git/ot_typo3/ot_core public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_connect public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_admin public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_stats public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_templating public/typo3conf/ext/
-ln -s /var/opentalent/git/ot_typo3/ot_optimizer public/typo3conf/ext/
-php composer.phar dumpautoload
-
-http://local.sub.opentalent.fr/typo3/install.php
-
-I fix every deprecated call in my extensions
-BE is loading, ok
-
-analyse db structure >> nothing new
-Environment Status > ok
-Directory Status >> permission denied, I let it asit is for the moment (docker...)
-
-I re-enable the cache by deleting these lines in AdditionalConfiguration.php:
-
-    foreach ($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'] as $cacheName => $cacheConfiguration) {
-    $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$cacheName]['backend'] = \TYPO3\CMS\Core\Cache\Backend\NullBackend::class;
-    }
-
-Backend is not working anymore, I access to the typo3 install page, and run a db analysis
-I create the new tables
-
-BE is back to life
-Everything seems to be fine, except for the perfs.
-Make it work, then make it fast...
-
-
-## Upgrade sur preprod
-
-cd /var/opentalent/git/ot_typo3
-git pull
-git checkout typo10_migration
-cd /var/www/typo3
-rm composer.json
-nano composer.json >> I copy paste the content of docker/typo3/composer.json
-php7.4 composer.phar self-update --2
-php7.4 composer.phar update
-
-(en root) chown exploitation:www-data public/typo3conf/AdditionalConfiguration.php
-
-I add these lines to AdditionalConfiguration.php
-
-    foreach ($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'] as $cacheName => $cacheConfiguration) {
-        $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations'][$cacheName]['backend'] = \TYPO3\CMS\Core\Cache\Backend\NullBackend::class;
-    }
-
-./vendor/bin/typo3 upgrade:run databaseRowsUpdateWizard
-touch public/typo3conf/ENABLE_INSTALL_TOOL
-
-I access to https://preprod.opentalent.fr/typo3/install.php
-
-db analysis -> alter fields
-
-I remove the lines added to AdditionalConfiguration
-
-db analysis -> add tables
-languages -> update all
-reset be users prefs
-
-./vendor/bin/typo3 referenceindex:update
-
-> plan for 20min
-
-

+ 0 - 262
doc/historic/upgrade_v11.md

@@ -1,262 +0,0 @@
-# Upgrade v10 -> v11
-
-Mise à jour de l'instance typo3 de la 10.4.36 vers la 11.5.29 LTS
-
-Pour cette mise à jour, on reste en PHP 7.4.1
-
-## Analyse
-
-### Mise à niveau des extensions Opentalent
-
-L'analyse des fichiers des extensions signale deux extensions "maison" comme incompatibles : ot_admin et ot_connect.
-
-Au total, ce sont trois méthodes qui sont concernées par les dépréciations.
-
-Un ticket est créé pour la mise à niveau : [V8-4761](https://assistance.opentalent.fr/browse/V8-4761)
-
-
-
-### Mise à niveau des extensions tiers
-
-| Extension                       | Version actuelle | Dernière version | Compatibilité Typo3 11 | Compat. PHP |
-|---------------------------------|------------------|------------------|------------------------|-------------|
-| fluidtypo3/flux                 | 9.7.2            | 9.7.4            | ^11                    | ^7.4.0 - ^8 |
-| fluidtypo3/vhs                  | 6.1.2            | 6.1.3            | ^11                    | ^7.4.0 - ^8 |
-| georgringer/news                | 9.0              | 11.1.2           | ^11.5.24               | 7.4 -> 8.3  |
-| helhum/typo3-console            | 6.6              | 7.1.6            | ^11.5.26               | >=7.4.1     |
-| causal/image_autoresize         | 2.1              | 2.2.0            | ^11                    | ^7.4   - ^8 |
-| friendsoftypo3/frontend-editing | 2.0              | 3.1.1            | ^11.5                  | ?           |
-| sgalinski/lfeditor              | 6.0              | 7.1.11           | ^11.5                  | ?           |
-| waldhacker/hcaptcha             | 2.0              | 2.1.1            | ^11.5                  | ^7.2 - ^8   |
-| guzzle/guzzle                   | 6.x              | 7.7              |                        | ^7.2 - ^8   |
-| nimut/testing-framework         | 5.2              | 6.0.1            | ^11.5.3                | ^7.2 - ^8.0 |
-
-A priori pas de blocage, la mise à jour des extensions sera à faire en même temps que celle de typo3
-
-
-### Réaliser l'upgrade
-
-1. Faire un snapshot du serveur
-2. Maj tous les packages Typo3 de la version ^10.4 à la version ^11.5 dans le composer.json
-3. Maj les dépendances à leur dernière version compatible SAUF news, qui reste à la v9 (voir paragraphe précédent)
-4. Aller à la page /setup de typo3, et faire passer les différentes opérations de mise à jour
-5. Tester
-
-
-### Notes upgrade en local
-
-* (réglé, voir: https://github.com/FluidTYPO3/vhs/issues/1869) J'ai dû modifier le type du param ... de la classe FluidTYPO3\Vhs\ViewHelpers\Resource\CollectionViewHelper qui 
-  générait une erreur (mettre Repository comme type à la place de RecordCollectionRepository débloque la situation...)
-* Il a fallu maj le fichier cli, le nouvel emplacement de la console est `/var/www/typo3/vendor/bin/typo3`
-* il faut mettre à jour le .htaccess (prendre celui ici: public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess )
-  et le copier dans public/, puis rajouter les lignes custom en début de fichier)
-* j'ai un bug avec `gzuncompress` au chargement du backend, on peut le corriger avec un `sh cli cache:flush`
-* comme suggéré dans la doc typo3, j'ai lancé un `sh cli referenceindex:update`
-
-### Notes upgrade sur test
-
-* déploiement sur test5
-
-      cd /var/opentalent/git/ot_typo3
-      git fetch origin feature/v8-4762-upgrade_v11
-      git checkout feature/v8-4762-upgrade_v11
-      
-      cd /var/www/typo3
-
-* je copie colle le contenu du composer.json dans celui de test5 
-
-      php7.4 composer.phar update
-
-* je met à jour le fichier `cli` avec le bon chemin d'accès : `/var/www/typo3/vendor/bin/typo3`
-
-      mv public/.htaccess public/.htaccess.old
-      cp public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess public/.htaccess
-
-* je rajoute les premières lignes custom du .htaccess
-
-      touch public/typo3conf/ENABLE_INSTALL_TOOL
-
-* je me rends à l'adresse `https://sub.test5.opentalent.fr/typo3/install.php`
-* je lance la maj de la structure de la DB
-* je lance l'upgrade wizard, et j'exécute toutes les tâches
-* je reset les préférences du backend user
-* je maj les packs de langues
-* je flush le cache
-* j'ajoute la ligne suivante au fichier `nano /etc/php/7.4/cli/conf.d/20-apcu.ini` : `apc.enable_cli=on`
-
-    sh cli cache:flush
-    sh cli referenceindex:update
-
-* je retire le plugin frontend-editing qui ne fonctionne pas : php7.4 composer.phar remove friendsoftypo3/frontend-editing
-
-
-Up:
-
-Je renomme le fichier composer.json et je créé un symlink vers le nouveau composer.json versionné dans le repo ot_typo3 :
-
-    mv composer.json composer.json.orig
-    ln -s /var/opentalent/git/ot_typo3/composer.json ./composer.json
-    php7.4 composer.phar install
-
-
-## Mise en oeuvre
-
-Je me connecte en SSH à prod-front
-
-    ssh exploitation@prod-front
-
-
-
-### Mise en maintenance
-
-Je met à jour le message de maintenance :
-
-    cd /var/www/typo3
-    nano public/maintenance.html
-
-J'active le mode maintenance :
-    
-    nano public/.htaccess
-
-
-Je décommente les lignes :
-
-    #RewriteCond %{REMOTE_ADDR} !^10\.8\.0\.
-    #RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
-    #RewriteRule .* /maintenance.html [R=302,L]
-
-Je vérifie depuis un appareil hors VPN que la maintenance est bien active.
-
-### Snapshot
-
-Tony réalise un snapshot de prod-front
-
-### Dump de la DB
-
-Je lance un dump de la DB :
-
-    cd ~
-    ./dump_typo3.sh
-
-### Upgrade
-
-    cd /var/opentalent/git/ot_typo3
-    git fetch origin release/0.7
-    git checkout release/0.7
-
-    cd /var/www/typo3
-
-
-Je renomme le fichier composer.json et je créé un symlink vers le nouveau composer.json versionné dans le repo ot_typo3 :
-
-    mv composer.json composer.json.orig
-    ln -s /var/opentalent/git/ot_typo3/composer.json ./composer.json
-    rm composer.lock
-    rm -r vendor/*
-    php7.4 composer.phar install
-
-
-Je met à jour le fichier `cli` avec le bon chemin d'accès :
-
-     nano cli
-
-On remplace `/var/www/typo3/vendor/bin/typo3cms` par `/var/www/typo3/vendor/bin/typo3`
-
-On va devoir remplacer le fichier .htaccess, sans désactiver le mode maintenance :
-
-    cp public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess public/.htaccess.new
-    nano public/.htaccess.new
-
-Ajouter les lignes suivantes :
-
-    # <--- Opentalent rules
-
-    #SetEnvIf Remote_Addr ^10\.8\.0\.[0-255] TYPO3_CONTEXT=Development
-    
-    # Enable / Disable the opentalent ot_optimizer middlewares
-    SetEnv TYPO3_OPTIMIZE 1
-    
-    RewriteCond %{REMOTE_ADDR} !^10\.8\.0\.
-    RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
-    RewriteRule .* /maintenance.html [R=302,L]
-
-    # Opentalent rules --->
-
-Puis remplacer le .htaccess existant :
-
-    mv public/.htaccess public/.htaccess.old
-    mv public/.htaccess.new public/.htaccess
-
-Vérifier que le mode maintenance est toujours activé à l'extérieur
-
-J'active le mode install de typo3 :
-
-      touch public/typo3conf/ENABLE_INSTALL_TOOL
-
-Je me rends à l'adresse `https://ohcluses.opentalent.fr/typo3/install.php`
-
-Je lance la maj de la structure de la DB
-
-Je lance l'upgrade wizard, et j'exécute toutes les tâches
-
-Je reset les préférences du backend user
-
-Je maj les packs de langues
-
-Je flush le cache
-
-
-J'ouvre en édition le fichier suivant :
-
-    sudo nano /etc/php/7.4/cli/conf.d/20-apcu.ini
-
-Et j'ajoute la ligne :
-
-    apc.enable_cli=on
-
-Puis je lance les dernières commandes :
-
-    sh cli cache:flush
-    sh cli referenceindex:update
-
-
-
-
-Je vérifie l'installation
-
-
-### Désactivation du mode maintenance 
-
-J'édite le fichier .htaccess
-
-    cd /var/www/typo3
-    nano public/.htaccess
-
-
-Je commente les lignes :
-
-    RewriteCond %{REMOTE_ADDR} !^10\.8\.0\.
-    RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
-    RewriteRule .* /maintenance.html [R=302,L]
-
-### Nettoyage après upgrade
-
-Si tout fonctionne bien, je retire les fichiers devenus inutiles :
-
-    rm composer.json.orig
-    rm public/.htaccess.old
-
-
-Supprimer les champs et tables en zzz_ depuis le BE typo3
-
-
-### Release
-
-Finaliser la release dans GitKraken
-
-Switcher sur master sur prod-front :
-
-    cd /var/opentalent/git/ot_typo3
-    git checkout master
-    git pull
-

+ 0 - 4437
doc/historic/upgrade_v9.md

@@ -1,4437 +0,0 @@
-# Upgrade TYPO3 8.2 > 9.5
-
-> Les scripts mis en oeuvre peuvent être retrouvés ici: <https://gitlab.2iopenservice.com/opentalent/upgrade_typo8>
-
-# POC
-
-### Programme
-
-Migration planifiée le mardi 23/09, le 24 sera pour la recette
-et la mise en prod définitive pour le 24 17h sauf erreur).
-
-#### 14/09
-
-* [Equipe] Envoyer un mail pour prévenir de la maintenance
-
-#### 23/09
-
-##### 8:30 => 12:00:
-
-* [Tony] Fais un snapshot
-* [Olivier] Active le verrouillage du backend `Configure => [BE][adminOnly] = 2`
-* [Olivier] Upload maintenance.html et configure le .htaccess, attention au renommage du répertoire, vérifier avec un PC hors-VPN
-* [Olivier] Rediriger la page de login vers admin.prod.opentalent (**url à ajouter à la page de maintenance**)
-* [Tony] * Installation de php-fpm7.4
-  * upgrade mysql5.7 vers mariadb10.3 et patch
-  * copier le php.ini de la 7.4 de preprod vers prod-front
-* [Olivier] Installe python3 et python3-pip
-* [Olivier] lance le script d'upgrade
-* [Tony] prépare un autre vhost pour les sites `opentalent.fr` et `2iopenservice.com` en version php7.0
-* [Olivier] Créer des symlinks pour que le portail ait encore accès aux images
-* [Olivier] Retirer le mode maintenance des htaccess de typo3_82 et typo3
-
-NB:
-
-    https://www.opentalent.fr   -> /var/www/typo3_82    <>   php7.0, openassos
-    https://2iopenservice.com   -> /var/www/typo3_82    <>   php7.0, openassos
-    https://*****.opentalent.fr   -> /var/www/typo3    <>   php7.4, typo3
-
-
-##### 20/10 am, 21/10
-
-* [Equipe] Recette et corrections eventuelles
-* [Tony] Fais un snapshot
-* [Olivier] Lance le `upgrade --clean`
-
-##### 15:30 => 18:00
-
-> En cas de pépin grave, on rollback! (sauter direct au paragraphe suivant)
-> Sinon, on continue.
-
-* [Olivier] Redirige le vhost apache vers le nouveau système
-* [Tony] Active le vhost pour les sites `opentalent.fr` et `2iopenservice.com`
-* [Tony] Supprime php-fpm7.0 (à confirmer)
-
-#### 28/09
-
-* [Equipe] Communique au sujet du déploiement réussi?
-* [Tony] Supprime le snapshot initial
-
-##### Switch en mode maintenance
-
-Pour basculer l'ancier typo3 vers le mode maintenance, lancer les commandes suivantes:
-
-    mv /var/www/typo3_82/.htaccess /var/www/typo3_82/.htaccess_200
-    mv /var/www/typo3_82/.htaccess_503 /var/www/typo3_82/.htaccess
-
-Pour revenir au mode standard:
-
-    mv /var/www/typo3_82/.htaccess /var/www/typo3_82/.htaccess_503
-    mv /var/www/typo3_82/.htaccess_200 /var/www/typo3_82/.htaccess
-
-##### Rollback
-
-En cas de gros pépin
-
-* [Tony] Restaure le snapshot
-
-
-
-### Préparation de prod-front
-
-### php et apache
-
-Les corrections suivantes doivent être apportées au serveur prod-front avant de procéder à l'upgrade.
-
-Installer php-fpm 7.4
-
-Changer le user php-fpm et apache2 pour mettre 'exploitation' à la place de 'www-data', et faire un:
-
-    chown -R exploitation:www-data /var/www/typo3
-
-Corriger le fichier php.ini pour régler la timezone sur Europe / Paris
-
-    [Date]
-    ; Defines the default timezone used by the date functions
-    ; http://php.net/date.timezone
-    ;date.timezone =
-
-Tony fera un upgrade mariadb 10.3 sur prod-back avec patch ci dessous + switch mysql5.7 vers mariadb10.3 sur prod-front (repo: source.list):
-
-    /lib/systemd/system/mariadb.service:   Your workaround is working but it seems that removing only these 3 lines
-    is sufficient:
-    > ProtectSystem=full
-    > PrivateDevices=true
-    > ProtectHome=true
-
-Aprés l'upgrade:
-
-préparer un autre vhost pour les sites `opentalent.fr` et `2iopenservice.com` en version php7.0 (/var/www/typo3_82)
-sortir *.opentalent.fr dans un vhost spécifique (/var/www/typo3), en php7.4
-
-
-
-
-### scripts
-
-Renommer les fichiers:
-
-* `constants.py` -> `constants-preprod.py`
-* `constants-prod.py` -> `constants.py`
-
-
-### Installation de la 9.5
-
-> T0
-
-Avec MysqlWB, en tant que user root:
-
-    CREATE SCHEMA `typo3` DEFAULT CHARACTER SET utf8 ;
-
-Shell (3min):
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 openassos | mysql -h localhost -P 3306 -u root --password=mysql2iopenservice369566 -D typo3
-
-
-Se loguer sur prod-front en tant que root:
-
-    mv /var/www/typo3 /var/www/typo3_82
-    mkdir /var/www/typo3
-    cp -p /var/www/typo3_82/.htaccess /var/www/typo3/.htaccess
-    cp -pr /var/www/typo3_82/typo3_src_version/typo3_src-8.7.22 /var/www/typo3/
-    cp -pr /var/www/typo3_82/typo3conf /var/www/typo3/
-    ln -s /var/www/typo3/typo3_src-8.7.22 /var/www/typo3/typo3_src
-    ln -s /var/www/typo3/typo3_src/typo3 /var/www/typo3/typo3
-    ln -s /var/www/typo3/typo3_src/index.php /var/www/typo3/index.php
-    mkdir /var/www/typo3/typo3temp
-
-On déplace les répertoires de type uploads:
-
-    mv /var/www/typo3_82/fileadmin/_migrated /var/www/typo3/fileadmin/
-    mv /var/www/typo3_82/fileadmin/shared_folder /var/www/typo3/fileadmin/
-    mv /var/www/typo3_82/fileadmin/stockage /var/www/typo3/fileadmin/
-    mv /var/www/typo3_82/fileadmin/user_upload /var/www/typo3/fileadmin/
-    mv /var/www/typo3_82/uploads /var/www/typo3/
-    mv /var/www/typo3_82/websites /var/www/typo3/
-
-    sudo chown -R exploitation:www-data /var/www/typo3
-
-
-MysqlWB:
-
-    CREATE USER 'typo3'@'localhost' IDENTIFIED BY 'Vq2icge7SM3P26CaC3';
-    GRANT ALL PRIVILEGES ON typo3.* TO 'typo3'@'localhost'; 
-    TRUNCATE typo3.cf_cache_hash;
-    TRUNCATE typo3.cf_cache_hash_tags;
-    TRUNCATE typo3.cf_cache_imagesizes;
-    TRUNCATE typo3.cf_cache_imagesizes_tags;
-    TRUNCATE typo3.cf_cache_news_category;
-    TRUNCATE typo3.cf_cache_news_category_tags;
-    TRUNCATE typo3.cf_cache_pages;
-    TRUNCATE typo3.cf_cache_pagesection;
-    TRUNCATE typo3.cf_cache_pagesection_tags;
-    TRUNCATE typo3.cf_cache_pages_tags;
-    TRUNCATE typo3.cf_cache_rootline;
-    TRUNCATE typo3.cf_cache_rootline_tags;
-    TRUNCATE typo3.cf_extbase_datamapfactory_datamap;
-    TRUNCATE typo3.cf_extbase_datamapfactory_datamap_tags;
-    TRUNCATE typo3.cf_extbase_reflection;
-    TRUNCATE typo3.cf_extbase_reflection_tags;
-    TRUNCATE typo3.cf_workspaces_cache;
-    TRUNCATE typo3.cf_workspaces_cache_tags;
-    DELETE FROM typo3.sys_log WHERE tstamp < UNIX_TIMESTAMP('2020-01-01 00:00:00');
-    DELETE FROM typo3.sys_history WHERE tstamp < UNIX_TIMESTAMP('2019-01-01 00:00:00');
-    DELETE FROM typo3.sys_log WHERE details LIKE 'User %s has cleared the cache%';
-    DELETE FROM typo3.sys_log WHERE details LIKE 'Core: Error handler%';
-    DELETE FROM typo3.sys_log WHERE details LIKE 'Core: Exception handler%';
-    DELETE FROM typo3.pages WHERE uid IN (15983, 16009, 16087, 16412, 16798, 17058, 17162, 17331, 17461, 18696);
-
-Shell:
-
-    nano /var/www/typo3/typo3conf/LocalConfiguration.php
-
-Corriger la section `'DB' => ['Connections' => [` de la manière suivante:
-
-    'charset' => 'utf8',
-    'dbname' => 'typo3',
-    'driver' => 'mysqli',
-    'host' => 'localhost',
-    'initCommands' => '',
-    'password' => 'Vq2icge7SM3P26CaC3',
-    'user' => 'typo3',
-
-
-Shell (en tant que root):
-
-    cd /var/www/typo3/
-    rm /var/www/typo3/.htaccess
-    wget --content-disposition https://get.typo3.org/9.5.21
-    tar xzvf typo3_src-9.5.21.tar.gz
-    ln -sfn typo3_src-9.5.21 typo3_src
-    touch /var/www/typo3/typo3conf/ENABLE_INSTALL_TOOL
-    cp -p typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess ./.htaccess
-    rm -r /var/www/typo3/typo3temp/*
-    chmod 2770 /var/www/typo3
-    chmod 2770 /var/www/typo3/typo3temp
-    chmod 2770 /var/www/typo3/typo3conf
-    chmod 2770 /var/www/typo3/typo3conf/ext
-    chmod 2770 /var/www/typo3/typo3conf/l10n
-    chmod 2770 /var/www/typo3/fileadmin
-    chmod 2770 /var/www/typo3/fileadmin/_temp_
-    chmod 2770 /var/www/typo3/fileadmin/user_upload
-    chmod 2660 /var/www/typo3/.htaccess
-    rm /var/www/typo3/fileadmin/_temp_/index.html
-    rm /var/www/typo3/fileadmin/user_upload/_temp_/importexport/index.html
-    rm /var/www/typo3/typo3conf/How\ to\ install\ Matomo.html
-    rm /var/www/typo3/typo3conf/realurl_autoconf.php.auto.save
-    rm /var/www/typo3/typo3conf/realurl_autoconf.php.copy
-    rm /var/www/typo3/typo3conf/realurl_autoconf.php.save
-    rm /var/www/typo3/typo3conf/tx_mmforum_config.ts
-    rm /var/www/typo3/typo3conf/domains_list.php.save
-    rm -r /var/www/typo3/typo3conf/matomo
-    rm -r /var/www/typo3/typo3conf/piwik
-    chown -R exploitation:www-data /var/www/typo3/
-
-
-Recharger apache:
-
-    systemctl reload apache2
-    /etc/init.d/php7.4-fpm restart
-
-Firefox:
-
-Accéder à https://preprod.opentalent.fr/typo3/install.php
-Si la page s'affiche et que la version est bien la 9.5.21, tout va bien.
-
-* Settings/Presets -> passer en mode debug
-* Lancer l'outil 'Environnement/Directory Status', et cliquer sur 'Try to fix file and folder permissions'
-* "Upgrade / Check for broken ext", résoudre tout
-* Outil 'Maintenance/Manage Language Packs': update all
-* Outil 'Maintenance/Rebuild PHP Autoload'
-* Cliquer sur "Maintenance/Analyze Database Structure"
-  Créer les tables et les champs manquants, modifier les champs qui doivent l'être (c'est un long, env 5min)
-
-Vider le cache
-
-> T0+15min
-
-
-Avant d'effectuer le premier correctif du wizard (formulaires), il est nécessaire
-de remplacer les rep uploads et user_upload par des repertoires vides:
-
-    rm /var/www/typo3/uploads
-    rm /var/www/typo3/fileadmin/user_upload
-    mkdir /var/www/typo3/uploads
-    mkdir /var/www/typo3/fileadmin/user_upload
-
-Cliquer sur "Upgrade/Upgrade Wizard"
-Executer le correctif 1
-Fermer le wizard
-
-Restaurer les répertoires:
-
-    rm -r /var/www/typo3/uploads
-    ln -s /var/www/typo3_files/uploads /var/www/typo3/uploads
-    rm -r /var/www/typo3/fileadmin/user_upload/
-    ln -s /var/www/typo3_files/fileadmin/user_upload /var/www/typo3/fileadmin/user_upload
-
-Cliquer sur "Upgrade/Upgrade Wizard"
-
-1. Rename form definition file extension from .yaml to .form.yaml
-
-> Execute
-
-2. Add the default Extension Manager database tables
-
-> Execute
-
-3. Update backend user setting "startModule"
-
-> Execute
-
-4. Migrate bullet content element rendering selector from layout to bullets_type
-
-> Execute
-
-5. Migrate upload content element rendering from layout to uploads_type
-
-> execute
-
-6. Install compatibility extension for TYPO3 7 compatibility
-
-> execute, puis laisser à "no do not execute"
-
-7. Install extension "form_legacy"
-
-> execute, puis laisser à "no do not execute"
-
-8. Install extension "rtehtmlarea" from TER
-
-> execute, puis laisser à "no do not execute"
-
-9. Install extension "typo3db_legacy" from TER
-
-> execute, puis laisser à "no do not execute"
-
-10. Install extension "func" from TER
-
-> execute, puis mettre à "Yes, execute"
-
-11. Migrate pages.urltype to pages.url
-
-> Execute
-
-12. Migrates existing sys_log entries into sys_history
-
-> Execute
-
-13. Merge be_groups access rights from pages_language_overlay to pages
-
-> execute, puis mettre à "Yes, execute"
-
-14. Install system extension "redirects" if a sys_domain entry with redirectTo is necessary
-
-> execute, puis mettre à "Yes, execute"
-
-15. Install extension "adminpanel"
-
-> execute, puis mettre à "Yes, execute"
-
-16. Introduce URL parts ("slugs") to all existing pages
-
-> Ignore
-
-17. Reminder to verify live system supports argon2i
-
-> "Yes I understand" > Execute
->
-18. Update backend user configuration array
-
-> Execute
-
-19. Updates slug field "path_segment" of EXT:news records
-
-> Ignore
-
-
-
-Flush TYPO3 and PHP Cache
-Rebuild PHP Autoload Information
-Reset Backend User Preferences
-Analyze Database Structure: cocher les corrections suivantes, puis apply
-
-    DROP INDEX `deleted_hidden` ON `sys_file_storage`
-    DROP INDEX `sys_log_uid` ON `sys_history`
-    DROP INDEX `uid_foreign_tablenames` ON `sys_category_record_mm`
-    DROP INDEX `tx_realurl` ON `sys_domain`
-    DROP INDEX `tx_realurl` ON `sys_template`
-
-
-Shell:
-
-    nano /var/www/typo3/typo3conf/PackageStates.php
-
-Modifier ainsi les lignes suivantes:
-
-    #'theme_gallery' => [
-    #    'packagePath' => 'typo3conf/ext/theme_gallery/',
-    #],
-    #'typo3_api' => [
-    #    'packagePath' => 'typo3conf/ext/typo3_api/',
-    #],    
-
-
-Se rendre sur le BE, menu extensions, menu "ajouter des extensions", mettre a jour l'index
-Maj les extensions qui en ont besoin, en principe:
-
-* fe_editing
-* news_system
-* rte_ckeditor
-
-> T0+25min
-
-Shell (**env. 2h**):
-
-Lancer `01_fix_db_95.py`
-
-Lancer `02_populate_slugs_95.py`,
-
-> T0+140min
-
-Lancer:
-
-    php7.4 -d memory_limit=-1 /var/www/typo3/typo3/sysext/core/bin/typo3 cleanup:orphanrecords
-
-> T0+175min
-
-Lancer (en tant que exploitation, IMPORTANT!):
-
-    php7.4 -d memory_limit=-1 /var/www/typo3/typo3/sysext/core/bin/typo3 upgrade:run pagesSlugs
-
-> T0+205min
-
-Lancer `03_gen_sites_yaml.py`
-
-Dans le repertoire contenant les scripts:
-
-    tar czf sites.tar.gz sites/
-
-Transférer sites.tar.gz vers le serveur (dans `/var/www/typo3/config/`).
-Sur le serveur:
-
-    cd /var/www/typo3/typo3conf/
-    rm -r sites
-    tar xzvf sites.tar.gz
-    rm sites.tar.gz
-
-Verifier qu'aucun site ne manque
-
-> T0+210min
-
-
-### Switch vers composer
-
-
-Sur le serveur, en tant que root:
-
-    mv /var/www/typo3 /var/www/typo3_95
-    mkdir /var/www/typo3
-    chown -R exploitation:www-data /var/www/typo3
-
-Sur le serveur, en tant que exploitation:
-
-    cd /var/www/typo3
-    
-    php7.4 -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
-    php7.4 -r "if (hash_file('sha384', 'composer-setup.php') === '795f976fe0ebd8b75f26a6dd68f78fd3453ce79f32ecb33e7fd087d39bfeb978342fb73ac986cd4f54edd0dc902601dc') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
-    php7.4 composer-setup.php
-    php7.4 -r "unlink('composer-setup.php');"
-    
-    php7.4 composer.phar require "typo3/cms-about:^9.5" "typo3/cms-adminpanel:^9.5" "typo3/cms-backend:^9.5" "typo3/cms-belog:^9.5" "typo3/cms-beuser:^9.5" "typo3/cms-core:^9.5" "typo3/cms-extbase:^9.5" "typo3/cms-extensionmanager:^9.5" "typo3/cms-felogin:^9.5" "typo3/cms-filelist:^9.5" "typo3/cms-filemetadata:^9.5" "typo3/cms-fluid:^9.5" "typo3/cms-fluid-styled-content:^9.5" "typo3/cms-form:^9.5" "typo3/cms-frontend:^9.5" "typo3/cms-info:^9.5" "typo3/cms-install:^9.5" "typo3/cms-lowlevel:^9.5" "typo3/cms-recycler:^9.5" "typo3/cms-redirects:^9.5" "typo3/cms-reports:^9.5" "typo3/cms-rte-ckeditor:^9.5" "typo3/cms-scheduler:^9.5" "typo3/cms-seo:^9.5" "typo3/cms-setup:^9.5" "typo3/cms-t3editor:^9.5" "typo3/cms-tstemplate:^9.5"
-    php7.4 composer.phar require fluidtypo3/flux fluidtypo3/vhs georgringer/news helhum/typo3-console:^5.7
-    
-    ln -s /var/www/typo3_files/fileadmin/_migrated /var/www/typo3/public/fileadmin/_migrated
-    ln -s /var/www/typo3_files/fileadmin/_shared_folder /var/www/typo3/public/fileadmin/_shared_folder
-    ln -s /var/www/typo3_files/fileadmin/stockage /var/www/typo3/public/fileadmin/stockage
-    ln -s /var/www/typo3_files/fileadmin/user_upload /var/www/typo3/public/fileadmin/user_upload
-    ln -s /var/www/typo3_files/uploads /var/www/typo3/public/uploads
-    ln -s /var/www/typo3_files/websites /var/www/typo3/public/websites
-    
-    cd /var/opentalent/git
-    git clone git@gitlab.2iopenservice.com:olivier/ot_typo3.git
-    ln -s /var/opentalent/git/ot_typo3/ot_connect /var/www/typo3/public/typo3conf/ext/ot_connect
-    ln -s /var/opentalent/git/ot_typo3/ot_templating /var/www/typo3/public/typo3conf/ext/ot_templating
-    
-    mkdir /var/www/typo3/config
-    cp -pr /var/www/typo3_95/typo3conf/sites /var/www/typo3/config/
-    cp -p /var/www/typo3_95/typo3conf/LocalConfiguration.php /var/www/typo3/public/typo3conf/LocalConfiguration.php
-    mkdir /var/www/typo3/public/typo3temp
-    
-    cp -p /var/www/typo3/public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess /var/www/typo3/public/.htaccess
-    
-    chown -R exploitation:www-data /var/www/typo3/
-    touch /var/www/typo3/public/FIRST_INSTALL
-
-Maj le composer.json:
-
-    nano /var/www/typo3/composer.json
-
-ajouter les lignes:
-
-    ,
-    "scripts":{
-        "typo3-cms-scripts": [
-            "typo3cms install:fixfolderstructure",
-            "typo3cms install:generatepackagestates"
-        ],
-        "post-autoload-dump": [
-            "@typo3-cms-scripts"
-        ]
-    },
-    "autoload": {
-        "psr-4": {
-            "Opentalent\\OtConnect\\": "public/typo3conf/ext/ot_connect/Classes",
-            "Opentalent\\OtTemplating\\": "public/typo3conf/ext/ot_templating/Classes"
-        }
-    }
-
-Shell:
-
-    cd /var/www/typo3
-    php7.4 composer.phar dumpautoload
-
-En tant que root:
-
-Maj la conf apache:
-
-    nano /etc/apache2/sites-available/001-preprod.opentalent.fr.conf
-    nano /etc/apache2/sites-available/001-preprod.opentalent.fr-le-ssl.conf
-
-Dans ces deux fichiers, remplacer:
-
-    DocumentRoot /var/www/typo3
-
-Par:
-
-    DocumentRoot /var/www/typo3/public
-
-lancer:
-
-    /etc/init.d/apache2 reload
-
-Shell:
-
-    cd /var/www/typo3/
-    php7.4 composer.phar req causal/image_autoresize
-    php7.4 composer.phar req bueroparallel/bp-pagetree
-    php7.4 composer.phar req guzzlehttp/guzzle:^6
-
-> T0+220min
-
-## Finalisation et correctifs
-
-Firefox:
-
-Se rendre à https://preprod.opentalent.fr/typo3/install.php
-
-Page extensions, vérifier que le mode composer est bien activé
-Page maintenance: 'Database compare', lancer toutes les commandes de création de tables et de champs (mais ni alter ni delete!)
-Page maintenance: 'Flush cache'
-Page maintenance: 'Remove Temporary Assets', tout virer
-
-Shell:
-
-> T0+225min
-
-Lancer le script `04_update_struct_ids.py`
-Lancer le script `05_update_templates.py`
-
-> T0+270min
-
-Lancer le script `08_delete-old-sites.py`
-
-> T0+290min
-
-Lancer le script `06_update_constants.py`
-
-> T0+310min
-
-Lancer le script `07_generate_welcome_shortcuts.py`
-
-> T0+330min
-
-Lancer le script `09_regen_carousel_contents.py`
-
-> T0+340min
-
-Lancer le script `10_regen_media_contents.py`   (10min)
-Lancer le script `11_update_theme_colors.py`   (10min)
-
-> T0+350min
-
-MysqlWB:
-
-    DELETE FROM backend_layout;
-    
-    UPDATE pages 
-    SET tx_fed_page_controller_action = 'OpenTalent.OtTemplating->contact' 
-    WHERE dokType=1 AND slug='/footer/contact';
-
-    UPDATE typo3.pages t INNER JOIN openassos.pages o ON t.uid = o.uid  
-    SET t.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->structures',
-            t.tx_fed_page_controller_action_sub = 'OpenTalent.OtTemplating->1Col',
-            t.backend_layout = 'flux__grid'
-    WHERE o.backend_layout = 'theme_gallery__members_list_fede';
-        
-    UPDATE typo3.pages t INNER JOIN openassos.pages o ON t.uid = o.uid  
-    SET t.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->structuresEvents',
-            t.tx_fed_page_controller_action_sub = 'OpenTalent.OtTemplating->1Col',
-            t.backend_layout = 'flux__grid'
-    WHERE o.backend_layout = 'theme_gallery__association_spectacle';
-        
-    UPDATE typo3.pages t INNER JOIN openassos.pages o ON t.uid = o.uid
-    SET t.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->events'       
-    WHERE o.backend_layout='theme_gallery__events';
-
-Firefox:
-
-Page maintenance: 'Flush cache'
-
-> Si des enregistrements de la table pages ont pour valeur de slug '0', exécuter `UPDATE pages SET slug = NULL WHERE slug='0';`,
-> puis relancer 'populate_slugs_95.py'
-
-A ce niveau, contrôler:
-
-* les slugs null ou valant '0' (il devrait y en avoir 1030 null)
-* les contenus mal positionnés (voir LOG ligne 1774 et 2819)
-* la table sys_redirect a été remplie correctement (voir LOG ligne 2333)
-
-**Important**: il faut voir quelles url il faut rediriger pour qu'elles
-continuent de pointer vers l'ancienne install de typo3
-
-
-Sur le backend, editer les groupes writer basic et writer full pour activer dans l'onglet Access List:
-
-* ot_customizer
-* news
-
-> T0+360min
-
-### Nettoyage
-
-Une fois les tests terminés, lancer le nettoyage:
-
-    sh /var/www/typo3/12_clean.sh > cleaning.log &
-
-> ATTENTION: sur la prod, il faudra copier d'abord le script 12_clean.sh vers /var/www/typo3/cleaning.sh
-
-
-## Mise en pratique
-
-
-
-# POC Upgrade TYPO3 8.2 > 9.5
-
-## Notes
-
-L'upgrade est effectuée sur la preprod, aprés une synchro complète de la prod le 17/06/2020
-
-Sauf mention contraire, toutes les commandes shell sont exécutées en exploitation@preprod.opentalent.fr
-
-## Mise en place - 17/06/2020
-
-L'objectif est de vérifier que l'environnement de preprod est fonctionnel et qu'il est identique à la prod.
-
-Pour éviter tout problème avec les sessions typo3, je ferme toutes les pages en *.opentalent.fr dans le navigateur,
-et je supprime les cookies opentalent.fr
-
-Je vais commencer par vérifier que l'install typo3 fonctionne bien après la synchro.
-
-Je me rend sur https://preprod.opentalent.fr/typo3/
-Résultat: "An error occured"
-
-![img](images/01.png)
-
-Je me rend donc sur https://preprod.opentalent.fr/typo3/install.php
-Résultat: l'install tool est verrouillé
-
-![img](images/02.png)
-
-Je créé le fichier nécessaire pour déverrouiller l'install tool:
-
-    touch /var/www/typo3/typo3conf/ENABLE_INSTALL_TOOL
-
-Puis je réactualise https://preprod.opentalent.fr/typo3/install.php
-
-Je renseigne le mot de passe du compte `oaos`, je valide
-
-Je tombe sur le wizard d'installation typo3. Pas normal.
-Avant de maj les params de connexion à la DB, je vais vérifier la conf de typo3:
-
-    cat /var/www/typo3/typo3conf/LocalConfiguration.php
-
-A la section DB => Connections => Default, je constate que la base est définie de la manière suivante:
-
-    'charset' => 'utf8',
-    'dbname' => 'openassos',
-    'driver' => 'mysqli',
-    'host' => 'localhost',
-    'initCommands' => '',
-    'password' => 'Vq2icge7SM3P26CaC3',
-    'user' => 'openassos',
-
-Un test de connexion avec Mysql Workbench montre que le user 'openassos' n'existe pas sur le serveur preprod.
-
-Je contacte Tony qui s'occupe de restaurer les deux user mysql opentalent et openassos
-qui n'avaient pas été synchronisés.
-> https://ressources.opentalent.fr/display/EX/Mise+en+oeuvre+exploitation  => chapitre "Accès PHPMYADMIN centralisé  / MYSQL"
-
-Pour vérifier que le user est créé, je me connecte avec ce compte via mysql workbench. Ca fonctionne bien.
-J'essaie:
-* un select sur la table `be_users_SAVE` => ok
-* un update sur la table `be_users_SAVE` => ok
-* de drop la table `be_users_SAVE` => ok
-
-Le user a tous les droits, c'est bon.
-
-Je réactualise https://preprod.opentalent.fr/typo3/install.php
-
-J'arrive bien sur la page de l'install tool, tout va bien.
-
-![img](images/03.png)
-
-Je clique sur le bouton "Backend admin", je renseigne le login/mdp du compte oaos,
-me voilà sur le backend: jusque là tout va bien.
-
-Je vais donc contrôler plus en détail que tout est identique à la prod.
-
-Pour la comparaison entre les différents sites, je procède
-par échantillonage, avec le site de la CMF (uid=12055)
-
-Côté Backend / Pages, pas de différences.
-En revanche, je n'ai pas réussi à comparer les frontend (voir erreur ci dessous)...
-
-![img](images/04.png)
-
-J'essaie donc de desactiver realurl via le menu des extensions,
-puis d'accéder à nouveau au frontend.
-
-Je constate à cette occasion que j'avais fait une erreur dans l'url,
-le paramètre n'est pas `uid=`, mais `id=`
-
-Je réactive realurl, je reessaye d'accéder à l'adresse <https://preprod.opentalent.fr/index.php?id=12055>
-Ca fonctionne partiellement, mais j'ai des erreurs avec certains widgets:
-
-Je vide le cache, je réessaye: les erreurs persistent.
-Je n'en recherche pas la cause pour le moment, probablement un conflit causé par le fait que
-realurl est activé mais qu'on accès à la page depuis un autre domaine...
-
-Je compare maintenant la liste des extensions.
-Les extensions sont parfaitement identiques: installées, activées, versions.
-Je n'ai contrôlé la config que des deux premières, ça m'a paru suffisant pour valider.
-
-Je contrôle les onglets suivants:
-
-* Langues: idem
-* Corbeille: idem
-* Workspaces: idem
-* Formulaires (onglet extrêmement long à charger): idem
-* gabarits: idem
-* galerie de thèmes: idem
-* accès: idem
-* users backend: idem
-* planificateur: idem
-* Configuration: idem a priori (trop long pour être entièrement contrôlé)
-
-L'onglet actualités a été testé avec le site Fédération musicale d'Anjou (uid=99494)
-
-
-J'ouvre les onglets 'install' de chaque instance, **premières différences**:
-les versions de mysql, et le nombre de tables.
-
-![img](images/07.png)
-
-On se souvient qu'une table a été supprimée de la preprod (be_users_SAVE)
-pour tester les droits du compte restauré.
-
-Pourtant, on a encore 6 tables de plus sur la preprod!
-
-L'onglet Rapports présente aussi des différences:
-
-![img](images/08a.png)
-![img](images/08b.png)
-![img](images/08c.png)
-
-Ces différences sont:
-
-* Droits d'écriture sur la preprod
-* Avertissement quant au charset de mysql: Checking database character set failed,
-  got key "latin1" instead of "utf8" or "utf8mb4"
-
-La comparaison des onglet 'Ficjhier journal' présente aussi
-des différences, avec des erreurs en plus côté preprod:
-
-![img](images/09.png)
-
-Ces erreurs sont sans doute liées aux problèmes de droits mentionnés dans l'onglet rapport.
-
-Un contrôle du côté des phpinfo montre encore quelques différences:
-
-* Dans "Additional .ini files parsed": la ligne suivante
-  est sur la preprod mais pas sur la prod: `/etc/php/7.0/fpm/conf.d/20-apcu_bc.ini`
-* La section Configuration comporte une sous-section `apc` sur la preprod, pas sur la prod
-* Le param `memory_limit` est à 4096k sur la preprod et de 512M sur la prod (!)
-* Le param `post_max_size` est à 8M sur la preprod contre 150M sur la prod
-* Le param `upload_max_filesize` est à 6M sur la preprod contre 100M sur la prod
-* la timezone est reglée sur Paris pour la preprod, et sur Berlin pour la prod
-* Les variables d'environnement sont aussi différentes:
-  * Preprod: USER=exploitation et HOME=/home/exploitation
-  * Prod: USER=www-data et HOME=/var/www
-
-
-Pour résumer, voici les différences constatées entre les deux instances:
-
-1. Versions de mysql: 5.5.5 sur la preprod, 5.7.3 sur la prod
-2. Nombre de tables /!\: 7 tables en plus sur la preprod
-3. Différence entre les droits sur les répertoires: typo3temp et typo3conf
-4. DB n'ont pas le même charset
-5. Quelques différences entre les confs php, a priori benignes
-
-Les tables en trop sur la preprod sont:
-
-* Access
-* be_users_SAVE
-* fe_users_adminassos
-* fe_users_username
-* pages_with_original_pidroot
-* tt_content_save
-* tt_content_v59
-
-Il s'agit de tables obsolètes supprimées sur la prod par Michel il y a quelques jours,
-étrange qu'elles aient été restaurées sur la preprod au cours de la synchro...
-
-Je fais un retour à Tony de ces écarts pour en discuter.
-
-Il en résulte que:
-
-1. Les tables en trop viennent d'un souci avec le script de synchro
-   des bases qui ne faisait pas le drop/creat database / corrigé
-
-2. Les droits sur le répertoire viennent du fait que le user php
-   sur preprod est 'exploitation', tandis que c'est 'www-data' sur prod-front.
-   Tony corrige le pbm en faisant:
-
-   chown -R exploitation:www-data /var/www/typo3
-
-**IMPORTANT: Tony signale qu'il faudra envisager de changer ce user sur prod-front aussi**,
-en faisant un chown pour exploit, puis en changeant le user de php-fpm et le user de apache2.
-
-3. La différence de version entre les mysql ne peut pas être corrigée pour le moment,
-   mais ne devrait pas engendrer de problème.
-
-4. Tony supprime le fichier 20-apcu_bc.ini et redémarre php-fpm.
-
-Les autres différences sont négligeables.
-
-A ce niveau, Tony fait un nouveau snapshot ('before.upgrade.typo3' sur N2, 17/06 17h25).
-
-## Essais
-
-### Essai 1 - 18/06/2020
-
-Pour commencer, je renomme le répertoire typo3 existant
-et je créé un nouveau répertoire:
-
-    sudo mv /var/www/typo3 /var/www/typo3_82
-    sudo chown -R exploitation:www-data /var/www/typo3
-    mkdir /var/www/typo3
-
-Je récupère ensuite les fichiers que je sais être nécessaires à typo3:
-
-    cp /var/www/typo3_82/.htaccess /var/www/typo3/.htaccess
-    cp -r /var/www/typo3_82/typo3_src_version/typo3_src-8.7.22 /var/www/typo3/
-    cp -r /var/www/typo3_82/typo3conf /var/www/typo3/
-
-Je recréé les liens symboliques:
-
-    ln -s /var/www/typo3/typo3_src-8.7.22 /var/www/typo3/typo3_src
-    ln -s /var/www/typo3/typo3_src/typo3 /var/www/typo3/typo3
-    ln -s /var/www/typo3/typo3_src/index.php /var/www/typo3/index.php
-
-Ainsi que le répertoire du cache:
-
-    mkdir /var/www/typo3/typo3temp
-
-Je devrais aussi récupérer fileadmin, mais il est trop volumineux...
-J'ai plusieurs possibilités:
-
-* déplacer ce répertoire avec mv, mais on perd la possibilité de revenir en arrière
-  si ce répertoire est modifié durant l'upgrade...
-* Créer un lien symbolique, même problème.
-* En faire une copie partielle, suffisante pour mener des tests avec deux ou trois sites.
-  Je vais d'abord essayer cette méthode.
-
-Je vais donc essayer de faire une copie partielle et minimale du répertoire fileadmin.
-Je vais essayer de reprendre les fichiers des sites ohcluses (498) et cmf-france (12097)
-
-
-* `_processed_` contient les miniatures d'images, elles seront regénérées
-* `_temp_` sera regénéré aussi
-* `user_upload` contient à la fois des fichiers "en vrac" et un sous-répertoire par site.
-
-  mkdir /var/www/typo3/fileadmin
-  mkdir /var/www/typo3/fileadmin/_processed_
-  mkdir /var/www/typo3/fileadmin/_temp_
-  mkdir /var/www/typo3/fileadmin/user_upload
-  cp -r /var/www/typo3_82/fileadmin/user_upload/498 /var/www/typo3/fileadmin/user_upload/
-  cp -r /var/www/typo3_82/fileadmin/user_upload/12097 /var/www/typo3/fileadmin/user_upload/
-
-Je vais aussi créer la nouvelle base de données 'typo3', et de faire pointer le nouveau typo3 vers celle-ci.
-
-J'essaie avec ces commandes, qui échouent ('erreur de syntaxe sql'?).
-
-    mysql -h localhost -P 3306 -u root --password=mysql2iopenservice369566 -e "DROP DATABASE IF EXISTS `typo3`;"
-    mysql -h localhost -P 3306 -u root --password=mysql2iopenservice369566 -e "CREATE SCHEMA `typo3` DEFAULT CHARACTER SET utf8;"
-
-Je n'insiste pas, je passe par mysql workbench pour exécuter les requêtes.
-Dans mysql workbench, connecté à preprod.opentalent.fr en tant que `root`, j'exécute:
-
-    CREATE SCHEMA `typo3` DEFAULT CHARACTER SET utf8 ;
-
-Je vais maintenant dupliquer les tables de la base locale openassos vers cette nouvelle base:
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 openassos | mysql -h localhost -P 3306 -u root --password=mysql2iopenservice369566 -D typo3
-
-L'opération dure environ 8 minutes.
-
-Je créé aussi un nouvel utilisateur nommé `typo3`, à qui j'accorde tous les droits sur la nouvelle base:
-Le mot de passe est le même que openassos: Vq2icge7SM3P26CaC3
-
-Via mysql workbench:
-
-    CREATE USER 'typo3'@'localhost' IDENTIFIED BY 'Vq2icge7SM3P26CaC3';
-    GRANT ALL PRIVILEGES ON typo3.* TO 'typo3'@'localhost'; 
-
-
-Je modifie ensuite la configuration de la nouvelle instance typo3:
-
-    nano /var/www/typo3/typo3conf/LocalConfiguration.php
-
-Je corrige la section `'DB' => ['Connections' => [` de la manière suivante:
-
-    'charset' => 'utf8',
-    'dbname' => 'typo3',
-    'driver' => 'mysqli',
-    'host' => 'localhost',
-    'initCommands' => '',
-    'password' => 'Vq2icge7SM3P26CaC3',
-    'user' => 'typo3',
-
-J'essaie d'accéder à <https://preprod.opentalent.fr/typo3/install.php>
-
-Typo3 me demande de créer un fichier ENABLE_INSTALL_TOOL dans typo3conf/
-
-    touch /var/www/typo3/typo3conf/ENABLE_INSTALL_TOOL
-
-Je rafraichis la page <https://preprod.opentalent.fr/typo3/install.php>
-Je renseigne le mdp, je valide.
-
-Jusqu'ici, tout a l'air ok:
-
-![img](images/10.png)
-
-Je me rend à la page 'Folder Structure', qui affiche les avertissements suivants:
-
-    File /typo3temp/index.html does not exist
-    Directory /typo3temp/assets/css does not exist
-    Directory /typo3temp/assets/js does not exist
-    Directory /typo3temp/assets/images does not exist
-    Directory /typo3temp/assets/_processed_ does not exist
-    File /typo3temp/var/.htaccess does not exist
-    Directory /typo3temp/var/charset does not exist
-    Directory /typo3temp/var/locks does not exist
-    Directory /uploads does not exist
-    File /uploads/index.html does not exist
-    Directory /uploads/media does not exist
-    File /uploads/media/index.html does not exist
-    File /fileadmin/_temp_/.htaccess does not exist
-    File /fileadmin/_temp_/index.html does not exist
-    Directory /fileadmin/user_upload/_temp_ does not exist
-    File /fileadmin/user_upload/_temp_/index.html does not exist
-    Directory /fileadmin/user_upload/_temp_/importexport does not exist
-    File /fileadmin/user_upload/_temp_/importexport/.htaccess does not exist
-    File /fileadmin/user_upload/_temp_/importexport/index.html does not exist
-    File /fileadmin/user_upload/index.html does not exist
-
-L'installeur propose d'essayer de corriger lui-même ces erreurs
-L'absence des sous-répertoires de typo3temp est normale, on va laisser l'outil les créer.
-Idem pour /fileadmin/user_upload/_temp_/
-En revanche, le répertoire uploads, que je n'avais pas copié plus tôt, est bien requis par typo3 en v8
-(ce n'est plus le cas en v9)
-
-Je vais lancer l'outil de correction, puis j'essaierai de copier de manière selective le contenu de uploads,
-comme je l'avais fait pour le répertoire fileadmin.
-
-Je clique sur le bouton 'Try to fix file and folder permissions'
-Tout est corrigé, pas de problème.
-
-Le répertoire original contient un trés grand nombre de fichiers, ainsi que les sous-répertoires suivants:
-
-    ../typo3_82/uploads/manual/              ../typo3_82/uploads/tx_gridelements/      ../typo3_82/uploads/tx_rteckeditorimage/
-    ../typo3_82/uploads/media/               ../typo3_82/uploads/tx_gsiwhoisonline/    ../typo3_82/uploads/tx_rtehtmlarea/
-    ../typo3_82/uploads/newsletters/         ../typo3_82/uploads/tx_kickstarter/       ../typo3_82/uploads/tx_seobasics/
-    ../typo3_82/uploads/openassos/           ../typo3_82/uploads/tx_mmforum/           ../typo3_82/uploads/tx_simpleslider/
-    ../typo3_82/uploads/opentalent/          ../typo3_82/uploads/tx_newloginbox/       ../typo3_82/uploads/tx_tc2lcal/
-    ../typo3_82/uploads/pics/                ../typo3_82/uploads/tx_news/              ../typo3_82/uploads/tx_templavoila/
-    ../typo3_82/uploads/templates_email/     ../typo3_82/uploads/tx_phpmyadmin/        ../typo3_82/uploads/tx_tqseo/
-    ../typo3_82/uploads/tf/                  ../typo3_82/uploads/tx_piwik/             ../typo3_82/uploads/tx_ttnews/
-    ../typo3_82/uploads/tx_c1x1flashplayer/  ../typo3_82/uploads/tx_piwikintegration/  ../typo3_82/uploads/tx_txopenassos/
-    ../typo3_82/uploads/tx_devlog/           ../typo3_82/uploads/tx_powermail/         ../typo3_82/uploads/tx_veguestbook/
-    ../typo3_82/uploads/tx_felogin/          ../typo3_82/uploads/tx_realurl/
-    ../typo3_82/uploads/tx_festat/           ../typo3_82/uploads/tx_rgsmoothgallery/
-
-Pour savoir lesquels reprendre, j'envisage de me baser sur la table 'sys_file' de la base de données,
-avec la requête suivante:
-
-    SELECT * FROM sys_file WHERE identifier LIKE '/uploads/[nom du sous-répertoire]'
-
-Les requêtes qui ne renverrait aucune ligne signaleraient (sauf erreur de ma part) des fichiers orphelins,
-et donc plus nécessaires.
-
-On constate ainsi que les fichiers contenus dans
-
-Mais il faudrait faire la même chose pour chaque fichier...
-
-On pourrait envisager un script qui recherche de tels fichiers, ou qui repositionne
-correctement les fichiers qui sont "un peu perdus"...
-
-Pour l'instant, je ne vais copier que les sous-répertoires 'media', 'tx_news', et 'pics'
-
-    cp /var/www/typo3_82/uploads/media/* /var/www/typo3/uploads/media/
-    cp -r /var/www/typo3_82/uploads/tx_news /var/www/typo3/uploads/
-    cp -r /var/www/typo3_82/uploads/pics /var/www/typo3/uploads/pics
-
-L'opération dure environ environ 3minutes.
-
-Je retourne sur <https://preprod.opentalent.fr/typo3/install.php>
-Je dois de nouveau créer le fichier ENABLE_INSTALL_TOOL:
-
-    touch /var/www/typo3/typo3conf/ENABLE_INSTALL_TOOL
-
-Je me rend à la page 'System environment': tout est ok.
-
-Tout a l'air bon, je continue vers le backend.
-
-**Premier souci**: l'outil 'Pages' n'affiche plus rien.
-
-![img](images/11.png)
-
-Si je clique sur 'Editer la page', l'écran d'édition s'ouvre bien.
-Apparemment, les gabarits backend sont invalides ('theme_gallery__home' et '0')
-
-De plus, la page 'galerie des thèmes' est vide.
-
-Malgré ces erreurs au niveau backend (sans doute liées au fait que je n'ai pas copié certains
-dossiers comme le lien vers 'websites' ), le frontend s'affiche sans problème apparent.
-Je ne vais donc pas passer de temps à faire fontionner des extensions obsolètes.
-
-
-Je procède donc à l'upgrade vers la v9.5.
-
-    cd /var/www/typo3/
-    rm .htaccess
-    wget --content-disposition https://get.typo3.org/9.5.19
-    tar xzvf typo3_src-9.5.19.tar.gz
-    ln -sfn typo3_src-9.5.19 typo3_src
-    touch typo3conf/ENABLE_INSTALL_TOOL
-    cp typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess ./.htaccess
-
-Je retourne sur <https://preprod.opentalent.fr/typo3/install.php>
-
-Une erreur se produit:
-
-![img](images/12.png)
-
-Je commence par vider le cache avec:
-
-    rm -r /var/www/typo3/typo3temp
-
-Et en exécutant les requêtes suivantes sur mysql workbench:
-
-    TRUNCATE `cf_cache_hash`;
-    TRUNCATE `cf_cache_hash_tags`;
-    TRUNCATE `cf_cache_imagesizes`;
-    TRUNCATE `cf_cache_imagesizes_tags`;
-    TRUNCATE `cf_cache_news_category`;
-    TRUNCATE `cf_cache_news_category_tags`;
-    TRUNCATE `cf_cache_pages`;
-    TRUNCATE `cf_cache_pagesection`;
-    TRUNCATE `cf_cache_pagesection_tags`;
-    TRUNCATE `cf_cache_pages_tags`;
-    TRUNCATE `cf_cache_rootline`;
-    TRUNCATE `cf_cache_rootline_tags`;
-    TRUNCATE `cf_extbase_datamapfactory_datamap`;
-    TRUNCATE `cf_extbase_datamapfactory_datamap_tags`;
-    TRUNCATE `cf_extbase_reflection`;
-    TRUNCATE `cf_extbase_reflection_tags`;
-    TRUNCATE `cf_workspaces_cache`;
-    TRUNCATE `cf_workspaces_cache_tags`;
-
-J'essaie de nouveau d'accéder à <https://preprod.opentalent.fr/typo3/install.php>
-L'erreur persiste.
-Pas de log dans typo3temp.
-
-La commande suivante:
-
-    tail /var/log/apache2/preprod.opentalent.fr-error.log 
-
-Permet d'obtenir le messages d'erreur suivant:
-
-    [Thu Jun 18 15:34:23.531613 2020] [proxy_fcgi:error] [pid 29124:tid 139930525337344] [client 10.8.0.10:45626] AH01071: Got error 'PHP message: https://preprod.opentalent.fr/ - Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1341397869: Path does not exist in array | RuntimeException thrown in file /var/www/typo3/typo3_src-8.7.22/typo3/sysext/core/Classes/Utility/ArrayUtility.php in line 197. Requested URL: https://preprod.opentalent.fr/typo3/install.php?install[redirectCount]=2&install[context]=standalone&install[controller]=step&install[action]=databaseData\n'
-    [Thu Jun 18 15:34:29.994980 2020] [proxy_fcgi:error] [pid 29124:tid 139930525337344] [client 10.8.0.10:45628] AH01071: Got error 'PHP message: https://preprod.opentalent.fr/ - Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1341397869: Path does not exist in array | RuntimeException thrown in file /var/www/typo3/typo3_src-8.7.22/typo3/sysext/core/Classes/Utility/ArrayUtility.php in line 197. Requested URL: https://preprod.opentalent.fr/typo3/install.php?install[redirectCount]=2&install[context]=standalone&install[controller]=step&install[action]=databaseData\n'
-    [Thu Jun 18 15:35:40.006308 2020] [proxy_fcgi:error] [pid 29124:tid 139930525337344] [client 10.8.0.10:45630] AH01071: Got error 'PHP message: https://preprod.opentalent.fr/ - Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1460976566: [module-web_func] The option "source" is required and must not be empty | InvalidArgumentException thrown in file /var/www/typo3/typo3_src-8.7.22/typo3/sysext/core/Classes/Imaging/IconProvider/SvgIconProvider.php in line 48. Requested URL: https://preprod.opentalent.fr/typo3/index.php?route=%2Fmain&token=--AnonymizedToken--\n'
-    [Thu Jun 18 15:35:47.106044 2020] [proxy_fcgi:error] [pid 29124:tid 139930525337344] [client 10.8.0.10:45632] AH01071: Got error 'PHP message: https://preprod.opentalent.fr/ - Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1341397869: Path does not exist in array | RuntimeException thrown in file /var/www/typo3/typo3_src-8.7.22/typo3/sysext/core/Classes/Utility/ArrayUtility.php in line 197. Requested URL: https://preprod.opentalent.fr/typo3/install.php?install[redirectCount]=2&install[context]=standalone&install[controller]=step&install[action]=databaseData\n'
-    [Thu Jun 18 15:38:06.481022 2020] [proxy_fcgi:error] [pid 29124:tid 139930525337344] [client 10.8.0.10:45634] AH01071: Got error 'PHP message: https://preprod.opentalent.fr/ - Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1257246929: Tried resolving a template file for controller action "Standard->index" in format ".html", but none of the paths contained the expected template file (/var/www/typo3/typo3/sysext/install/Resources/Private/Templates/Action/Common/Login.html). No paths configured. | TYPO3Fluid\\Fluid\\View\\Exception\\InvalidTemplateResourceException thrown in file /var/www/typo3/typo3_src-8.7.22/vendor/typo3fluid/fluid/src/View/TemplatePaths.php in line 598. Requested URL: https://preprod.opentalent.fr/typo3/install.php\n'
-
-typo3_src-8.7.22 est encore mentionné.
-Une erreur avec les liens symboliques? J'essaie de les regénérer à tout hasard:
-
-    ln -s /var/www/typo3/typo3_src-9.5.19 /var/www/typo3/typo3_src
-    ln -s /var/www/typo3/typo3_src/typo3 /var/www/typo3/typo3
-    ln -s /var/www/typo3/typo3_src/index.php /var/www/typo3/index.php
-
-J'ai une erreur lors de la dernière commande, disant que le fichier existe.
-Pourtant c'est aussi un symlink, il devrait être remplacé?
-
-Je lance:
-
-    rm index.php
-    ln -s /var/www/typo3/typo3_src/index.php /var/www/typo3/index.php
-
-J'essaie de nouveau d'accéder à <https://preprod.opentalent.fr/typo3/install.php>
-L'erreur persiste.
-
-Un nouveau coup d'oeil aux logs montre que l'erreur est bien celle-ci:
-
-    [Thu Jun 18 15:46:24.999451 2020] [proxy_fcgi:error] [pid 29124:tid 139930525337344] [client 10.8.0.10:45656] AH01071: 
-    Got error 'PHP message: https://preprod.opentalent.fr/ - Core: 
-    Exception handler (WEB): Uncaught TYPO3 Exception: #1257246929: 
-    Tried resolving a template file for controller action "Standard->index" in format ".html", 
-    but none of the paths contained the expected template file 
-    (/var/www/typo3/typo3/sysext/install/Resources/Private/Templates/Action/Common/Login.html). 
-    No paths configured. | TYPO3Fluid\\Fluid\\View\\Exception\\InvalidTemplateResourceException 
-    thrown in file /var/www/typo3/typo3_src-8.7.22/vendor/typo3fluid/fluid/src/View/TemplatePaths.php 
-    in line 598. Requested URL: https://preprod.opentalent.fr/typo3/install.php\n'
-
-Il semble effectivement que le répertoire
-`/var/www/typo3/typo3/sysext/install/Resources/Private/Templates/Action`
-n'existe pas. Mais pourquoi est-ce que l'erreur est lanceée depuis la version 8.2?
-
-Une possible explication: https://serverfault.com/questions/294107/apache-php-appears-to-be-caching-symbolic-links-for-60-seconds-how-to-stop-it
-
-En effet, si apache/php a mis les symlinks en cache, tout s'explique.
-Je vais essayer de vider le cache de apache et php.
-
-Premier essai en redémarrant le service apache
-
-    sudo service apache2 restart
-
-Sans résultat, les logs sont toujours les même.
-Au tour de php-fpm
-
-    sudo service php7.0-fpm restart
-
-Ca corrige l'erreur, mais aïe.
-Aïe aïe aïe.
-
-![img](images/13.png)
-
-Effectivement, la version php était en 7.2 sur mon poste, et sur le docker.
-Et ça c'est un problème...
-
-Après renseignements, on peut upgrader php vers la 7.2 sur prod-front sans souci.
-Le pbm est avec preprod, où cohabitent toutes les applis, y compris opentalent qui ne tourne qu'en 7.0.
-
-Je contacte Tony pour lui demander si possible de faire cohabiter 2 versions de php.
-Il me répond que pas de souci avec php-fpm, on peut affecter
-des versions de php aux différents virtualhosts.
-
-Le virtualhost concerné est `001-preprod.opentalent.fr.conf`
-
-Tony me suggère de passer directement à la 7.4, puisque la 7.2 ne sera plus supportée fin 2020.
-Je valide pour la 7.4
-Il s'occupe de faire la modif.
-
-Il règle le souci très vite, nous voilà avec php 7.4.7 pour typo3,
-et toujours la 7.0 pour les autres sites.
-
-J'essaie de d'accéder à <https://preprod.opentalent.fr/typo3/install.php>
-...Et victoire!
-
-![img](images/14.png)
-
-
-> Pour mémoire, la procédure qu'a suivie Tony et qu'il m'a transmise est la suivante:
-> Upgrade php7.4:
-
-    # add-apt-repository ppa:ondrej/php
-    # apt update
-    #  apt install php7.4 php7.4-bcmath php7.4-cli php7.4-common php7.4-curl php7.4-dev php7.4-fpm php7.4-gd php7.4-imap php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-tidy php7.4-xml php7.4-xsl php7.4-zip php-apcu
-    # a2enmod proxy_fcgi setenvif
-    # a2enconf php7.0-fpm
-    # a2enconf php7.4-fpm
-    Modification de /etc/php/7.4/fpm/pool.d/www.conf
-    Modification des virtualhosts apache2 et selon les cas indiquer : 
-      <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
-        SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
-      </FilesMatch>
-    Ou 
-      <FilesMatch ".+\.ph(p[3457]?|t|tml)$">
-        SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
-      </FilesMatch>
-    Reprise du php.ini de la v7.0 pour le recopier en v7.4 de manière a avoir les memes parametre php.ini
-
-
-J'essaie maintenant d'aller sur le backend pour verifier les extensions installées,
-mais une erreur se produit, ce qui n'est pas surprenant.
-
-![img](images/15.png)
-
-Comme le suggère [la documentation](https://docs.typo3.org/m/typo3/guide-installation/9.5/en-us/Upgrade/UpdateReferenceIndex/Index.html),
-je commence par mettre à jour les index:
-
-    php7.4 /var/www/typo3/typo3/sysext/core/bin/typo3 referenceindex:update
-
-L'erreur suivante se produit:
-
-    Uncaught TYPO3 Exception Call to undefined method TYPO3\CMS\Core\Utility\GeneralUtility::requireOnce()
-    thrown in file /var/www/typo3/typo3conf/ext/realurl/ext_localconf.php
-    in line 32
-
-J'essaie de vider le cache, mais une erreur se produit.
-
-Bon, je commence par m'assurer que les droits sur les répertoires sont bons.
-
-L'outil 'Directory Status' relève les problèmes suivants:
-
-    File /typo3temp/index.html does not exist
-    Directory /typo3temp/assets does not exist
-    Directory /typo3temp/assets/compressed does not exist
-    Directory /typo3temp/assets/css does not exist
-    Directory /typo3temp/assets/js does not exist
-    Directory /typo3temp/assets/images does not exist
-    Directory /typo3temp/assets/_processed_ does not exist
-    File /typo3temp/var/.htaccess does not exist
-    Directory /typo3temp/var/charset does not exist
-    Directory /typo3temp/var/lock does not exist
-
-Pas de problème sérieux, je clique sur 'Try to fix file and folder permissions'
-Tout se passe bien.
-
-Le wizard signale aussi que les permissions de certains répertoires ne sont pas
-les permissions par défaut, je lance donc les commandes suivantes:
-
-    chmod 2770 /var/www/typo3
-    chmod 2770 /var/www/typo3/typo3temp
-    chmod 2770 /var/www/typo3/typo3conf
-    chmod 2770 /var/www/typo3/typo3conf/ext
-    chmod 2770 /var/www/typo3/typo3conf/l10n
-    chmod 2770 /var/www/typo3/fileadmin
-    chmod 2770 /var/www/typo3/fileadmin/_temp_
-    chmod 2770 /var/www/typo3/fileadmin/user_upload
-    chmod 2660 /var/www/typo3/.htaccess
-
-Il signale aussi que le contenu de deux fichiers diffère du contenu par défaut, je lance donc:
-
-     rm /var/www/typo3/fileadmin/_temp_/index.html
-     rm /var/www/typo3/fileadmin/user_upload/_temp_/importexport/index.html
-
-Je rafraichis l'outil Directory Status, et je clique sur 'Try to fix file and folder permissions'.
-
-Tout est au vert du côté des fichiers.
-
-Avec Mysql Workbench, je lance les requêtes:
-
-    TRUNCATE `cf_cache_hash`;
-    TRUNCATE `cf_cache_hash_tags`;
-    TRUNCATE `cf_cache_imagesizes`;
-    TRUNCATE `cf_cache_imagesizes_tags`;
-    TRUNCATE `cf_cache_news_category`;
-    TRUNCATE `cf_cache_news_category_tags`;
-    TRUNCATE `cf_cache_pages`;
-    TRUNCATE `cf_cache_pagesection`;
-    TRUNCATE `cf_cache_pagesection_tags`;
-    TRUNCATE `cf_cache_pages_tags`;
-    TRUNCATE `cf_cache_rootline`;
-    TRUNCATE `cf_cache_rootline_tags`;
-
-Le cache est vidé, mais l'erreur persiste lors de l'accès au backend (pas étonnant).
-
-Je lance l'upgrade wizard, qui me donne les erreurs suivantes:
-
-![img](images/16.png)
-
-Un contrôle via l'outil 'Check for broken extensions' révèle le problème suivant:
-
-![img](images/17.png)
-
-Je vais essayer de desactiver l'extension fautive (sans la désinstaller complètement)
-J'en profite pour remarquer qu'il y a beaucoup de fichiers inutiles ici aussi,
-donc je commence par un peu de ménage:
-
-    cd /var/www/typo3/typo3conf
-    rm "How to install Matomo.html"
-    rm realurl_autoconf.php.auto.save
-    rm realurl_autoconf.php.copy
-    rm realurl_autoconf.php.save
-    rm tx_mmforum_config.ts
-    rm domains_list.php.save
-
-Pour les répertoires matomo, piwik, autoload, et les fichiers extTables.php, domains_list.php,
-realurl_autoconf.php et realurl_autoconf.php.auto: je ne suis pas sûr, donc j'y reviendrai plus tard.
-
-J'ouvre en édition le fichier PackageState:
-
-    nano /var/www/typo3/typo3conf/PackageStates.php
-
-Je modifie le fichier en commentant les trois lignes suivantes:
-
-        #'realurl' => [
-        #    'packagePath' => 'typo3conf/ext/realurl/',
-        #],
-
-Je relance l'outil de contrôle des extensions.
-Tous les fichiers ext_localconf.php sont ok.
-Le fichier ext_tables.php de ot_cms pose problème.
-
-Je desactive cette extension:
-
-    nano /var/www/typo3/typo3conf/PackageStates.php
-
-Je commente:
-
-    #'ot_cms' => [
-    #    'packagePath' => 'typo3conf/ext/ot_cms/',
-    #],
-
-Je relance l'outil de contrôle des extensions: tout est au vert.
-
-Je relance l'upgrade wizard, une erreur se produit, mais différente de celle de tout à l'heure.
-
-![img](images/18.png)
-
-Pour en savoir plus, j'ouvre l'outil "configuration presets", et je le passe du mode actuel (voir image)
-au mode debug
-
-![img](images/19.png)
-
-En relancant l'ugrade wizard, j'obtiens une erreur plus explicite:
-
-![img](images/20.png)
-
-Il s'agit donc d'installer le module apcu pour php7.4.
-Ce qui est étrange, c'est que je lance l'outil 'Environment Status', et qu'il ne signale pas l'erreur
-(tout est ok, sauf des HTTP warning conernant des fichiers temporaires. je néglige)
-
-Je suis le guide ici: https://serverpilot.io/docs/how-to-install-the-php-apcu-extension/
-et je lance
-
-    sudo pecl7.4-sp install apcu
-
-Ce qui me donne:
-
-    -bash: pecl7.4-sp : commande introuvable
-
-Je contacte Tony, qui l'installe avec apt
-et corrige la commande apt-get (modifié dans les notes plus haut).
-
-Je relance l'upgrade wizard, qui cette fois m'affiche une liste
-de tables et champs à créer dans la DB:
-
-    Table: pages, Field: rowDescription
-    Table: pages, Field: sys_language_uid
-    Table: pages, Field: l10n_source
-    Table: pages, Field: l10n_state
-    Table: pages, Field: l10n_diffsource
-    Table: pages, Field: slug
-    Table: pages, Field: legacy_overlay_uid
-    Table: pages, Field: l10n_parent
-    Table: sys_history, Field: actiontype
-    Table: sys_history, Field: usertype
-    Table: sys_history, Field: userid
-    Table: sys_history, Field: originaluserid
-    Table: sys_history, Field: workspace
-    Table: tx_scheduler_task, Field: deleted
-    Table: tt_content, Field: filelink_sorting_direction
-    Table: pages, Index: language_identifier
-    Table: pages, Index: slug
-    Table: pages, Index: translation_source
-    Table: sys_file, Index: parent
-    Table: sys_file_reference, Index: t3ver_oid
-    Table: tt_content, Index: translation_source
-    Table: tx_extensionmanager_domain_model_repository, Index: parent
-    Table: tx_extensionmanager_domain_model_extension, Index: parent
-    Table: tx_news_domain_model_news, Index: t3ver_oid
-    Table: tx_news_domain_model_link, Index: t3ver_oid
-
-Je clique sur 'Créer les tables'
-
-Le wizard propose d'autres corrections:
-
-1. Rename form definition file extension from .yaml to .form.yaml
-2. Add the default Extension Manager database tables
-3. Update backend user setting "startModule"
-4. Migrate bullet content element rendering selector from layout to bullets_type
-5. Migrate upload content element rendering from layout to uploads_type
-6. Install compatibility extension for TYPO3 7 compatibility
-7. Install extension "form_legacy"
-8. Install extension "rtehtmlarea" from TER
-9. Install extension "typo3db_legacy" from TER
-10. Install extension "func" from TER
-11. Migrate pages.urltype to pages.url
-12. Migrates existing sys_log entries into sys_history
-13. Merge be_groups access rights from pages_language_overlay to pages
-14. Install system extension "redirects" if a sys_domain entry with redirectTo is necessary
-15. Install extension "adminpanel"
-16. Introduce URL parts ("slugs") to all existing pages
-17. Reminder to verify live system supports argon2i
-18. Update backend user configuration array
-19. Updates slug field "path_segment" of EXT:news records
-
-J'exécute l'étape 1.
-Une erreur se produit, il faut renommer manuellement:
-
-    mv /var/www/typo3/typo3conf/ext/theme_gallery/Resources/Private/Forms/Contact.yaml /var/www/typo3/typo3conf/ext/theme_gallery/Resources/Private/Forms/Contact.form.yaml
-
-Une foir relancé, l'upgrade wizard mentionne de nouveaux index manquants:
-
-Table: sys_file, Index: parent
-Table: sys_file_reference, Index: t3ver_oid
-Table: tt_content, Index: translation_source
-
-Je clique sur "Create missing tables and fields"
-
-Je ré-exécute l'étape 1.
-Ok.
-
-    Etape 2: ok
-    Etape 3: ok
-    Etape 4: ok
-    Etape 5: ok
-    
-    Etape 6: je clique sur execute, puis laisser à "no do not execute", puis perform
-    Etape 7: je clique sur execute, puis laisser à "no do not execute", puis perform
-    Etape 8: je clique sur execute, puis laisser à "no do not execute", puis perform
-    Etape 9: je clique sur execute, puis laisser à "no do not execute", puis perform
-    Etape 10: je clique sur execute, puis je clique à "Yes, execute", puis perform
-
-Une erreur se produit:
-
-![img](images/21.png)
-
-Je desactive l'extension `ot_migration_typo8` dans PackageStates
-
-    nano /var/www/typo3/typo3conf/PackageStates.php
-
-Je modifie le fichier en commentant les trois lignes suivantes:
-
-        #'ot_migration_typo8' => [
-        #    'packagePath' => 'typo3conf/ext/ot_cms/',
-        #],
-
-
-Je rouvre l'upgrade wizard, il me redemande de créer les champs suivants:
-
-Table: sys_file, Index: parent
-Table: sys_file_reference, Index: t3ver_oid
-Table: tt_content, Index: translation_source
-
-Il n'arrive sans doute pas à créer ces index. Je clique quand même sur 'Create missing fields'
-
-Je relance l'étape 10:
-
-Etape 10: je clique sur execute, puis je clique à "Yes, execute", puis perform
-
-Une nouvelle erreur de dependance, cette fois avec ot_portail.
-
-Je desactive donc toutes les ext opentalent, en commentant:
-
-        #'ot_portail' => [
-        #    'packagePath' => 'typo3conf/ext/ot_portail/',
-        #],
-        #'ot_portail' => [
-        #    'packagePath' => 'typo3conf/ext/ot_portail/',
-        #],
-        #'theme_gallery' => [
-        #    'packagePath' => 'typo3conf/ext/theme_gallery/',
-        #],
-        #'typo3_api' => [
-        #    'packagePath' => 'typo3conf/ext/typo3_api/',
-        #],
-
-Je rouvre l'upgrade wizard, il me redemande de créer les champs suivants:
-
-Table: sys_file, Index: parent
-Table: sys_file_reference, Index: t3ver_oid
-Table: tt_content, Index: translation_source
-
-Il n'arrive sans doute pas à créer ces index. Je clique quand même sur 'Create missing fields'
-
-Je relance l'étape 10:
-
-Etape 10: je clique sur execute, puis je clique à "Yes, execute", puis perform
-
-L'exécution reste en cours un long moment sans se terminer
-Puis se termine correctement.
-
-Etape 11: ok
-
-L'etape 12 sera trop longue en l'état, j'en profite pour nettoyer les vieux enregistrements
-de sys_log avec mysql workbench:
-
-    DELETE FROM sys_log WHERE tstamp < UNIX_TIMESTAMP('2020-01-01 00:00:00');
-    DELETE FROM sys_history WHERE tstamp < UNIX_TIMESTAMP('2019-01-01 00:00:00');
-    DELETE FROM sys_log WHERE details LIKE 'User %s has cleared the cache%';
-    DELETE FROM sys_log WHERE details LIKE 'Core: Error handler%';
-    DELETE FROM sys_log WHERE details LIKE 'Core: Exception handler%';
-
-
-Etape 12: ok
-Etape 13: je clique sur execute, puis je clique à "Yes, execute", puis perform => ok
-Etape 14: je clique sur execute, puis je clique à "Yes, execute", puis perform => ok
-Etape 15: je clique sur execute, puis je clique à "Yes, execute", puis perform => ok
-Etape 16: Une erreur se produit
-
-![img](images/22.png)
-
-L'erreur vient d'une page "orpheline" (uid: 563). En effete, sa page parent a été supprimée,
-
-Un contrôle sur mysql WB avec la requête:
-
-    select p.uid, p.deleted, p.pid, t.deleted from pages p 
-    INNER JOIN pages t ON p.pid = t.uid
-    WHERE p.deleted = 0 AND t.deleted = 1;
-
-retourne 102 pages concernées: la page n'est pas deleted mais sa page parente l'est.
-
-on lance donc dans mysql wb:
-
-    UPDATE pages SET deleted = 1
-    WHERE uid IN (520, 563, 606, 864, 907, 950, 999, 5159, 1044, 1087, 1172, 1221, 1394, 1484, 1527, 1570, 1613, 1656, 1699, 1742, 1785, 1828, 1869, 1913, 1960, 2003, 2046, 2094, 2139, 2182, 2224, 3092, 2265, 2317, 2361, 2520, 2566, 2611, 2657, 2740, 2786, 2832, 2878, 2924, 2970, 3016, 3062, 3116, 3164, 3210, 3256, 3302, 3348, 3394, 3484, 3530, 3578, 3624, 3670, 3716, 3762, 3819, 3865, 3911, 3957, 4003, 4049, 4095, 4141, 4262, 4311, 4358, 4405, 4605, 4656, 4705, 4754, 4803, 4852, 4901, 4950, 5000, 5049, 5232, 5279, 5326, 5373, 5467, 5514, 5561, 5608, 5655, 97765, 119555, 118038, 124625, 118690, 124790, 118691, 124791, 118881, 124855);
-
-Je relance l'étape 16, l'erreur se présente à nouveau.
-En effet, la requête précédente n'était pas récursive.
-
-Je poursuis l'upgrade, je reviendrai sur dce point plus tard.
-
-Etape 17: "Yes I understand" => ok
-Etape 18: ok
-
-Il reste les etapes 16 et 19, sur lesquelles je reviendrai.
-
-Sur install:
-
-* Flush TYPO3 and PHP Cache => ok
-* Rebuild PHP Autoload Information => ok
-* Reset Backend User Preferences => ok
-
-Ensuite: Analyze Database Structure
-
-Je coche les 5 corrections suivantes:
-
-	DROP INDEX `deleted_hidden` ON `sys_file_storage`
-    DROP INDEX `sys_log_uid` ON `sys_history`
-    DROP INDEX `uid_foreign_tablenames` ON `sys_category_record_mm`
-    DROP INDEX `tx_realurl` ON `sys_domain`
-    DROP INDEX `tx_realurl` ON `sys_template`
-
-puis Apply
-
-En relancant l'uypgrade wizard, on constate qu'on a plus les
-demandes de suppr d'indes: c'est tout bon.
-
-Je me rend sur le BE, menu extensions, liste déroulante: "ajouter des ext"
-Je met à jour l'index
-
-Je reviens sur les ext installées, 3 ext ont besoin d'une update:
-
-* frontend_editing: 1.9.4
-* news: 8.3.0
-* rte_ckeditor_image: 9.0.4
-
-Je vérifie le 'Compare database': pas de nouvelle tabkle ou de nouveau champs.
-
-
-A ce niveau, on a une version de typo3 v9.5 presque migrée.
-
-Il reste à:
-
-1. Passer le script python qui va
-
-* corriger certaines erreurs de la base (pages orphelines entre autres)
-* générer les fichiers yaml de conf des sites
-* maj les id des structures (/!\ ot_templating nécessaire ici, il faudra peut-être créer le champ manuellement)
-* mettre à jour les slugs, /!\ il faut retirer cette partie pour l'instant, les slugs doivent d'abord être repris depuis realurl
-* maj les gabarits (il faut d'abord installer ot_templating!)
-* (re)génerer les fichiers constants.txt
-* repositionnement du contenu (il faut d'abord installer ot_templating! pas fonctionnel?)
-* création des raccourcis 'accueil' (pas fonctionnel?)
-
-2. basculer vers le mode composer
-3. installer flux, vhs, ot_connect, ot_templating, ot_widgets
-
-
-**Checkpoint 1**: Je commence par faire un dump de la DB.
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 typo3 > /home/exploitation/typo3_chkpnt1.sql
-
-Je créé un dépot gitlab dédié pour remettre de l'ordre dans la doc et
-les outils de l'upgrade: https://gitlab.2iopenservice.com/olivier/upgrade_typo8
-
-Je vais maintenant refactoriser le script gen_sites.py pour le scinder
-en un fix_db_95.py qui réparera les erreurs de la DB, et un script
-conf_typo_95.py qui achèvera de configurer typo3 dans sa nouvelle version.
-
-La refactorisation est faite, je créé un premier correctif dans fix_db_95.py qui
-doit mettre à jour comme deleted les pages filles d'un parent deleted.
-
-Ok, c'est fait, environ 380 pages concernées.
-
-Je réessaye maintenant de lancer les deux dernières étapes de l'upgrade wizard (ex 16 et ex 19)
-Etonnament, il y a de nouvelles étapes dispnibles, sans doute dûes au fait que j'ai
-mis a jour des extensions, news en particulier.
-
-1. Introduce URL parts ("slugs") to all existing pages
-2. [Optional] Migrate realurl alias to slug field "path_segment" of EXT:news records
-3. Updates slug field "path_segment" of EXT:news records
-4. Introduce URL parts ("slugs") to all sys_categories
-
-Je lance les étapes dans l'ordre:
-
-Etape 1: (dure une bonne dizaine de minutes)
-L'opération s'arrête sur un timeout, arf.
-
-Je lance l'opération en ligne de commande pour éviter ce problème:
-
-    php7.4 /var/www/typo3/typo3/sysext/core/bin/typo3 upgrade:run pagesSlugs
-
-... qui s'avère être inutilisable, à cause d'apcu:
-
-    The APCu backend cannot be used because apcu is disabled on CLI. 
-
-J'essaie de relancer l'étape via l'interface, au cas où
-les lignes déjà traitées ne seraient pas retraitées...
-Mais non: l'erreur se produit à nouveau.
-
-J'essaie d'activer apcu pour la ligne de dommande:
-
-    nano /etc/php/7.4/cli/php.ini
-
-J'ajoute la ligne:
-
-    apc.enabled = 1
-    apc.enable_cli = 1
-
-Je redémarre php-fpm
-
-    sudo service php7.4-fpm restart
-
-
-Je relance l'update:
-
-    php7.4 /var/www/typo3/typo3/sysext/core/bin/typo3 upgrade:run pagesSlugs
-
-Ca fonctionne, mais pour une raison inconnue, l'upgrade est extrêmement lente
-(à peine 13300 lignes traitées sur 129000, en presque 5 heures.)
-
-Je trouve la localisation du code exécutée
-(voir [ici](https://github.com/TYPO3/TYPO3.CMS/blob/8cb2b2437f9dea277a1d2fb2463bb025754e03bb/typo3/sysext/install/Classes/Updates/PopulatePageSlugs.php#L108))
-
-Voilà ce que fait la fonction officielle:
-
-1. Selection des lignes de la table pages où le champs slug est une chaine vide ou null
-2. récupère d'éventuels slug existants de realurl (voir [ici](https://github.com/TYPO3/TYPO3.CMS/blob/8cb2b2437f9dea277a1d2fb2463bb025754e03bb/typo3/sysext/install/Classes/Updates/PopulatePageSlugs.php#L222)):
-* dans la table `tx_realurl_pathdata` si la table existe
-* dans le champs `cache_id` de la table `tx_realurl_pathcache` si la table existe
-3. Parcourt les enreg de la selection (1)
-4. Si le champs alias est renseigné, construit le slug a partir de là
-5. Si ni alias, ni valeur depuis realurl: génère un nouveau slug (voir la [classe SlugHelper](https://github.com/TYPO3/TYPO3.CMS/blob/8cb2b2437f9dea277a1d2fb2463bb025754e03bb/typo3/sysext/core/Classes/DataHandling/SlugHelper.php#L157)):
-* si page `is_siteroot`: le slug est '/', la fonction s'arrête là
-* sinon, récupère ou reconstruit le slug du parent
-* recupere la première valeur non vide dans: tx_realurl_pathsegment, title
-* sanitize le slug
-6. Vérifie les contraintes d'unicité du slug dans le site
-7. Met à jour l'enregistrement
-
-
-Visiblement, elle n'a pas été concue pour de si gros volumes de données...
-
-Je vais essayer de réécrire la fonction: voir `populate_slugs_95.py`
-J'ignore la table tx_realurl_pathcache, pour la raison qu'elle est vide.
-
-Une première version du script est exécutée, mais elle n'a indexé que 122.964 pages, contre 129.017 présentes en base.
-Aprés verification, c'est normal: les pages absentes sont les pages de type 'Folder'
-
-Après relecture et correction le script semble ok.
-Selon sa vitesse de progression observée sur mon poste, le script durera environ 3h30
-(ce qui est long, mais toujours préférable aux plus de 50heures du scipt typo3)
-
-Une petite évolution permet de passer à environ 1h30 de traitement.
-
-Cependant, je constate que pour une grande partie des slugs (ceux hérités de realurl)
-il manque le '/' en première position.
-
-Je corrige donc le script pour que ce caractère soit ajouté automatiquement la prochaine fois,
-puis je corrige "manuellement" en exécutant dans mysql WB:
-
-    UPDATE pages SET slug = '/' + slug
-    WHERE doktype != 254 AND slug NOT LIKE '/%'; 
-
-Je constate aussi que certaines pages (112 pages) ont des titres vides et pas d'alias. Le script
-est maintenant corrigé pour leur donner le slug 'no-title'.
-Pour l'instant, je corrige lignes dans mysql WB:
-
-    UPDATE pages SET slug = slug + 'no-title'
-    WHERE doktype != 254 AND slug LIKE '%/' AND slug != '/'; 
-
-Enfin, je note que 6677 pages ont encore un slug null.
-Certaines de ces pages sont supprimées et n'ont pas de page racine (ex: uid 4)
-
-En revanche, certaines autres devraient avoir des slugs... (ex: 26439, dont la page parent est 25530)
-Après contrôle, je me rend compte que la page 25530 n'est pas indéxée, alors qu'elle existe dans la base...
-
-La solution est toute simple:  25530 est un dossier! (doktype: 25530)
-En revanche, la page parent de ce dossier est une page root (25529)
-Que faire dans ce cas, dois-je générer des slugs pour ces cas particuliers?
-Je laisse pour l'instant, mais il faudra en rediscuter.
-
-
-Je vais maintenant générer les fichiers de configuration des sites.
-Je vais créer un nouveau script `gen_sites_yaml.py`.
-
-Le script est créé, je l'exécute.
-Je dois le corriger pour gérer les sites sans domaines, voire sans titre.
-
-Une fois les fichiers générés, je les transfère sur le serveur de preprod en me
-servant de filezilla.
-Je place donc tous les sous-répertoires qui contiennent les fichiers config.yaml dans le répertoire:
-
-    /var/www/typo3/config/sites/...
-
-Le transfert est trés lent, j'annule, je compresse le répertoire des sites:
-
-Sur mon poste:
-
-    tar czf sites.tar.gz sites/
-
-J'exécute le transfert via filezilla (qui ne dure que qq secondes)
-
-Sur preprod:
-
-    cd /var/www/typo3/config/
-    tar xzvf sites.tar.gz
-    rm sites.tar.gz
-    mv sites/* .
-    rm -r sites
-
-Je me rend sur le backend typo3, à l'onglet Sites pour constater le résultat.
-Aucun des fichiers n'a été reconnu pour l'instant...
-A tout hasard, je vide le cache et je rafraichis, mais sans résultat.
-
-Je me suis trompé, les répertoires des sites doivent être dans /config/sites/, pas dans /config/
-Je corrige avec:
-
-    cd /var/www/typo3/config/
-    mkdir ../sites
-    mv * ../sites/
-    mv ../sites .
-
-Côté backend, je rafraichis la page sites, sans résultat.
-Je reviens sur mes notes de l'upgrade du docker.
-Effectivement, preprod est encore dans l'ancienne architecture.
-Les sites doivent être dans typo3conf, pas dans conf
-
-    mv /var/www/typo3/config/sites /var/www/typo3/typo3conf/
-    rm -r /var/www/typo3/config
-
-Je rafraichis le backend.
-Une erreur se produit, qui semble assez sérieuse:
-
-![img](images/23.png)
-
-J'en apprend plus sur l'erreur ici:
-https://stackoverflow.com/questions/14748499/fatal-error-too-many-open-files
-
-Effectivement, la commande:
-
-    ulimit -n
-
-Renvoie 1024.
-
-J'exécute donc la commande suivante:
-
-    ulimit -n 10000
-
-J'essaie d'abord de lancer cette commande en tant que root, mais ça ne modifie pas la limite pour exploitation.
-J'essaie ensuite en tant que exploitation, mais ça ne corrige pas le pbm.
-J'essaye en tant que root avec:
-
-    sudo -u www-data ulimit -n 10000
-
-Je reçois l'erreur `sudo: ulimit: commande introuvable`.
-
-J'essaie:
-
-    service php7.4-fpm restart
-
-Mais le problème persiste.
-
-Je contacte Tony à ce sujet.
-
-Il corrige le problème de la manière suivante:
-
-    root@preprod /etc/php/7.4 $ grep rlimit /etc/php/7.4/fpm/pool.d/www.conf
-    ; Set open file descriptor rlimit.
-    rlimit_files = 50000
-    
-    root@preprod /etc/php/7.4 $ grep exploitation /etc/security/limits.conf
-    exploitation	  hard nofile 50000
-    exploitation	  soft nofile 50000
-    
-    ; puis restart php-7.4-fpm
-
-Le correctif fonctionne bien, le BE est de nouveau accessible (merci Tony)
-
-Cette fois, les sites sont bien pris en compte.
-
-![img](images/24.png)
-
-Cela dit, il reste quelques sites non reconnus:
-
-* Ecole Municipale de Musique [ID: 49408]
-* Ecole Municipale de Musique [ID: 49063]
-* Ecole de Musique La Clé de Sol [ID: 39115]
-* Union Musicale [ID: 40195]
-* Union Musicale [ID: 42358]
-* Ecole Municipale de Musique [ID: 17162]
-* Les Amis de la Musique [ID: 57493]
-* Société Musicale [ID: 70352]
-* Ecole de musique [ID: 19828]
-* Société Musicale [ID: 70307]
-* Accordéon club [ID: 54853]
-* Accordéon Club [ID: 85652]
-  ...Etc
-
-Je suppose que le problème est dû aux noms en doublon,
-les fichiers de l'un sont remplacé par le suivant du même nom.
-
-Pour corriger le pbm, je modifie le script python pour ajouter l'uid à la suite du nom du répertoire.
-
-Je relance le script, puis je répète la procédure de tar / filezilla / untar
-
-Je réactualise la page 'Sites' du BE, mais les nouveaux fichiers ne sont pas pris en compte.
-Un 'flush cache' plus tard, et tout est ok.
-
-Tous les sites sont maintenant bien configurés.
-Quelques configuration sont cependant marquées comme non-assignées, à vérifier plus tard:
-
-![img](images/25.png)
-
-
-
-Je vais maintenant tenter le switch vers composer.
-
-Il faut d'abord que je fasse le point sur les extensions qui doivent être conservées, parmi celles-ci:
-
-* news
-* frontend_editing
-* func
-* mediace [outdated]
-* rte_ckeditor_image
-* piwik et piwikintegration
-
-D'après ce que je vois dans la base, ces plugins sont inutilisés:
-
-* impexp
-* scheduler
-
-Je ne vais reprendre que `news` dans un premier temps.
-
-
-Je commence par
-
-Sur preprod:
-
-En tant que root:
-
-    mv /var/www/typo3 /var/www/typo3_95
-    mkdir /var/www/typo3
-    chown -R exploitation:www-data /var/www/typo3
-
-En tant que exploitation:
-
-    cd /var/www/typo3
-    
-    composer require "typo3/cms-about:^9.5" "typo3/cms-adminpanel:^9.5" "typo3/cms-backend:^9.5" "typo3/cms-belog:^9.5" "typo3/cms-beuser:^9.5" "typo3/cms-core:^9.5" "typo3/cms-extbase:^9.5" "typo3/cms-extensionmanager:^9.5" "typo3/cms-felogin:^9.5" "typo3/cms-filelist:^9.5" "typo3/cms-filemetadata:^9.5" "typo3/cms-fluid:^9.5" "typo3/cms-fluid-styled-content:^9.5" "typo3/cms-form:^9.5" "typo3/cms-frontend:^9.5" "typo3/cms-info:^9.5" "typo3/cms-install:^9.5" "typo3/cms-lowlevel:^9.5" "typo3/cms-recycler:^9.5" "typo3/cms-redirects:^9.5" "typo3/cms-reports:^9.5" "typo3/cms-rte-ckeditor:^9.5" "typo3/cms-scheduler:^9.5" "typo3/cms-seo:^9.5" "typo3/cms-setup:^9.5" "typo3/cms-t3editor:^9.5" "typo3/cms-tstemplate:^9.5"
-
-Je reçois l'erreur suivante:
-
-![img](images/26.png)
-
-Il est probable que composer ne soit pas à jour sur preprod.
-En effet:
-
-    exploitation@preprod:/var/www/typo3$ composer --version
-    Composer version @package_branch_alias_version@ (1.0.0-beta2) 2016-03-27 16:00:34
-
-Je lance donc:
-
-    php7.4 -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
-    php7.4 -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
-    php7.4 composer-setup.php
-    php7.4 -r "unlink('composer-setup.php');"
-
-Je relance ensuite:
-
-    php7.4 composer.phar require "typo3/cms-about:^9.5" "typo3/cms-adminpanel:^9.5" "typo3/cms-backend:^9.5" "typo3/cms-belog:^9.5" "typo3/cms-beuser:^9.5" "typo3/cms-core:^9.5" "typo3/cms-extbase:^9.5" "typo3/cms-extensionmanager:^9.5" "typo3/cms-felogin:^9.5" "typo3/cms-filelist:^9.5" "typo3/cms-filemetadata:^9.5" "typo3/cms-fluid:^9.5" "typo3/cms-fluid-styled-content:^9.5" "typo3/cms-form:^9.5" "typo3/cms-frontend:^9.5" "typo3/cms-info:^9.5" "typo3/cms-install:^9.5" "typo3/cms-lowlevel:^9.5" "typo3/cms-recycler:^9.5" "typo3/cms-redirects:^9.5" "typo3/cms-reports:^9.5" "typo3/cms-rte-ckeditor:^9.5" "typo3/cms-scheduler:^9.5" "typo3/cms-seo:^9.5" "typo3/cms-setup:^9.5" "typo3/cms-t3editor:^9.5" "typo3/cms-tstemplate:^9.5"
-    php7.4 composer.phar require fluidtypo3/flux fluidtypo3/vhs georgringer/news helhum/typo3-console:^5.7
-
-    cp -R /var/www/typo3_95/fileadmin ./public/
-    cp -R  /var/www/typo3_95/uploads ./public/
-    
-    cd /var/opentalent/git
-    git clone git@gitlab.2iopenservice.com:olivier/ot_typo3.git
-    ln -s /var/opentalent/git/ot_typo3/ot_connect /var/www/typo3/public/typo3conf/ext/ot_connect
-    ln -s /var/opentalent/git/ot_typo3/ot_templating /var/www/typo3/public/typo3conf/ext/ot_templating
-    ln -s /var/opentalent/git/ot_typo3/ot_widgets /var/www/typo3/public/typo3conf/ext/ot_widgets
-    
-  
-    mkdir /var/www/typo3/config
-    cp -R /var/www/typo3_95/typo3conf/sites /var/www/typo3/config/
-    cp /var/www/typo3_95/typo3conf/LocalConfiguration.php /var/www/typo3/public/typo3conf/LocalConfiguration.php
-    mkdir /var/www/typo3/public/typo3temp
-    
-    cp /var/www/typo3/public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess /var/www/typo3/public/.htaccess
-    
-    chown -R exploitation:www-data /var/www/typo3/
-    touch /var/www/typo3/public/FIRST_INSTALL
-
-J'ajoute les sections `scripts` et `psr-4` au fichier composer.json:
-
-    nano /var/www/typo3/composer.json
-
-et j'ajoute les lignes suivantes entre l'avant-dernière ligne et la dernière:
-
-    ,
-	"scripts":{
-		"typo3-cms-scripts": [
-			"typo3cms install:fixfolderstructure",
-			"typo3cms install:generatepackagestates"
-		],
-		"post-autoload-dump": [
-			"@typo3-cms-scripts"
-		]
-	},
-	"autoload": {
-		"psr-4": {
-			"Opentalent\\OtWidgets\\": "public/typo3conf/ext/ot_widgets/Classes",
-			"Opentalent\\OtConnect\\": "public/typo3conf/ext/ot_connect/Classes",
-			"Opentalent\\OtTemplating\\": "public/typo3conf/ext/ot_templating/Classes"
-		}
-	}
-
-Puis je lance la commande:
-
-    cd /var/www/typo3
-    php7.4 composer.phar dumpautoload
-
-Enfin, je met à jour le virtualhost apache pour pointer vers le répertoire `public`
-
-En tant que root:
-
-    nano /etc/apache2/sites-available/001-preprod.opentalent.fr.conf
-    nano /etc/apache2/sites-available/001-preprod.opentalent.fr-le-ssl.conf
-
-Dans ces deux fichiers, je remplace:
-
-    DocumentRoot /var/www/typo3
-
-Par:
-
-    DocumentRoot /var/www/typo3/public
-
-Enfin, je lance:
-
-    /etc/init.d/apache2 reload
-
-
-Enfin, je me rend à https://preprod.opentalent.fr/typo3/install.php
-puis je poursuis vers le BE
-
-Tout va bien, et le mode composer est bien affiché à l'écran des extensions:
-
-![img](images/27.png)
-
-**Checkpoint 2**: Je fais un dump de la DB.
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 typo3 > /home/exploitation/typo3_chkpnt2.sql
-
-Je me rend à la page 'maintenance'
-Je clique sur 'Flush cache'
-Une erreur se produit, mais la base n'est pas en phase avec les extensions, c'est donc normal.
-
-J'ouvre ensuite l'outil 'Database compare', j'exécute les commandes de création / modification de champs et de tables.
-**ATTENTION**: je ne fais aucune suppression pour l'instant!
-
-Il y a:
-
-* 5x create table
-* 47x add fields
-* 2x alter fields
-
-Je clique sur 'Apply changes'
-Tout se passe bien.
-
-Je vais maintenant mettre à jour le champs pages.tx_opentalent_structure_id
-
-Le lien entre la page et la structure se fait au moyen du champs cmsId et du nom de domaine,
-ce qui fait que ce champs risque d'être incomplet pour certains sites...
-
-Je vais créer le script `update_struct_ids.py`
-Je lance le script.
-Il dure une bonne dizaine de minutes,
-mais pourrait si besoin être accéléré en regroupant les requêtes.
-
-Je contrôle résultat en base en lancant la requête suivante dans mysql WB:
-
-    SELECT uid, pid, title, tx_opentalent_structure_id, deleted, is_siteroot, slug 
-    FROM pages;
-
-Puis:
-
-    SELECT uid, pid, title, tx_opentalent_structure_id, deleted, is_siteroot, slug 
-    FROM pages
-    WHERE is_siteroot=1 AND tx_opentalent_structure_id=0 OR tx_opentalent_structure_id IS NULL;
-
-Il semble y avoir des erreurs, et le script est trop long.
-Quelques corrections plus tard et un affichage de la progression, je relance le script.
-
-Cette fois les résultats semblent bons,
-même s'il faut encore compter au moins 2h pour l'exécution du script complet.
-
-J'essaye en ne committant les requêtes qu'une fois tous les 25 sites.
-Ce n'est pas bcp mieux.
-
-J'essaye de générer un fichier sql que j'exécuterai directement dans mysql.
-Le fichier est généré très vite, mais la requête est toujours relativement longue...
-Il va falloir compter 1h30 à 2h, difficile de faire mieux...
-
-Après le script, il reste '27834' pages non renseignées, dont 1030 pages root.
-
-On y reviendra au moment du nettoyage et de la consolidation, cette donnée est facultative.
-
-
-## Templating et contenu
-
-Il va falloir mettre à jour les templates de chaque site.
-Je créé un script 'update_templates.py'
-
-Je le lance, en prenant le parti de faire des update en masse, ce qui permet un sacré gain de temps.
-
-En revanche, de nombreuses pages (966) avec 2 ou 4+ colonnes sont identifiées,
-il va falloir faire un travail sur la question,
-et sans doute faire correspondre le template précédent à un nouveau...
-
-De plus, de trés nombreux sites (3884) n'ont pas de page évènements (obligatoire?)
-
-
-On va maintenant générer le champs des constants de chaque site.
-
-Je créé un script `update_constants.py`.
-A terme, il serait intéressant de regrouper certains
-de ces scripts pour grouper les requêtes.
-
-Je lance le script.
-Il faut compter environ 15min.
-
-Une fois terminé, je retourne sur le backend typo3, et je vide le cache.
-
-J'essaie d'accéder à https://preprod.opentalent.fr/ohcluses/
-Une erreur se produit:
-
-![img](images/27.png)
-
-Il 'agit d'une erreur issue de ot_templating,
-quand aucun thème n'est choisi dans la conf flux.
-Je vais corriger cette erreur directement dans l'extension.
-
-Une fois le pbm corrigé et le commit pushé sur gitlab,
-je lance la commande:
-
-    cd /var/opentalent/git/ot_typo3
-    git pull
-
-
-Après un flush cache, je rafraichis la page https://preprod.opentalent.fr/ohcluses/
-
-La page s'affiche bien.
-Premier bilan:
-
-* les contenus sont mal positionnés
-* le formulaire de contact ne s'affiche pas.
-
-
-Le problème de placement des contenus est dû au changement de templates.
-
-Pour mieux faire la correspondance, je liste d'abord
-les anciens templates ainsi que leur nombre de colonnes
-et l'ordre d'affichage de celles ci de gauche à droite.
-
-Je lance la commande suivante sur mysql WB:
-
-    SELECT count(*) FROM openassos.backend_layout;
-
-Il y a 16 layouts définis.
-Leur configuration est définie en typoscript dans le champs config.
-
-    SELECT DISTINCT backend_layout FROM openassos.pages;
-
-Certains layouts sont issus de la table backend_layout:
-
-    SELECT DISTINCT l.uid , l.title
-    FROM openassos.pages p INNER JOIN openassos.backend_layout l
-    ON p.backend_layout = l.uid 
-    ORDER BY l.uid;
-
-// uid, title
-'1', 'Fluid 1 colonne'
-'2', 'Diapo-bc-3col'
-'4', 'Diapo-bc-3col'
-'5', 'fullSizeTemplate'
-'6', 'Portail 2 Colonnes'
-'7', 'Portail Pleine Page'
-'8', 'Login'
-'9', 'Modèle 3 colonnes boite droite, menu gauche'
-'10', 'Modèle 2 colonnes avec des boites'
-'11', 'Modèle 1 colonne'
-'12', 'Modèle 1 colonne pour l\'agenda'
-'13', 'Modèle 2 colonnes avec les menus'
-'14', 'Modèle 3 colonnes avec les boites'
-'15', 'Modèle 3 colonnes boite'
-'16', 'Modèle 1 colonne PB'
-
-
-
-D'autres mentionnent l'extension 'theme_gallery'
-
-    SELECT DISTINCT backend_layout 
-    FROM openassos.pages
-    WHERE backend_layout LIKE 'theme%'
-    ORDER BY backend_layout;
-
-// backend_layout
-'theme_gallery__activity_report'
-'theme_gallery__admin_commitee'
-'theme_gallery__administration'
-'theme_gallery__advanced_user_manual'
-'theme_gallery__agenda'
-(et 50 de plus...)
-
-
-Ce second système est défini dans ces fichiers:
-
-* [fluidtemplate.ts](https://gitlab.2iopenservice.com/developper/typo3/blob/master/typo3extension/theme_gallery/Resources/Private/Typoscript/Library/fluidtemplate.ts)
-* [ThemeGalleryController](https://gitlab.2iopenservice.com/developper/typo3/blob/master/typo3extension/theme_gallery/Classes/Controller/ThemeGalleryController.php)
-* [fluidtemplate.ts](https://gitlab.2iopenservice.com/developper/typo3/blob/master/themes/BlueSky/Templates/typoscript/fluidtemplate.ts)
-
-Une part des templates correspondants se trouvent ici (templates FE):
-https://gitlab.2iopenservice.com/developper/typo3/tree/master/themes/BlueSky/Templates
-
-Une autre part ici (conf BE):
-https://gitlab.2iopenservice.com/developper/typo3/tree/upgrade-v8/themes/BlueSky/BackendLayout
-
-Mais seuls 11 templates sont définis, contre 56 backend_layout différents
-dans 'pages'?
-
-Ainsi qu'on le voit dans le fichier fluidtemplate.ts, pour chacun de ces templates
-les colonnes sont définies ainsi:
-
-      # Bloc de contenu central
-      colContent < styles.content.get
-      colContent.select.where = colPos = 0
-
-      # Colonne de gauche
-      colLeft < styles.content.get
-      colLeft.select.where = colPos = 1
-
-      # Colonne de droite
-      colRight < styles.content.get
-      colRight.select.where = colPos = 2
-
-On peut donc établir le tableau suivant:
-
-From
-
-| template | colContent | colLeft | colRight |
-| --- | --- | --- | --- |
-| association_spectacle |  |  |  |
-| ca_members |  |  |  |
-| contact |  |  |  |
-| default | x | x | x |
-| events |  |  |  |
-| home | x | x | x |
-| login |  |  |  |
-| members_list |  |  |  |
-| news |  |  |  |
-| site_map |  |  |  |
-| structures |  |  |  |
-| members_list_fede |  |  |  |
-| page | x | x | x |
-
-On le voit, seuls deux utilisent les contenus des colonnes.
-En revanche, où sont définies les autres?
-
-Une nouvelle requête permet de constater qu'une bonne part d'entre eux
-n'est utilisé qu'une seule fois, ce qui semble désigner des reliquats de tests ou autre...
-
-    SELECT backend_layout, count(backend_layout)
-    FROM openassos.pages
-    WHERE backend_layout LIKE 'theme%'
-    GROUP BY backend_layout
-    ORDER BY backend_layout;
-
-Ainsi, des 56 enregistrements, seuls 20 ont 2 enregistrements ou +,
-et seuls 15 ont plus de 200 enreistrements.
-
-Ces chiffres chutent encore lorsqu'on filtre les pages supprimées.
-
-
-Voilà ceux dont la définition manque encore:
-
-* history (6042 fois)
-* on_going_season (6042 fois)
-* who_are_we (6041 fois)
-* legal_mentions (5573 fois)
-* contact_tks (5542 fois)
-* commissions (4089 fois)
-* association_gm (171 fois)
-* association_other_events (171 fois)
-
-On va les ignorer pour l'instant, car leur définition est introuvable
-dans le code de la précédente version de typo3.
-
-Par ailleurs::
-
-    SELECT count(*) FROM pages
-    WHERE backend_layout IN ('theme_gallery__home', 'theme_gallery__default')
-    
-    SELECT uid, pid, title, backend_layout FROM pages
-    WHERE is_siteroot=1 AND backend_layout NOT IN ('theme_gallery__home', 'theme_gallery__default');
-
-Ces deux sont utilisés par 6043 pages, soit toutes les pages 'root'
-sauf 7:
-
-    # uid, pid, title, backend_layout
-    '1', '134830', 'Opentalent - La plateforme du spectacle vivant', '14'
-    '12333', '94495', 'Union Musicale St Nizier-Curciat', '15'
-    '94433', '94495', 'Support Opentalent', '1'
-    '94464', '134830', 'Support Opentalent', '1'
-    '94496', '94495', '2iopenservice.com', '14'
-    '94507', '13', '2iopenservice.com', '4'
-    '95142', '0', 'Opentalent - La plateforme du spectacle vivant', '6'
-
-
-Pour revenir aux layouts issus de la table 'backend_layout',
-ceux-ci sont peu utilisés (entre 1 et 309 fois):
-
-    SELECT l.uid , l.title, count(l.uid)
-    FROM openassos.pages p INNER JOIN openassos.backend_layout l
-    ON p.backend_layout = l.uid 
-    GROUP BY l.uid , l.title
-    ORDER BY l.uid;
-
-En revanche, les configs sont trop complexes pour être reprises de manière automatique,
-et devront être traitées au cas par cas.
-
-
-Voilà les évolutions qu'on pourra apporter au process de migration:
-
-* Pour les pages ayant du contenu sur 3 colonnes,
-  le contenu en position 0 passe en 1 et vice-versa
-* On appliquera le nouveau template Events aux pages dont le template est 'theme_gallery__events'
-* On appliquera le nouveau template Contact aux pages dont le template est 'theme_gallery__contact'
-* On appliquera un nouveau template News (à créer) aux pages avec le template 'theme_gallery__news'
-* On étudiera la nécessité de reprendre les templates suivants:
-  * association_spectacle
-  * members_list_fede
-
-J'apporte ces évolutions au script `update_templates.py`
-(en ignorant pour l'instant le dernier point, on y reviendra)
-
-Je relance ce script. Il dure environ 10min .
-
-Je vide le cache et reactualise la page https://preprod.opentalent.fr/ohcluses/
-Les contenus ont l'air à leur place, tout va bien.
-
-Je vais maitnenant générer les raccourci 'Accueil' pour chaque site.
-Je créé un script 'generate_welcome_shortcuts.py'
-
-Je le lance, il dure environ 20min.
-
-
-
-Je teste différents sites, et je note les erreurs suivantes:
-
-1. <https://preprod.opentalent.fr/eml/>
-* pbm avec le footer
-* toutes les pages du menu renvoient des erreurs 404 / pbm de slugs?
-
-2. <https://preprod.opentalent.fr/emdt-forterre-val-d-yonne/>
-* une erreur se produit: assets/style/theme-.css does not exist
-
-Pour le problème 2, je corrige le plugin ot_templating.
-
-Pour le 1, je constate que les slugs affichés dans le BE sont invalides ('0')?
-
-Bon, c'est un vrai souci: la requête suivante
-
-    SELECT count(uid) 
-    FROM typo3.pages 
-    where slug = '0';
-
-Révèle que 66203 pages ont un slug valant '0'
-C'est par exemple le cas d'une bonne partie des pages de 'Hoenheim - Harmonie'
-
-// uid, pid, is_siteroot, deleted, title, slug, doktype, tx_opentalent_structure_id
-'20966', '20965', '0', '0', 'DS oh-hoenheim', '/ds-oh-hoenheim', '254', '0'
-'20968', '20965', '0', '0', 'Saison en cours', '/saison-en-cours', '1', '20966'
-'20969', '20967', '0', '0', 'Qui sommes-nous ?', '0', '1', '20966'
-'20970', '20967', '0', '0', 'Historique', '0', '1', '20966'
-'20971', '20967', '0', '0', 'Les membres du CA', '0', '1', '20966'
-'20972', '20967', '0', '0', 'Les adhérents', '0', '1', '20966'
-'20974', '20965', '0', '0', 'Footer', '/footer', '116', '20966'
-'31777', '20967', '0', '0', 'Contact', '0', '4', '20966'
-'100018', '20967', '0', '0', 'Actualités', '0', '1', '20966'
-'100021', '20965', '0', '0', 'Login', '0', '1', '20966'
-'120119', '20965', '0', '0', 'Page introuvable', '0', '1', '20966'
-'20965', '94495', '1', '0', 'Hoenheim - Harmonie', '/', '1', '20966'
-'20967', '20965', '0', '0', 'Présentation', '/presentation', '1', '20966'
-
-
-On constate par ailleurs qu'environ 150 autre pages ont des valeurs numériques à la place
-d'un slug...
-
-    SELECT count(uid), slug  FROM typo3.pages
-    WHERE slug NOT LIKE '/%'
-    GROUP BY slug;
-
-Il s'avère qu'un grand nombre de ces valeurs numériques vient de l'ancien realurl, mais pas le 0.
-On laisse tel quel (les url doivent se maintenir.)
-
-    SELECT count(page_id), pagepath 
-    FROM tx_realurl_pathdata
-    WHERE mpvar = '' AND pagepath REGEXP '^[0-9]+$'
-    AND (expire = 0 OR expire > CURRENT_TIMESTAMP())
-    GROUP BY pagepath;
-
-Je lance donc une requête delete sur ces valeurs, et je relance le script `update_slugs.py`
-en mode déboguage pour chercher la cause.
-
-    UPDATE pages SET slug = NULL WHERE slug='0';
-
-Je relance le script, qui semble faire son boulot correctement.
-Peut-être les '0' sont ils issus d'une mauvaise manipulation en amont,
-et n'ont donc pas été remplacés par le script (que j'avais lancé en mode NO_REPLACE)
-
-
-Un nouveau bug (erreurs 404 sur des pages existantes)
-provient du fait qu'un certain nombre de slugs ne commence pas par '/'
-
-Je lance la requête:
-
-    UPDATE pages SET slug = CONCAT('/', CAST(slug AS CHAR)) WHERE slug NOT LIKE '/%';
-
-et je corrige le script 'populate_slugs.py'.
-
-Aprés une nouvelle exécution de ce script (3100sec.), je constate toujours les erreurs suivantes, normales au vu de la conception
-du script:
-
-* slugs se terminant par '/': 3 (avec des titres comme '.', '..', et '?')
-* slugs null: 6677
-
-Pour le premier point, je corrige le script 'populate_slugs.py'.
-Pour le second, je lance cette fois l'outil d'upgrade typo3, puisqu'il ne reste "que" 6677 lignes.
-
-Sur le BE, onglet Upgrade, j'ouvre l'Upgrade Wizard et je mark as undone
-l'entrée 'Introduce URL parts ("slugs") to all existing pages'
-Puis je lance la commande:
-
-    php7.4 /var/www/typo3/typo3/sysext/core/bin/typo3 upgrade:run pagesSlugs
-
-Cette fois, le process se termine vite.
-Le nombre de pages avec `slug is null` est descendu à 1462.
-Je suppose que c'est le mieux qu'on pourra obtenir...
-
-
-Je fais une passe sur tous les scripts pour déplacer les infos de connexion
-à la DB dans un fichier constants.py; il faudra faire attention avant
-de relancer ces scripts...
-
-Après de nouveaux tests, je constate que le `constants.ts`
-de certains sites n'ont pas été remplis.
-Ex:
-
-![img](images/29.png)
-
-La requête suivante montre que c'est le cas de 1043 sites!
-
-    SELECT t.uid, t.pid, p.title, p.deleted, t.deleted, t.title
-    FROM sys_template t INNER JOIN pages p ON t.pid = p.uid
-    WHERE p.is_siteroot AND (t.constants IS NULL OR t.constants = '');
-
-
-Cela semble correspondre à peu près aux 1030 pages pour
-lesquelles l'id de la structure n'a pas pu être déterminé...
-Après concertation, il semble que ces sites soient majoritairement
-d'anciens clients dont les sites n'ont plus lieu d'être.
-On va les ignorer pour le moment, il faudra trouver une solution
-pour les desactiver, voire pour les supprimer.
-
-
-
-## Tests, bugs et solutions
-
-#### Contenus mal positionnés
-
-> https://preprod.opentalent.fr/cmfrgl/pole-documentaire/lettre-dinformation
-
-Analyse
-
-Il s'agissait d'une page avec le template theme_gallery__page,
-mais qui n'avait du contenu que dans la colonne centrale.
-Le contenu est sur deux colonnes (0 et 2, donc centre et droite)
-
-Pour une raison inconnue, l'update de la table tt_content n'a pas déplacé le contenu
-de la colonne 0 à la colonne 1, alors que le template de la page est bien 3Col.
-De même, la colonne 2 a été ramené en position 0...
-
-Solution envisagée
-
-1. Reinitialiser le champs colPos des pages qui avaient anciennement les templates
-   'theme_gallery__page' et 'theme_gallery__default' pour reprendre leur ancienne valeur.
-2. Repositionner le contenu de ces pages
-3. Mettre à jour les pages ayant le template '3Col' pour les pages filles aient le template '1Col'
-
-Avec la requête:
-
-    SELECT count(c.uid)
-    FROM typo3.tt_content c 
-    INNER JOIN typo3.pages p ON c.pid = p.uid
-    INNER JOIN openassos.pages o ON p.uid = o.uid
-    WHERE o.backend_layout IN ('theme_gallery__page', 'theme_gallery__default');
-
-On constate que dans l'état actuel, 20536 pages sont concernées.
-Seules 236 ont du contenu dans une autre colonne que la colonne 0 (colonne centrale)
-Seules 14911 ont le nouveau template fluid 'OpenTalent.OtTemplating->3Col'
-
-On va d'abord remettre le champs colPos de toutes les lignes à leur valeur initiale:
-
-    UPDATE typo3.tt_content t 
-    INNER JOIN openassos.tt_content o ON t.uid = o.uid
-    SET t.colPos = o.colPos;
-
-Nous avons désormais 2574 contenus dont la colonne est différente de 0.
-
-On va ensuite appliquer le template 'OpenTalent.OtTemplating->3Col' à toutes les pages ayant
-le backend_layout égal à 'theme_gallery__page' ou 'theme_gallery__default':
-
-    UPDATE typo3.pages p INNER JOIN openassos.pages o ON p.uid = o.uid
-    SET p.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->3Col'
-    WHERE o.backend_layout IN ('theme_gallery__page', 'theme_gallery__default');
-
-On va ensuite repositionner les contenus: la colonne 1 devient 0 et vice-versa.
-
-* Colonne de gauche (1) passe à 100 temporairement:
-
-  UPDATE typo3.tt_content c INNER JOIN typo3.pages p ON c.pid = p.uid
-  SET c.colPos = 100
-  WHERE p.tx_fed_page_controller_action IN ('OpenTalent.OtTemplating->3Col',
-  'OpenTalent.OtTemplating->home')
-  AND c.colPos = 1;
-
-* Colonne centrale (0) devient 1:
-
-  UPDATE typo3.tt_content c INNER JOIN typo3.pages p ON c.pid = p.uid
-  SET c.colPos = 1
-  WHERE p.tx_fed_page_controller_action IN ('OpenTalent.OtTemplating->3Col',
-  'OpenTalent.OtTemplating->home')
-  AND c.colPos = 0;
-
-* Colonne temporaire (100) devient 0:
-
-  UPDATE typo3.tt_content c INNER JOIN typo3.pages p ON c.pid = p.uid
-  SET c.colPos = 0
-  WHERE p.tx_fed_page_controller_action IN ('OpenTalent.OtTemplating->3Col',
-  'OpenTalent.OtTemplating->home')
-  AND c.colPos = 100;
-
-Je me rend sur https://preprod.opentalent.fr/cmfrgl/pole-documentaire/lettre-dinformation
-Le problème est corrigé.
-
-J'en profite pour lancer la requête suivante, afin de corriger le défaut
-qu'avait le script update_templates.py quand il a été lancé la première fois.
-
-    UPDATE typo3.pages
-    SET tx_fed_page_controller_action_sub = 'OpenTalent.OtTemplating->1Col'
-    WHERE tx_fed_page_controller_action ='OpenTalent.OtTemplating->3Col';
-
-
-#### Rendus partiels et orgId non trouvé
-
-> Voir: https://preprod.opentalent.fr/emdt-forterre-val-d-yonne/
-
-On constante d'abord que le site (uid: 93772) n'a aucun enregistrement dans sys_domain.
-
-    select * from typo3.sys_domain where pid = 93772;
-
-En revanche, il avait un enregistrement dans l'ancienne table:
-
-    select * from openassos.sys_domain where pid = 93772;
-
-L'explication tient a priori à la migration: le système de redirection
-a changé, et les redirections qui étaient auparavant dans sys_domain
-sont maintenant dan la table sys_redirect.
-Le champs redirectTo de la table sys_domain est d'ailleurs bien marqué
-comme 'à supprimer' par l'outil d'analyse de la DB.
-
-Le souci, c'est que les pid n'ont pas été repris, et sont tous égaux à 0... Est-ce une erreur?
-
-![img](images/30.png)
-
-J'ignore si c'est normal que les pid ne soient pas remplis,
-mais pour les besoins de l'upgrade, je vais mettre à jour les pid avec la requête suivante:
-
-    UPDATE typo3.sys_redirect t 
-    INNER JOIN openassos.sys_domain o 
-    ON CONCAT('/', o.domainName, '/') = t.source_path
-    SET t.pid = o.pid;
-
-Je vais ensuite faire évoluer la librairie
-`typo3_82.py` pour qu'elle suive ces redirections.
-
-Un nouveau scan montre un nombre d'erreurs largement diminué:
-
-| err | avant | aprés |
-| --- | --- | --- |
-| Aucun sous-domaine trouv\xE9 pour le site dans openassos.sys_domain | 842 | 24 |
-| Contents with no pages | 1906 | 1906 |
-| Le sous domaine de la table openassos.sys_domain ne respecte pas les contraintes de forme | 23 | 206 |
-| Le sous-domaine pr\xE9sent dans la table opentalent.Parameters n'existe pas dans sys_domain | 830 | 10 |
-
-Les nouvelles erreurs 'sous-domaines invalides' sont normales:
-les anciens sous-domaines redirigés et qui ne sont plus valides sont aussi testés.
-Je met à jour le script pour ne plus lever d'erreur s'il s'agit de redirections.
-
-Le nombre d'erreurs de validité des noms de domaine redescend à 23.
-
-Je relance les scripts pour vérifier que la correction a réglé le pbm initial.
-Avant de lancer les scripts, il y a 5021 sites sur 6051
-qui ont le champs tx_opentalent_structure_id renseigné.
-
-Je lance donc dans l'ordre:
-
-* update_struct_ids.py
-* update_templates.py
-
-Nous sommes passé de 5021 à 5841 sites sur 6051
-qui ont le champs tx_opentalent_structure_id renseigné.
-C'est bien mais peut mieux faire. Poursuivre les efforts.
-
-Cela dit, le problème avec https://preprod.opentalent.fr/emdt-forterre-val-d-yonne/ est bien réglé.
-
-
-#### Erreurs lors du scan
-
-Autant achever de corriger ces différentes erreurs, tant que j'y suis.
-
-##### Aucun sous-domaine trouvé pour le site dans openassos.sys_domain
-
-Aprés concertation, on convient de supprimer les sites 'deleted'.
-Je créé un nouveau script `delete-old-sites.py`
-
-Avant de l'exécuter, je vais faire un nouveau dump.
-
-
-**Checkpoint 3**: Je fais un dump de la DB.
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 typo3 > /home/exploitation/typo3_chkpnt3.sql
-
-
-Je lance le nouveau script:
-5 sites sont supprimés, avec 111 pages et leurs contenus:
-
-* 12333 - Union Musicale St Nizier-Curciat
-* 91599 - MAIRIE DE CLERMONT FERRAND
-* 94433 - Support Opentalent
-* 94496 - 2iopenservice.com
-* 96010 - OPÉRA PASSION
-
-Un nouveau scan révèle l'évolution suivante:
-
-| err | avant | aprés |
-| --- | --- | --- |
-| Aucun sous-domaine trouv\xE9 pour le site dans openassos.sys_domain | 24 | 19 |
-| Contents with no pages | 1906 | 1918 |
-| Le sous domaine de la table openassos.sys_domain ne respecte pas les contraintes de forme | 23 | 23 |
-| Le sous-domaine pr\xE9sent dans la table opentalent.Parameters n'existe pas dans sys_domain | 10 | 10 |
-
-Les cinq sites supprimés n'apparaissent plus en erreur, reste 19.
-
-Sur ces 19, un certain nombre sont des organisations supprimées dont les sites n'ont pas été supprimés:
-
-* 'Association Musicale Chalonnaise (uid: 15983)'
-  x "Brass-band 1084 \xB0C (uid: 16009)"
-  x "Ecole de musique Intercom. Loire et C\xF4teaux (uid: 16087)"
-  x 'Orchestre M.J. Harmonie (uid: 16412)'
-  x 'Ecole de Musique TEMPO (uid: 16798)'
-  x "Union Musicale C\xF4te de Lumi\xE8re - L'Aiguillon sur Mer (uid: 17058)"
-  x 'Ecole Municipale de Musique (uid: 17162)'
-  x "Association Musicale Rez\xE9enne Cool Musique (uid: 17331)"
-  x "Echo de Saint S\xE9bastien sur Loire (uid: 17461)"
-  x 'La Gessienne (uid: 18696)'
-
-Je les passe en deleted avec la requête suivante:
-
-    UPDATE typo3.pages SET deleted=1
-    WHERE uid IN (15983, 16009, 16087, 16412, 16798, 17058, 17162, 17331, 17461, 18696);
-
-Je relance le script `delete-old-sites.py`.
-
-D'autres sites en erreur ont plusieurs enregistrement dans sys_redirect,
-hors un seul est pris en compte dans le scan actuel.
-Je vais faire évoluer mon script pour prendre en compter toutes les redirections.
-Je vais aussi retirer le contrôle de validité des sous-domaines qui viennent de sys_redirect.
-
-On en arrive à:
-
-| err | avant | aprés |
-| --- | --- | --- |
-| Aucun sous-domaine trouv\xE9 pour le site dans openassos.sys_domain | 19 | 2 |
-| Contents with no pages | 1918 | 1978 |
-| Le sous domaine de la table openassos.sys_domain ne respecte pas les contraintes de forme | 23 | 13 |
-| Le sous-domaine pr\xE9sent dans la table opentalent.Parameters n'existe pas dans sys_domain | 10 | 2 |
-
-On a donc bien progressé.
-
----------------
-
-En apparté, pour permettre de comparer complètement les sites entre
-la preprod et la prod, je vais essayer de remplacer le répertoire
-`/var/www/typo3/public/fileadmin/user_upload` par un symlink vers
-`/var/www/typo3_82/fileadmin/user_upload`
-
-Visiblement, les seuls fichiers créés par typo3 et susceptibles d'avoir
-changé durant l'upgrade sont `index.html` (vide dans les 2 versions)
-et _temp_.
-
-Je vais donc remplacer user_upload par un symlink, en conservant le
-nouveau répertoire _temp_
-
-    cd /var/www/typo3/public/fileadmin
-    mv user_upload user_upload_test1
-    ln -s /var/www/typo3_82/fileadmin/user_upload ./user_upload
-    mv ./user_upload/_temp_ ./user_upload/_temp__orig
-    cp -R ./user_upload_test1/_temp_ ./user_upload/
-    chown -R exploitation:www-data user_upload
-
-Je teste avec le site https://preprod.opentalent.fr/emtbn/presentation/qui-sommes-nous
-Les images sont bien accessibles, c'est tout bon.
-
----------------
-
-Quant aux erreurs, l'existence de ces deux domaines dans la db opentalent
-qui sont absents de la base typo3 est normale, on peut ignorer:
-
-- fleurdesl
-- emsgc
-
-Pour ce qui est des 13 noms de domaine qui ne respectent pas les contraintes de forme:
-
-- www.cmf-musique.org [pid 12055]
-- www.edmlouhanschateaurenaud.fr [pid 29610]
-- swingparisisorchestra.fr [pid 62908]
-- www.cfbf-rhonealpes.fr [pid 86407]
-- fbf74.com [pid 86540]
-- conservatoire-ciol.fr [pid 90987]
-- abelia.asso.fr [pid 93529]
-- www.2iopenservice.com [pid 94507]
-- www.emtbn.fr [pid 96548]
-- stageyogafrance.fr [pid 127540]
-- cerclevocalameno.com [pid 128778]
-- musique-et-art-ferrette.fr [pid 129962]
-- ecole-musique.cc-dufrontonnais.fr [pid 130513]
-
-Tous ces sites possèdent des alternatives en *.opentalent.fr, ce qui fait que ces erreurs ne sont pas bloquantes.
-
-> **/!\ Il faudra en revanche modifier le scan pour qu'il prenne cette valeur
->       comme nom de domaine dans la conf du site, et qu'il ne l'ignore pas comme on le fait pour l'instant en preprod...
-
-Il ne reste donc que les deux erreurs de scan suivantes:
-
-    "Aucun sous-domaine trouvé pour le site dans openassos.sys_domain":
-    - '2iopenservice.com (uid: 94507)'
-    - 'Opentalent - La plateforme du spectacle vivant (uid: 95142)'
-
-Si j'essaie de visualiser la page 95142, cad à l'adresse
-https://preprod.opentalent.fr/opentalent-la-plateforme-du-spectacle-vivant/
-
-J'obtiens l'erreur suivante:
-
-![img](images/32.png)
-
-Une réference circulaire donc.
-
-Si j'essaie d'éditer la conf du site depuis le backend, j'obtiens une erreur
-de droits sur le répertoire _processed_
-
-J'essaie de supprimer le raccourci 'accueil' qui
-pourrait être responsable de lé référence circulaire et je flush le cache.
-
-L'erreur est effectivement résolue, mais de nouvelles erreurs se produisent,
-liées à l'absence de l'organisation_id.
-
-Je m'arrête là: on décide de conserver ces deux sites en version 8.2,
-car ils seront fusionnés et réécrits en dehors de cette instance de typo3
-dans les mois à venir.
-
-On va donc ignorer ces deux erreurs pour l'instant.
-
-#### Erreurs lors de la mise à jour des constantes et des org_id
-
-Je vais essayer de relancer les script `update_struct_ids.py` et
-`update_constants.py`, en laissant REPLACE_EXISTING à False.
-
-##### Id des structures
-
-Je lance `update_struct_ids.py`.
-
-Bilan:
-
-* 187 ids non trouvés
-* 187 cmsId qui ne correspondent pas.
-
-Comme on pouvait s'y attendre, il s'agit des même structures.
-
-Je vais commencer par contrôler la structure Ecole de musique de Vacheresse [ID: 4976]
-
-    select * from sys_domain where pid=4976;
-
-La même requête dans sys_redirect ne renvoie aucun résultat.
-
-Le nom de domaine est ecoledemusiquedevacheresse.opentalent.fr
-Je cherche le sous-domaine correspondant dans la base opentalent.
-
-La requête suivante ne renvoie effectivement aucun résultat:
-
-    SELECT o.id, o.name, p.subDomain, o.cmsId
-    FROM opentalent.Parameters p 
-    INNER JOIN opentalent.Organization o 
-    ON o.parameters_id=p.id
-    where subDomain='ecoledemusiquedevacheresse' OR
-    cmsId = 4976 OR
-    o.name like '%vacheresse%';
-
-
-Je réessaye avec la structure suivante: 'Groupement des Batteries-Fanfares (uid: 5259)'
-Nom de domaine: batteriesfanfares-ain.opentalent.fr
-Aucun résultat non plus.
-
-Et enfin, même résultat pour 'Strasbourg  (uid: 22239)'
-
-Il s'avère qu'un certain nombre de ces structures (peut-être toutes) ont été supprimées.
-
-Michel m'a fourni une liste de ces organisatiuons deleted (cf. deleted_structures.csv)
-
-Je vais compléter le script delete_old_sites.py pour qu'il supprime ces sites, leurs pages, contenus, et sys_domain.
-
-Je lance lescript une première fois en mode simulation, ce qui donne:
-
-183 sites deleted
-3603 pages deleted
-2539 contents deleted
-
-Les nombres semblent cohérents, car les sites ont généralement 20 pages.
-
-Je relance le script sans le mode SIMULATE.
-
-Enfin, je relance le script `update_struct_ids.py`
-
-Il ne reste plus que 4 erreurs:
-
-- 'Opentalent - La plateforme du spectacle vivant (uid: 1)'
-- 'Support Opentalent (uid: 94464)'
-- '2iopenservice.com (uid: 94507)'
-- 'Opentalent - La plateforme du spectacle vivant (uid: 95142)'
-
-Ce sont des erreurs normales, tout va bien.
-
-#### Couleurs des thèmes
-
-Certains sites avaient choisi une autre couleur pour leur site, via l'onglet de l'extension theme_gallery.
-Je vais essayer de retrouver quels sites et quelles couleurs sont concernés.
-
-Exemple: https://emtbn.opentalent.fr/
-Uid: 96548
-
-En affichant la ligne correspondant à cette page:
-
-    SELECT * FROM openassos.pages where uid=96548;
-
-On trouve les champs suivants:
-
-backend_layout = 'theme_gallery__home'
-tx_theme_gallery_theme_name = 'BlueSky'
-tx_theme_gallery_theme_style = 'color1=#dd453f
-color2=#3fd7dd
-color3=#3f87dd
-color4=#453fdd
-color5=#d7dd3f
-'
-
-Je vais tacher de trouver les différents jeux de couleurs utilisés.
-
-    SELECT count(uid), tx_theme_gallery_theme_name, tx_theme_gallery_theme_style 
-    FROM openassos.pages
-    GROUP BY tx_theme_gallery_theme_name, tx_theme_gallery_theme_style;
-
-J'obtiens les résultats suivants:
-
-* 59895 sites sans couleurs personnalisées
-* 53 sites, tous avec des couleurs différentes (sauf 4 qui partagent les même couleurs)
-
-Je vais les identifier avec la requête suivante:
-
-    SELECT p.uid, d.domainName, p.tx_theme_gallery_theme_style 
-    FROM openassos.pages p INNER JOIN sys_domain d ON p.uid = d.pid
-    WHERE p.is_siteroot=1 AND length(p.tx_theme_gallery_theme_style) > 0
-    ORDER BY p.uid; 
-
-> attention, certains sites ont plusieurs domaines...
-
-La gestion de ces cas va être compliquée... Dans l'idéal, il va faudrait créer autant de thèmes,
-mais ce n'est bien sûr pas envisageable.
-
-La liste complète est dans le fichier customized_templates.csv
-
-Je vais créer un script 'summarize_custom_themes.py' pour créer une représentation visuelle de
-ces thèmes custom.
-
-Le résultat est présenté dans le fichier theme_colors.html
-
-On décide de rassembler ces couleurs en 5 ou 6 thèmes.
-Je fais la correspondance dans le fichier new_theme_colors.html
-
-Je dégage 8 thèmes de couleur:
-
-* grey  #8c8c8c
-* orange  #e4611b
-* light-red  #dd453f
-* red  #df0009
-* light-blue  #0aa5ec
-* blue  #3259d7
-* purple  #a5377e
-* green  #04a04c
-
-Je constate au passage que la couleur du thème du site
-https://ecole-musique-blou-brain-varennes-vivy-longue.opentalent.fr/
-ne correspond plus aux couleurs listées dans la base...
-Une vérification sur les DB de prod-front et preprod
-montre que la couleur a été changée depuis que la base a été clônée.
-
-Au moment de la migration, il faudra sans doute traiter manuellement les cas où le thème a été modifié.
-
-
-En attendant, je vais faire la correspondance manuellement et mettre à jour les sites
-en question avec un nouveau script `update_theme_colors.py`
-
-Je garde la trace de ces correspondances dans le fichier `theme_colors_mapping.yaml`
-
-La configuration des sites par flu est stockée dans les champs `tx_fed_page_flexform`
-et `tx_fed_page_flexform_sub` , exemple:
-
-    <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
-    <T3FlexForms>
-        <data>
-            <sheet index="options">
-                <language index="lDEF">
-                    <field index="settings.themeColor">
-                        <value index="vDEF">green</value>
-                    </field>
-                    <field index="settings.displayCarousel">
-                        <value index="vDEF">1</value>
-                    </field>
-                    <field index="settings.staticDonors">
-                        <value index="vDEF">0</value>
-                    </field>
-                    <field index="settings.eventsLimit">
-                        <value index="vDEF">5</value>
-                    </field>
-                    <field index="settings.eventsPeriod">
-                        <value index="vDEF">8</value>
-                    </field>
-                </language>
-            </sheet>
-        </data>
-    </T3FlexForms>
-
-Le script va mettre à jour les 53 sites concernés en remplaçant la ligne:
-
-    <value index="vDEF">green</value>
-
-Par le nom du thème correspondant.
-
-Je lance le script, qui s'exécute en quelques secondes.
-Je créé aussi les thèmes correspondants dans ot_templating.
-
-Pour commencer, la requête suivante:
-
-    SELECT COUNT(uid), tx_fed_page_flexform, tx_fed_page_flexform_sub 
-    FROM typo3.pages
-    GROUP BY tx_fed_page_flexform, tx_fed_page_flexform_sub;
-
-semble donner des résultats cohérents.
-
-Je vais maintenant tester les thèmes avec les sites suivants:
-
-| Thème | Site | URL |
-| --- | --- | --- |
-| grey | harmonieduranceluberon.opentalent.fr [64847] | preprod.opentalent.fr/harmonieduranceluberon |
-| orange | guise-art-musical.opentalent.fr [36092] | preprod.opentalent.fr/guise-art-musical |
-| light-red | www.emtbn.fr [96548] | preprod.opentalent.fr/emtbn |
-| red | cmfvendee.opentalent.fr [23933] | preprod.opentalent.fr/cmfvendee |
-| purple | cerclevocalameno.opentalent.fr [128778] | preprod.opentalent.fr/cerclevocalameno |
-| light-blue | cmf.opentalent.fr [12055] | preprod.opentalent.fr/cmf |
-| blue | cmm.opentalent.fr [18956] | preprod.opentalent.fr/cmm |
-| green | union-musicale-suippes.opentalent.fr [7630] | preprod.opentalent.fr/union-musicale-suippes |
-
-> A noter que je teste à la fois la page d'accueil et une sous-page à chaque fois
-
-Tout a l'air ok.
-
-
-
-#### Paramétrage et extensions
-
-##### Nouvelles extensions
-
-Je vais installer 2 nouvelles extensions:
-
-* https://extensions.typo3.org/extension/image_autoresize
-* https://extensions.typo3.org/extension/bp_pagetree
-
-J'exécute donc:
-
-    cd /var/www/typo3/
-    php7.4 composer.phar req causal/image_autoresize
-    php7.4 composer.phar req bueroparallel/bp-pagetree
-
-Je retourne dans le BE, onglet extensions, et je constate que les
-extensions sont bien installées et activées.
-
-Côté BE, l'affichage de l'arbre ne semble guère accéléré, malheureusement.
-
-Côté FE en revanche, la taille de la page d'accueil de https://preprod.opentalent.fr/ohcluses
-est passée de 20Mo à 6.88MB.
-
-##### Langue du BE
-
-Pour passer la langue du backend en français, j'ouvre l'onglet 'Maintenance', bouton
-'Manage Language Packs', et je clique sur 'update all'.
-
-
-
-#### Corrections diverses en base
-
-##### backend_layout
-
-On a plus besoin des 16 layouts définis dans la table backend_layout.
-
-J'exécute donc la requête:
-
-    DELETE FROM backend_layout;
-
-##### sys_redirect
-
-On a constaté une erreur dans la manière dont la table sys_redirect a été remplie
-par typo3.
-
-En effet, le champs rempli est `source_path`, qui est sensé contenir des
-chemins relatifs à une url, alors que ce devrait être le champs `source_host`...
-
-Pour voir:
-
-    SELECT uid, pid, source_path, source_host, target FROM typo3.sys_redirect;
-
-J'exécute la requête suivante:
-
-    UPDATE sys_redirect
-    SET source_host = REGEXP_REPLACE(source_path, "\/(.+)\/", '\\1');
-
-Puis:
-
-    UPDATE sys_redirect SET source_path = '';
-
-
-#### Corrections suite aux tests
-
-En corrigeant les erreurs au niveau des plugins, je constate et corrige un certain nombre de pbm.
-
-##### Guzzle n'est pas installé
-
-Je lance:
-
-    php7.4 composer.phar require guzzlehttp/guzzle:^6
-
-
-
-##### Une image est manquante
-
-L'image `/fileadmin/_migrated/RTE/RTEmagicC_Logo_artist_w200_02.png` manque sur la page d'accueil
-de https://preprod.opentalent.fr/artist-premium
-
-Je n'ai pas récupéré ce dossier d'images...
-De plus, l'image n'est pas référencée dans la table sys_file.
-
-Je constate qu'elle est insérée manuellement dans le contenu, sous la forme d'une balise <img>
-
-La requête suivante révèle que 1380 lignes de tt_content sont concernées.
-
-Je reviendrai sur le sujet des fichiers dans un second temps.
-
-##### Le site 'Opentalent artist Premium' a un network du nom de 'OUT_OF_NET'
-
-Le site 'Opentalent artist Premium' a un network affiché du nom de 'OUT_OF_NET'
-dont le logo est None et l'url est None
-
-En effet, la requête suivante:
-
-    SELECT DISTINCT n.name, n.logo, n.url 
-    FROM opentalent.Network n
-    INNER JOIN 
-        (opentalent.NetworkOrganization l
-        INNER JOIN opentalent.Organization o
-        ON l.organization_id = o.id)
-    ON l.network_id = n.id
-    WHERE l.endDate is NULL;
-
-Révèle que 4 des 5 réseaux n'ont ni logo ni url.
-
-Je corrige le script `update_constants.py`
-
-Je le relance.
-
-##### Erreur FLUID due à un contenu
-
-Lorsque qu'on essaie d'accéder à la page https://preprod.opentalent.fr/harmonieraismes/,
-une erreur se produit:
-
-![img](images/33.png)
-
-La désactivation du contenu suivant règle le problème.
-
-![img](images/34.png)
-
-Il faudrait pouvoir identifier d'autres sites présentant des problèmes de ce genre,
-ce sera le rôle du script behat.
-
-La requête suivante:
-
-    SELECT * FROM tt_content WHERE pid=80747 AND deleted=0;
-
-nous apprend que le contenu a un CType 'list'.
-Je poserai la question à Yohann Cerdan.
-
-##### Sorting du raccourci 'Accueil'
-
-La page Accueil apparait à la fin du menu.
-
-La requête suivante montre effectivement que le champs 'sorting' la place en fin de liste...
-
-    SELECT uid, pid, title, sorting FROM pages WHERE pid=54493 AND deleted=0;
-
-Et la requête suivante nous montre que la majorité des pages ont pour sorting 256,
-ce qui aurait dû être corrigé plus tôt. En revenant sur mes notes,
-je constate que j'ai bien modifié le script python, mais que je n'ai pas corrigé les lignes déjà
-renseignées.
-
-J'exécute donc la requête:
-
-    UPDATE pages SET sorting=0 WHERE dokType=4 AND title='Accueil';
-
-
-##### Gabarits manquants
-
-Certains sites comme https://preprod.opentalent.fr/orchestresens/ n'ont pas le gabarit
-Contact affecté à la page https://preprod.opentalent.fr/orchestresens/footer/contact  (uid: 54505),
-ni le gabarit Events affecté à
-https://preprod.opentalent.fr/orchestresens/saison-en-cours/les-evenements  (uid: 54502)
-
-Je vais lancer les requêtes correctives suivantes:
-
-    UPDATE pages SET tx_fed_page_controller_action = 'OpenTalent.OtTemplating->events' 
-    WHERE dokType=1 AND title='Les évènements';
-
-    UPDATE pages SET tx_fed_page_controller_action = 'OpenTalent.OtTemplating->contact' 
-    WHERE dokType=1 AND slug='/footer/contact';
-
-Le problème est corrigé pour les deux sites testés.
-
-##### Organization ids
-
-Je constate que le gabarit du site https://preprod.opentalent.fr/yoga-relaxation-et-gym-douce/
-est erroné.
-
-En effet, la valeur du champs constants est:
-
-    plugin.tx_ottemplating {
-        settings {
-            organization {
-                id = None
-                name = YOGA, Relaxation et Gym douce
-                is_network = False
-                email = spectacles@ville-meze.fr
-                logoid = 90273
-                twitter = 
-                facebook = 
-            }
-            ... etc.
-
-Non seulement l'id est None, mais l'email est faux.
-
-Je corrige le script `update_constants.py`, et le relance.
-
-C'est tout bon.
-
-
-
-#### Reprise des fichiers
-
-Je créé un script `fix_files_refs.py` qui devra lister tous les fichiers utilisés, et comparer
-cette liste aux fichiers qui se trouvent dans les répertoires fileadmin et uploads.
-
-Il s'avère qu'une grande majorité des sous-répertoires sont utilisés...
-Le script parait délicat à monter.
-
-Pour être sûr de chercher dans toutes les tables potentiellement concernées, je créé
-un nouveau script `list_tables_with_files` qui va parser le dernier fichier de dump.
-
-Voilà les tables qui ressortent:
-
-* matomo_option
-* pages
-* pages_with_original_pidroot
-* sys_be_shortcuts
-* sys_file
-* sys_filemounts
-* sys_file_collection
-* sys_file_reference
-* sys_file_storage
-* sys_history
-* sys_log
-* sys_registry
-* sys_template
-* tt_content
-* tx_extensionmanager_domain_model_extension
-* tx_news_domain_model_news
-* tx_realurl_pathdata
-* tx_realurl_urldata
-
-Je conserve les tables suivantes:
-
-* pages (dans url)
-* sys_file  (dans identifier)
-* sys_file_reference  (dans link)
-* tt_content  (dans bodytext)
-* tx_news_domain_model_news  (dans bodytext)
-
-Le résultat montre:
-
-    server files 565314
-    db refs 88970
-    matched server files 77864
-    unmatched server files 487450
-    unmatched db refs 11106
-
-Pour le nettoyage, j'y reviendrai.
-
-Pour l'instant, je vais reintégrer les répertoires suivants au moyen de sylinks:
-
-    ln -s /var/www/typo3_82/fileadmin/_migrated /var/www/typo3/public/fileadmin/_migrated
-    ln -s /var/www/typo3_82/fileadmin/stockage /var/www/typo3/public/fileadmin/stockage
-
-Etrangement, l'image attendue n'apparait toujours pas sur la page
-https://preprod.opentalent.fr/ohcluses/nos-precedents-concerts/saison-2012-2013-festival-des-musique-planet-earth-chatillon/planet-earth-6-avril
-
-Pour m'assurer que le changement soit appliqué, je supprime les images dans _processed_: dans
-le BE, onglet maintenance, Remove Temporary Assets, je clique sur delete x processed images.
-
-Je rafraichis la page https://preprod.opentalent.fr/ohcluses/nos-precedents-concerts/saison-2012-2013-festival-des-musique-planet-earth-chatillon/planet-earth-6-avril,
-c'est bon l'image apparait.
-
-Je vérifie aussi les 5 ou 6 autres images signalées comme manquantes.
-
-
-#### Pages Membres du CA et adhérents
-
-Les pages membres du CA et liste des adhérents sont manquantes.
-
-Je vais d'abord mettre à jour ot_widgets pour ajouter ces deux fonctionnalités.
-
-Une fois les deux nouveaux layouts créés, je vais mettre à jour les sites pour
-utiliser ces templates .
-
-Je fais évoluer le script `update_templates.py`, et j'exécute les requêtes suivantes:
-
-    UPDATE pages 
-    SET tx_fed_page_controller_action='OpenTalent.OtTemplating->members',
-    tx_fed_page_controller_action_sub='OpenTalent.OtTemplating->1Col'
-    WHERE slug LIKE '%/liste-simple' OR slug LIKE '%/les-adherents' OR slug LIKE '%/adherents';
-
-    UPDATE pages 
-    SET tx_fed_page_controller_action='OpenTalent.OtTemplating->membersCa',
-    tx_fed_page_controller_action_sub='OpenTalent.OtTemplating->1Col'
-    WHERE slug LIKE '%/les-membres-du-ca';
-
-Apparemment, tout est ok.
-
-#### Corriger les constants.ts
-
-Certains sites n'ont pas l'id de structure renseigné,
-comme https://preprod.opentalent.fr/yoga-relaxation-et-gym-douce/
-
-Je relance le script update_constants.py
-Sans résultat...
-
-Je créé le script list_missing_org_ids.py
-839 sites n'ont pas d'organization's id (!)
-
-Ils semblent correspondre à la liste d'erreurs
-"Aucun sous-domaine trouvé pour le site dans openassos.sys_domain"
-
-Je corrige le scipt, et le relance.
-
-Seulement 11 items retournés par le script list_missing_org_ids.py
-On est ok.
-
-J'en profite pour exécuter la requête suivante:
-
-    UPDATE sys_template t INNER JOIN pages p ON t.pid = p.uid 
-    SET t.sitetitle = t.title
-    WHERE p.is_siteroot = 1;
-
-
-#### Restaurer les contenus de type carroussels
-
-Pour restaurer le mode caroussel sur les contenus de type Images, je modifie
-le TCA.
-Je me rend dans le BE, onglet Maintenance, 'Analyse Database Structure'
-
-Je sélectionne le seul choix dispo:
-
-    ALTER TABLE `tt_content` ADD `tx_opentalent_carousel` SMALLINT UNSIGNED DEFAULT 0 NOT NULL
-
-Apply changes.
-
-En revanche, je n'arrive pas à implémenter la chose côté de l'extension,
-j'y reviendrai avec Yohann Cerdan.
----
-
-Aprés réflexion et analyse de l'existant, je décide de créer un nouveau content pour le carousel.
-
-Une fois ce contenu développé, il me faut convertir les galeries existantes ayant le CType
-`image` et le champs tx_opentalent_carousel à 0 (dans openassos)
-
-Les requêtes
-
-    SELECT count(*) FROM openassos.tt_content 
-    WHERE CType='image' AND tx_opentalent_carousel=1;
-    
-    SELECT count(*) FROM openassos.tt_content 
-    WHERE CType='image' AND tx_opentalent_carousel=1 AND deleted=1;
-
-montrent que 461 contents sont concernés, dont 163 supprimés.
-
-Je créé un script `regen_carousel_contents.py`
-
-Avant de le lancer, je fais un dump de la base:
-
-**Checkpoint 4**: Je commence par faire un dump de la DB.
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 typo3 > /home/exploitation/typo3_chkpnt4.sql
-
-Je lance le script, qui s'exécute en environ 10 minutes.
-
-Le résultat est bon pour les deux carousels à l'adresse
-https://preprod.opentalent.fr/ohcluses/nos-precedents-concerts/saison-2013-2014-pinocchio-films-danimation
-
-En revanche, pas pour
-https://preprod.opentalent.fr/laphilharmoniquedevillelaure/saisons-passees/saison-2013-2014/concert-a-cucuron-22062014
-(uid: 94316)
-
-Je corrige et relance le script.
-Cette fois, je vais stocker l'uid original dans le champs `t3ver_oid`, qui vaut 0 partour.
-
-> **Je devrais réinitialiser cette valeur plus tard.**
-
-Etrangement, les images apparaissent dans le BE, mais pas sur le front?
-
-J'essaie de supprimer les images __processed, de vider le cache, puis de rafraichir la page
-sans résultat
-
-Etrangement, certains caroussels fonctionnent et d'autres non, sans différence apparente...
-
-Ex: https://preprod.opentalent.fr/ohcluses/nos-precedents-concerts/saison-2013-2014-pinocchio-films-danimation
-
-Le 1er carrousel n'affiche rien, le second si.
-
-J'essaie de nouveau de supprimer les images __processed,
-de vider le cache depuis l'onglet maintenance, puis de rafraichir la page.
-Toujours pas...
-
-Je cherche d'éventuelles différences entre le contenu 145943 qui ne fonctionne pas
-et le contenu 145842 qui fonctionne.
-
-En dehors de la valeur width que j'ai moi-même modifié dans pas de différence.
-
-J'exécute à tout hasard la requête suivante:
-
-    UPDATE typo3.tt_content SET t3ver_oid = 0;
-
-Stupeur, c'était ça! Ca fonctionne à la fois sur:
-
-* https://preprod.opentalent.fr/laphilharmoniquedevillelaure/saisons-passees/saison-2013-2014/concert-a-cucuron-22062014
-* et https://preprod.opentalent.fr/ohcluses/nos-precedents-concerts/saison-2013-2014-pinocchio-films-danimation
-
-Il reste quelques petites erreurs de positionnement:
-
-* https://preprod.opentalent.fr/ohcluses/nos-precedents-concerts/saison-2016-2017-starmania-la-clate
-* https://preprod.opentalent.fr/ohcluses/nos-precedents-concerts/saison-2014-2015-rencontre-sallanches-2nd-guerre-mondiale
-
-Les carousels ne sont pas dans la bonne colonne.
-En effet, la colonne 0 et 1 sont inversées maitnenant...
-
-Mais ce pbm n'aura plus lieu dans le futur, lorsque j'aurais inversé la colonne 0 et 1.
-
-
-
-#### Errors with contents of type media
-
-Une erreur se produit avec certains type de contenus, comme à la page:
-https://preprod.opentalent.fr/ohcluses/nos-precedents-concerts/saison-2018-2019-this-is-michael-jackson-the-kid
-
-![img](images/33.png)
-
-Effectivement, la requête suivante montre que le CType est 'media'
-
-    SELECT uid, pid, CType FROM tt_content WHERE uid = 140019;
-
-J'envisage de remplacer l'extension 'media' par l'extension suivante
-https://extensions.typo3.org/extension/youtubevideo/
-
-Non, en fait un nouveau type existe CType='textmedia', le lien est créé sous forme
-de fichier dans user_upload, ex: abcd.youtube
-
-Les requêtes
-
-    SELECT count(*) FROM typo3.tt_content WHERE CType='media';
-    SELECT count(*) FROM typo3.tt_content WHERE CType='media' AND deleted=1;
-
-montrent que 611 contents sont concernés, dont 406 supprimés.
-
-Je créé un script `regen_media_contents.py`
-
-Compliqué. La référence à la vidéo est incorporée dans le champs pi_flexform
-
-Plusieurs cas différents:
-
-* des vidéos ou fichiers audio uploadés dans fileadmin/user_upload
-* des vidéos sous forme d'url vers youtube, dailymotion...Etc
-* des vidéos youtube dans des iframe
-* des fichiers référencés p ar l'uid
-* des vidéos facebook
-* des liens vers google drive (/!\)
-
-Je commence par parser ce champs pour en extraire les références.
-
-Les champs pi_flexform d'une partie des références sont vides ou
-ne contiennent pas de référence (204)
-
-En revanche, certains enregistrements ont ddes références dans sys_file_reference...
-
-On devrait pouvoir avoir une vue d'ensemble avec la requête:
-
-    SELECT c.uid, c.pid, c.CType, c.pi_flexform, c.deleted, r.fieldname, f.identifier
-    FROM typo3.tt_content c 
-      LEFT JOIN sys_file_reference r ON c.uid = r.uid_foreign 
-      LEFT JOIN sys_file f ON r.uid_local = f.uid
-    WHERE c.CType = 'media';
-
-Je constate aussi qu'il existe aussi des contenus de type
-textmedia (320), il faudra en tenir compte.
-
-Je propose de ne pas reprendre:
-
-* les contenus sans références
-* les contenus supprimés
-
-On pourra les traiter au cas par cas en cas de besoin.
-Ce qui laisse 178 contenus medias.
-
-On va traiter ensuite séparément les cas suivants:
-
-1. Contenu de type lien externe, exemple avec uid=104773: `http://www.youtube.com/watch?v=mBtcQXAQhck`
-2. Contenu de type fichier uploadé, ex uid=102172: `fileadmin/user_upload/12097/images/FORMassos/V02 utilisation.qt`
-3. Référence directe à un fichier (?), ex uid=107409:  `file:9682`
-
-Ces formulations sont parfois entourées d'autres caractères,
-comme `file:22973 _top - &quot;Lonely Beach&quot;`
-Mais ça ne concerne qu'un enregistrement parmi les contenus valides
-et non supprimés, **je le corrige manuellement dans MysqlWB**.
-
-Un autre problème: les liens dailymotion ne sont plus supportés (2 enregistrements concernés),
-ainsi que les videos facebook (1 enregistrement) et wetransfer (1 enregistrement).
-On ignore pour l'instant.
-
-Le fichier en .youtube semble ne contenir qu'une chaine aléatoire de 11 caractères?
-ex: `RSQRZdlGYg8`, `109500535`, `ihjdQ9CrLds`
-
-Ah non! c'est l'id youtube qui est stocké, pas l'url complète...
-
-Pour les contenus de type 1, on va procéder ainsi:
-
-1. Créer un fichier `fileadmin/user_upload/[orgId]/[filename].youtube`
-2. Créer un enregistrement dans tt_content avec le type 'textmedia' (pi_flexform reste vide)
-3. Créer un enregistrement dans sys_file
-3. Créer un enregistrement dans sys_file_reference faisant le lien
-
-
-Pour les contenus de type 2, on va procéder ainsi:
-
-1. Vérifier si le fichier existe dans sys_file via le champs `identifier`.
-2. si non: on vérifie si le fichier existe. si non, on passe. si oui, on créé l'enregistrement dans sys_file.
-2. Récupérer l'id dans sys_file
-2. Créer un enregistrement dans tt_content avec le type 'textmedia' (pi_flexform reste vide)
-3. Créer un enregistrement dans sys_file
-3. Créer un enregistrement dans sys_file_reference faisant le lien
-
-Pour les contenus de type 2, on va procéder ainsi:
-
-1. Vérifier si le fichier existe dans sys_file via le champs `uid`. si non: on passe
-2. Créer un enregistrement dans tt_content avec le type 'textmedia' (pi_flexform reste vide)
-3. Créer un enregistrement dans sys_file
-3. Créer un enregistrement dans sys_file_reference faisant le lien
-
-
-Je fais d'abord un dump de la DB:
-
-**Checkpoint 5**:
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 typo3 > /home/exploitation/typo3_chkpnt5.sql
-
-Je lance le script une première fois avec un roolback, pour corriger d'éventuelles erreurs sql.
-Une fois les quelques erreurs de syntaxe corrigées, je lance le script (en croisant les doigts)
-
-Le script met 10 minutes à s'exécuter.
-
-A priori c'est ok.
-
-
-#### Inverser les positions des colonnes 0 et 1
-
-Je commence par corriger les templates 3Col et Home
-
-Puis j'exécute les requêtes suivantes:
-
-    UPDATE typo3.tt_content c INNER JOIN typo3.pages p ON c.pid = p.uid
-    SET c.colPos = 100
-    WHERE c.colPos = 0 
-    AND (p.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->3Col'
-         OR p.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->home');
-    
-    UPDATE typo3.tt_content c INNER JOIN typo3.pages p ON c.pid = p.uid
-    SET c.colPos = 0
-    WHERE c.colPos = 1 
-    AND (p.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->3Col'
-         OR p.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->home');
-         
-    UPDATE typo3.tt_content c INNER JOIN typo3.pages p ON c.pid = p.uid
-    SET c.colPos = 1
-    WHERE c.colPos = 100 
-    AND (p.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->3Col'
-         OR p.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->home');
-
-Je flush le cache via l'onglet maintenance.
-
-Je corrige aussi le positionnement des carousels avec la requête suivante:
-
-    UPDATE typo3.tt_content c INNER JOIN typo3.pages p ON c.pid = p.uid
-    SET c.colPos = 0
-    WHERE c.colPos = 1 AND c.CType = 'ottemplating_carousel';
-
-#### Ajout des templates Structures
-
-Un nouveau template a été ajouté suite aux tests: 'structures adhérentes'
-
-On peut identifier les pages ayant ce template de la façon suivante:
-
-    SELECT * FROM openassos.pages where backend_layout='theme_gallery__members_list_fede'; 
-
-
-> ex: page 9037
-
-Je lance donc la requête suivante:
-
-    UPDATE typo3.pages t INNER JOIN openassos.pages o ON t.uid = o.uid  
-    SET t.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->structures',
-        t.tx_fed_page_controller_action_sub = 'OpenTalent.OtTemplating->1Col',
-        t.backend_layout = 'flux__grid'
-    WHERE o.backend_layout = 'theme_gallery__members_list_fede';
-
-
-#### Ajout des templates Evènements des structures
-
-Un nouveau template a été ajouté suite aux tests: 'Evènements des structures'
-
-On peut identifier les pages ayant ce template de la façon suivante:
-
-    SELECT * FROM openassos.pages where backend_layout='theme_gallery__association_spectacle'; 
-
-> ex: page 5802, 9032
-
-Je lance donc la requête suivante:
-
-    UPDATE typo3.pages t INNER JOIN openassos.pages o ON t.uid = o.uid  
-    SET t.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->structuresEvents',
-        t.tx_fed_page_controller_action_sub = 'OpenTalent.OtTemplating->1Col',
-        t.backend_layout = 'flux__grid'
-    WHERE o.backend_layout = 'theme_gallery__association_spectacle';
-
-La requête se déroule sans erreur, 166 pages mises à jour (le nombre est cohérent rapport au nombre de fédés)
-
-#### Galerie de thèmes
-
-Suite au dévelopement de la galerie de thèmes, quelques changements sont à apporter:
-
-* 2 nouveaux champs dans la table page
-* un changement dans le script update_theme_colors.py
-
-Je corrige le premier à l'aide de l'outil 'Analyse database' du backend
-
-Je met à jour le script, puis je le relance.
-Le script s'exécute en quelques secondes.
-
-Tout a l'air de fonctionner correctement.
-
-
-#### Gabarits non appliqués
-
-Au moins une page devrait avoir le templates Events et ne l'a pas: uid=64856
-
-Je constate que cette page avait ceci de spécial dans l'ancien système:
-
-    backend_layout='theme_gallery__events'
-
-La requête suivante montre que c'est a priori le cas de toutes les pages évènement.
-Je lance la requête corrective suivante:
-
-    UPDATE typo3.pages t INNER JOIN openassos.pages o ON t.uid = o.uid
-      SET t.tx_fed_page_controller_action = 'OpenTalent.OtTemplating->events'       
-      WHERE o.backend_layout='theme_gallery__events';
-
-Le problème est corrigé.
-
-### Noms des champs ajoutés par ot_connect
-
-Pour des raisons de cohérences, je renomme les champs ajoutés par l'extension ot_connect de
-'tx_otconnect_***' en 'tx_opentalent_***'
-
-Je supprime les comptes auto-generes:
-
-    DELETE FROM typo3.be_users WHERE tx_otconnect_opentalentId > 0;
-    DELETE FROM typo3.fe_users WHERE tx_otconnect_opentalentId > 0;
-
-Une fois l'extension mise à jour, je me rend sur le BE:
-
-maintenance > analyse DB
-
-je créé les nouveaux champs (pas de suppr), et je supprime définitivement les champs obsolètes
-
-
-### Fichiers manquants
-
-Les logs font état des erreurs suivantes:
-
-    [ERROR] "newsletters", error: Base path "/var/www/typo3/public/uploads/newsletters/" does not exist or is no directory. 
-    [ERROR] "Ressources Partagées", error: Base path "/var/www/typo3/public/fileadmin/shared_folder/" does not exist or is no directory. 
-    [ERROR] "websites", error: Base path "/var/www/typo3/public/websites/" does not exist or is no directory. 
-
-Bon tant pis, on va reprendre tous ces fichiers, on verra si on peut faire du ménage plus tard.
-
-On va faire des liens symboliques pour l'instant:
-
-    ln -s /var/www/typo3_82/uploads/newsletters/ /var/www/typo3/public/uploads/newsletters
-    ln -s /var/www/typo3_82/fileadmin/shared_folder/ /var/www/typo3/public/fileadmin/shared_folder
-    ln -s /var/www/typo3_82/websites/ /var/www/typo3/public/websites
-
-
-## Nettoyage
-
-Je vais maintenant passer à l'étape de nettoyage de la base.
-
-Je fais d'abord un dump de la DB:
-
-**Checkpoint 6**:
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 typo3 > /home/exploitation/typo3_chkpnt6.sql
-
-Je commence par lancer l'outil d'analyse de base du backend.
-
-![img](images/36.png)
-
-Je ne lance pas tous les correctifs d'un coup, je le lance par bloc dans cet ordre:
-
-1.  Remove tables (rename with prefix)
-
-Des erreurs, certaines de ces tables existent déjà (celles de realurl).
-
-Changement de programme, je fais dans cet ordre:
-
-1. Drop tables (really!)
-2. Remove tables (rename with prefix)
-3. Encore: Drop tables (really!)
-4. Remove unused fields (rename with prefix)
-5. Drop fields (really!)
-
-Tout s'est bien passé.
-
-Je vais maintenant lancer un nettoyage avec
-les outils décrits ici: https://github.com/TYPO3-CMS/lowlevel/blob/master/README.rst
-
-Je lance:
-
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:orphanrecords
-
-Le script dure 30min et se déroule sans pbm.
-
-Le résultat est le suivant:
-
-     ! [NOTE] Found 235 orphan records in table "pages" with following ids: 5024, 5258, 5305, 5399, 5493, 5540, 5587, 5634, 
-        (...)
-     ! [NOTE] Found 47 orphan records in table "sys_file_reference" with following ids: 303, 305, 353, 367, 368, 487, 516,  
-        (...)
-     ! [NOTE] Found 14 orphan records in table "sys_domain" with following ids: 486, 492, 502, 915, 919, 931, 981, 1039,    
-        (...)
-     ! [NOTE] Found 547 orphan records in table "sys_template" with following ids: 2443, 2445, 2446, 2447, 2448, 2449, 2450,
-        (...)
-     ! [NOTE] Found 227 orphan records in table "tt_content" with following ids: 6191, 6538, 6590, 6694, 6798, 6850, 6902,  
-        (...)
-     ! [NOTE] Found 1 orphan records in table "sys_redirect" with following ids: 360  
-        (...)
-
-Je lance ensuite:
-
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:multiplereferencedfiles
-
-Le script me demande si je dois nettoyer le refindex avant, je répond 'yes'
-
-Le script dure (2h40)
-
-
-Je lance:
-
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:deletedrecords
-
-Le script dure environ 1h.
-
-Je lance:
-
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:missingrelations
-
-Le script me demande si je dois nettoyer le refindex avant, je répond 'no'
-
-En cours de script, une erreur se produit:
-
-    In ResourceFactory.php line 383:
-                                          
-      No file found for given UID: 57940  
-
-La doc prévient à propos de possibles erreurs de ce genre, je relance le script.
-La même erreur se produit.
-
-Je relance, cette fois en mettant à jour le refindex.
-
-
-Le script dure longtemps, environ 4h, à voir si nécessaire. Il plante de nouveau sur un pbm de fichier.
-
-
-Je lance:
-
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:flexforms
-
-Le script dure extrêmement longtemps (au moins 6h)
-
-Je laisse et passe au suivant (sans maj de l'index):
-
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:missingfiles
-
-Le script se déroule quasi-instantanément et mentionne 3 "soft-references" à corriger manuellement (?)
-
-     ! [NOTE] Found 3 soft-referenced files that need manual repair.                                                        
-    
-     * uploads/RTEmagicC_logo-cmf.jpg.jpg - 7b915ce3a16c921b1454b1ec297501d1 - tt_content:43694:bodytext::images
-     * uploads/RTEmagicC_logo_ville_de_nyons_04.png.png - 82e922dd190127d1561e506091e8c9c2 - tt_content:18642:bodytext::images
-     * uploads/RTEmagicC_130407_Concert_de_printemps_OHV__58_redim_.JPG.jpg - c868635e44dc72dab003b7547a5ea538 - tt_content:10241:bodytext::images
-
-On y reviendra peut-être.
-
-Je lance
-
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:lostfiles
-
-Le script dure quelques secondes, et supprime 4047 enregistrement correspondant
-à des fichiers introuvables, tous dans les répertoires suivants:
-
-    /var/www/typo3/public/uploads/tx_news/
-    /var/www/typo3/public/uploads/pics/
-    /var/www/typo3/public/uploads/newsletters/
-    /var/www/typo3/public/uploads/media/
-
-Ces suppressions sont peut-être liées à des dossiers non repris,
-on verra au moment de la prochaine migration.
-
-
-
-A terme, on pourra plutôt lancer:
-
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:orphanrecords -vv
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:multiplereferencedfiles -vv --update-refindex
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:deletedrecords -v
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:missingrelations -vv --update-refindex
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:flexforms -vv
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:missingfiles --update-refindex
-    php7.4 /var/www/typo3/public/typo3/sysext/core/bin/typo3 cleanup:lostfiles -vv --update-refindex
-
-> Il serait d'ailleurs intéressant de créer un alias ou un symlink qui pointe vers le binaire typo3
-
-## Centralisation des fichiers
-
-Je cherche une solution pour simplifier la gestion des fichiers uploadés.
-
-Dans l'ancienne install, ils sont répartis dans ces répertoires:
-
-* /var/www/typo3/fileadmin/_migrated
-* /var/www/typo3/fileadmin/_shared_folder
-* /var/www/typo3/fileadmin/stockage
-* /var/www/typo3/fileadmin/user_upload
-* /var/www/typo3/uploads
-* /var/www/typo3/websites
-
-Dans la nouvelle install:
-
-* /var/www/typo3/public/fileadmin/_migrated
-* /var/www/typo3/public/fileadmin/_shared_folder
-* /var/www/typo3/public/fileadmin/stockage
-* /var/www/typo3/public/fileadmin/user_upload
-* /var/www/typo3/public/uploads
-* /var/www/typo3/public/websites
-
-Pour l'instant, une partie de données sont stockées dans le répertoire de l'ancienne install,
-une autre partie dans la nouvelle.
-
-A l'avenir, on déplacera tous ces dossiers dans répertoire `/var/www/typo3_files` et on créera des
-symlinks dans les répertoires de l'install.
-
-## Corrections diverses
-
-Pbm de templates, je lance:
-
-    UPDATE typo3.pages t INNER JOIN openassos.pages o ON t.uid = o.uid
-    SET t.tx_fed_page_controller_action='OpenTalent.OtTemplating->membersCa',
-        t.tx_fed_page_controller_action_sub='OpenTalent.OtTemplating->1Col'
-    WHERE o.backend_layout='theme_gallery__ca_members';
-
-## Performances
-
-On constate des problèmes de performances, avec des pages qui prennent environ 10s pour se charger.
-On va explorer plusieurs pistes pour corriger le pbm.
-
-Je commence par désactiver toute les options de debug de l'instance en preprod, pour être sûrs
-d'être dans des conditions de prod.
-
-Sur le BE, onglet settings:
-
-* Configuration Presets > Live (déjà activé)
-* `[BE][compressionLevel]` > 0 passe à 5
-* `[FE][compressionLevel]` > 0 passe à 5
-* `[SYS][systemLog]` > passe à false
-* `[SYS][systemLogLevel]`  > WARNING passe à ERROR
-
-### Blackfire
-
-J'installe blackfire sur la preprod, en tant que root:
-
-    # Register the packagecloud key
-    wget -q -O - https://packages.blackfire.io/gpg.key | sudo apt-key add -
-    
-    # Add the repository to Debian source list
-    echo "deb http://packages.blackfire.io/debian any main" | sudo tee /etc/apt/sources.list.d/blackfire.list
-
-    # Update the repositories
-    sudo apt update
-    
-    # Install the blackfire-agent package:
-    sudo apt install blackfire-agent
-    
-    # Configure the server agent credentials
-    sudo blackfire-agent --register --server-id=76fe1b18-5287-46db-8cf3-cb3579caa984 --server-token=ac8b209d7dc4c69ffaa81883388c2b7f1856013071eb1a993ec16f15cadc5fbb
-    
-    # Restart the agent service
-    sudo /etc/init.d/blackfire-agent restart
-    
-    # Install the blackfire-php package
-    sudo apt install blackfire-php
-    
-    # restart php-fpm
-    service php7.4-fpm restart
-
-### Bug
-
-A ce niveau le BE a un pbm: le css ne se charge plus...
-
-Je lance:
-
-    touch /var/www/typo3/public/typo3conf/ENABLE_INSTALL_TOOL
-
-J'accède à https://preprod.opentalent.fr/typo3/install.php
-
-Je vide le cache
-
-J'essaie de réaccéder au BE, le pbm persiste.
-Je supprime tous les 'temporary assets', le pbm persiste.
-
-Je redémarre le service php-fpm, en tant que root:
-
-    service php7.4-fpm restart
-
-Dans mon navigateur, je supprime tous les cookies, session storage...Etc.
-
-Je constate alors que c'est la compression du css qui pose pbm, il est reçu encore gzippé!
-
-Aprés les suppressions de cookies et cache, j'arrive sur l'écran de connexion, toujours
-sans le css, avec un message me demandant d'autoriser les cookies...
-
-Dans l'outil d'install, j'ouvre l'outil Directory Status
-Je lance le 'try to fix'
-
-Le BE est toujours HS.
-
-Trouvé!
-Je modifie le fichier .htaccess:
-
-    nano /var/www/typo3/public/.htaccess
-
-Je décommente les lignes suivantes:
-
-    #<FilesMatch "\.js\.gzip$">
-    #       AddType "text/javascript" .gzip
-    #</FilesMatch>
-    #<FilesMatch "\.css\.gzip$">
-    #       AddType "text/css" .gzip
-    #</FilesMatch>
-    #AddEncoding gzip .gzip
-
-J'enregistre, je réessaie d'accéder au BE: c'est bon!
-
-### GtMetrix
-
-Je lance une analyse gtmetrix sur ohcluses/: [rapport.pdf](images/gtmetrix_20200915_no_cache.pdf)
-
-> NOTE: ohcluses est configuré avec l'ancien template (classic)
-
-La page s'est chargée en 4.5s, pour un poids total de 1.18MB, la compression a fait du bon boulot.
-
-Le serveur a mis 3.06s à générer la réponse, ce qu'on essaiera d'améliorer avec blackfire.
-
-Les fichiers '0x60', '1', '365' ont mis entre 800 et 910ms à être chargés depuis api.opentalent.fr!
-Je lance une seconde analyse pour voir l'impact de la mise en cache:
-[rapport2.pdf](images/gtmetrix_20200915_test_2.pdf)
-
-Pas de différence du point de vue de la waterfall.
-
-Je commence par appliquer les recommandations.
-
-#### Defer le JS
-
-Je passe les fichiers JS des deux templates en mode defer.
-
-#### Browser caching
-
-J'ouvre le .htaccess:
-
-    nano /var/www/typo3/public/.htaccess
-
-Le cache est déjà configuré, je ne change rien.
-
-### Serve scaled images
-
-Je corrige la façon dont les images sont insérées pour qu'elles
-soient redimensionnées au niveau du serveur.
-
-Je vais essayer de remplacer toutes les balises <images/> par <f:image/>
-Il est possible que typo3 gère mieux le cache et les redimensionnement de cette façon?
-Pour ce qui est des images extérieures, mystère.
-
-#### Avoid bad requests
-
-j'ajoute un fichier favicon.ico, et je le copie à la racine du site:
-
-    cp /var/opentalent.git/ot_typo3/ot_templating/Resources/Public/Icons/favicon.ico
-
-#### Minify JS and CSS
-
-Je minifie quand c'est possible.
-
-#### Compression
-
-Je suis les conseils écrits dans le .htaccess, et passe la compresison à 9:
-
-Sur le BE, onglet settings:
-
-* `[BE][compressionLevel]` > 5 passe à 9
-* `[FE][compressionLevel]` > 5 passe à 9
-
-### Nouvel essai
-
-Je relance un test après avoir appliqué toutes les corrections.
-
-[rapport3.pdf](images/gtmetrix_20200915_test_3.pdf)
-
-Rien de trés concluant.
-
-Je désactive les contenus externes de la page ohcluses, et je vide le cache:
-
-Trés bien, on est à 97% avec Pagespeed!
-
-[rapport4.pdf](images/gtmetrix_20200915_test_4.pdf)
-
-Je relance une deuxième fois, maintenant que le cache est chargé.
-
-[rapport5.pdf](images/gtmetrix_20200915_test_5.pdf)
-
-Le cache ne change pas grand chose, finalement...
-
-Je lance le test après avoir changé le template pour le nouveau, et vidé le cache.
-
-[rapport6.pdf](images/gtmetrix_20200915_test_6.pdf)
-
-Enfin, je relance avec le carousel d'images:
-
-[rapport7.pdf](images/gtmetrix_20200915_test_7.pdf)
-
-
-Les résultats sont mauvais.
-
-Je procède aux corrections.
-
-#### Carousel
-
-D'abord, les images du carousel sont beaucoup trop lourdes, de l'ordre de 3 à 3.5Mb
-Je rétablit la compression pour le nouveau template.
-
-
-### 404
-
-Je corrige les appels css pour éviter l'import de toute une liste de fichiers inutilisés.
-
-J'exécute:
-
-    cp /var/opentalent/git/ot_typo3/ot_templating/Resources/Public/Icons/favicon.ico /var/www/typo3/public/
-
-### Nouvel essai
-
-Je relance un test après avoir appliqué toutes les corrections.
-
-[rapport3.pdf](images/gtmetrix_20200915_test_8.pdf)
-
-Les choses se sont bien améliorées!
-
-
-
-## Blackfire
-
-Le reste du travail va se faire avec blackfire.
-
-### Resolution des pages
-
-Le premier problème vient de la manière dont la méthode Typo3 résout l'URL:
-
-TYPO3\CMS\Core\Routing\PageRouter\getPagesFromDatabaseForCandidates
-
-en effet, la requête sql filtre la page demandée par son slug, puis itère sur le résultat de la requête
-pour tester si la page est contenue dans le site actuel.
-
-Dans notre cas, il y a plus de 5800 itérations, qui consomment au total	6.29 s!
-
-A première vue, le système de résolution des url change avec la V10,
-la solution la plus indiquée serait donc de migrer vers cette dernière...
-
-
-### Lenteur des appels à l'API
-
-Une autre observation est le temps mis par les requêtes à l'API.
-On y reviendra quand le pbm précédent sera résolu
-
-
-## Rollback
-
-
-
-
-Maintenant que l'upgrade est complète, je vais archiver la nouvelle install et
-essayer de reprendre l'upgrade de zéro.
-
-Je fais d'abord un dump de la DB:
-
-**Checkpoint 7**:
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 typo3 > /home/exploitation/typo3_chkpnt7.sql
-
-
-Je lance les commandes suivantes (en tant que root):
-
-    mkdir /var/www/archives
-    mkdir /var/www/archives/upgrade1
-    mv /var/www/typo3 /var/www/archives/upgrade1/
-    mv /var/www/typo3_95 /var/www/archives/upgrade1/
-    mv /var/www/typo3_82 /var/www/typo3
-    rm -r /var/opentalent/git/ot_typo3
-
-Je modifie le fichier de conf apache:
-
-    nano /etc/apache2/sites-available/001-preprod.opentalent.fr.conf
-    nano /etc/apache2/sites-available/001-preprod.opentalent.fr-le-ssl.conf
-
-Dans ces deux fichiers, remplacer:
-
-    DocumentRoot /var/www/typo3/public
-
-Par:
-
-    DocumentRoot /var/www/typo3
-
-Enfin, je supprime la base typo3:
-
-    DROP DATABASE typo3;
-
-Supprimer le user typo3
-
-Je synchronise les bases openassos (en tant que root):
-
-    python3 /var/opentalent/git/clonedb/clonedb.py -y openassos
-
-Je lance (en tant que root):
-
-    service apache2 reload
-
-
-J'essaie de me rendre à l'adresse: https://preprod.opentalent.fr/typo3/
-Le BE s'affiche correctement.
-
-Je me rends à: https://ohcluses.opentalent.fr/index.php?id=499
-
-La page s'affiche correctement.
-
-Je considère le rollback comme réussi.
-
-
-## Upgrade
-
-> Tony fait un snapshot: preprod@olivier.2020-09-16
-
-
-J'essaie de lancer la procédure d'upgrade comme décrit dans UPGRADE_GUIDE.md
-
-Je démarre à mercredi 15:35
-
-Une erreur s'est produite. Je rejoue le rollback, et je recommence.
-
-Je relance l'upgrade à jeudi 09:15
-
-Une erreur s'est produite. Je rejoue le rollback, et je recommence.
-
-Je relance l'upgrade à jeudi 11:15
-
-Au cours de ces deux derniers essais, je me retrouve bloqué au moment d'afficher l'upgrade wizard.
-De la même façon, la commande:
-
-    php7.4 -d memory_limit=-1 /var/www/typo3/typo3/sysext/core/bin/typo3 upgrade:list
-
-Tourne "à vide", et n'affiche rien...
-
-J'essaie à tout hasard de lancer:
-
-    php7.4 -d memory_limit=-1 /var/www/typo3/typo3/sysext/core/bin/typo3 cleanup:orphanrecords
-
-Le script tourne en moins de 1h30, mais sans effet sur le upgrade wizard.
-
-Tant pis, j'essaie un (13:40):
-
-    php7.4 -d memory_limit=-1 /var/www/typo3/typo3/sysext/core/bin/typo3 referenceindex:update
-
-Le pbm venait de l'upgrade des forms.yaml, qui scannait tous les répertoires uploads et user_upload.
-Corrigé, je relance une upgrade.
-
-Tony restaure le snapshot preprod@olivier.2020-09-16
-
-Je relance l'upgrade jeudi à 16:30
-
-Encore un souci.
-
-Je relance vendredi 15:10
-
-Terminée le lundi suivant à 16:00, pour un total de 360min , soit 6h
-
-
-## Bilan
-
-Les choses se sont bien passées, reste quelques erreurs.
-
-### Images manquantes
-
-Les images uploadées manquent. Première hypothèse: les symlinks vers /var/www/typo3_files.
-
-Effectivement, les liens vers les dossiers dans fileadmin sont absents!
-
-Je vais revoir la procédure, et abandonner cette idée de symlinks.
-
-
-Je rapatrie ces répertoires:
-
-    mv /var/www/typo3_files/fileadmin/_migrated /var/www/typo3/public/fileadmin/
-    mv /var/www/typo3_files/fileadmin/shared_folder /var/www/typo3/public/fileadmin/
-    mv /var/www/typo3_files/fileadmin/stockage /var/www/typo3/public/fileadmin/
-    rm -r /var/www/typo3/public/fileadmin/user_upload
-    mv /var/www/typo3_files/fileadmin/user_upload /var/www/typo3/public/fileadmin/
-    rm /var/www/typo3/public/uploads
-    mv /var/www/typo3_files/uploads /var/www/typo3/public/
-    rm /var/www/typo3/public/websites
-    mv /var/www/typo3_files/websites /var/www/typo3/public/
-
-Je relance le script `10_regen_media_contents.py`
-
-Le problème des images est presque résolu.
-
-Je remarque encore quelques images manquantes, par exemple à la page:
-https://preprod.opentalent.fr/conservatoirethouarsais/
-
-L'image /fileadmin/user_upload/72843/images/fichiers/Visuel_couverture_agenda_19.png manque par ex.
-
-Je pense que c'est dû au fait que les répertoires fileadmin et uploads n'ont pas été synchronisés
-depuis un certain temps.
-
-
-### Formulaire de contact
-
-L'implémentation des formulaires de contact est defectueuse.
-
-Je vais créer un site nommé 'DO_NOT_DELETE',
-qui contiendra une page nommée 'contact', qui elle même contiendra
-un formulaire de contact.
-
-C'est ce contenu que je référencerai dans le plugin.
-
-
-### Formulaires
-
-Les formulaires n'ont pas été renommés correctement en raison du bug avec l'upgrade
-wizard.
-
-Ils sont en doublons, c'est un peu le bazar.
-Je laisse pour l'instant, mais à la prochaine upgrade, il faudra lancer manuellement
-l'opération de renommage.
-
-
-
-
-## Upgrade 10
-
-Enfin, on va procéder à l'upgrade finale, vers la v10.
-
-Je fais un dump de la DB
-
-**Checkpoint 8**:
-
-    mysqldump --single-transaction -u root --password=mysql2iopenservice369566 typo3 > /home/exploitation/typo3_chkpnt8.sql
-
-### Upgrade
-
-
-Je fais une svg du répertoire actuel:
-
-    mkdir /var/www/typo3_95c
-    cp -p /var/www/typo3/composer.json /var/www/typo3_95c/
-    cp -p /var/www/typo3/composer.lock /var/www/typo3_95c/
-    cp -p /var/www/typo3/composer.phar /var/www/typo3_95c/
-    cp -rp /var/www/typo3/config /var/www/typo3_95c/
-    cp -rp /var/www/typo3/var /var/www/typo3_95c/
-    cp -rp /var/www/typo3/vendor /var/www/typo3_95c/
-    mkdir /var/www/typo3_95c/public
-    cp -p /var/www/typo3/public/.htaccess /var/www/typo3_95c/public/
-    cp -p /var/www/typo3/public/index.php /var/www/typo3_95c/public/
-    cp -rp /var/www/typo3/public/typo3 /var/www/typo3_95c/public/
-    cp -rp /var/www/typo3/public/typo3conf /var/www/typo3_95c/public/
-    mkdir /var/www/typo3_95c/public/fileadmin
-    mkdir /var/www/typo3_95c/public/typo3temp
-
-Je lance (!! en tant que exploitation):
-
-    cd /var/www/typo3
-    php7.4 composer.phar require typo3/cms-backend:^9.5 typo3/cms-core:^9.5 \
-     typo3/cms-extbase:^9.5 typo3/cms-extensionmanager:^9.5 \
-     typo3/cms-filelist:^9.5 typo3/cms-fluid:^9.5 typo3/cms-frontend:^9.5 \
-     typo3/cms-install:^9.5 typo3/cms-recordlist:^9.5 \
-     causal/image_autoresize:^2.0 helhum/typo3-console:^5.7 \
-     georgringer/news:^8.4 fluidtypo3/vhs:6.0 fluidtypo3/flux:^9.4 \
-     --update-with-dependencies
-
-    php7.4 composer.phar remove bueroparallel/bp-pagetree
-    php7.4 composer.phar require "typo3/cms-about:^10.4" "typo3/cms-adminpanel:^10.4" \
-        "typo3/cms-backend:^10.4" "typo3/cms-belog:^10.4" "typo3/cms-beuser:^10.4" \
-        "typo3/cms-core:^10.4" "typo3/cms-dashboard:^10.4" "typo3/cms-extbase:^10.4" \
-        "typo3/cms-extensionmanager:^10.4" "typo3/cms-felogin:^10.4" "typo3/cms-filelist:^10.4" \
-        "typo3/cms-filemetadata:^10.4" "typo3/cms-fluid:^10.4" "typo3/cms-fluid-styled-content:^10.4" \
-        "typo3/cms-form:^10.4" "typo3/cms-frontend:^10.4" "typo3/cms-info:^10.4" \
-        "typo3/cms-install:^10.4" "typo3/cms-linkvalidator:^10.4" "typo3/cms-lowlevel:^10.4" \
-        "typo3/cms-recordlist:^10.4" "typo3/cms-recycler:^10.4" "typo3/cms-redirects:^10.4" \
-        "typo3/cms-reports:^10.4" "typo3/cms-rte-ckeditor:^10.4" "typo3/cms-scheduler:^10.4" \
-        "typo3/cms-seo:^10.4" "typo3/cms-setup:^10.4" "typo3/cms-t3editor:^10.4" "typo3/cms-tstemplate:^10.4" \
-        "typo3/cms-viewpage:^10.4" "helhum/typo3-console:^6.3"
-
-
-    php7.4 composer.phar dumpautoload
-    touch /var/www/typo3/public/typo3conf/ENABLE_INSTALL_TOOL
-
-En tant que root:
-
-    chown -R exploitation:www-data .    
-
-
-Je me rend à https://preprod.opentalent.fr/typo3/install.php
-On est bien en v10.4.8, super.
-
-J'ouvre l'outil d'analyse de la DB, et je créé les tables et champs demandés.
-Je vide le cache, puis je lance l'upgrade wizard:
-
-L'outil me suggère les correctifs suivants:
-
-1. Install extension "rsaauth" from TER if the site is still not secured using HTTPS
-2. Install outdated extension "feedit" from TER if editors used this extension in earlier core versions
-3. Install extension "taskcenter" from TER
-4. Install extension "sys_action" from TER
-5. Execute database migrations on single rows
-6. Migrate felogin plugins to use prefixed flexform keys
-
-Je procède ainsi:
-
-1. No, do not execute > perform
-2. No, do not execute > perform
-3. No, do not execute > perform
-4. No, do not execute > perform
-5. Perform
-5. Perform > Failed! (j'y reviendrai)
-
-
-Je vérifie l'outil Directory status, c'est tout bon.
-Je vérifie les extensions broken, tout bon.
-Je scanne les extensions pour les deprecated: ouhla, c'est tout rouge partout. On y reviendra.
-
-Je reset le BE User
-Je maj les languages packs
-
-Je lance l'outil "remove temporary assets"
-Je vire les assets uniquement.
-J'ai une erreur pour assets/__processed__, tout va bien pour les autres.
-Je les supprime manuellement:
-
-    rm -r /var/www/typo3/public/typo3temp/assets/_processed_/*
-
-Je me rend sur le BE.
-
-Tout a l'air de s'être bien passé.
-J'ouvre: https://preprod.opentalent.fr/ohcluses/
-
-
-### Tests et corrections
-
-J'ai une erreur avec le viewhelper FalViewHelper de VHS:
-
-![img](images/38.png)
-
-Ce VH est utilisé pour le carousel.
-
-Je met à jour VHS, qui n'est qu'en 6.0.0 (la dernière est la 6.0.3)
-Finalement, j'irais jusqu'à la version dev:
-
-    php7.4 composer.phar require fluidtypo3/vhs:dev-development
-
-
-NB: il est possible qu'il faille ajouter cette section au composer.json, à vérifier
-
-    "repositories": [
-        {
-          "type": "composer",
-          "url": "https://composer.typo3.org"
-        },
-        {
-          "type": "vcs",
-          "url": "https://github.com/FluidTYPO3/vhs"
-        }
-      ]
-
-
-J'ai maintenant cette erreur:
-
-![img](images/39.png)
-
-Cela correspond à l'issue et à la pull request suivante: https://github.com/FluidTYPO3/vhs/pull/1676/files
-
-J'applique les changements manuellement en attendant aux fichiers:
-
-* Classes/Service/AssetService.php
-* Classes/ViewHelpers/Iterator/ExtractViewHelper.php
-
-Ca fonctionne en local!
-
-J'envoie les 2 fichiers en question sur la preprod avec filezilla, et je les range ici:
-
-    /home/exploitation/patch_vhs_6.0.3/...
-
-Je patche l'instrall actuelle avec les commandes:
-
-    cp /home/exploitation/patch_vhs_6.0.3/Service/AssetService.php /var/www/typo3/public/typo3conf/ext/vhs/Classes/Service/AssetService.php
-    cp /home/exploitation/patch_vhs_6.0.3/ViewHelpers/Iterator/ExtractViewHelper.php /var/www/typo3/public/typo3conf/ext/vhs/Classes/ViewHelpers/Iterator/ExtractViewHelper.php
-
-J'arrive à afficher la page, mais le pbm de perfs reste.
-
-Je pense qu'il vaut mieux éviter d'aller jusqu'à la v10 pour l'instant...
-
-
-## Correction du pbm de perfs
-
-Je modifie en local les fichiers:
-
-    /var/www/typo3/public/typo3/sysext/core/Classes/Routing/PageSlugCandidateProvider.php
-    /var/www/typo3/public/typo3/sysext/core/Classes/Domain/Repository/PageRepository.php
-
-/!\ Ce correctif n'est valable que pour la v10.4.8
-
-Je vérifie le résultat, en envoyant ce correctif avec filezilla sur le serveur.
-
-Je lance:
-
-    cp /home/exploitation/patch_typo3core_10.4.8/Routing/PageSlugCandidateProvider.php /var/www/typo3/public/typo3/sysext/core/Classes/Routing/
-    cp /home/exploitation/patch_typo3core_10.4.8/Domain/Repository/PageRepository.php /var/www/typo3/public/typo3/sysext/core/Classes/Domain/Repository/
-
-Ca fonctionne. Je reproduirai ce patch pour la v9.5.
-
-
-## Retour à l'upgrade v9
-
-Je vais procéder de nouveau à l'upgrade vers la v9.
-
-Tony vient de restaurer le snapshot.
-Je joue le rollback, me voilà revenu à la version 8.7.
-
-Je vais essayer de monter un script plus efficace.
-Il va s'articuler autour des étapes suivantes:
-
-1. Contrôle les prérequis: version de php, user exploit dans le groupe www-data, présence du rep typo3...etc
-2. Créé la nouvelle DB et le nouveau db_user si besoin
-3. Lancer les correctifs en base
-4. Opérations sur les répertoires
-5. Lancer les préparatifs à d'upgrade via la console (broken ext, cache, tempfiles...etc.)
-6. CHK - vérifier l'existence de la db, la version de la nouvelle instance
-7. Lancer les scripts d'upgrade Typo3 via la console
-8. Lancer le script python post-upgrade
-9. Faire les modifications fichier pour la passage vers composer
-10. Lancer le script python post-upgrade
-11. Derniers correctifs: droits des be_users, flush cache...Etc.
-12. CHK - Verifier le passage vers composer
-13. Lancement du grand nettoyage
-
-
-A chaque étape, le script devra informer et s'auto-contrôler.
-Il devra aussi garder une trace des étapes déjà accomplies, en cas d'erreur
-et s'il faut le relancer plusieurs fois.
-Enfin, chaque étape doit être transactionnelle,
-donc pouvoir être relancée autant de fois qu'on veut sans risque de conflit.
-
-
-
-
-
-
-
-
-
-TODO: reprendre la moulinette de création d'organisation
-TODO: voir ce que fait la setting `[BE][cookieSameSite]`, `[FE][cookieSameSite]`, `[SYS][cookieSecure]`?
-TODO: préparer la liste des tests a effectuer pour la recette en prod
-TODO: remettre au propre les images (non reprises, non utilisées...Etc.)
-TODO: nettoyage du repertoire uploads
-TODO: recherche d'erreurs et correction dans la DB:
-* cmsId erronés
-* org_id manquants
-* pages sans contenu (hors events)
-* presence des pages events, contact, footer...
-
-TODO: faire un script avec behat ou en python pour tester tous les sites
-
-
-Notes de michel:
-
-    Je viens de regarder uploads/manual, il ne faut pas reprendre
-    idem uploads/openassos
-    pour uploads/newsletter faut reprendre tel quel et faudra demander aux commerciaux de faire le ménage
-    idem /uploads/opentalent faut pas reprendre
-    idem /uploads/template_emails faut pas reprendre
-    idem /uploads/tf faut pas reprendre
-
-
-## Déploiement en prod
-
-### Prévisions des corrections avant de démarrer
-
-Les corrections suivantes doivent être apportées au serveur prod-front avant de procéder à l'upgrade.
-
-Changer le user php-fpm et apache2 pour mettre 'exploitation' à la place de 'www-data', et faire un:
-
-    chown -R exploitation:www-data /var/www/typo3
-
-Corriger le fichier php.ini pour régler la timezone sur Europe / Paris
-
-    [Date]
-    ; Defines the default timezone used by the date functions
-    ; http://php.net/date.timezone
-    ;date.timezone =
-
-Tony fera un upgrade mariadb 10.3 sur prod-back avec patch ci dessous + switch mysql5.7
-vers mariadb10.3 sur prod-front (repo: source.list):
-
-    /lib/systemd/system/mariadb.service:   Your workaround is working but it seems that removing only these 3 lines
-    is sufficient:
-    > ProtectSystem=full
-    > PrivateDevices=true
-    > ProtectHome=true
-
-

+ 0 - 19
doc/hooks.md

@@ -1,19 +0,0 @@
-# Déclenchement des hooks de mise à jour depuis le logiciel
-
-Les changements effectués dans la base Opentalent doivent être répercutés dans la base Typo3.
-Pour cela, l'extension [OtAdmin](/ot_admin) expose un certain nombre de méthode via une Api HTTP, dont l'accès est restreint aux adresses Ip
-internes.
-
-Ces méthodes seront ensuite déclenchées depuis le logiciel, grâce à un système de hooks.
-
-| Cas de figure | Actions à déclencher | 
-| --- | --- |
-| Une structure est créée | `create` |
-| Une structure quitte son réseau | `delete` (avec le paramètre `redirect-to` vers le réseau de la structure) |
-| Une structure réintègre son réseau | `undelete` -> `update` -> `reset-perms` |
-| Une structure change de sous-domaine | `update` -> `redirect` |
-| Une structure s'est procurée un nom de domaine custom | `set-domain` |
-| Les paramètres d'une structure ont changé | `update` |
-| La structure change de produit | `update` -> `reset-perms` |
-
-

BIN
doc/images/cookie.png


BIN
doc/images/phpstorm_new_server.png


BIN
doc/images/routing_blackfire_1.png


+ 0 - 198
doc/images/schema_droits_beusers.svg

@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.2" width="297mm" height="210mm" viewBox="0 0 29700 21000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
- <defs class="ClipPathGroup">
-  <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
-   <rect x="0" y="0" width="29700" height="21000"/>
-  </clipPath>
-  <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
-   <rect x="29" y="21" width="29641" height="20958"/>
-  </clipPath>
- </defs>
- <defs>
-  <font id="EmbeddedFont_1" horiz-adv-x="2048">
-   <font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="423"/>
-   <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
-   <glyph unicode="’" horiz-adv-x="239" d="M 328,1264 C 328,1194 322,1135 309,1088 296,1040 277,995 250,952 L 127,952 C 190,1043 221,1129 221,1212 L 133,1212 133,1409 328,1409 328,1264 Z"/>
-   <glyph unicode="é" horiz-adv-x="980" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 L 862,641 Z M 440,1201 L 440,1221 657,1508 864,1508 864,1479 534,1201 440,1201 Z"/>
-   <glyph unicode="è" horiz-adv-x="980" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 L 862,641 Z M 657,1201 L 327,1479 327,1508 534,1508 751,1221 751,1201 657,1201 Z"/>
-   <glyph unicode="y" horiz-adv-x="1033" d="M 191,-425 C 142,-425 100,-421 67,-414 L 67,-279 C 92,-283 120,-285 151,-285 263,-285 352,-203 417,-38 L 434,5 5,1082 197,1082 425,484 C 428,475 432,464 437,451 442,438 457,394 482,320 507,246 521,205 523,196 L 593,393 830,1082 1020,1082 604,0 C 559,-115 518,-201 479,-258 440,-314 398,-356 351,-384 304,-411 250,-425 191,-425 Z"/>
-   <glyph unicode="x" horiz-adv-x="1006" d="M 801,0 L 510,444 217,0 23,0 408,556 41,1082 240,1082 510,661 778,1082 979,1082 612,558 1002,0 801,0 Z"/>
-   <glyph unicode="u" horiz-adv-x="874" d="M 314,1082 L 314,396 C 314,325 321,269 335,230 349,191 371,162 402,145 433,128 478,119 537,119 624,119 692,149 742,208 792,267 817,350 817,455 L 817,1082 997,1082 997,231 C 997,105 999,28 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 826,132 825,185 L 822,185 C 781,110 733,58 679,27 624,-4 557,-20 476,-20 357,-20 271,10 216,69 161,128 133,225 133,361 L 133,1082 314,1082 Z"/>
-   <glyph unicode="t" horiz-adv-x="531" d="M 554,8 C 495,-8 434,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 474,127 509,132 554,141 L 554,8 Z"/>
-   <glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,197 912,118 835,63 758,8 650,-20 511,-20 376,-20 273,2 200,47 127,91 79,160 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 602,117 669,131 712,159 754,187 775,229 775,285 775,328 760,362 731,389 702,416 654,438 589,455 L 460,489 C 357,516 283,542 240,568 196,593 162,624 137,661 112,698 100,743 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 759,862 732,899 689,925 645,950 586,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,783 283,758 299,738 315,718 339,701 370,687 401,673 467,654 568,629 663,605 732,583 774,563 816,542 849,520 874,495 898,470 917,442 930,410 943,377 950,340 950,299 Z"/>
-   <glyph unicode="r" horiz-adv-x="530" d="M 142,0 L 142,830 C 142,906 140,990 136,1082 L 306,1082 C 311,959 314,886 314,861 L 318,861 C 347,954 380,1017 417,1051 454,1085 507,1102 575,1102 599,1102 623,1099 648,1092 L 648,927 C 624,934 592,937 552,937 477,937 420,905 381,841 342,776 322,684 322,564 L 322,0 142,0 Z"/>
-   <glyph unicode="q" horiz-adv-x="927" d="M 484,-20 C 347,-20 246,26 182,119 118,212 86,351 86,536 86,913 219,1102 484,1102 566,1102 634,1088 687,1059 740,1030 785,981 821,914 L 823,914 C 823,934 824,969 827,1018 830,1067 832,1093 835,1096 L 1008,1096 C 1003,1057 1001,958 1001,801 L 1001,-425 821,-425 821,14 825,178 823,178 C 787,107 743,56 690,26 637,-5 569,-20 484,-20 Z M 821,554 C 821,695 798,799 752,867 706,935 633,969 532,969 441,969 375,935 335,867 295,799 275,691 275,542 275,391 295,282 336,217 376,152 441,119 530,119 632,119 706,155 752,228 798,301 821,409 821,554 Z"/>
-   <glyph unicode="p" horiz-adv-x="953" d="M 1053,546 C 1053,169 920,-20 655,-20 488,-20 376,43 319,168 L 314,168 C 317,163 318,106 318,-2 L 318,-425 138,-425 138,861 C 138,972 136,1046 132,1082 L 306,1082 C 307,1079 308,1070 309,1054 310,1037 312,1012 314,978 315,944 316,921 316,908 L 320,908 C 352,975 394,1024 447,1055 500,1086 569,1101 655,1101 788,1101 888,1056 954,967 1020,878 1053,737 1053,546 Z M 864,542 C 864,693 844,800 803,865 762,930 698,962 609,962 538,962 482,947 442,917 401,887 371,840 350,777 329,713 318,630 318,528 318,386 341,281 386,214 431,147 505,113 607,113 696,113 762,146 803,212 844,277 864,387 864,542 Z"/>
-   <glyph unicode="o" horiz-adv-x="980" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 407,-20 288,28 207,125 126,221 86,360 86,542 86,915 248,1102 571,1102 736,1102 858,1057 936,966 1014,875 1053,733 1053,542 Z M 864,542 C 864,691 842,800 798,868 753,935 679,969 574,969 469,969 393,935 346,866 299,797 275,689 275,542 275,399 298,292 345,221 391,149 464,113 563,113 671,113 748,148 795,217 841,286 864,395 864,542 Z"/>
-   <glyph unicode="n" horiz-adv-x="874" d="M 825,0 L 825,686 C 825,757 818,813 804,852 790,891 768,920 737,937 706,954 661,963 602,963 515,963 447,933 397,874 347,815 322,732 322,627 L 322,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 358,972 406,1025 461,1056 515,1087 582,1102 663,1102 782,1102 869,1073 924,1014 979,955 1006,857 1006,721 L 1006,0 825,0 Z"/>
-   <glyph unicode="m" horiz-adv-x="1457" d="M 768,0 L 768,686 C 768,791 754,863 725,903 696,943 645,963 570,963 493,963 433,934 388,875 343,816 321,734 321,627 L 321,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 356,974 400,1027 450,1057 500,1087 561,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 967,970 1013,1022 1066,1054 1119,1086 1183,1102 1258,1102 1367,1102 1447,1072 1497,1013 1546,954 1571,856 1571,721 L 1571,0 1393,0 1393,686 C 1393,791 1379,863 1350,903 1321,943 1270,963 1195,963 1116,963 1055,934 1012,876 968,817 946,734 946,627 L 946,0 768,0 Z"/>
-   <glyph unicode="l" horiz-adv-x="187" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
-   <glyph unicode="i" horiz-adv-x="187" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
-   <glyph unicode="g" horiz-adv-x="927" d="M 548,-425 C 430,-425 336,-402 266,-356 196,-309 151,-243 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 732,-288 822,-183 822,27 L 822,201 820,201 C 786,132 739,80 680,45 621,10 551,-8 472,-8 339,-8 242,36 180,124 117,212 86,350 86,539 86,730 120,872 187,963 254,1054 355,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,917 825,952 828,1001 831,1050 833,1077 836,1082 L 1007,1082 C 1003,1046 1001,971 1001,858 L 1001,31 C 1001,-273 850,-425 548,-425 Z M 822,541 C 822,629 810,705 786,769 762,832 728,881 685,915 641,948 591,965 536,965 444,965 377,932 335,865 293,798 272,690 272,541 272,393 292,287 331,222 370,157 438,125 533,125 590,125 640,142 684,175 728,208 762,256 786,319 810,381 822,455 822,541 Z"/>
-   <glyph unicode="e" horiz-adv-x="980" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 L 862,641 Z"/>
-   <glyph unicode="d" horiz-adv-x="927" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 821,1035 821,1484 1001,1484 1001,223 C 1001,110 1003,36 1007,0 L 835,0 C 833,11 831,35 829,74 826,113 825,146 825,174 L 821,174 Z M 275,542 C 275,391 295,282 335,217 375,152 440,119 530,119 632,119 706,154 752,225 798,296 821,405 821,554 821,697 798,802 752,869 706,936 633,969 532,969 441,969 376,936 336,869 295,802 275,693 275,542 Z"/>
-   <glyph unicode="c" horiz-adv-x="901" d="M 275,546 C 275,402 298,295 343,226 388,157 457,122 548,122 612,122 666,139 709,174 752,209 778,262 788,334 L 970,322 C 956,218 912,135 837,73 762,11 668,-20 553,-20 402,-20 286,28 207,124 127,219 87,359 87,542 87,724 127,863 207,959 287,1054 402,1102 551,1102 662,1102 754,1073 827,1016 900,959 945,880 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 451,961 382,929 339,866 296,803 275,696 275,546 Z"/>
-   <glyph unicode="a" horiz-adv-x="1060" d="M 414,-20 C 305,-20 224,9 169,66 114,123 87,202 87,302 87,414 124,500 198,560 271,620 390,652 554,656 L 797,660 797,719 C 797,807 778,870 741,908 704,946 645,965 565,965 484,965 426,951 389,924 352,897 330,853 323,793 L 135,810 C 166,1005 310,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1097,111 1117,113 1139,118 L 1139,6 C 1094,-5 1047,-10 1000,-10 933,-10 885,8 855,43 824,78 807,132 803,207 L 797,207 C 751,124 698,66 637,32 576,-3 501,-20 414,-20 Z M 455,115 C 521,115 580,130 631,160 682,190 723,231 753,284 782,336 797,390 797,445 L 797,534 600,530 C 515,529 451,520 408,504 364,488 330,463 307,430 284,397 272,353 272,299 272,240 288,195 320,163 351,131 396,115 455,115 Z"/>
-   <glyph unicode="_" horiz-adv-x="1218" d="M -31,-407 L -31,-277 1162,-277 1162,-407 -31,-407 Z"/>
-   <glyph unicode="S" horiz-adv-x="1192" d="M 1272,389 C 1272,259 1221,158 1120,87 1018,16 875,-20 690,-20 347,-20 148,99 93,338 L 278,375 C 299,290 345,228 414,189 483,149 578,129 697,129 820,129 916,150 983,193 1050,235 1083,297 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 541,675 456,699 399,724 341,749 295,776 262,807 229,837 203,872 186,913 168,954 159,1000 159,1053 159,1174 205,1267 298,1332 390,1397 522,1430 694,1430 854,1430 976,1406 1061,1357 1146,1308 1205,1224 1239,1106 L 1051,1073 C 1030,1148 991,1202 933,1236 875,1269 795,1286 692,1286 579,1286 493,1267 434,1230 375,1193 345,1137 345,1063 345,1020 357,984 380,956 403,927 436,903 479,884 522,864 609,840 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
-   <glyph unicode="P" horiz-adv-x="1112" d="M 1258,985 C 1258,852 1215,746 1128,667 1041,588 922,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 919,1409 1041,1372 1128,1298 1215,1224 1258,1120 1258,985 Z M 1066,983 C 1066,1165 957,1256 738,1256 L 359,1256 359,700 746,700 C 959,700 1066,794 1066,983 Z"/>
-   <glyph unicode="E" horiz-adv-x="1138" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 168,0 Z"/>
-   <glyph unicode="D" horiz-adv-x="1218" d="M 1381,719 C 1381,574 1353,447 1296,338 1239,229 1159,145 1055,87 951,29 831,0 695,0 L 168,0 168,1409 634,1409 C 873,1409 1057,1349 1187,1230 1316,1110 1381,940 1381,719 Z M 1189,719 C 1189,894 1141,1027 1046,1119 950,1210 811,1256 630,1256 L 359,1256 359,153 673,153 C 776,153 867,176 946,221 1024,266 1084,332 1126,417 1168,502 1189,603 1189,719 Z"/>
-   <glyph unicode="A" horiz-adv-x="1377" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 685,1265 L 676,1237 C 659,1182 635,1111 602,1024 L 422,561 949,561 768,1026 C 749,1072 731,1124 712,1182 L 685,1265 Z"/>
-   <glyph unicode="1" horiz-adv-x="927" d="M 156,0 L 156,153 515,153 515,1237 197,1010 197,1180 530,1409 696,1409 696,153 1039,153 1039,0 156,0 Z"/>
-   <glyph unicode="/" horiz-adv-x="583" d="M 0,-20 L 411,1484 569,1484 162,-20 0,-20 Z"/>
-   <glyph unicode=" " horiz-adv-x="556"/>
-  </font>
- </defs>
- <defs class="TextShapeIndex">
-  <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16"/>
- </defs>
- <defs class="EmbeddedBulletChars">
-  <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
-  </g>
-  <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
-  </g>
-  <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
-  </g>
-  <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
-  </g>
-  <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
-  </g>
-  <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
-  </g>
-  <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
-  </g>
-  <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
-  </g>
-  <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
-  </g>
-  <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
-  </g>
- </defs>
- <g>
-  <g id="id2" class="Master_Slide">
-   <g id="bg-id2" class="Background"/>
-   <g id="bo-id2" class="BackgroundObjects"/>
-  </g>
- </g>
- <g class="SlideGroup">
-  <g>
-   <g id="container-id1">
-    <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
-     <g class="Page">
-      <g class="com.sun.star.drawing.CustomShape">
-       <g id="id3">
-        <rect class="BoundingBox" stroke="none" fill="none" x="1999" y="2099" width="11803" height="1103"/>
-        <path fill="rgb(114,159,207)" stroke="none" d="M 7900,3200 L 2000,3200 2000,2100 13800,2100 13800,3200 7900,3200 Z"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 7900,3200 L 2000,3200 2000,2100 13800,2100 13800,3200 7900,3200 Z"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="3426" y="2871"><tspan fill="rgb(0,0,0)" stroke="none">EditorStandard / EditorPremium</tspan></tspan></tspan></text>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.CustomShape">
-       <g id="id4">
-        <rect class="BoundingBox" stroke="none" fill="none" x="16999" y="2099" width="10103" height="1103"/>
-        <path fill="rgb(114,159,207)" stroke="none" d="M 22050,3200 L 17000,3200 17000,2100 27100,2100 27100,3200 22050,3200 Z"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 22050,3200 L 17000,3200 17000,2100 27100,2100 27100,3200 22050,3200 Z"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="17455" y="2871"><tspan fill="rgb(0,0,0)" stroke="none">AdminStandard / AdminPremium</tspan></tspan></tspan></text>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.CustomShape">
-       <g id="id5">
-        <rect class="BoundingBox" stroke="none" fill="none" x="15399" y="11099" width="4704" height="2204"/>
-        <path fill="rgb(255,128,0)" stroke="none" d="M 17750,11100 L 20101,12200 17750,13301 15400,12200 17750,11100 17750,11100 Z"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 17750,11100 L 20101,12200 17750,13301 15400,12200 17750,11100 17750,11100 Z"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="16219" y="12421"><tspan fill="rgb(0,0,0)" stroke="none">admin_site</tspan></tspan></tspan></text>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.CustomShape">
-       <g id="id6">
-        <rect class="BoundingBox" stroke="none" fill="none" x="1799" y="11399" width="4704" height="2204"/>
-        <path fill="rgb(255,128,0)" stroke="none" d="M 4150,11400 L 6501,12500 4150,13601 1800,12500 4150,11400 4150,11400 Z"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 4150,11400 L 6501,12500 4150,13601 1800,12500 4150,11400 4150,11400 Z"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="3182" y="12721"><tspan fill="rgb(0,0,0)" stroke="none">editor1</tspan></tspan></tspan></text>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.CustomShape">
-       <g id="id7">
-        <rect class="BoundingBox" stroke="none" fill="none" x="1799" y="6099" width="14303" height="1103"/>
-        <path fill="rgb(114,159,207)" stroke="none" d="M 8950,7200 L 1800,7200 1800,6100 16100,6100 16100,7200 8950,7200 Z"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 8950,7200 L 1800,7200 1800,6100 16100,6100 16100,7200 8950,7200 Z"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="7348" y="6871"><tspan fill="rgb(0,0,0)" stroke="none">edit_mysite</tspan></tspan></tspan></text>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.ConnectorShape">
-       <g id="id8">
-        <rect class="BoundingBox" stroke="none" fill="none" x="7899" y="3199" width="1202" height="2902"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 7900,3200 L 7900,3701 8950,5599 8950,5670"/>
-        <path fill="rgb(52,101,164)" stroke="none" d="M 8950,6100 L 9100,5650 8800,5650 8950,6100 Z"/>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.ConnectorShape">
-       <g id="id9">
-        <rect class="BoundingBox" stroke="none" fill="none" x="4000" y="7199" width="4952" height="4202"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 8950,7200 L 8950,9500 4150,10899 4150,10970"/>
-        <path fill="rgb(52,101,164)" stroke="none" d="M 4150,11400 L 4300,10950 4000,10950 4150,11400 Z"/>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.ConnectorShape">
-       <g id="id10">
-        <rect class="BoundingBox" stroke="none" fill="none" x="8949" y="7199" width="8952" height="3902"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 8950,7200 L 8950,9500 17750,10599 17750,10670"/>
-        <path fill="rgb(52,101,164)" stroke="none" d="M 17750,11100 L 17900,10650 17600,10650 17750,11100 Z"/>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.ConnectorShape">
-       <g id="id11">
-        <rect class="BoundingBox" stroke="none" fill="none" x="17600" y="3199" width="4452" height="7902"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 22050,3200 L 22050,3701 17750,10599 17750,10670"/>
-        <path fill="rgb(52,101,164)" stroke="none" d="M 17750,11100 L 17900,10650 17600,10650 17750,11100 Z"/>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.TextShape">
-       <g id="id12">
-        <rect class="BoundingBox" stroke="none" fill="none" x="4200" y="3900" width="4601" height="1362"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4450" y="4474"><tspan fill="rgb(0,0,0)" stroke="none">Accès aux </tspan></tspan><tspan class="TextPosition" x="4450" y="5029"><tspan fill="rgb(0,0,0)" stroke="none">modules d’édition</tspan></tspan></tspan></text>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.TextShape">
-       <g id="id13">
-        <rect class="BoundingBox" stroke="none" fill="none" x="21000" y="5384" width="4601" height="1917"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="21250" y="5958"><tspan fill="rgb(0,0,0)" stroke="none">Accès aux </tspan></tspan><tspan class="TextPosition" x="21250" y="6513"><tspan fill="rgb(0,0,0)" stroke="none">modules </tspan></tspan><tspan class="TextPosition" x="21250" y="7068"><tspan fill="rgb(0,0,0)" stroke="none">d’administration</tspan></tspan></tspan></text>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.TextShape">
-       <g id="id14">
-        <rect class="BoundingBox" stroke="none" fill="none" x="5000" y="7700" width="4601" height="1362"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5250" y="8274"><tspan fill="rgb(0,0,0)" stroke="none">Droits d’édition </tspan></tspan><tspan class="TextPosition" x="5250" y="8829"><tspan fill="rgb(0,0,0)" stroke="none">sur les pages</tspan></tspan></tspan></text>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.ConnectorShape">
-       <g id="id15">
-        <rect class="BoundingBox" stroke="none" fill="none" x="20100" y="10929" width="2753" height="1422"/>
-        <path fill="none" stroke="rgb(52,101,164)" d="M 22851,10930 L 20602,12200 20530,12200"/>
-        <path fill="rgb(52,101,164)" stroke="none" d="M 20100,12200 L 20550,12350 20550,12050 20100,12200 Z"/>
-       </g>
-      </g>
-      <g class="com.sun.star.drawing.TextShape">
-       <g id="id16">
-        <rect class="BoundingBox" stroke="none" fill="none" x="23000" y="9474" width="4601" height="3027"/>
-        <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="23250" y="10048"><tspan fill="rgb(0,0,0)" stroke="none">A les droits </tspan></tspan><tspan class="TextPosition" x="23250" y="10603"><tspan fill="rgb(0,0,0)" stroke="none">d’administrations </tspan></tspan><tspan class="TextPosition" x="23250" y="11158"><tspan fill="rgb(0,0,0)" stroke="none">sur les pages en </tspan></tspan><tspan class="TextPosition" x="23250" y="11713"><tspan fill="rgb(0,0,0)" stroke="none">tant que </tspan></tspan><tspan class="TextPosition" x="23250" y="12268"><tspan fill="rgb(0,0,0)" stroke="none">propriétaire</tspan></tspan></tspan></text>
-       </g>
-      </g>
-     </g>
-    </g>
-   </g>
-  </g>
- </g>
-</svg>

+ 0 - 1
doc/images/v.svg

@@ -1 +0,0 @@
-<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><circle fill="#00875A" cx="8" cy="8" r="8"/><path d="M10.242 4.474a.941.941 0 0 1 1.634.934L8.11 11.996a.941.941 0 0 1-1.54.136L4.218 9.308a.941.941 0 1 1 1.446-1.205L7.15 9.886l3.093-5.412z" stroke="#FFF" stroke-width=".2" fill="#FFF" fill-rule="nonzero"/></g></svg>

+ 0 - 1
doc/images/x.svg

@@ -1 +0,0 @@
-<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><circle fill="#DE350B" cx="8" cy="8" r="8"/><path d="M9.485 8.071l2.122 2.121a1 1 0 1 1-1.415 1.415l-2.12-2.122-2.122 2.122a1 1 0 1 1-1.414-1.415l2.12-2.12-2.12-2.122A1 1 0 1 1 5.95 4.536l2.121 2.12 2.121-2.12a1 1 0 1 1 1.415 1.414L9.485 8.07z" fill="#FFF"/></g></svg>

+ 0 - 42
doc/index.md

@@ -1,42 +0,0 @@
-# OtTypo: Extensions Typo3 par Opentalent
-
-Typo3 est un [CMS opensource](https://typo3.fr/) adapté à la gestion d'une arborescence de sites.
-
-En 2021, l'usine à site Opentalent héberge près de 3800 sites internet (soit 63600 pages),
-plus environ 2000 sites archivés.
-
-## Sommaire
-
-[Introduction](intro.md)
-
-#### L'installation Typo3
-
-1. [Description de l'installation](installation.md)
-2. [La base de données](db.md)
-3. [Extensions tierces utilisées](dependencies.md)
-4. [Opérations de maintenance](maintenance.md)
-5. [Les tests](tests.md)
-6. [Intégration continue (CI)](ci.md)
-7. [Le container Docker](docker.md)
-8. [Problèmes courants et résolution](faq.md)
-
-#### Concepts et principes amenés par les extensions
-
-1. [Le concept de Websites](ot_websites.md)
-2. [Les variables d'environnement](env.md)
-3. [Fonctionnement attendu de l'authentification et mise en oeuvre](auth.md)
-4. [Droits des administrateurs / éditeurs et mise en oeuvre](be_users.md)
-5. [Système de templating](templating.md)
-6. [Les formulaires](forms.md)
-7. [Reception des hooks depuis le logiciel](hooks.md)
-8. [Routage et optimisation](routing.md)
-9. [Intégration des réseaux sociaux](social_networks.md)
-10. [Statistiques d'utilisation des sites](stats.md)
-
-#### Historique
-
-1. [Upgrade Typo3 v8.7 vers v9.5 (2020)](historic/upgrade_v9.md)
-2. [Résolution des problèmes d'authentification cross-domaine (2021)](historic/cross_domain_auth.md)
-3. [Upgrade Typo3 v9.5 vers v10.4 (2021)](historic/upgrade_v10.md)
-4. [Contribution / Retour d'expérience à la communauté Typo3 (2021)](historic/typo3_contrib.md)
-5. [Upgrade Typo3 v10.4 vers v11.5 (2023)](historic/upgrade_v11.md)

+ 0 - 101
doc/installation.md

@@ -1,101 +0,0 @@
-
-## Détails de l'installation
-
-Typo3 est installé sur prod-front et sur preprod en double instance:
-
-| Instance | Mini-sites | Portail |
-| --- | --- | --- |
-| vhost | 001-sub.opentalent.fr.conf | 001-opentalent.fr.conf |
-| php | 7.4 | 7.0 |
-| Version Typo3 | 10.4 | 8.7 |
-| source directory | /var/www/typo3 | /var/www/typo3_82 |
-| Url du backend | https://ohcluses.opentalent.fr/typo3/ | https://opentalent.fr/typo3/ |
-
-
-**Important: Pour la suite de cette documentation, on ne parlera plus que de l'installation la plus récente (v10.4)**
-
-Les [extensions Opentalent](..) sont installées dans: `/var/opentalent/git/ot_typo3`
-
-## Première installation
-
-On créé un répertoire packages qui contiendra des liens symboliques vers les extensions : 
-
-    cd /var/www/typo3
-    mkdir packages
-    ln -s /var/opentalent/git/ot_typo3/ot_admin packages/ot_admin
-    ln -s /var/opentalent/git/ot_typo3/ot_connect packages/ot_connect
-    ln -s /var/opentalent/git/ot_typo3/ot_core packages/ot_core
-    ln -s /var/opentalent/git/ot_typo3/ot_stats packages/ot_stats
-    ln -s /var/opentalent/git/ot_typo3/ot_optimizer packages/ot_optimizer
-    ln -s /var/opentalent/git/ot_typo3/ot_templating packages/ot_templating
-
-On créé un lien symbolique depuis le répertoire d'installation Typo3 vers le fichier `composer.json`
-à la racine du repository ot_typo3 :
-
-    ln -s /var/opentalent/git/ot_typo3/composer.json ./composer.json
-
-Puis on installe : 
-
-    php composer.phar install
-
-## Opérations courantes
-
-### Faire une sauvegarde des données
-
-
-Faire un dump compressé de la DB (requiert environ 1Go en 2021):
-
-
-    mysqldump --single-transaction --compress -u dbcloner --password=**** typo3 | gzip -c > dump_typo3_yyyymmdd.gz
-
-
-Sauvegarder la configuration des sites (volume négligeable)
-
-
-    tar czvf ./sites.tar.gz /var/www/typo3/config/sites
-
-
-Sauvegarder les uploads et les définitions des formulaires (de l'ordre de la centaine de Go):
-
-
-    tar czvf ./fileadmin.tar.gz /var/www/typo3/public/fileadmin
-
-
-### Déployer une nouvelle version des extensions
-
-
-    ssh -A exploitation@[preprod ou prod-front]
-    cd /var/opentalent/git/ot_typo3
-    git pull
-
-
-### Mettre à jour Typo3
-
-Pour voir les dernières versions disponibles:
-
-    php composer.phar outdated
-
-Pour mettre à jour typo3:
-
-    php composer.phar update
-
-Pour tout mettre à jour:
-
-    php composer.phar update
-
-
-### Mettre en mode maintenance
-
-Pour mettre une instance Typo3 en mode maintenance, accéder au serveur en ssh et éditer le .htaccess:
-
-    ssh -A exploitation@preprod
-    nano /var/www/typo3/public/.htaccess
-
-Et décommenter les lignes:
-
-    #RewriteCond %{REMOTE_ADDR} !^10\.8\.0\.[0-255]
-    #RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
-    #RewriteRule .* /maintenance.html [R=302,L]
-
-Puis recommenter pour désactiver le mode maintenance.
-

+ 0 - 98
doc/intro.md

@@ -1,98 +0,0 @@
-# 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)

+ 0 - 105
doc/maintenance.md

@@ -1,105 +0,0 @@
-# Opérations de maintenance et scheduler
-
-## Opérations manuelles
-
-### Vidage du cache
-
-Il peut être nécessaire de vider complètement le cache Typo3.
-
-On pourra: 
-
-* soit passer par le backend, onglet Maintenance, bouton 'Flush cache'
-* soit lancer en ligne de commande (nécessite l'extension [helhum/typo3-console](https://packagist.org/packages/helhum/typo3-console))
-  : `php7.4 vendor/bin/typo3cms cache:flush`
-
-### Mise à jour du core Typo3 ou des extensions tierces
-
-La mise à jour du core Typo3 ou des extensions tierces dépend de la nature de la mise à jour.
-
-Toute mise à jour nécessite un premier déploiement en environnement de test / preprod et la réalisation de
-[tests](tests.md) avant tout déploiement en production. De même, on répètera ces tests sur l'environnement de 
-production après y avoir effectué les mises à jour.
-
-
-#### Mise à jour de sécurité
-
-Les mises à jour de sécurité, qui concernent le troisième chiffre de version (1.0.X) 
-se font simplement par la commande `composer upload`, car le fichier composer.json de l'installation 
-ne devrait en principe fixer que les deux premiers chiffres de la version (`^X.X`).
-
-    composer update
-
-
-#### Mise à jour mineure
-
-Une mise à jour mineure nécessite la mise à jour du fichier composer.json.
-
-On pourra lister les extensions bénéficiant de telles mises à jour grâce à la commande:
-
-    composer outdated
-
-On traite ensuite au cas par cas en augmentant la version dans le composer.json, puis on lance la commande:
-
-    composer update
-
-
-#### Mise à jour majeure d'une extension
-
-Avant toute mise à jour majeure, il faut vérifier la compatibilité de l'extension avec la version courante de Typo3.
-
-Pour ce faire, on pourra par exemple visiter la page de l'extension sur [packagist](https://packagist.org/)
-
-Ensuite, procéder comme pour une mise à jour mineure.
-
-
-#### Mise à jour majeure de Typo3
-
-Si on met à jour le noyau typo3, on pourra utiliser **l'outil de vérification** des extensions, accessible via le 
-backend, onglet Upgrade > Scan Extension Files
-
-Vérifier que les extensions tierces supportent cette nouvelle version de Typo3 en visitant par exemple les pages
-de ces extensions sur [packagist](https://packagist.org/)
-
-Vérifier que les extensions Opentalent sont compatibles. Si besoin, créer une nouvelle feature dans le gitflow (donc
-une branche dédiée) et apportez les modifications nécessaires.
-
-Dans le fichier composer.json, mettre à jour tous les paquets en `typo3/*` avec la version visée. Il est possible
-que des extensions aient été ajoutées ou aient disparu entre les deux versions majeures, le mieux est donc de 
-comparer cette liste à ce qui est proposé ici: <https://get.typo3.org/misc/composer/helper>
-
-Lancer la commande:
-
-    composer update
-
-Accéder ensuite à l'interface d'installation: `https://<domain>/typo3/install.php`
-
-Lancer les commandes suivantes:
-
-* Maintenance: Flush cache
-* Upgrade: check for broken extension
-* Scan extension files 
-
-Si tout va bien jusqu'ici, lancer ensuite:
-
-* Maintenance: Analyse DB ; créer les tables et champs requis si besoin
-* Maintenance: manage language packs ; tout mettre à jour
-* Maintenance: reset backend user préférences
-
-A partir de là, il devrait être possible d'accéder au Backend sans erreur.
-
-
-
-## Opérations automatisées
-
-Aucune opération automatisée n'est actuellement implémentée.
-
-On pourra envisager d'en créer via le système de Scheduler de Typo3, ou via un simple système de crons.
-
-Parmi les opérations qui pourraient être automatisées:
-
-* nettoyage des logs et autres données persistantes
-* `./vendor/bin/typo3 referenceindex:update`
-* scanner les sites pour détecter les erreurs et liens morts
-
-D'autres opérations automatisables sont proposées par le scheduler Typo3.
-

+ 0 - 26
doc/ot_websites.md

@@ -1,26 +0,0 @@
-# La table ot_website
-
-La table `ot_websites`, spécifique à l'instance Typo3 Opentalent, est ajoutée à la base de données par l'extension
-[ot_core](/ot_core).
-
-Cette table est centrale dans le fonctionnement des extensions Opentalent, car c'est elle qui recense les sites des 
-strucures, leurs paramètres, domaines, statuts...
-
-## La variable globale ot_website
-
-Lors d'une requête frontend, le middleware OtSiteResolver détermine le ot_website grâce au nom de domaine,
-puis stocke le site correspondant comme attribut de la variable globale `$GLOBALS['TYPO3_REQUEST']`, comme c'est 
-déjà le cas pour la page en cours.
-
-## Le rôle de la table dans le routing
-
-L'extension [ot_optimizer](/ot_optimizer) se sert des données de cette table pour la résolution des noms de domaine.
-
-> Plus d'infos [ici](routing.md)
-
-## La génération dynamique de la configuration du site
-
-Cette table permet aussi de générer de manière dynamique une array similaire à celle qui résulte du parsing du
-fichier config.yaml du site. Cela permet d'éviter de nombreuse opération d'accès à ces fichiers de config.
-
-

+ 0 - 93
doc/routing.md

@@ -1,93 +0,0 @@
-# Optimisation de la résolution d'URLs (routing)
-
-
-## Problématique initiale
-
-Typo3 n'a pas été pensé pour héberger des milliers de sites comme c'est le cas ici, Ce qui provoque un certain nombre de lenteurs, au niveau de l'affichage de certains écrans du backend par exemple. Une conséquence est que la résolution des urls par le système de routing est longue et consomme trop de puissance de calcul, causant à la fois une dégradation des performances et un risque de déni de service.
-
-Le problème se pose à la fois dans le cas d'une page existante (200) et d'une page inexistante (404), car les erreurs 404 impliquent la même charge de travail pour le serveur que les pages existantes.
-
-Deux étapes sont principalement concernées:
-
-
-### La résolution du domaine
-
-Pour associer le domaine utilisé à un site, le routeur Typo3 parse les fichiers de configuration *config.yaml* stockés dans `/var/www/typo3/config/sites`
-
-Il existe un fichier par site, soit près de 6000 dans notre cas en 2021.
-
-Au premier affichage, le temps d'accès disque et de parsing est donc extrêmement long.
-
-Lors des accès suivants, ces configurations sont en cache, ce qui réduit l'impact.
-
-Cependant, le router instancie tous les sites avant de faire finalement correspondre le domaine utilisé dans la requête à l'uid de la page racine d'un site.
-
-![blackfire_1](images/routing_blackfire_1.png)
-
-
-### La résolution du chemin
-
-Une fois la correspondance entre le domaine et un site effectuée, une deuxième étape consiste à résoudre le chemin 
-(path, ou slug) et à le faire correspondre à une page.
-
-Encore une fois, typo3 n'est pas conçu pour héberger autant de site. Pour effectuer cette résolution, Typo3 récupère en 
-base toutes les pages dont le slug correspond à la requête. Ensuite, le routeur vérifie pour chacune de ces pages 
-si elle fait partie du site déterminé à l'étape précédente.
-
-Ce qui implique, lorsque la requête concerne un slug commun comme la page d'accueil '/', que jusqu'à 6000 requêtes peuvent 
-être effectuées en base pour la résolution d'une seule page!
-
-
-
-## Mesures d'optimisation
-
-Pour parer à ces problèmes, l'extension [ot_optimizer](/ot_optimizer) implémente des [XClass](https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/Xclasses/Index.html) 
-qui vont se substituer à certaines classes Typo3 responsable du routing.
-
-Le rôle de ces classes sera donc de faire correspondre un domaine à un site via les enregistrements de la table 
-'ot_websites', puis un slug à l'uid d'une page grâce au champs 'slug' de la table 'pages'.
-
-**IMPORTANT**: ces mesures ne sont appliquées qu'aux requêtes Frontend.
-
-
-### Garder les routes à jour
-
-Un hook est nécessaire dans le logiciel pour garder à jour le champs 'subdomain' de la table 'ot_websites'. 
-Ce hook est déclenché par la requête http: `<typo3_host>/typo3/otadmin/site/update?organization-id=<organization_id>`
-
-La redirection peut-être ajoutée en ligne de commande (voir [ot_admin](/ot_admin))
-
-
-### Faut-il prévoir un fallback vers le fonctionnement par défaut?
-
-Aucun fallback vers le router natif de Typo3 n'est prévu, car un fonctionnement de ce genre annulerait les 
-bénéfices de l'index dans le cas des erreurs 404.
-
-
-### Cas particuliers
-
-#### Gérer les redirections
-
-Certains domaines font l'objet de redirections vers un autre nom de domaine. Il faut s'assurer que cette redirection puisse avoir lieu.
-
-#### Les pages à accès restreint
-
-Les pages à accès restreint doivent apparaître dans la table de routage, Typo3 se chargera ensuite de déterminer 
-si l'utilisateur a le droit d'y accéder ou non.
-
-#### Les pages de type raccourci
-
-Les pages de type raccourci doivent apparaître dans la table de routage comme des pages normales, Typo3 se chargera 
-ensuite de la redirection. En effet, si on voulait gérer cette redirection directement au niveau de la table de routage, 
-il faudrait tenir compte du cas supplémentaire où la cible du raccourci est changée.
-
-#### Les urls en mode développement
-
-En mode développement (sur preprod ou en local), les urls ne sont pas construites de la même manière:
-
-| Prod | Dev |
-| --- | --- |
-| `<subdomain>.opentalent.fr` | `host.opentalent.fr/<subdomain> |
-
- 
-

+ 0 - 23
doc/social_networks.md

@@ -1,23 +0,0 @@
-# Intégration des réseaux sociaux
-
-L'intégration des réseaux sociaux aux sites typo3 implique deux problématiques:
-
-## Les liens vers les réseaux sociaux des structures
-
-Ces liens sont de simples balises <a/>, à n'afficher que lorsque le champs correspondant au réseau est renseigné
-dans les données de la structure.
-
-Les icônes des réseaux correspondants sont issues de [fontawesome](https://fontawesome.com/icons?d=gallery).
-
-## La possibilité de partager les pages et articles du site sur les réseaux sociaux
-
-Le partage des pages sur les réseaux nécessite la présence d'un certain nombre de balises meta dans le 
-header de la page.
-
-> Plus d'infos à ce sujet: 
-> * <https://www.opengraph.xyz/>
-> * <https://developers.facebook.com/tools/debug/?locale=fr_FR>
-
-Typo3 définit lui même une partie de ces balises, mais de manière incomplète au moment de la rédaction.
-Il a donc été décidé de créer un template Partials/MetaSocial.html qui redéfinisse ces balises grâce à la balise 
-[VHS](https://viewhelpers.fluidtypo3.org/fluidtypo3/vhs/5.0.1/) `<v:page.header.meta />`

+ 0 - 12
doc/stats.md

@@ -1,12 +0,0 @@
-# Fonctionnement du suivi des stats d'utilisation des sites
-
-Le suivi des stats est effectué par notre [instance Matomo](https://stats.2iopenservice.com/).
-
-Le suivi des stats est desactivé par défaut dans Typo3. Les administrateurs des sites peuvent 
-l'activer via le module OtStats, ce qui provoque la création d'un nouveau site suivi dans matomo, dont l'id
-est enregistré dans la table `ot_websites` (champs `matomo_site_id`)
-
-Dès lors qu'un site typo3 a un id de site matomo enregistré, le script JS d'intégration de matomo est ajouté dans le header 
-des pages du site.
-
-Les résultats sont consultables grâce au module OtStats du backend qui intègre des iframes contenant des widgets Matomo.

+ 0 - 33
doc/templating.md

@@ -1,33 +0,0 @@
-# Fonctionnement du multi-templating
-
-Le système de multi-templating est implémenté par l'extension [OtTemplating](/ot_templating)
-
-> **ATTENTION**: Le terme de "template" désigne aussi les gabarits de pages dans typo3, donc attention 
-> à ne pas confondre. On essaiera de parler ici de gabarits dans le cas des pages.
-
-Un thème est un ensemble de gabarits de pages (aussi appellés templates) et d'assets.
-
-> **Important**: Chaque template doit rester entièrement indépendant des autres
-
-### Sélection d'un template
-
-Un module backend dédié permet aux administrateurs d'un site de sélectionner le template choisi, et de
-modifier leurs préférences.
-
-Le template choisi par une structure ainsi que les préférences d'affichage sont enregistrés dans les
-champs `template` et `template_preferences` de la table `ot_websites`.
-
-### Découpage des répertoires
-
-Les répertoires correspondant aux [layouts](/ot_templating/Resources/Private/Layouts) et [partials](/ot_templating/Resources/Private/Partials), 
-ainsi que le [répertoire des assets](/ot_templating/Resources/Public/assets) possèdent des sous-répertoire correspondants au template courant.
-
-En revanche, les [gabarits de pages](/ot_templating/Resources/Private/Templates) sont communs à tous les templates.
-Ce sont ces gabarits qui appellent le layout du template désiré.
-
-Ce layout, à son tour, appelle tous les partials dont il a besoin (header, footer, assets...).
-
-
-
-
-

+ 0 - 21
doc/tests.md

@@ -1,21 +0,0 @@
-# Tests automatisés
-
-## Tests unitaires
-
-Les tests unitaires sont effectués grâce à l'utilitaire [phpunit](https://phpunit.readthedocs.io/fr/latest/index.html)
-
-Des tests unitaires sont maintenus pour l'extension ot_core seulement. 
-Les autres extensions ne sont pas adaptées à de tels tests, qui seraient très
-difficiles à mettre en place et n'apporteraient pas de réelle plus-value.
-
-## Tests fonctionnels (à venir)
-
-Des tests fonctionnels pourront être implémentés pour valider le fonctionnement global de l'installation typo3.
-Par souci de clarté, ils pourront malgré tout être implémentés extension par extension.
-
-## Scan global
-
-Un scan global pourra être programmé de manière régulière grâce à l'utilitaire [typo3scan](https://gitlab.2iopenservice.com/) 
-afin de détecter d'éventuels problèmes.
-
-> Voir [Maintenance](maintenance.md)

+ 1 - 41
ot_admin/Readme.md

@@ -9,44 +9,4 @@ This extension provides commands available by the API, CLI, or a dedicated admin
 | Vendor        | Opentalent |
 | Nom           | OtAdmin    |
 
-## CLI
-
-Pour exécuter une commande depuis la console 
-(dans le cas d'une installation Typo3 9.5, en mode composer, et avec php fpm7.4) :
-
-    php7.4 /var/www/typo3/vendor/bin/typo3 [command]
-
-Ou, si le script 'cli' a été ajouté lors de l'installation, 
-ce qui devrait être le cas des installations opentalent :
-
-    sh /var/www/typo3/cli [command]
-
-La liste des commandes fournies par cette extension peut être obtenue avec :
-
-    php7.4 vendor/bin/typo3 list ot
-
-> A propos de l'implémentation de nouvelles commandes : https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/CommandControllers/Index.html
-
-
-## HTTP API
-
-La majorité des commandes peuvent aussi être exécutées via une requête HTTP, 
-**à la condition que cette requête émane d'une adresse ip autorisée.
-
-Les adresses IP autorisées sont :
-
-    /^127\.0\.0\.[0-1]$/
-    /^localhost$/
-    /^10\.8\.0\.[0-255]$/
-
-Les commandes disponibles sont :
-
-|                  |                                       |                                                                                     |
-|------------------|---------------------------------------|-------------------------------------------------------------------------------------|
-| site/create      | Create a new organization             | `<typo3_host>/typo3/otadmin/site/create?organization-id=<organization_id>`          |
-| site/update      | Update an organization                | `<typo3_host>/typo3/otadmin/site/update?organization-id=<organization_id>`          |
-| site/delete      | Soft-delete an organization           | `<typo3_host>/typo3/otadmin/site/delete?organization-id=<organization_id>`          |
-| site/undelete    | Restore a soft-deleted organization   | `<typo3_host>/typo3/otadmin/site/undelete?organization-id=<organization_id>`        |
-| site/clear-cache | Clear the website's cache             | `<typo3_host>/typo3/otadmin/site/clear-cache?organization-id=<organization_id>`     |
-| site/status      | Get the current status of the website | `<typo3_host>/typo3/otadmin/site/status?organization-id=<organization_id>[&full=1]` |
-| scan             | Scan the whole Typo3 DB               | `<typo3_host>/typo3/otadmin/scan[?full=1]`                                          |
+[Voir la documentation](https://ressources-opentalent.atlassian.net/wiki/x/2AFtFg)

+ 1 - 1
ot_connect/Readme.md

@@ -11,4 +11,4 @@ Extension d'authentification typo3.
 Le rôle de cette extension est de fournir une authentification et une session unique pour les utilisateurs Opentalent, 
 qu'ils se rendent sur l'application Opentalent ou sur le frontend du site de leur(s) structure(s).
 
-> Plus d'infos dans la [documentation](/doc/auth.md)
+> Plus d'infos dans la [documentation](https://ressources-opentalent.atlassian.net/wiki/spaces/DEV/pages/376832068/Authentification)