# PARTIE V — Administration et maintenance

# CHAPITRE 25 — Configuration avancée (constantes)

Le module expose une vingtaine de constantes Dolibarr qui permettent d'ajuster son comportement. Ce chapitre les classe par catégorie d'usage avec les valeurs typiques.

### <span style="color: rgb(35, 111, 161);">Sites gérés</span>

<table id="bkmrk-constantedescription" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_MANAGED_SITES</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">CSV des identifiants de sites gérés. Exemple : </span>

`<span class="editor-theme-code">1,2,5</span>`

.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_MEDIA_MODE</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Mode média par site. </span>

`<span class="editor-theme-code">native</span>`

<span style="white-space: pre-wrap;"> (par défaut) ou </span>

`<span class="editor-theme-code">module</span>`

.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_BLOG_INDEX_PAGE</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Identifiant de la page d'index du blog (active l'assistant « + Nouvel article »).

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_DOCROOT</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Surcharge du docroot Apache pour ce site spécifique.

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Portabilité du système de fichiers</span>

Pour les hébergements aux configurations non standards :

<table id="bkmrk-constantedescription-1" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_DOCROOT_PATTERN</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Modèle de chemin partagé utilisant le marqueur </span>

`<span class="editor-theme-code">{ref}</span>`

<span style="white-space: pre-wrap;">. Exemple : </span>

`<span class="editor-theme-code">/srv/sites/{ref}</span>`

.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_TEMPLATE_EXTRA_DIR</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Dossier supplémentaire à scanner pour les gabarits de page.

</td></tr></tbody></table>

**Note — Cascade de résolution —**<span style="white-space: pre-wrap;"> Pour le docroot d'un site, l'ordre de recherche est : </span>`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_DOCROOT</span>`<span style="white-space: pre-wrap;">, puis </span>`<span class="editor-theme-code">INFRASSTUDIO_DOCROOT_PATTERN</span>`<span style="white-space: pre-wrap;">, puis le repli sur </span>`<span class="editor-theme-code">/var/www/<ref></span>`.

### <span style="color: rgb(35, 111, 161);">Catalogue produit</span>

<table id="bkmrk-constantedescription-2" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_WEBSITE_KEY</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Référence du site cible des wrappers solution.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_PUBLIC_DOCROOT</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Docroot Apache absolu où écrire les wrappers.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_PRODUCT_UNIVERS_MAP</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Surcharge JSON de la cartographie catégorie vers univers.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_TRANSLATABLE_PRODUCT_FIELDS</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">CSV de slugs de champs personnalisés à déclarer comme traduisibles, en complément du registre par défaut.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_TRANSLATABLE_PRODUCT_FIELDS_JSON</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Surcharge JSON complète du registre.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_WRAPPER_PREFIX</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Préfixe des wrappers (par défaut </span>

`<span class="editor-theme-code">solution-</span>`

).

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_WRAPPER_TEMPLATE_PAGEURL</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Slug du gabarit (par défaut </span>

`<span class="editor-theme-code">solution-detail</span>`

).

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Apparence du Studio</span>

<table id="bkmrk-constantevaleurspar-" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Valeurs

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Par défaut

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_UI_THEME</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">light</span>`

<span style="white-space: pre-wrap;">, </span>

`<span class="editor-theme-code">dark</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">light</span>`

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_UI_ACCENT</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">indigo</span>`

<span style="white-space: pre-wrap;">, </span>

`<span class="editor-theme-code">ochre</span>`

<span style="white-space: pre-wrap;">, </span>

`<span class="editor-theme-code">plum</span>`

<span style="white-space: pre-wrap;">, </span>

`<span class="editor-theme-code">forest</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">indigo</span>`

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Multilingue côté gabarits</span>

<table id="bkmrk-constantedescription-3" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_LANG_ISO</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Force la langue active. Définie dynamiquement par les gabarits.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_LANG_COOKIE</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Nom du cookie de persistance de la langue (par défaut </span>

`<span class="editor-theme-code">infras_lang</span>`

).

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_LANG_MAP_JSON</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Surcharge de la cartographie ISO2 vers locale (exemple : </span>

`<span class="editor-theme-code">{"en":"en_GB"}</span>`

).

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_BLOG_FALLBACK_IMAGE</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Image par défaut affichée lorsqu'un article ne possède pas d'image principale.

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Compatibilité et débogage</span>

<table id="bkmrk-constantedescription-4" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Constante

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Description

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_DOL_VERSION</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Version de Dolibarr lors de l'activation du module. Géré automatiquement.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_MAIN_VERSION</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Version du module. Géré automatiquement.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_DISABLE_CHECK_VERSION_MIN</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">À régler sur </span>

`<span class="editor-theme-code">1</span>`

<span style="white-space: pre-wrap;"> pour contourner la vérification de version Dolibarr minimale (usage avancé).</span>

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Définir une constante</span>

##### **Méthode A — Via l'administration du module**

La majorité des constantes sont accessibles dans Outils → InfraSStudio → Configuration, dans la section dépliable « Réglages avancés ». Le formulaire valide les saisies et affiche des avertissements non bloquants en cas d'incohérence.

##### **Méthode B — Via SQL**

```
INSERT INTO llx_const (name, value, type, visible, entity)
VALUES ('INFRASSTUDIO_DOCROOT_PATTERN', '/srv/sites/{ref}', 'chaine', 0, 2);
```

##### **Méthode C — Via PHP en ligne de commande**

```
php -r "
require 'htdocs/master.inc.php';
\$conf->entity = 2;
dolibarr_set_const(\$db, 'INFRASSTUDIO_DOCROOT_PATTERN', '/srv/sites/{ref}',
    'chaine', 0, '', 2);
"
```

### <span style="color: rgb(35, 111, 161);">Vérifier la configuration</span>

Après chaque modification de constante, lancez la page Diagnostic du module. Elle valide en direct l'existence des chemins, la cohérence des modèles, etc.

### <span style="color: rgb(35, 111, 161);">Onglet Sites — administration centralisée</span>

<span style="white-space: pre-wrap;">L'onglet </span>**Outils → InfraS → InfraSStudio → Configuration → Sites**<span style="white-space: pre-wrap;"> est le point d'entrée canonique pour piloter chaque site Dolibarr Website pris en charge par le module. Il consolide en une seule page la liste des sites détectés, leur statut (géré / non géré), le nombre de pages et de slots qu'ils contiennent, la date de dernière édition et les actions disponibles pour chacun : configurer, voir le site public, exporter en ZIP, restaurer depuis un ZIP, nettoyer.</span>

<span style="white-space: pre-wrap;">Le tableau s'alimente à la volée à partir de </span>`<span class="editor-theme-code">llx_website</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">llx_website_page</span>`<span style="white-space: pre-wrap;"> et </span>`<span class="editor-theme-code">llx_infrasstudio_slot</span>`. Aucune configuration préalable n'est nécessaire : tout site Dolibarr Website existant apparaît automatiquement dans la liste, qu'il soit déjà géré par InfraSStudio ou non.

##### **Configurer automatiquement un site**

<span style="white-space: pre-wrap;">Pour un site qui n'est pas encore géré par le module (par exemple un site Dolibarr Website existant créé avant l'activation d'InfraSStudio), le bouton </span>**« Configurer automatiquement »**<span style="white-space: pre-wrap;"> exécute en un clic la cascade d'opérations habituellement éparpillées dans plusieurs pages d'administration :</span>

1. <span style="white-space: pre-wrap;">Détection du docroot Apache effectif en suivant la </span>**cascade de résolution en cinq niveaux**<span style="white-space: pre-wrap;"> : </span>`<span class="editor-theme-code">INFRASSTUDIO_SITE_<id>_DOCROOT</span>`<span style="white-space: pre-wrap;"> → </span>`<span class="editor-theme-code">INFRASSTUDIO_DOCROOT_PATTERN</span>`<span style="white-space: pre-wrap;"> → entrée dans </span>`<span class="editor-theme-code">/etc/apache2/sites-enabled/</span>`<span style="white-space: pre-wrap;"> → réutilisation d'un docroot voisin → repli </span>`<span class="editor-theme-code">/var/www/<ref></span>`.
2. <span style="white-space: pre-wrap;">Pose des constantes </span>`<span class="editor-theme-code">INFRASSTUDIO_WEBSITE_KEY</span>`<span style="white-space: pre-wrap;"> et </span>`<span class="editor-theme-code">INFRASSTUDIO_PUBLIC_DOCROOT</span>`.
3. <span style="white-space: pre-wrap;">Ajout du site à </span>`<span class="editor-theme-code">INFRASSTUDIO_MANAGED_SITES</span>`<span style="white-space: pre-wrap;"> pour qu'il apparaisse dans le Studio.</span>
4. <span style="white-space: pre-wrap;">Patch des </span>`<span class="editor-theme-code">pageN.tpl.php</span>`<span style="white-space: pre-wrap;"> pour invoquer le moteur de slots.</span>
5. <span style="white-space: pre-wrap;">Scan initial des tokens </span>`<span class="editor-theme-code">{{slot:...}}</span>`<span style="white-space: pre-wrap;"> présents dans le HTML et peuplement de </span>`<span class="editor-theme-code">llx_infrasstudio_slot</span>`.

L'opération est idempotente — un site déjà configuré ne sera pas écrasé, et un re-clic ne pose aucun problème. Pratique pour aligner d'un coup une instance qui contient déjà plusieurs sites Dolibarr Website.

##### **Voir mon site public**

<span style="white-space: pre-wrap;">Le bouton </span>**« Voir mon site public »**<span style="white-space: pre-wrap;"> ouvre dans un nouvel onglet l'URL publique réelle du site, telle qu'un visiteur la verrait. L'URL est résolue dynamiquement à partir du docroot configuré et du virtual host Apache associé, ce qui évite d'avoir à mémoriser ou retaper l'adresse. Le même bouton est également présent dans la barre supérieure de l'éditeur Studio pour basculer en un clic entre l'édition et le rendu live.</span>

##### **Sitemap automatique**

<span style="white-space: pre-wrap;">Chaque site géré dispose d'un fichier </span>`<span class="editor-theme-code">sitemap.xml</span>`<span style="white-space: pre-wrap;"> régénéré automatiquement à chaque modification de page. Pas de cron à configurer, pas de bouton à cliquer : la classe </span>`<span class="editor-theme-code">StudioSitemap</span>`<span style="white-space: pre-wrap;"> est appelée à la volée chaque fois qu'un slot est publié, qu'une page passe de brouillon à publié ou inversement, ou qu'une page est dupliquée ou supprimée. Le sitemap respecte les bonnes pratiques SEO : les pages en brouillon sont exclues, les pages sœurs (canon + traductions) sont regroupées avec leurs </span>`<span class="editor-theme-code"><xhtml:link rel="alternate"></span>`.

##### **Exporter un site en ZIP**

<span style="white-space: pre-wrap;">Le bouton </span>**« Exporter en ZIP »**<span style="white-space: pre-wrap;"> télécharge une archive complète des données InfraSStudio du site sélectionné, indépendamment du dump SQL global de Dolibarr. L'archive contient :</span>

- <span style="white-space: pre-wrap;">Tous les </span>**slots**<span style="white-space: pre-wrap;"> du site (canonique + overrides de locale) au format SQL idempotent.</span>
- <span style="white-space: pre-wrap;">Toutes les </span>**configurations de formulaire**<span style="white-space: pre-wrap;"> scopées au site (</span>`<span class="editor-theme-code">fk_website=<id></span>`), avec leur descripteur JSON complet.
- <span style="white-space: pre-wrap;">Les </span>**médias**<span style="white-space: pre-wrap;"> InfraSStudio rattachés au site, fichiers binaires inclus, avec leurs alts par locale.</span>
- <span style="white-space: pre-wrap;">Un </span>**manifest**<span style="white-space: pre-wrap;"> qui décrit le contenu de l'archive et la version du module qui l'a produite.</span>

Cette archive sert principalement à :

- **Cloner un site**<span style="white-space: pre-wrap;"> d'une instance Dolibarr vers une autre (recette → production, démo → client).</span>
- **Sauvegarder ponctuellement**<span style="white-space: pre-wrap;"> un état stable avant une refonte risquée.</span>
- **Archiver**<span style="white-space: pre-wrap;"> un site en fin de vie sans perdre la trace de sa configuration.</span>

##### **Restaurer un site depuis un ZIP**

<span style="white-space: pre-wrap;">Le bouton </span>**« Restaurer depuis un ZIP »**<span style="white-space: pre-wrap;"> applique un export précédemment téléchargé sur le site sélectionné. La restauration est idempotente et préserve par défaut les éditions utilisateur déjà présentes :</span>

- <span style="white-space: pre-wrap;">Les slots déjà saisis ne sont pas écrasés, sauf si l'option </span>**Forcer le remplacement**<span style="white-space: pre-wrap;"> est cochée.</span>
- <span style="white-space: pre-wrap;">Les médias dont la </span>`<span class="editor-theme-code">ref</span>`<span style="white-space: pre-wrap;"> existe déjà sont conservés, sauf en mode force.</span>
- <span style="white-space: pre-wrap;">Les configurations de formulaire en conflit (même </span>`<span class="editor-theme-code">name</span>`) sont signalées et l'admin choisit explicitement de les fusionner ou de les remplacer.

**Note — Cleanup automatique —**<span style="white-space: pre-wrap;"> Quand un site Dolibarr Website est supprimé via l'interface native (</span>**Module Site Internet → Supprimer**<span style="white-space: pre-wrap;">), un hook InfraSStudio déclenche automatiquement le nettoyage en cascade des données associées : slots, médias, configurations de formulaire scopées au site, wrappers </span>`<span class="editor-theme-code">solution-*.php</span>`<span style="white-space: pre-wrap;">, retrait de </span>`<span class="editor-theme-code">INFRASSTUDIO_MANAGED_SITES</span>`<span style="white-space: pre-wrap;">. Aucune donnée orpheline ne reste en base. Le helper </span>`<span class="editor-theme-code">infrasstudio_cleanup_after_website_delete()</span>`<span style="white-space: pre-wrap;"> est également exposé pour les scripts CLI de migration ou de réinitialisation d'instance.</span>

### <span style="color: rgb(35, 111, 161);">Récapitulatif</span>

**Vous savez désormais :**

- Identifier les vingt constantes du module classées par usage.
- Comprendre la cascade de résolution du docroot.
- Configurer le catalogue produit (référence du site, docroot, préfixe, gabarit).
- Personnaliser l'apparence (thème, couleur d'accent).
- Définir une constante via l'administration, SQL ou ligne de commande.
- Valider une configuration via la page Diagnostic.

# CHAPITRE 26 — Diagnostic et résolution des incidents

Lorsqu'un comportement inattendu apparaît, ce chapitre vous guide dans la résolution. Le réflexe à adopter est simple : commencer par la page Diagnostic, lire les journaux, et n'envisager une action plus radicale qu'en dernier recours.

### <span style="color: rgb(35, 111, 161);">Toujours commencer par la page Diagnostic</span>

***Outils → InfraSStudio → onglet Diagnostic***. Le contrôle visuel (vert, orange, rouge) couvre :

- Versions de Dolibarr et de PHP, présence des extensions PHP requises.
- État du module et de sa dépendance Website.
- Présence des cinq tables SQL du module.
- <span style="white-space: pre-wrap;">Permissions d'écriture sur </span>`<span class="editor-theme-code">DOL_DATA_ROOT</span>`.
- Hooks chargés, présence du trigger, déclaration des tâches planifiées.
- Pour chaque site géré : résolution du docroot, mode média, dossier de données.

<p class="callout info">**À retenir —**<span style="white-space: pre-wrap;"> 80 % des incidents signalés sont en réalité une ligne rouge ou orange du Diagnostic ignorée. Demandez systématiquement à toute personne qui rapporte un dysfonctionnement de joindre d'abord cette capture.</span></p>

### <span style="color: rgb(35, 111, 161);">Lire les journaux Dolibarr</span>

<span style="white-space: pre-wrap;">Le module utilise </span>`<span class="editor-theme-code">dol_syslog()</span>`<span style="white-space: pre-wrap;"> pour tracer les opérations sensibles, avec le préfixe </span>`<span class="editor-theme-code">infrasstudio</span>`.

##### **Emplacement**

```
htdocs/documents/dolibarr.log
```

##### **Filtrer les entrées du module**

```
# Toutes les entrées du module
grep "infrasstudio" htdocs/documents/dolibarr.log

# Uniquement les erreurs
grep "infrasstudio.*LOG_ERR" htdocs/documents/dolibarr.log

# Suivi en temps réel pendant qu'un utilisateur reproduit le problème
tail -f htdocs/documents/dolibarr.log | grep infrasstudio
```

<p class="callout info">**Conseil — Activer le niveau DEBUG —**<span style="white-space: pre-wrap;"> Pour traquer un incident subtil, augmentez temporairement le niveau de journalisation Dolibarr (Configuration → Sécurité → Système) à </span>`<span class="editor-theme-code">LOG_DEBUG</span>`. Pensez à le rabaisser une fois le diagnostic terminé.</p>

### <span style="color: rgb(35, 111, 161);">Incidents fréquents et solutions</span>

<table id="bkmrk-incidentcauseprobabl" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col style="width: 28%;"></col><col style="width: 32%;"></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Incident

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Cause probable

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Solution

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Le menu InfraS n'apparaît pas dans Outils

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">L'utilisateur ne possède pas la permission </span>`<span class="editor-theme-code">paramMenu</span>`.

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Onglet Permissions de l'utilisateur, cocher </span>`<span class="editor-theme-code">paramMenu</span>`<span style="white-space: pre-wrap;"> dans la section InfraSStudio.</span>

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Les modifications ne sont pas visibles publiquement

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Modifications restées en brouillon sans être publiées.

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Cliquer sur « Publier les modifications » dans la barre d'outils. Voir le Chapitre 12.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">L'aperçu affiche une erreur 404

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">La page possède un type\_container </span>`<span class="editor-theme-code">other</span>`<span style="white-space: pre-wrap;">, </span>`<span class="editor-theme-code">menu</span>`<span style="white-space: pre-wrap;"> ou </span>`<span class="editor-theme-code">setup</span>`, et le filtre du noyau la bloque.

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Le module corrige automatiquement ce comportement depuis la version 1.8.7. Vérifiez que vous êtes en version 1.8.7 ou supérieure.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Erreur réseau dans l'éditeur (erreur AJAX)

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Session Dolibarr expirée, ou avertissement PHP émis avant les en-têtes HTTP.

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Recharger la page Studio (F5). Si le problème persiste, consultez </span>`<span class="editor-theme-code">dolibarr.log</span>`<span style="white-space: pre-wrap;"> pour identifier l'erreur PHP réelle.</span>

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Les images téléversées ne s'affichent pas publiquement

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Lien symbolique </span>`<span class="editor-theme-code">medias</span>`<span style="white-space: pre-wrap;"> manquant ou cassé en mode native.</span>

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Recréer le lien symbolique avec </span>`<span class="editor-theme-code">ln -sfn ...</span>`<span style="white-space: pre-wrap;">, ou basculer le site en mode média </span>`<span class="editor-theme-code">module</span>`.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Les wrappers solution-\*.php ne se génèrent pas

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">INFRASSTUDIO_WEBSITE_KEY</span>`<span style="white-space: pre-wrap;"> ou </span>`<span class="editor-theme-code">INFRASSTUDIO_PUBLIC_DOCROOT</span>`<span style="white-space: pre-wrap;"> non configurées.</span>

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Configurer ces deux constantes dans Outils → InfraSStudio → Configuration → Wrappers.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Les slots ne se mettent pas à jour après modification du tpl.php

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Le scanner n'a pas été lancé.

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Outils → InfraSStudio → Contenu → bouton « Rescanner ». Ou en ligne de commande : </span>`<span class="editor-theme-code">php scripts/rescan_slots.php <ref-site></span>`.

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Réinitialiser le module</span>

Si le module se trouve dans un état incohérent (utilisation impossible, erreurs SQL persistantes), vous pouvez le réinitialiser :

1. ***Configuration → Modules → InfraSStudio***<span style="white-space: pre-wrap;"> → cliquer sur </span>**Désactiver**.
    - [x] <span style="white-space: pre-wrap;">Le module sauvegarde toutes ses constantes sous le préfixe </span>`<span class="editor-theme-code">INFRASSTUDIOBKP_</span>`.
2. <span style="white-space: pre-wrap;">Cliquer à nouveau sur </span>**Activer**.
    - [x] Le module restaure ses constantes, recrée les tables manquantes et réenregistre les hooks.

<p class="callout success">**Aucune perte de données —**<span style="white-space: pre-wrap;"> Les valeurs de slot, les médias et les traductions sont conservés dans leurs tables respectives. La désactivation puis réactivation ne touche qu'au descripteur et aux hooks.</span></p>

### <span style="color: rgb(35, 111, 161);">Demander de l'aide</span>

Si rien ne fonctionne, préparez ces trois informations avant toute demande d'aide :

1. Capture d'écran de la page Diagnostic complète.
2. <span style="white-space: pre-wrap;">Les vingt dernières lignes de </span>`<span class="editor-theme-code">dolibarr.log</span>`<span style="white-space: pre-wrap;"> filtrées sur </span>`<span class="editor-theme-code">infrasstudio</span>`.
3. La version exacte du module et de Dolibarr (visibles en haut de la page Diagnostic).

Avec ces trois éléments, n'importe quel développeur connaissant le module peut établir un diagnostic en quelques minutes.

### <span style="color: rgb(35, 111, 161);">Récapitulatif</span>

**Vous savez désormais :**

- Lancer la page Diagnostic comme premier réflexe.
- Lire et filtrer les journaux Dolibarr.
- Identifier les sept incidents fréquents et leurs solutions.
- Réinitialiser le module proprement (désactivation et réactivation).
- Préparer un rapport d'incident efficace en trois étapes.

# CHAPITRE 27 — Permissions et rôles utilisateur

Le module expose sept permissions distinctes, attribuables finement aux utilisateurs Dolibarr. Ce chapitre vous indique les attributions à privilégier en fonction des rôles, dans l'esprit du principe de moindre privilège.

### <span style="color: rgb(35, 111, 161);">Les sept permissions du module</span>

<table id="bkmrk-permissionce-qu%27elle" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Permission

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Ce qu'elle autorise

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">paramMenu</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Voir l'entrée InfraS dans le menu Outils. Sans cette permission, le module est invisible pour l'utilisateur.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">readContent</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Consulter le contenu (pages, slots, médias) en lecture seule. Aucune modification possible.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editContent</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Modifier les valeurs des slots (textes, images, couleurs, etc.) en brouillon.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editTranslations</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Saisir et modifier les traductions (slots et fiches produit).

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editMedias</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Téléverser, modifier et supprimer des médias dans la bibliothèque.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">publish</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Publier les brouillons en attente, mettre en ligne ou retirer des pages.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">admin</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Configurer le module (sites gérés, constantes), supprimer des pages, accéder au Diagnostic.

</td></tr></tbody></table>

<p class="callout info">**Note —**<span style="white-space: pre-wrap;"> Un utilisateur portant le drapeau Dolibarr « Super-administrateur » contourne toutes les permissions du module. Ce comportement est volontaire pour rester cohérent avec la philosophie de Dolibarr. Pour tester finement les permissions, utilisez un compte non administrateur.</span></p>

### <span style="color: rgb(35, 111, 161);">Les rôles types</span>

Plutôt que d'attribuer les permissions une à une à chaque utilisateur, il est préférable de définir des profils que vous appliquerez ensuite aux comptes. Cinq profils types couvrent la grande majorité des cas :

<table id="bkmrk-r%C3%B4leprofiltypesperm" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col style="width: 28%;"></col><col style="width: 36%;"></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Rôle / Profil

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Types de permission

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Autorisation

</th></tr><tr><td rowspan="3" style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235); vertical-align: top;">**Lecteur**

Personne qui consulte le site sans le modifier (commercial, support, juriste relisant la conformité).

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">paramMenu</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">readContent</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Toutes les autres

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Non

</td></tr><tr style="background: rgb(250, 245, 255);"><td rowspan="5" style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235); vertical-align: top;">**Rédacteur**

Personne qui modifie les contenus mais ne publie pas seule (mise en place d'un circuit de relecture).

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">paramMenu</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">readContent</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editContent</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editMedias</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">publish</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Non (pas de publication directe)

</td></tr><tr><td rowspan="4" style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235); vertical-align: top;">**Traducteur**

Personne qui n'effectue que des traductions (souvent un prestataire externe).

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">paramMenu</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">readContent</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editTranslations</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Toutes les autres

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Non

</td></tr><tr style="background: rgb(250, 245, 255);"><td rowspan="6" style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235); vertical-align: top;">**Rédacteur autonome**

Personne qui rédige et publie seule (équipe restreinte, indépendant, etc.).

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">paramMenu</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">readContent</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editContent</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editMedias</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">editTranslations</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">publish</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235); vertical-align: top;">**Administrateur du module**

Développeur de l'agence ou responsable technique du site.

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Toutes les permissions

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Oui

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Attribuer les permissions à un utilisateur</span>

1. Rendez-vous dans Accueil → Utilisateurs et Groupes → Liste des utilisateurs.
2. Sélectionnez l'utilisateur cible.
3. <span style="white-space: pre-wrap;">Cliquez sur l'onglet </span>**Permissions**.
4. <span style="white-space: pre-wrap;">Faites défiler jusqu'à la section </span>**InfraSStudio**.
5. Cochez les permissions à attribuer.
6. Enregistrez.

<p class="callout info">**Conseil — Utilisez les groupes —**<span style="white-space: pre-wrap;"> Si vous administrez plusieurs rédacteurs, créez un groupe Dolibarr (par exemple « InfraS Rédacteurs ») et attribuez-lui les permissions. Les utilisateurs ajoutés au groupe en héritent automatiquement.</span></p>

### <span style="color: rgb(35, 111, 161);">Mettre en place un circuit de relecture</span>

Voici comment exploiter les permissions pour un circuit de relecture propre :

<table id="bkmrk-acteurpermissionst%C3%A2c" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Acteur

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Permissions

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Tâche

</th></tr><tr><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">Rédacteur

</td><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">readContent</span>`<span style="white-space: pre-wrap;"> + </span>`<span class="editor-theme-code">editContent</span>`<span style="white-space: pre-wrap;"> + </span>`<span class="editor-theme-code">editMedias</span>`

</td><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">Modifie les slots et prépare les brouillons.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">Relecteur

</td><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">readContent</span>`

</td><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">Consulte les brouillons dans l'aperçu, valide ou demande des modifications.

</td></tr><tr><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">Publicateur

</td><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">readContent</span>`<span style="white-space: pre-wrap;"> + </span>`<span class="editor-theme-code">publish</span>`

</td><td style="padding: 0.6rem 1rem; border: 1px solid rgb(229, 231, 235);">Publie les brouillons après validation du relecteur.

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Récapitulatif</span>

**Vous savez désormais :**

- Identifier les sept permissions du module.
- Définir cinq rôles types (lecteur, rédacteur, traducteur, rédacteur autonome, administrateur).
- Attribuer les permissions à un utilisateur ou à un groupe Dolibarr.
- Mettre en place un circuit de relecture à plusieurs.

# CHAPITRE 28 — Mise à jour du module

Les mises à jour du module s'effectuent sans interruption visible côté visiteurs. Ce chapitre présente la procédure standard et les précautions à observer.

### <span style="color: rgb(35, 111, 161);">Avant la mise à jour — liste de contrôle</span>

**Sur une instance de production, ne sautez jamais ces étapes :**

- Sauvegarde complète de la base Dolibarr (mysqldump).
- <span style="white-space: pre-wrap;">Sauvegarde du dossier </span>`<span class="editor-theme-code">htdocs/custom/infrasstudio/</span>`<span style="white-space: pre-wrap;"> existant.</span>
- <span style="white-space: pre-wrap;">Sauvegarde des données : </span>`<span class="editor-theme-code">DOL_DATA_ROOT/<entity>/website/</span>`<span style="white-space: pre-wrap;"> et </span>`<span class="editor-theme-code">medias/</span>`.
- Lecture du changelog de la nouvelle version pour repérer d'éventuelles modifications majeures.
- Test de la mise à jour sur une instance de pré-production lorsque c'est possible.

### <span style="color: rgb(35, 111, 161);">Procédure standard</span>

##### **Étape 1 — Désactiver le module**

<span style="white-space: pre-wrap;">Configuration → Modules → InfraSStudio → cliquer sur </span>**Désactiver**.

**Effet de la désactivation —**<span style="white-space: pre-wrap;"> Les constantes du module sont sauvegardées sous le préfixe </span>`<span class="editor-theme-code">INFRASSTUDIOBKP_</span>`. Les tables et leurs données restent intactes. L'entrée Outils → InfraS disparaît.

##### **Étape 2 — Remplacer les fichiers**

Trois méthodes selon votre environnement :

**Via l'interface Dolibarr**

1. <span style="white-space: pre-wrap;">Configuration → Modules → bouton </span>**« Déployer / installer un module »**.
2. <span style="white-space: pre-wrap;">Sélectionner la nouvelle archive </span>`<span class="editor-theme-code">module_infrasstudio-X.Y.Z.zip</span>`.
3. Confirmer le remplacement.

**Via SSH ou FTP**

```
cd /var/www/dolibarr/htdocs/custom/
mv infrasstudio infrasstudio.old.20260504
unzip /tmp/module_infrasstudio-1.9.0.zip
chown -R www-data:www-data infrasstudio/
```

**Via Git**

```
cd /var/www/dolibarr/htdocs/custom/infrasstudio
git fetch --tags
git checkout v1.9.0
```

##### **Étape 3 — Réactiver le module**

1. <span style="white-space: pre-wrap;">Configuration → Modules → InfraSStudio → cliquer sur </span>**Activer**.
2. Le module exécute alors :
    - <span style="white-space: pre-wrap;">la restauration des constantes </span>`<span class="editor-theme-code">INFRASSTUDIOBKP_</span>`<span style="white-space: pre-wrap;"> vers </span>`<span class="editor-theme-code">INFRASSTUDIO_</span>`,
    - <span style="white-space: pre-wrap;">l'application des migrations SQL nécessaires (fichiers </span>`<span class="editor-theme-code">sql/update_X.Y.Z_*.sql</span>`),
    - le réenregistrement des hooks et triggers,
    - <span style="white-space: pre-wrap;">la mise à jour de la constante </span>`<span class="editor-theme-code">INFRASSTUDIO_MAIN_VERSION</span>`.

##### **Étape 4 — Vérifier avec la page Diagnostic**

***Outils → InfraSStudio → Diagnostic***. L'ensemble des contrôles doit être au vert. La section Schéma SQL confirme en particulier que toutes les tables sont à jour.

##### **Étape 5 — Test fonctionnel**

Reproduisez trois actions courantes :

1. Ouvrir une page existante dans l'éditeur — l'aperçu doit se charger.
2. Modifier un slot — l'enregistrement automatique doit fonctionner (indicateur « Enregistré »).
3. Publier les modifications — vérifier que la version publique reflète bien la modification.

### <span style="color: rgb(35, 111, 161);">Lire le changelog avant chaque mise à jour</span>

Le changelog est accessible :

- <span style="white-space: pre-wrap;">Dans le module : </span>`<span class="editor-theme-code">htdocs/custom/infrasstudio/docs/changelog.xml</span>`.
- Dans l'administration : Outils → InfraSStudio → onglet Changelog.

##### **Lire les types de changement**

<table id="bkmrk-typesignificationfix" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Type

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Signification

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">fix</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Correction d'une anomalie.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">chg</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Modification d'un comportement existant.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">add</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Nouvelle fonctionnalité ou option.

</td></tr></tbody></table>

##### **Numérotation X.Y.Z**

<table id="bkmrk-composantcas-de-modi" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Composant

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Cas de modification

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">**X (majeur)**

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">La version Dolibarr minimale prise en charge change.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">**Y (mineur)**

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Une nouvelle fonctionnalité ou option utilisateur est ajoutée.

</td></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">**Z (correctif)**

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Corrections et modifications internes uniquement.

</td></tr></tbody></table>

### <span style="color: rgb(35, 111, 161);">Fréquence des mises à jour</span>

Recommandations :

- **Correctif (Z)**<span style="white-space: pre-wrap;"> : à appliquer rapidement, surtout si l'anomalie corrigée vous concerne.</span>
- **Mineur (Y)**<span style="white-space: pre-wrap;"> : à appliquer dans les une à deux semaines, après lecture du changelog.</span>
- **Majeur (X)**<span style="white-space: pre-wrap;"> : à tester en pré-production, à planifier dans une fenêtre de maintenance, à communiquer à votre équipe.</span>

### <span style="color: rgb(35, 111, 161);">Retour en arrière</span>

Si une mise à jour pose problème :

1. Désactivez le module.
2. <span style="white-space: pre-wrap;">Restaurez le dossier </span>`<span class="editor-theme-code">infrasstudio.old.<date>/</span>`<span style="white-space: pre-wrap;"> sauvegardé à l'étape 2.</span>
3. Si une migration SQL a été appliquée, restaurez la base depuis le dump précédent.
4. Réactivez le module.

<p class="callout warning">**Avertissement — Restauration SQL —**<span style="white-space: pre-wrap;"> Une migration ajoute parfois des colonnes ou des tables. Si vous restaurez le dump pré-migration sans restaurer également les fichiers, le module détectera des structures manquantes et s'interrompra. Synchronisez toujours fichiers et base de données ensemble.</span></p>

### <span style="color: rgb(35, 111, 161);">Récapitulatif</span>

**Vous savez désormais :**

- Préparer une mise à jour avec une liste de contrôle (sauvegarde base, fichiers, données).
- Suivre la procédure en cinq étapes (désactiver, remplacer, réactiver, diagnostic, test).
- Lire le changelog et comprendre la numérotation X.Y.Z.
- Appliquer la fréquence appropriée selon le type de version.
- Revenir en arrière en cas d'incident.

**Fin de la Partie V —**<span style="white-space: pre-wrap;"> Vous savez gérer le module en tant qu'administrateur : permissions, configuration avancée, résolution des incidents, mises à jour. Le module est désormais entre des mains compétentes.</span>

La Partie VI propose la référence pure du module : tableaux exhaustifs des constantes, des shortcodes, des hooks, des tables SQL et des scripts en ligne de commande. À garder à portée pour une consultation rapide.

# Templates de sites préfabriqué

Les templates de sites préfabriqués transforment InfraSStudio en kit complet de mise en route. En quelques minutes, un site Dolibarr Website vide devient un site corporate ou éditorial opérationnel, avec catalogue produits, blog, formulaire de contact et neuf pages cousues sur un design moderne. Aucun code à toucher, aucune ligne de configuration à éditer : Dolibarr crée le site, et InfraSStudio applique le reste en arrière-plan dès le prochain chargement d'une page admin.

### <span style="color: rgb(35, 111, 161);">Deux univers de design</span>

<span style="white-space: pre-wrap;">Le module livre deux templates aux esthétiques opposées, conçus pour deux types de positionnement : </span>**Vibrant**<span style="white-space: pre-wrap;"> pour une présence corporate énergique, </span>**Editorial**<span style="white-space: pre-wrap;"> pour un ton de revue ou de cabinet de conseil. Chaque template embarque le même socle fonctionnel — neuf pages, un catalogue produit, un blog dynamique, un formulaire de contact branché sur le pipeline InfraSStudio — mais sa charte typographique et sa palette diffèrent radicalement.</span>

<table id="bkmrk-templatedesignciblev" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.95em;"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Template

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Design

</th><th class="align-left" style="padding: 0.6rem 1rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Cible

</th></tr><tr><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">**Vibrant**`<span class="editor-theme-code">website_infrasstudio-vibrant.zip</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Dégradés violet → orange, typographie Inter avec touches manuscrites Caveat, hero plein écran, CTA en pilule, cartes avec ombre douce.

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">B2C, agences, lancements produit, communication énergique.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">**Editorial**`<span class="editor-theme-code">website_infrasstudio-editorial.zip</span>`

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Fond sombre charcoal, typographie Playfair Display serif, layouts asymétriques, accents orange minimalistes.

</td><td style="padding: 0.5rem 1rem; border: 1px solid rgb(229, 231, 235);">Cabinet de conseil, publication éditoriale, contenu premium, signature graphique forte.

</td></tr></tbody></table>

##### **Les neuf pages livrées**

Chaque template fournit un site complet et cohérent, prêt à être rempli avec votre propre contenu. Les pages sont déjà reliées entre elles par la navigation, et le catalogue ainsi que le blog sont dynamiques : ils s'alimentent automatiquement depuis les produits Dolibarr et les articles publiés, sans aucune édition de gabarit.

<table id="bkmrk-pager%C3%B4lemenunavigati" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.93em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.5rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Page

</th><th class="align-left" style="padding: 0.5rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Rôle

</th></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">menu</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Navigation principale (logo, cinq liens, CTA).

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">footer</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Pied de page en quatre colonnes avec réseaux sociaux.

</td></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">index</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Page d'accueil : hero, trois services mis en avant, extrait dynamique du catalogue.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">about</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Page « À propos » : histoire de l'entreprise et trois valeurs.

</td></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">catalog</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Catalogue produit dynamique, alimenté depuis </span>

`<span class="editor-theme-code">llx_product</span>`

<span style="white-space: pre-wrap;"> avec filtres par univers et type.</span>

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">product-detail</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Fiche produit unique servie automatiquement par les wrappers </span>

`<span class="editor-theme-code">solution-<ref>.php</span>`

.

</td></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">blog</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Index blog : liste dynamique des articles publiés.

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">blog-welcome</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Article de démonstration prêt à éditer, sert d'exemple pour le rédacteur.

</td></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">`<span class="editor-theme-code">contact</span>`

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Page contact avec un formulaire branché sur le pipeline complet (tiers + ticket + notifications).

</td></tr></tbody></table>

<span style="white-space: pre-wrap;">Chaque template comporte une soixantaine de slots éditables, fournis avec leur valeur par défaut en français et leur traduction anglaise pré-remplie via l'attribut </span>`<span class="editor-theme-code">default_en=...</span>`. Un rédacteur peut écraser n'importe quelle valeur sans toucher au HTML.

### <span style="color: rgb(35, 111, 161);">Importer un template</span>

Les templates apparaissent dans la liste native des modèles de site de Dolibarr — aucun outil tiers n'est nécessaire. La procédure est identique à celle d'un template officiel Dolibarr :

1. <span style="white-space: pre-wrap;">Ouvrir </span>**Module Site Internet → Nouveau site → Choisir un modèle**.
2. <span style="white-space: pre-wrap;">Sélectionner </span>`<span class="editor-theme-code">website_infrasstudio-vibrant</span>`<span style="white-space: pre-wrap;"> ou </span>`<span class="editor-theme-code">website_infrasstudio-editorial</span>`<span style="white-space: pre-wrap;"> dans la galerie.</span>
3. <span style="white-space: pre-wrap;">Donner un identifiant au site (par exemple </span>`<span class="editor-theme-code">monsite</span>`) et valider.

<span style="white-space: pre-wrap;">Dolibarr décompresse le ZIP, crée le site dans </span>`<span class="editor-theme-code">llx_website</span>`<span style="white-space: pre-wrap;">, dépose les neuf pages dans </span>`<span class="editor-theme-code">llx_website_page</span>`<span style="white-space: pre-wrap;"> et copie les SVG placeholders dans les médias du site. À ce stade, le site existe mais n'est pas encore exploitable : il faut que la pipeline d'auto-configuration tourne pour que tout soit aligné.</span>

**Note — Modèles non visibles —**<span style="white-space: pre-wrap;"> Si vous ne voyez pas les templates InfraSStudio dans la galerie, ouvrez </span>**Outils → InfraS → InfraSStudio → Configuration**<span style="white-space: pre-wrap;"> et cliquez sur </span>**« Rafraîchir les modèles »**<span style="white-space: pre-wrap;">. Le module recompresse alors les dossiers </span>`<span class="editor-theme-code">doctemplates/websites/</span>`<span style="white-space: pre-wrap;"> et les place dans </span>`<span class="editor-theme-code">DOL_DATA_ROOT/doctemplates/websites/</span>`<span style="white-space: pre-wrap;"> où Dolibarr les scanne pour la galerie. Utile après une mise à jour du module ou un déplacement de fichiers.</span>

### <span style="color: rgb(35, 111, 161);">Auto-configuration plug-and-play</span>

Au prochain chargement d'une page d'administration Dolibarr (par exemple l'éditeur du site qui s'ouvre juste après l'import), un hook InfraSStudio détecte que le site embarque un manifest de seed encore non appliqué. La pipeline d'auto-configuration se déclenche alors automatiquement et exécute sept étapes consécutives en quelques secondes :

<table id="bkmrk-%C3%89tapeeffetcat%C3%A9gories" style="width: 100%; border-collapse: collapse; margin: 1rem 0px; font-size: 0.93em;"><colgroup><col></col><col></col></colgroup><tbody><tr style="background: rgb(25, 5, 45); color: rgb(254, 252, 232);"><th class="align-left" style="padding: 0.5rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Étape

</th><th class="align-left" style="padding: 0.5rem; text-align: left; border: 1px solid rgb(25, 5, 45);">Effet

</th></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">**Catégories**

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Crée les catégories produit nécessaires si elles n'existent pas (lookup idempotent sur le label).

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">**Produits démo**

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">Crée six produits factices catégorisés, avec traductions FR/EN, badges, extrafields. Permet au catalogue d'être immédiatement peuplé.

</td></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">**Médias**

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Enregistre les SVG placeholders dans </span>

`<span class="editor-theme-code">llx_infrasstudio_media</span>`

<span style="white-space: pre-wrap;"> avec leur alt par locale.</span>

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">**Constantes**

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Pose </span>

`<span class="editor-theme-code">INFRASSTUDIO_WEBSITE_KEY</span>`

<span style="white-space: pre-wrap;"> et </span>

`<span class="editor-theme-code">INFRASSTUDIO_PUBLIC_DOCROOT</span>`

<span style="white-space: pre-wrap;"> avec auto-détection du docroot Apache (cascade en cinq niveaux, voir le chapitre Constantes).</span>

</td></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">**Site géré**

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Ajoute le site à </span>

`<span class="editor-theme-code">INFRASSTUDIO_MANAGED_SITES</span>`

<span style="white-space: pre-wrap;"> pour qu'il apparaisse dans le Studio.</span>

</td></tr><tr style="background: rgb(250, 245, 255);"><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">**Patch des gabarits**

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Insère dans chaque </span>

`<span class="editor-theme-code">pageN.tpl.php</span>`

<span style="white-space: pre-wrap;"> l'invocation du moteur de slots, avant le rendu final de Dolibarr.</span>

</td></tr><tr><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);">**Scan des slots + wrappers**

</td><td style="padding: 0.5rem; border: 1px solid rgb(229, 231, 235);"><span style="white-space: pre-wrap;">Détecte les tokens </span>

`<span class="editor-theme-code">{{slot:...}}</span>`

<span style="white-space: pre-wrap;"> dans le HTML, peuple </span>

`<span class="editor-theme-code">llx_infrasstudio_slot</span>`

<span style="white-space: pre-wrap;">, génère les wrappers </span>

`<span class="editor-theme-code">solution-<ref>.php</span>`

.

</td></tr></tbody></table>

<span style="white-space: pre-wrap;">Un message </span>`<span class="editor-theme-code">setEventMessages</span>`<span style="white-space: pre-wrap;"> de Dolibarr confirme la fin de l'opération : </span>**« InfraSStudio : site auto-configuré »**. Le site est désormais consultable en public, avec ses slots résolus en valeurs par défaut, son catalogue alimenté, son formulaire de contact opérationnel et ses informations de société automatiquement injectées (nom, email, adresse) à la place des données génériques du template.

**Note — Filet de sécurité —**<span style="white-space: pre-wrap;"> Si l'import a été fait via la ligne de commande ou l'API REST (cas où le hook </span>`<span class="editor-theme-code">doActions</span>`<span style="white-space: pre-wrap;"> ne se déclenche pas), un cron horaire scanne </span>`<span class="editor-theme-code">INFRASSTUDIO_MANAGED_SITES</span>`<span style="white-space: pre-wrap;"> et applique le seed sur tout site dont le manifest n'a pas encore été appliqué. La pipeline se déclenche également à chaque connexion d'un administrateur, ce qui couvre les imports réalisés sans interaction admin immédiate.</span>

### <span style="color: rgb(35, 111, 161);">Personnaliser après import</span>

Une fois le site auto-configuré, deux interfaces se complètent pour la personnalisation.

##### **Éditeur Studio**

L'éditeur Studio (**Outils → InfraS → InfraSStudio → Éditeur**) ouvre le site dans une interface trois colonnes : arborescence des pages à gauche, aperçu live au centre, inspector de slot à droite. Le rédacteur clique sur n'importe quel élément du site dans l'aperçu pour ouvrir l'éditeur du slot correspondant — titre, paragraphe, image, icône, couleur. Aucun HTML à toucher, aucune connaissance technique requise.

##### **Supprimer les produits de démonstration**

Les six produits démo créés par le seed sont utiles pour visualiser le catalogue tout de suite, mais ils n'ont pas vocation à rester en production. L'éditeur Produits du Studio affiche un bandeau qui propose deux actions en un clic :

- **Dépublier les produits de démo**<span style="white-space: pre-wrap;"> : les produits restent dans Dolibarr mais sortent du catalogue public (</span>`<span class="editor-theme-code">infrasstudio_published=0</span>`). Réversible.
- **Supprimer les produits de démo**<span style="white-space: pre-wrap;"> : efface complètement les six produits, leurs traductions, leurs extrafields et leur liaison à la catégorie. Irréversible.</span>

<span style="white-space: pre-wrap;">Le bandeau disparaît automatiquement dès qu'aucun produit démo n'est détecté dans l'entité. Aucun risque d'effacer des produits réels — le filtre se base sur les références </span>`<span class="editor-theme-code">demo-*</span>`<span style="white-space: pre-wrap;"> posées par le seed.</span>

##### **Re-patch automatique des gabarits**

<span style="white-space: pre-wrap;">Dolibarr régénère les fichiers </span>`<span class="editor-theme-code">pageN.tpl.php</span>`<span style="white-space: pre-wrap;"> à chaque enregistrement dans son éditeur de pages — ce qui écrase notre invocation du moteur de slots. Le hook InfraSStudio intercepte ces sauvegardes (</span>`<span class="editor-theme-code">action=updatesource</span>`<span style="white-space: pre-wrap;"> ou </span>`<span class="editor-theme-code">overwritesite</span>`) et re-patche le fichier immédiatement après. Plus aucune manipulation manuelle n'est nécessaire : vous pouvez éditer librement vos pages dans Dolibarr, les slots InfraSStudio continueront de fonctionner.

### <span style="color: rgb(35, 111, 161);">Récapitulatif</span>

**Vous savez désormais :**

- Choisir entre les deux templates Vibrant et Editorial selon le positionnement souhaité.
- Importer un template depuis la galerie native du module Site Internet de Dolibarr.
- Comprendre la pipeline d'auto-configuration en sept étapes qui se déclenche au prochain chargement d'une page admin.
- <span style="white-space: pre-wrap;">Identifier les filets de sécurité (hook </span>`<span class="editor-theme-code">doActions</span>`, cron horaire, déclenchement à la connexion admin).
- Personnaliser le site importé via l'éditeur Studio.
- Nettoyer le site des produits de démonstration en un clic.