@fraza/core 0.3.7 → 0.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +4 -0
- package/THIRD-PARTY-NOTICES.md +2 -2
- package/changelog.json +61 -0
- package/dist/docs/00-decouverte/01-qu-est-ce-que-fraza.md +1 -1
- package/dist/docs/01-demarrage/01-installation.md +9 -15
- package/dist/docs/01-demarrage/02-tour-du-proprietaire.md +1 -1
- package/dist/docs/01-demarrage/03-configuration.md +1 -1
- package/dist/docs/02-guides/accepter-des-paiements.md +1 -1
- package/dist/docs/02-guides/basculer-sur-le-registre-de-secours.md +3 -3
- package/dist/docs/02-guides/blocs-personnalises.md +1 -1
- package/dist/docs/02-guides/gerer-les-medias.md +1 -1
- package/dist/docs/02-guides/index.md +1 -1
- package/dist/docs/02-guides/seo-et-metadonnees.md +1 -1
- package/dist/docs/03-reference/01-cores/templates.md +3 -3
- package/dist/docs/03-reference/03-registres/media-registry.md +4 -4
- package/dist/docs/03-reference/05-cli/fraza-key.md +1 -1
- package/dist/docs/03-reference/06-configuration/paquets-supportes.md +1 -1
- package/dist/docs/03-reference/06-configuration/variables-d-environnement.md +2 -2
- package/dist/docs/04-architecture/02-frontieres-serveur-client.md +1 -1
- package/dist/docs/04-architecture/05-securite.md +1 -1
- package/dist/docs/04-architecture/07-licence-et-propriete.md +1 -1
- package/dist/docs/05-contribution/03-redaction.md +10 -0
- package/dist/docs/05-contribution/05-publication.md +0 -1
- package/dist/docs/06-modules/booking/{installation.md → 01-installation.md} +35 -20
- package/dist/docs/06-modules/booking/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/booking/{admin.md → 03-admin.md} +3 -3
- package/dist/docs/06-modules/booking/{reservation-en-ligne.md → 04-reservation-en-ligne.md} +2 -2
- package/dist/docs/06-modules/booking/{courriels.md → 05-courriels.md} +2 -2
- package/dist/docs/06-modules/booking/{modele-de-donnees.md → 06-modele-de-donnees.md} +1 -1
- package/dist/docs/06-modules/booking/{api.md → 07-api.md} +2 -2
- package/dist/docs/06-modules/booking/index.md +22 -12
- package/dist/docs/06-modules/drive/01-installation.md +92 -0
- package/dist/docs/06-modules/drive/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/drive/{admin.md → 03-admin.md} +8 -8
- package/dist/docs/06-modules/drive/{partages.md → 04-partages.md} +5 -5
- package/dist/docs/06-modules/drive/{fichiers.md → 05-fichiers.md} +4 -4
- package/dist/docs/06-modules/drive/{modele-de-donnees.md → 06-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/drive/{api.md → 07-api.md} +5 -5
- package/dist/docs/06-modules/drive/index.md +22 -12
- package/dist/docs/06-modules/facturation/{installation.md → 01-installation.md} +61 -39
- package/dist/docs/06-modules/facturation/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/facturation/{facturation.md → 03-facturation.md} +4 -4
- package/dist/docs/06-modules/facturation/{taxes.md → 04-taxes.md} +2 -2
- package/dist/docs/06-modules/facturation/{paiements.md → 05-paiements.md} +3 -3
- package/dist/docs/06-modules/facturation/{recurrences-et-rappels.md → 06-recurrences-et-rappels.md} +4 -4
- package/dist/docs/06-modules/facturation/{courriels.md → 07-courriels.md} +5 -5
- package/dist/docs/06-modules/facturation/{modele-de-donnees.md → 08-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/facturation/{api.md → 09-api.md} +3 -3
- package/dist/docs/06-modules/facturation/index.md +26 -16
- package/dist/docs/06-modules/forms/{installation.md → 01-installation.md} +25 -30
- package/dist/docs/06-modules/forms/{configuration.md → 02-configuration.md} +4 -4
- package/dist/docs/06-modules/forms/{champs.md → 03-champs.md} +4 -4
- package/dist/docs/06-modules/forms/{admin.md → 04-admin.md} +9 -9
- package/dist/docs/06-modules/forms/{soumissions.md → 05-soumissions.md} +7 -7
- package/dist/docs/06-modules/forms/{affichage.md → 06-affichage.md} +3 -3
- package/dist/docs/06-modules/forms/{modele-de-donnees.md → 07-modele-de-donnees.md} +3 -3
- package/dist/docs/06-modules/forms/{api.md → 08-api.md} +4 -4
- package/dist/docs/06-modules/forms/index.md +26 -14
- package/dist/docs/06-modules/index.md +2 -2
- package/dist/docs/06-modules/medias/{installation.md → 01-installation.md} +33 -36
- package/dist/docs/06-modules/medias/{configuration.md → 02-configuration.md} +5 -5
- package/dist/docs/06-modules/medias/{televersement.md → 03-televersement.md} +4 -4
- package/dist/docs/06-modules/medias/{admin.md → 04-admin.md} +7 -7
- package/dist/docs/06-modules/medias/{modele-de-donnees.md → 06-modele-de-donnees.md} +4 -4
- package/dist/docs/06-modules/medias/{api.md → 07-api.md} +6 -6
- package/dist/docs/06-modules/medias/index.md +25 -13
- package/dist/docs/06-modules/pages/{installation.md → 01-installation.md} +15 -17
- package/dist/docs/06-modules/pages/{configuration.md → 02-configuration.md} +1 -1
- package/dist/docs/06-modules/pages/{admin.md → 03-admin.md} +6 -6
- package/dist/docs/06-modules/pages/{modele-de-donnees.md → 04-modele-de-donnees.md} +2 -2
- package/dist/docs/06-modules/pages/{templates.md → 05-templates.md} +1 -1
- package/dist/docs/06-modules/pages/{api.md → 06-api.md} +2 -2
- package/dist/docs/06-modules/pages/index.md +21 -9
- package/dist/docs/06-modules/posts/{installation.md → 01-installation.md} +28 -34
- package/dist/docs/06-modules/posts/{configuration.md → 02-configuration.md} +6 -6
- package/dist/docs/06-modules/posts/{types-et-champs.md → 03-types-et-champs.md} +11 -11
- package/dist/docs/06-modules/posts/{taxonomies-et-relations.md → 04-taxonomies-et-relations.md} +5 -5
- package/dist/docs/06-modules/posts/{admin.md → 05-admin.md} +13 -13
- package/dist/docs/06-modules/posts/{modele-de-donnees.md → 06-modele-de-donnees.md} +3 -3
- package/dist/docs/06-modules/posts/{templates.md → 07-templates.md} +2 -2
- package/dist/docs/06-modules/posts/{api.md → 08-api.md} +3 -3
- package/dist/docs/06-modules/posts/index.md +25 -13
- package/dist/shared/lib/version.js +1 -1
- package/package.json +1 -1
- package/supported.json +1 -1
- package/dist/docs/06-modules/drive/installation.md +0 -69
- /package/dist/docs/06-modules/medias/{integration.md → 05-integration.md} +0 -0
|
@@ -4,7 +4,7 @@ description: Variable d'activation, dépendances d'origine, de courriel et de st
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/forms/soumissions
|
|
7
|
+
- 06-modules/forms/05-soumissions
|
|
8
8
|
- 03-reference/06-configuration/variables-d-environnement
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -30,7 +30,7 @@ En revanche, trois services du core conditionnent son fonctionnement. Les ignore
|
|
|
30
30
|
| `FRAZA_STORAGE_*` | Les champs de type fichier échouent. Le reste du formulaire fonctionne. |
|
|
31
31
|
| `FRAZA_ENCRYPTION_KEY` | Aucun jeton de délai n'est émis : le délai minimal n'est pas vérifié, avec un avertissement au journal. |
|
|
32
32
|
| Table `fraza_email_outbox` (`npx fraza-db migrate`) | Aucun courriel n'est mis en file. Les soumissions sont enregistrées. |
|
|
33
|
-
| `FRAZA_NAME`, `FRAZA_LOGO_URL`, `FRAZA_SITE_URL` | La [page publique dédiée](./affichage.md#page-publique-dédiée) s'affiche sans marque : ni logo dans la barre, ni nom en pied de page. Le formulaire lui même fonctionne. |
|
|
33
|
+
| `FRAZA_NAME`, `FRAZA_LOGO_URL`, `FRAZA_SITE_URL` | La [page publique dédiée](./06-affichage.md#page-publique-dédiée) s'affiche sans marque : ni logo dans la barre, ni nom en pied de page. Le formulaire lui même fonctionne. |
|
|
34
34
|
|
|
35
35
|
La première ligne mérite d'être répétée : c'est la panne la plus fréquente de ce module, et la moins lisible. Le routeur du core compare l'en-tête `Origin` de la requête à l'origine déclarée. Sans variable, il n'y a rien à comparer et la protection refuse tout.
|
|
36
36
|
|
|
@@ -56,7 +56,7 @@ La première, `Général`, porte le titre, le slug, la description et le statut.
|
|
|
56
56
|
|
|
57
57
|
Le mode « redirection » remplace le message par une navigation vers l'URL donnée, exécutée par le navigateur après la réponse du serveur. Une adresse en `https://` ou `http://`, ou une page du site comme `/merci` ; toute autre est refusée à l'enregistrement.
|
|
58
58
|
|
|
59
|
-
Voir [Soumissions](./soumissions.md) pour l'effet exact de chacun de ces réglages sur le pipeline.
|
|
59
|
+
Voir [Soumissions](./05-soumissions.md) pour l'effet exact de chacun de ces réglages sur le pipeline.
|
|
60
60
|
|
|
61
61
|
## Statut d'un formulaire
|
|
62
62
|
|
|
@@ -85,7 +85,7 @@ Elles ne suffisent pas seules : les routes et les écrans d'admin exigent d'abor
|
|
|
85
85
|
|
|
86
86
|
`forms.view` suffit à **lire le contenu des soumissions**, y compris les données personnelles qu'elles portent et les pièces jointes. Ce n'est pas une permission de simple consultation de structure, à garder en tête au moment de la distribuer.
|
|
87
87
|
|
|
88
|
-
Le point de soumission public, lui, n'exige aucune permission. Voir [Soumissions](./soumissions.md).
|
|
88
|
+
Le point de soumission public, lui, n'exige aucune permission. Voir [Soumissions](./05-soumissions.md).
|
|
89
89
|
|
|
90
90
|
## Entrées d'admin
|
|
91
91
|
|
|
@@ -4,8 +4,8 @@ description: Catalogue des types de champs, options de configuration, largeurs,
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/forms/soumissions
|
|
8
|
-
- 06-modules/forms/affichage
|
|
7
|
+
- 06-modules/forms/05-soumissions
|
|
8
|
+
- 06-modules/forms/06-affichage
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
Un formulaire est une liste ordonnée de champs, composée au glisser-déposer dans l'onglet Champs du constructeur. Les champs sont stockés en JSON avec le formulaire, il n'y a pas de table de champs.
|
|
@@ -101,7 +101,7 @@ Les champs fichier d'un formulaire totalisent 50 Mo au plus (`maxFiles × maxSiz
|
|
|
101
101
|
|
|
102
102
|
`ALL` lève la restriction de famille, pas les contrôles de contenu du core : le SVG reste refusé quel que soit le réglage, la signature binaire doit correspondre à l'extension déclarée quand cette extension est connue, et le contenu est inspecté à la recherche de balises exécutables. La taille maximale du champ s'applique toujours.
|
|
103
103
|
|
|
104
|
-
Le point de soumission compte les fichiers envoyés sous le nom du champ, `maxFiles` au plus, vérifie chacun, puis les téléverse tous une fois la soumission entière validée. Voir [Soumissions](./soumissions.md).
|
|
104
|
+
Le point de soumission compte les fichiers envoyés sous le nom du champ, `maxFiles` au plus, vérifie chacun, puis les téléverse tous une fois la soumission entière validée. Voir [Soumissions](./05-soumissions.md).
|
|
105
105
|
|
|
106
106
|
### Longueur des textes
|
|
107
107
|
|
|
@@ -139,6 +139,6 @@ La même lecture (`readSubmission` de `fields.js`) tourne dans le navigateur ava
|
|
|
139
139
|
|
|
140
140
|
## Notes
|
|
141
141
|
|
|
142
|
-
- Les champs sont stockés en JSON dans le formulaire, sans schéma en base. Leur définition est vérifiée à l'enregistrement du formulaire, voir [Modèle de données](./modele-de-donnees.md).
|
|
142
|
+
- Les champs sont stockés en JSON dans le formulaire, sans schéma en base. Leur définition est vérifiée à l'enregistrement du formulaire, voir [Modèle de données](./07-modele-de-donnees.md).
|
|
143
143
|
- Le type `checkbox` porte une propriété `consentText` créée à l'ajout du champ. Elle n'est ni modifiable dans le constructeur, ni rendue nulle part. Ne pas compter dessus.
|
|
144
144
|
- L'ordre des champs dans le constructeur est l'ordre de rendu, l'ordre du tableau récapitulatif des courriels, et l'ordre de la fiche de soumission.
|
|
@@ -4,13 +4,13 @@ description: Liste des formulaires, constructeur à deux onglets, boîte de réc
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/forms/champs
|
|
8
|
-
- 06-modules/forms/soumissions
|
|
7
|
+
- 06-modules/forms/03-champs
|
|
8
|
+
- 06-modules/forms/05-soumissions
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
Le module ajoute une section `Formulaires` à la barre latérale de l'admin, avec deux entrées : les formulaires et leurs soumissions. Cette page décrit ce que fait l'interface, y compris les quelques comportements qui surprennent.
|
|
12
12
|
|
|
13
|
-
L'accès à la section demande `forms.view`, en plus de `admin.access`. Sans elle, `/admin/forms` répond 404, comme une page inconnue. Créer, modifier, dupliquer et supprimer demandent `forms.manage`. Voir [Configuration](./configuration.md).
|
|
13
|
+
L'accès à la section demande `forms.view`, en plus de `admin.access`. Sans elle, `/admin/forms` répond 404, comme une page inconnue. Créer, modifier, dupliquer et supprimer demandent `forms.manage`. Voir [Configuration](./02-configuration.md).
|
|
14
14
|
|
|
15
15
|
## Écrans
|
|
16
16
|
|
|
@@ -36,7 +36,7 @@ Sous 1024 px, la liste compacte montre le titre, la date de modification, le nom
|
|
|
36
36
|
| Dupliquer | Copie titrée `<titre> (copie)`, slug ré-unicifié, statut `inactive`. Aucune soumission copiée. |
|
|
37
37
|
| Supprimer | Après confirmation. Supprime **les soumissions du formulaire** et leurs fichiers, dans une transaction. |
|
|
38
38
|
|
|
39
|
-
La confirmation de suppression nomme les soumissions et leurs pièces jointes. Elle est irréversible, et les pièces jointes sont retirées du stockage objet. Voir [Modèle de données](./modele-de-donnees.md).
|
|
39
|
+
La confirmation de suppression nomme les soumissions et leurs pièces jointes. Elle est irréversible, et les pièces jointes sont retirées du stockage objet. Voir [Modèle de données](./07-modele-de-donnees.md).
|
|
40
40
|
|
|
41
41
|
## Constructeur
|
|
42
42
|
|
|
@@ -48,11 +48,11 @@ Un bouton `Voir` ouvre la page publique dans un nouvel onglet. Il n'apparaît qu
|
|
|
48
48
|
|
|
49
49
|
Trois colonnes : la palette, le canevas, l'inspecteur.
|
|
50
50
|
|
|
51
|
-
La **palette** liste les types de champs en quatre familles, `Basique`, `Choix`, `Avancé` et `Mise en page`. Cliquer sur un type l'ajoute à la fin, le glisser le dépose à la position visée. Voir [Champs](./champs.md) pour le catalogue.
|
|
51
|
+
La **palette** liste les types de champs en quatre familles, `Basique`, `Choix`, `Avancé` et `Mise en page`. Cliquer sur un type l'ajoute à la fin, le glisser le dépose à la position visée. Voir [Champs](./03-champs.md) pour le catalogue.
|
|
52
52
|
|
|
53
53
|
Le **canevas** affiche les champs à leur largeur réelle, donc côte à côte quand ils sont en demi ou en tiers. Chaque bloc porte son libellé, son type et son nom, et une poignée pour le déplacer. La croix de suppression n'apparaît qu'au survol.
|
|
54
54
|
|
|
55
|
-
L'**inspecteur** n'apparaît que lorsqu'un champ est sélectionné, et un champ qui vient d'être ajouté l'est automatiquement. Il porte les réglages du type sélectionné, décrits dans [Champs](./champs.md) : pour un champ fichier, « Nombre de fichiers maximal » et « Taille maximale par fichier (Mo) », bornés ; pour un texte ou un paragraphe, « Longueur maximale (caractères) ».
|
|
55
|
+
L'**inspecteur** n'apparaît que lorsqu'un champ est sélectionné, et un champ qui vient d'être ajouté l'est automatiquement. Il porte les réglages du type sélectionné, décrits dans [Champs](./03-champs.md) : pour un champ fichier, « Nombre de fichiers maximal » et « Taille maximale par fichier (Mo) », bornés ; pour un texte ou un paragraphe, « Longueur maximale (caractères) ».
|
|
56
56
|
|
|
57
57
|
### Onglet Réglages
|
|
58
58
|
|
|
@@ -94,12 +94,12 @@ La carte `Réponses` affiche les champs **dans l'ordre du formulaire**, avec le
|
|
|
94
94
|
|
|
95
95
|
Les champs cachés **apparaissent** dans cette carte, contrairement aux courriels qui les excluent. Une case de consentement s'affiche en `Oui` ou `Non`, une liste de cases à cocher en valeurs séparées par des virgules.
|
|
96
96
|
|
|
97
|
-
La carte `Fichiers` n'apparaît que s'il y en a. Chaque pièce jointe se télécharge par la route protégée du module, dans un nouvel onglet. Voir [API](./api.md).
|
|
97
|
+
La carte `Fichiers` n'apparaît que s'il y en a. Chaque pièce jointe se télécharge par la route protégée du module, dans un nouvel onglet. Voir [API](./08-api.md).
|
|
98
98
|
|
|
99
|
-
La carte `Détails techniques` expose le statut, le réseau de l'adresse IP (`/24` ou `/48`), ou `—` quand le formulaire n'en garde aucune, le navigateur et la page d'origine. Le navigateur et la page d'origine viennent des en-têtes de la requête et sont falsifiables. Voir [Soumissions](./soumissions.md).
|
|
99
|
+
La carte `Détails techniques` expose le statut, le réseau de l'adresse IP (`/24` ou `/48`), ou `—` quand le formulaire n'en garde aucune, le navigateur et la page d'origine. Le navigateur et la page d'origine viennent des en-têtes de la requête et sont falsifiables. Voir [Soumissions](./05-soumissions.md).
|
|
100
100
|
|
|
101
101
|
## Notes
|
|
102
102
|
|
|
103
103
|
- Aucun écran n'adapte ses boutons à la permission : un compte qui n'a que `forms.view` voit les actions d'écriture et se fait refuser par l'API au moment de les utiliser.
|
|
104
104
|
- La duplication d'un formulaire ne demande pas de confirmation. Elle est sans risque, la copie étant créée inactive.
|
|
105
|
-
- Le constructeur ne prévisualise pas le formulaire. Pour le voir tel que le visiteur le verra, ouvrir sa page publique avec le bouton `Voir`. Voir [Affichage](./affichage.md).
|
|
105
|
+
- Le constructeur ne prévisualise pas le formulaire. Pour le voir tel que le visiteur le verra, ouvrir sa page publique avec le bouton `Voir`. Voir [Affichage](./06-affichage.md).
|
|
@@ -4,8 +4,8 @@ description: Pipeline de soumission, vérification d'origine, anti-robots, pièc
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/forms/modele-de-donnees
|
|
8
|
-
- 06-modules/forms/api
|
|
7
|
+
- 06-modules/forms/07-modele-de-donnees
|
|
8
|
+
- 06-modules/forms/08-api
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
Une soumission traverse neuf étapes, dans cet ordre. Comprendre lesquelles rejettent et lesquelles laissent passer est la clé du diagnostic quand un formulaire ne fonctionne pas.
|
|
@@ -42,13 +42,13 @@ Trois conséquences directes :
|
|
|
42
42
|
- Si aucune des deux variables n'est renseignée, **toute** soumission est refusée. C'est la panne la plus fréquente à l'installation.
|
|
43
43
|
- Une soumission depuis la même origine passe automatiquement, sans jeton à gérer côté client.
|
|
44
44
|
|
|
45
|
-
Voir [Configuration](./configuration.md).
|
|
45
|
+
Voir [Configuration](./02-configuration.md).
|
|
46
46
|
|
|
47
47
|
## Format de la requête
|
|
48
48
|
|
|
49
49
|
Le corps doit être un formulaire encodé. Les composants du module envoient du **`multipart/form-data`**, seul encodage capable de porter des fichiers. Le parseur accepte aussi `application/x-www-form-urlencoded` pour un formulaire sans pièce jointe. Un corps JSON est refusé dans tous les cas.
|
|
50
50
|
|
|
51
|
-
Chaque champ de saisie est envoyé sous son `name`, plus deux champs techniques décrits ci-dessous. Les composants fournis par le module s'en chargent. Voir [Affichage](./affichage.md).
|
|
51
|
+
Chaque champ de saisie est envoyé sous son `name`, plus deux champs techniques décrits ci-dessous. Les composants fournis par le module s'en chargent. Voir [Affichage](./06-affichage.md).
|
|
52
52
|
|
|
53
53
|
## Anti-robots
|
|
54
54
|
|
|
@@ -82,7 +82,7 @@ Seules les **métadonnées** sont enregistrées avec la soumission : nom du cham
|
|
|
82
82
|
|
|
83
83
|
Ces fichiers sont **privés**. Aucune URL publique n'existe : ils ne sont accessibles que par la route de téléchargement de l'admin, protégée par `forms.view`.
|
|
84
84
|
|
|
85
|
-
Supprimer une soumission retire ses fichiers du stockage, et supprimer un formulaire vide son dossier `forms/<id>/`, après la réponse, depuis la file `fraza_forms_storage_deletion`. Voir [Modèle de données](./modele-de-donnees.md). Une soumission refusée ne laisse aucun fichier : tous sont vérifiés avant le premier téléversement, et ceux déjà envoyés sont retirés si un envoi ou l'enregistrement échoue.
|
|
85
|
+
Supprimer une soumission retire ses fichiers du stockage, et supprimer un formulaire vide son dossier `forms/<id>/`, après la réponse, depuis la file `fraza_forms_storage_deletion`. Voir [Modèle de données](./07-modele-de-donnees.md). Une soumission refusée ne laisse aucun fichier : tous sont vérifiés avant le premier téléversement, et ceux déjà envoyés sont retirés si un envoi ou l'enregistrement échoue.
|
|
86
86
|
|
|
87
87
|
## Ce qui est enregistré
|
|
88
88
|
|
|
@@ -97,7 +97,7 @@ L'adresse IP est lue par `getIpFromRequest` du core, comme la clé de limitation
|
|
|
97
97
|
|
|
98
98
|
L'agent utilisateur et le référent sont pris tels quels dans les en-têtes, **sans la vérification `FRAZA_TRUST_PROXY`** : un appelant peut les falsifier, ils servent au diagnostic.
|
|
99
99
|
|
|
100
|
-
Voir [Modèle de données](./modele-de-donnees.md).
|
|
100
|
+
Voir [Modèle de données](./07-modele-de-donnees.md).
|
|
101
101
|
|
|
102
102
|
## Courriels
|
|
103
103
|
|
|
@@ -135,7 +135,7 @@ Le serveur bascule une soumission `new` en `read` quand il la sert à sa fiche,
|
|
|
135
135
|
|
|
136
136
|
La liste `/admin/forms/submissions` filtre par statut et par formulaire, cinquante par page, du plus récent au plus ancien.
|
|
137
137
|
|
|
138
|
-
Il n'existe **pas d'export**. Les soumissions se consultent une par une. Voir [Administration](./admin.md) pour le détail des écrans.
|
|
138
|
+
Il n'existe **pas d'export**. Les soumissions se consultent une par une. Voir [Administration](./04-admin.md) pour le détail des écrans.
|
|
139
139
|
|
|
140
140
|
## Rétention
|
|
141
141
|
|
|
@@ -4,7 +4,7 @@ description: Les trois façons de rendre un formulaire sur le site, leurs diffé
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/forms/soumissions
|
|
7
|
+
- 06-modules/forms/05-soumissions
|
|
8
8
|
- 02-guides/blocs-personnalises
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -123,5 +123,5 @@ Son rendu suit le [thème du projet](../../02-guides/personnaliser-l-apparence.m
|
|
|
123
123
|
|
|
124
124
|
## Notes
|
|
125
125
|
|
|
126
|
-
- Les trois voies passent par le même point de soumission et sont donc soumises aux mêmes contrôles d'origine et anti-robots. Voir [Soumissions](./soumissions.md).
|
|
127
|
-
- Un projet qui veut d'autres champs que ceux de `FormRenderer` écrit son propre îlot client, sur le même contrat : jeton de `/token` dans `_t`, champ `_hp` vide, envoi en `multipart/form-data`, `details.fieldErrors` en retour. Voir [API](./api.md).
|
|
126
|
+
- Les trois voies passent par le même point de soumission et sont donc soumises aux mêmes contrôles d'origine et anti-robots. Voir [Soumissions](./05-soumissions.md).
|
|
127
|
+
- Un projet qui veut d'autres champs que ceux de `FormRenderer` écrit son propre îlot client, sur le même contrat : jeton de `/token` dans `_t`, champ `_hp` vide, envoi en `multipart/form-data`, `details.fieldErrors` en retour. Voir [API](./08-api.md).
|
|
@@ -4,7 +4,7 @@ description: Tables fraza_forms_form, fraza_forms_submission et fraza_forms_stor
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/forms/soumissions
|
|
7
|
+
- 06-modules/forms/05-soumissions
|
|
8
8
|
- 03-reference/01-cores/database
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -44,7 +44,7 @@ Un tableau d'objets, dans l'ordre de rendu. Chaque champ porte au minimum `id`,
|
|
|
44
44
|
|
|
45
45
|
Il n'existe aucun schéma de base sur ce JSON : la définition est vérifiée par le module à l'enregistrement du formulaire, qui refuse avec un message en français un nom invalide ou en double, un champ à options sans option ou avec une valeur vide ou répétée, des champs fichier au-delà de 50 Mo au total, plus de 100 champs. À la lecture, chaque champ est normalisé : nombres ramenés dans leurs bornes (`maxLength`, `maxFiles`, `maxSizeMb`), options en chaînes, identifiants remplis.
|
|
46
46
|
|
|
47
|
-
Voir [Champs](./champs.md) pour la structure complète par type.
|
|
47
|
+
Voir [Champs](./03-champs.md) pour la structure complète par type.
|
|
48
48
|
|
|
49
49
|
### Structure de `settings`
|
|
50
50
|
|
|
@@ -133,6 +133,6 @@ Les fichiers laissés par des soumissions supprimées avant cette version, dans
|
|
|
133
133
|
## Notes
|
|
134
134
|
|
|
135
135
|
- `dropTables` supprime les trois tables et la fonction du déclencheur, dans l'ordre qui respecte la clé étrangère. Il ne supprime toujours aucun fichier du stockage objet.
|
|
136
|
-
- Une soumission est supprimée après `retentionDays` jours par la tâche `forms-retention`, voir [Soumissions](./soumissions.md#rétention). Sans réglage, elle est gardée sans limite.
|
|
136
|
+
- Une soumission est supprimée après `retentionDays` jours par la tâche `forms-retention`, voir [Soumissions](./05-soumissions.md#rétention). Sans réglage, elle est gardée sans limite.
|
|
137
137
|
- Migrations, appliquées par `npx fraza-db migrate` : `001-truncate-stored-ips` réduit les adresses déjà enregistrées, par lots de 1000, sans effet si on la relance. `002-queue-storage-deletions` crée la file et le déclencheur, aussi posés par `createTables()` sur une base neuve, et met en file le dossier de chaque formulaire supprimé avant elle (les trous de la séquence des identifiants).
|
|
138
138
|
- Le commentaire d'en-tête du module mentionne une clé `sourceUrl` dans `meta`. Elle n'est jamais écrite, le tableau de cette page fait foi.
|
|
@@ -4,7 +4,7 @@ description: Routes HTTP d'admin et publiques, et fonctions serveur importables
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/forms/soumissions
|
|
7
|
+
- 06-modules/forms/05-soumissions
|
|
8
8
|
- 03-reference/01-cores/api
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -25,7 +25,7 @@ Le module expose ses formulaires de trois façons : des routes HTTP d'admin, tro
|
|
|
25
25
|
import { getPublicFormById } from '@fraza/module-forms/server';
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
`@fraza/module-forms/server` est délibérément séparé de `/public` : il ne contient aucun composant, et reste donc importable depuis un Server Component sans tirer de code client. C'est ce qu'utilise un bloc du BlockEditor écrit dans le projet. Voir [Affichage](./affichage.md).
|
|
28
|
+
`@fraza/module-forms/server` est délibérément séparé de `/public` : il ne contient aucun composant, et reste donc importable depuis un Server Component sans tirer de code client. C'est ce qu'utilise un bloc du BlockEditor écrit dans le projet. Voir [Affichage](./06-affichage.md).
|
|
29
29
|
|
|
30
30
|
## API
|
|
31
31
|
|
|
@@ -101,7 +101,7 @@ L'ordre de déclaration compte : les chemins de soumissions sont déclarés **av
|
|
|
101
101
|
|
|
102
102
|
`GET /forms/public/:slug/token` renvoie `{ token }`, le jeton du délai minimal, `null` sans `FRAZA_ENCRYPTION_KEY`. Elle répond `404` si le formulaire est absent ou inactif. `FormRenderer` l'appelle à son montage.
|
|
103
103
|
|
|
104
|
-
`POST /forms/public/:slug/submit` est le point de soumission, compté par le préréglage `public_form`. Il exige un corps en `multipart/form-data`, refuse le JSON, et attend en plus des champs du formulaire les deux champs techniques `_hp` et `_t`, le jeton de la route précédente. Voir [Soumissions](./soumissions.md).
|
|
104
|
+
`POST /forms/public/:slug/submit` est le point de soumission, compté par le préréglage `public_form`. Il exige un corps en `multipart/form-data`, refuse le JSON, et attend en plus des champs du formulaire les deux champs techniques `_hp` et `_t`, le jeton de la route précédente. Voir [Soumissions](./05-soumissions.md).
|
|
105
105
|
|
|
106
106
|
Chaque formulaire a son plafond de corps : ses champs fichier à leur taille maximale, plus 1 Mio pour le texte. La route, elle, est plafonnée à 51 Mio, le plus grand formulaire possible. Au-delà du plafond du formulaire, la réponse est un 413 « L'envoi dépasse la taille acceptée par ce formulaire (N Mo). ».
|
|
107
107
|
|
|
@@ -109,7 +109,7 @@ Une réponse d'erreur est l'erreur d'API du core, `{ error, code, message, detai
|
|
|
109
109
|
|
|
110
110
|
### Aucune de ces routes n'est ouverte à un autre domaine
|
|
111
111
|
|
|
112
|
-
Les routes publiques n'exigent ni session ni permission, mais le routeur du core applique une **vérification d'origine** sur toute requête modifiante. La soumission depuis un domaine tiers est donc refusée par construction, et sans `NEXT_PUBLIC_URL` renseignée, toute soumission l'est. Voir [Configuration](./configuration.md).
|
|
112
|
+
Les routes publiques n'exigent ni session ni permission, mais le routeur du core applique une **vérification d'origine** sur toute requête modifiante. La soumission depuis un domaine tiers est donc refusée par construction, et sans `NEXT_PUBLIC_URL` renseignée, toute soumission l'est. Voir [Configuration](./02-configuration.md).
|
|
113
113
|
|
|
114
114
|
## Notes
|
|
115
115
|
|
|
@@ -4,28 +4,40 @@ description: Constructeur de formulaires, collecte des soumissions, notification
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/forms/installation
|
|
8
|
-
- 06-modules/forms/champs
|
|
7
|
+
- 06-modules/forms/01-installation
|
|
8
|
+
- 06-modules/forms/03-champs
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
`@fraza/module-forms` ajoute un constructeur de formulaires à l'admin, une boîte de réception pour les soumissions, et un point de soumission public. Un formulaire se compose au glisser-déposer, sans code.
|
|
12
12
|
|
|
13
|
+
```bash
|
|
14
|
+
npm i @fraza/module-forms
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Paquet | `@fraza/module-forms` |
|
|
18
|
+
|---|---|
|
|
19
|
+
| Licence | MIT, Fraza Libre. |
|
|
20
|
+
| Registre | npmjs, sans compte ni configuration. |
|
|
21
|
+
| Activation | `FRAZA_MODULE_FORMS=true` |
|
|
22
|
+
|
|
23
|
+
L'activation, la création des tables et les services dont dépendent les soumissions sont dans [Installation](./01-installation.md).
|
|
24
|
+
|
|
13
25
|

|
|
14
26
|
|
|
15
|
-
La palette range les types de champs par famille, et chaque champ posé porte sa largeur : pleine, demie ou tiers de ligne en écran large. L'URL publique s'affiche sous le titre, le formulaire y est servi dès qu'il est enregistré. Voir [Champs](./champs.md) pour le catalogue complet.
|
|
27
|
+
La palette range les types de champs par famille, et chaque champ posé porte sa largeur : pleine, demie ou tiers de ligne en écran large. L'URL publique s'affiche sous le titre, le formulaire y est servi dès qu'il est enregistré. Voir [Champs](./03-champs.md) pour le catalogue complet.
|
|
16
28
|
|
|
17
29
|
## Pages de cette section
|
|
18
30
|
|
|
19
31
|
| Page | Contenu |
|
|
20
32
|
|---|---|
|
|
21
|
-
| [Installation](./installation.md) | Installer le module, créer les tables, vérifier les dépendances. |
|
|
22
|
-
| [Configuration](./configuration.md) | Variables d'environnement, permissions, entrées d'admin. |
|
|
23
|
-
| [Champs](./champs.md) | Catalogue des types de champs et validation appliquée. |
|
|
24
|
-
| [Administration](./admin.md) | Constructeur, liste des formulaires et boîte de réception. |
|
|
25
|
-
| [Soumissions](./soumissions.md) | Pipeline de soumission, anti-spam, fichiers, courriels, rétention. |
|
|
26
|
-
| [Affichage](./affichage.md) | Les trois façons de rendre un formulaire sur le site. |
|
|
27
|
-
| [Modèle de données](./modele-de-donnees.md) | Tables `fraza_forms_form`, `fraza_forms_submission` et `fraza_forms_storage_deletion`. |
|
|
28
|
-
| [API](./api.md) | Routes HTTP et fonctions serveur importables. |
|
|
33
|
+
| [Installation](./01-installation.md) | Installer le module, créer les tables, vérifier les dépendances. |
|
|
34
|
+
| [Configuration](./02-configuration.md) | Variables d'environnement, permissions, entrées d'admin. |
|
|
35
|
+
| [Champs](./03-champs.md) | Catalogue des types de champs et validation appliquée. |
|
|
36
|
+
| [Administration](./04-admin.md) | Constructeur, liste des formulaires et boîte de réception. |
|
|
37
|
+
| [Soumissions](./05-soumissions.md) | Pipeline de soumission, anti-spam, fichiers, courriels, rétention. |
|
|
38
|
+
| [Affichage](./06-affichage.md) | Les trois façons de rendre un formulaire sur le site. |
|
|
39
|
+
| [Modèle de données](./07-modele-de-donnees.md) | Tables `fraza_forms_form`, `fraza_forms_submission` et `fraza_forms_storage_deletion`. |
|
|
40
|
+
| [API](./08-api.md) | Routes HTTP et fonctions serveur importables. |
|
|
29
41
|
|
|
30
42
|
## Ce que le module apporte
|
|
31
43
|
|
|
@@ -50,11 +62,11 @@ Le module n'a aucune dépendance de code au-delà du core, mais deux de ses fonc
|
|
|
50
62
|
| Courriels de notification et de confirmation | La configuration courriel du core, Resend ou SMTP. |
|
|
51
63
|
| Champs de type fichier | Le stockage objet du core. |
|
|
52
64
|
|
|
53
|
-
La première est la cause de panne la plus fréquente, et la moins visible : le formulaire s'affiche correctement et échoue à l'envoi. Voir [Configuration](./configuration.md).
|
|
65
|
+
La première est la cause de panne la plus fréquente, et la moins visible : le formulaire s'affiche correctement et échoue à l'envoi. Voir [Configuration](./02-configuration.md).
|
|
54
66
|
|
|
55
67
|
## Ce que le module ne fait pas
|
|
56
68
|
|
|
57
|
-
- **Il n'enregistre pas de bloc BlockEditor**, et `@fraza/start` n'en livre pas non plus. Un projet écrit le sien en quelques lignes, ou passe par une autre voie d'affichage. Voir [Affichage](./affichage.md).
|
|
69
|
+
- **Il n'enregistre pas de bloc BlockEditor**, et `@fraza/start` n'en livre pas non plus. Un projet écrit le sien en quelques lignes, ou passe par une autre voie d'affichage. Voir [Affichage](./06-affichage.md).
|
|
58
70
|
- Il ne propose ni logique conditionnelle entre champs, ni étapes multiples, ni calculs.
|
|
59
71
|
- Il n'exporte pas les soumissions. Elles se consultent une par une dans l'admin.
|
|
60
72
|
|
|
@@ -62,4 +74,4 @@ La première est la cause de panne la plus fréquente, et la moins visible : le
|
|
|
62
74
|
|
|
63
75
|
- Le champ `version` du manifeste suit la version du paquet : [`fraza-module sync-version`](../../03-reference/05-cli/fraza-module.md#sync-version), lancé par chaque build, la recopie dans `src/version.js`, et `prepublishOnly` refuse de publier si les deux divergent.
|
|
64
76
|
- Supprimer un formulaire supprime ses soumissions et leurs fichiers, dans une transaction, c'est explicite et irréversible.
|
|
65
|
-
- Chaque valeur est vérifiée selon le type de son champ, dans le navigateur puis sur le serveur. Voir [Champs](./champs.md).
|
|
77
|
+
- Chaque valeur est vérifiée selon le type de son champ, dans le navigateur puis sur le serveur. Voir [Champs](./03-champs.md).
|
|
@@ -60,9 +60,9 @@ Ils sont indépendants et cohabitent sans conflit. Une page nommée `blogue` et
|
|
|
60
60
|
|
|
61
61
|
## Version documentée
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
Cette section décrit la dernière version publiée de chaque module. Tous les paquets Fraza à leur dernière version fonctionnent ensemble, et `npx fraza-update` les installe ensemble : un projet à jour lit donc la documentation de ses modules.
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
Ce qui a changé d'une version à l'autre est dans les notes de version, livrées avec chaque module dans `node_modules/<module>/CHANGELOG.md`, et consultables hors ligne. `npx fraza-update` les affiche automatiquement après une mise à jour.
|
|
66
66
|
|
|
67
67
|
## Ce qui reste dans le dépôt du module
|
|
68
68
|
|
|
@@ -4,18 +4,17 @@ description: Installer @fraza/module-medias, configurer le stockage objet, crée
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/medias/configuration
|
|
8
|
-
- 06-modules/medias/integration
|
|
7
|
+
- 06-modules/medias/02-configuration
|
|
8
|
+
- 06-modules/medias/05-integration
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
-
Cette page
|
|
12
|
-
|
|
13
|
-
C'est le seul module officiel qui demande une étape de câblage manuelle dans le projet, parce qu'il sert du binaire.
|
|
11
|
+
Cette page installe `@fraza/module-medias` dans un projet créé par `npx @fraza/start`. Le module n'est jamais déclaré à la main : il est découvert au boot par scan des dépendances, comme décrit dans [Cycle de vie d'un module](../../02-guides/cycle-de-vie-d-un-module.md).
|
|
14
12
|
|
|
15
13
|
## Prérequis
|
|
16
14
|
|
|
17
|
-
- Un projet
|
|
18
|
-
- Un **stockage objet compatible S3** configuré. Sans lui, le module démarre mais aucun téléversement n'aboutit. Voir [Configuration](./configuration.md).
|
|
15
|
+
- Un projet créé par `npx @fraza/start`, avec `@fraza/core` à jour.
|
|
16
|
+
- Un **stockage objet compatible S3** configuré. Sans lui, le module démarre mais aucun téléversement n'aboutit. Voir [Configuration](./02-configuration.md).
|
|
17
|
+
- Aucun compte : le paquet est publié sur npmjs.
|
|
19
18
|
|
|
20
19
|
## Installer
|
|
21
20
|
|
|
@@ -23,35 +22,35 @@ C'est le seul module officiel qui demande une étape de câblage manuelle dans l
|
|
|
23
22
|
npm i @fraza/module-medias
|
|
24
23
|
```
|
|
25
24
|
|
|
26
|
-
`sharp` est une **peer dependency facultative** (`>=0.35.0`) : le core la charge au premier traitement d'image, et Next.js en installe déjà une copie. La déclarer en peer garantit qu'il n'y en a qu'une seule dans le projet, dans une version que le site contrôle. Sans `sharp`, le module démarre, mais refuse les images JPEG, PNG et WebP tant que l'optimisation retire leurs métadonnées, ce qu'elle fait par défaut. Sur un projet dont le verrou est ancien, `npm update sharp` suffit à remonter au seuil de `0.35.0`.
|
|
27
|
-
|
|
28
|
-
Le module n'a plus aucune dépendance de production : `archiver` a été retiré, l'archive ZIP est écrite par le core.
|
|
29
|
-
|
|
30
|
-
Ce choix est un exemple de la règle décrite dans [Créer un module](../../02-guides/creer-un-module.md) : tout ce que le site fournit déjà va en `peerDependencies`.
|
|
31
|
-
|
|
32
25
|
Ajouter la variable d'activation à `.env.local`, et aux variables de la plateforme en production :
|
|
33
26
|
|
|
34
|
-
```
|
|
27
|
+
```dotenv
|
|
35
28
|
#------ MODULE - MEDIAS ------#
|
|
36
29
|
FRAZA_MODULE_MEDIAS=true
|
|
37
30
|
```
|
|
38
31
|
|
|
39
32
|
Sans ce drapeau, le module est ignoré : aucune table, aucune route, aucune entrée d'admin, et le registre média du core reste vide.
|
|
40
33
|
|
|
41
|
-
|
|
34
|
+
Régénérer les manifestes, puis créer les tables :
|
|
42
35
|
|
|
43
36
|
```bash
|
|
44
37
|
npx fraza-modules sync # déclenché automatiquement au postinstall
|
|
45
38
|
npx fraza-db init # crée fraza_media et fraza_media_references
|
|
46
39
|
```
|
|
47
40
|
|
|
48
|
-
`fraza-db init` est idempotent
|
|
41
|
+
`fraza-db init` est idempotent : sur une base qui a déjà les tables, il applique les migrations en attente sans toucher aux données. Il enregistre aussi les quatre permissions du module, et les attribue au rôle `admin`. Voir [Modèle de données](./06-modele-de-donnees.md).
|
|
49
42
|
|
|
50
|
-
##
|
|
43
|
+
## Installer `sharp`
|
|
51
44
|
|
|
52
|
-
**
|
|
45
|
+
`sharp` est une **peer dependency facultative** (`>=0.35.0`) : le core la charge au premier traitement d'image, et Next.js en installe déjà une copie. La déclarer en peer garantit qu'il n'y en a qu'une seule dans le projet, dans une version que le site contrôle.
|
|
53
46
|
|
|
54
|
-
|
|
47
|
+
Sans `sharp`, le module démarre, mais refuse les images JPEG, PNG et WebP tant que l'optimisation retire leurs métadonnées, ce qu'elle fait par défaut. Sur un projet dont le verrou est ancien, `npm update sharp` suffit à remonter au seuil de `0.35.0`.
|
|
48
|
+
|
|
49
|
+
Ce choix suit la règle décrite dans [Créer un module](../../02-guides/creer-un-module.md) : tout ce que le site fournit déjà va en `peerDependencies`. Le module n'a aucune dépendance de production : l'archive ZIP est écrite par le core.
|
|
50
|
+
|
|
51
|
+
## Monter la route de fichier
|
|
52
|
+
|
|
53
|
+
**C'est l'étape à ne pas oublier sur un projet monté à la main.** Sans elle, les médias sont téléversables mais aucune URL publique ne répond. Le start template officiel fournit déjà ce fichier.
|
|
55
54
|
|
|
56
55
|
```js
|
|
57
56
|
// app/za/media/[filename]/route.js
|
|
@@ -62,7 +61,17 @@ L'import passe par le **core**, pas par le module. Le core y expose un relais qu
|
|
|
62
61
|
|
|
63
62
|
Cette route doit rester un Route Handler et non une page : elle diffuse du binaire avec ses en-têtes de type, de cache et de disposition, ce qu'une page ne sait pas faire.
|
|
64
63
|
|
|
65
|
-
|
|
64
|
+
C'est le seul module officiel qui demande un fichier de route dans le projet, parce qu'il sert du binaire.
|
|
65
|
+
|
|
66
|
+
## Effet sur les autres modules
|
|
67
|
+
|
|
68
|
+
L'installation suffit à activer, dans tout le projet :
|
|
69
|
+
|
|
70
|
+
- le sélecteur d'image du BlockEditor, sur les blocs image et sur les champs `ImageField` des blocs personnalisés ;
|
|
71
|
+
- les champs de type `image`, `thumbnail` et `gallery` de `@fraza/module-posts`, quel que soit le nom que le projet leur donne dans sa variable de type ;
|
|
72
|
+
- le choix de l'image de partage Open Graph quand `FRAZA_SEO` est actif.
|
|
73
|
+
|
|
74
|
+
Aucun de ces modules ne déclare `@fraza/module-medias` en dépendance. Voir [Intégration](./05-integration.md).
|
|
66
75
|
|
|
67
76
|
## Vérifier
|
|
68
77
|
|
|
@@ -73,19 +82,7 @@ Le start template officiel fournit déjà ce fichier.
|
|
|
73
82
|
2. `Médias` apparaît dans la barre latérale de l'admin.
|
|
74
83
|
3. Téléverser une image depuis `/admin/media`, puis ouvrir l'URL publique proposée par la fiche du média.
|
|
75
84
|
|
|
76
|
-
Si le téléversement échoue, la cause est presque toujours la configuration du stockage objet, pas le module. Voir [Configuration](./configuration.md).
|
|
77
|
-
|
|
78
|
-
Les permissions du module sont enregistrées et attribuées au rôle `admin` pendant `fraza-db init`. Un module ajouté après coup n'a donc besoin que d'un `npx fraza-db init` pour que les quatre permissions apparaissent dans `/admin/roles`.
|
|
79
|
-
|
|
80
|
-
## Effet sur les autres modules
|
|
81
|
-
|
|
82
|
-
L'installation suffit à activer, dans tout le projet :
|
|
83
|
-
|
|
84
|
-
- le sélecteur d'image du BlockEditor, sur les blocs image et sur les champs `ImageField` des blocs personnalisés ;
|
|
85
|
-
- les champs de type `image`, `thumbnail` et `gallery` de `@fraza/module-posts`, quel que soit le nom que le projet leur donne dans sa variable de type ;
|
|
86
|
-
- le choix de l'image de partage Open Graph quand `FRAZA_SEO` est actif.
|
|
87
|
-
|
|
88
|
-
Aucun de ces modules ne déclare `@fraza/module-medias` en dépendance. Voir [Intégration](./integration.md).
|
|
85
|
+
Si le téléversement échoue, la cause est presque toujours la configuration du stockage objet, pas le module. Voir [Configuration](./02-configuration.md).
|
|
89
86
|
|
|
90
87
|
## Mettre à jour
|
|
91
88
|
|
|
@@ -93,12 +90,12 @@ Aucun de ces modules ne déclare `@fraza/module-medias` en dépendance. Voir [In
|
|
|
93
90
|
npx fraza-update
|
|
94
91
|
```
|
|
95
92
|
|
|
96
|
-
La commande installe la dernière version de tous les paquets Fraza du site, toutes à la fois
|
|
93
|
+
La commande installe la dernière version de tous les paquets Fraza du site, toutes à la fois, puis enchaîne `fraza-modules sync`, `fraza-db migrate` et `fraza-doctor`. Tous les paquets Fraza à leur dernière version fonctionnent ensemble : mettre à jour `@fraza/module-medias` seul, par `npm i`, laisserait le core et les autres modules en arrière.
|
|
97
94
|
|
|
98
|
-
Les notes de version sont livrées avec le
|
|
95
|
+
Les notes de version sont livrées avec le paquet, dans `node_modules/@fraza/module-medias/CHANGELOG.md`.
|
|
99
96
|
|
|
100
97
|
## Notes
|
|
101
98
|
|
|
102
99
|
- Le module dépend de `@fraza/core` en `peerDependency`. Il n'embarque pas sa propre copie du core.
|
|
103
100
|
- Désinstaller le module ne supprime ni les tables, ni les fichiers du stockage objet. `dropTables` est exporté depuis `@fraza/module-medias` pour la partie base.
|
|
104
|
-
- Désactiver le module sans le désinstaller laisse les contenus référencer des médias devenus irrésolubles, et les références ne sont plus tenues à jour. Voir [Désactivé avec ses tables](./integration.md#désactivé-avec-ses-tables).
|
|
101
|
+
- Désactiver le module sans le désinstaller laisse les contenus référencer des médias devenus irrésolubles, et les références ne sont plus tenues à jour. Voir [Désactivé avec ses tables](./05-integration.md#désactivé-avec-ses-tables).
|
|
@@ -4,7 +4,7 @@ description: Variables d'environnement, stockage objet, optimisation des images,
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/medias/televersement
|
|
7
|
+
- 06-modules/medias/03-televersement
|
|
8
8
|
- 03-reference/01-cores/storage
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -24,7 +24,7 @@ Les trois dernières sont sans effet si `FRAZA_MODULE_MEDIAS_OPTIMIZE` vaut `fal
|
|
|
24
24
|
|
|
25
25
|
L'activation se compare strictement à la chaîne `true`. Les drapeaux d'optimisation fonctionnent en sens inverse : ils sont actifs sauf si la valeur vaut exactement `false`. Une valeur mal orthographiée laisse donc l'optimisation active.
|
|
26
26
|
|
|
27
|
-
Voir [Téléversement](./televersement.md) pour l'effet précis de ces réglages sur un fichier.
|
|
27
|
+
Voir [Téléversement](./03-televersement.md) pour l'effet précis de ces réglages sur un fichier.
|
|
28
28
|
|
|
29
29
|
## Stockage objet
|
|
30
30
|
|
|
@@ -78,11 +78,11 @@ Le module enregistre une section `Médias` et un item `Médias` à l'intérieur.
|
|
|
78
78
|
|
|
79
79
|
L'ordre 25 de la section place la médiathèque avant les modules de contenu, qui commencent à 60. Voir [Étendre l'admin](../../02-guides/etendre-l-admin.md).
|
|
80
80
|
|
|
81
|
-
Ce que l'écran permet de faire est décrit dans [Administration](./admin.md).
|
|
81
|
+
Ce que l'écran permet de faire est décrit dans [Administration](./04-admin.md).
|
|
82
82
|
|
|
83
83
|
## Notes
|
|
84
84
|
|
|
85
85
|
- Aucune variable du module ne contient de secret. Les secrets du stockage sont ceux du core, lisibles côté serveur uniquement.
|
|
86
86
|
- La configuration d'optimisation est relue à chaque téléversement, pas mise en cache au boot. La changer ne demande pas de redémarrage, mais ne réoptimise évidemment pas les fichiers déjà en place.
|
|
87
|
-
- Changer `FRAZA_MODULE_MEDIAS` à `false` désactive le module mais laisse les tables et les fichiers en place, sans plus tenir les références à jour. Voir [Intégration](./integration.md#désactivé-avec-ses-tables).
|
|
88
|
-
- `sharp` est requis pour optimiser une image. Voir [Installation](./installation.md#installer).
|
|
87
|
+
- Changer `FRAZA_MODULE_MEDIAS` à `false` désactive le module mais laisse les tables et les fichiers en place, sans plus tenir les références à jour. Voir [Intégration](./05-integration.md#désactivé-avec-ses-tables).
|
|
88
|
+
- `sharp` est requis pour optimiser une image. Voir [Installation](./01-installation.md#installer).
|
|
@@ -4,7 +4,7 @@ description: Formats acceptés, limites de taille, validation de contenu, optimi
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/medias/integration
|
|
7
|
+
- 06-modules/medias/05-integration
|
|
8
8
|
- 03-reference/01-cores/storage
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -61,7 +61,7 @@ Chaque média porte deux identifiants de fichier, qui ne servent pas à la même
|
|
|
61
61
|
|
|
62
62
|
La clé de stockage est fixée à la création et n'est jamais réécrite, pas même lors d'un remplacement de fichier. Le nom public, lui, se change librement.
|
|
63
63
|
|
|
64
|
-
C'est cette séparation qui permet de renommer un média sans casser quoi que ce soit : les contenus référencent l'**identifiant** du média, jamais son nom ni son URL. Voir [Intégration](./integration.md).
|
|
64
|
+
C'est cette séparation qui permet de renommer un média sans casser quoi que ce soit : les contenus référencent l'**identifiant** du média, jamais son nom ni son URL. Voir [Intégration](./05-integration.md).
|
|
65
65
|
|
|
66
66
|
### Assainissement du nom public
|
|
67
67
|
|
|
@@ -96,7 +96,7 @@ Une revalidation dont l'`ETag` correspond reçoit un 304 sans corps, sans lectur
|
|
|
96
96
|
|
|
97
97
|
Un fichier non image est donc **téléchargé** plutôt qu'affiché, y compris un PDF. C'est une mesure de défense : un document affiché dans le contexte du site pourrait exécuter du script sur son origine.
|
|
98
98
|
|
|
99
|
-
La route n'exige ni session ni permission. Voir [Configuration](./configuration.md).
|
|
99
|
+
La route n'exige ni session ni permission. Voir [Configuration](./02-configuration.md).
|
|
100
100
|
|
|
101
101
|
## Remplacer un fichier
|
|
102
102
|
|
|
@@ -112,4 +112,4 @@ Comme l'URL publique ne change pas, un navigateur ou un CDN peut continuer à se
|
|
|
112
112
|
- L'auteur d'un média est facultatif. Un dépôt machine, par une tâche planifiée ou un import, laisse le champ nul et la médiathèque n'affiche alors aucun auteur. Seul un identifiant d'utilisateur réel est accepté par ailleurs, la colonne portant une clé étrangère vers la table des utilisateurs.
|
|
113
113
|
- La médiathèque permet de télécharger jusqu'à cent médias d'un coup, dans une archive sans recompression, écrite par `createZipStream` du core, un objet à la fois. Un objet absent du stockage est sauté. Un stockage qui ne répond pas interrompt le téléchargement. L'archive porte la date du jour dans le fuseau du site.
|
|
114
114
|
- La taille enregistrée est celle des octets stockés, après optimisation. Le paramètre `size` d'`uploadMedia` et de `replaceMedia` est ignoré.
|
|
115
|
-
- Un média encore référencé par un contenu ne peut pas être supprimé. Le détacher d'abord. Voir [Intégration](./integration.md).
|
|
115
|
+
- Un média encore référencé par un contenu ne peut pas être supprimé. Le détacher d'abord. Voir [Intégration](./05-integration.md).
|
|
@@ -4,15 +4,15 @@ description: Médiathèque, filtres, téléversement, sélection multiple, actio
|
|
|
4
4
|
related:
|
|
5
5
|
title: Étapes suivantes
|
|
6
6
|
links:
|
|
7
|
-
- 06-modules/medias/televersement
|
|
8
|
-
- 06-modules/medias/integration
|
|
7
|
+
- 06-modules/medias/03-televersement
|
|
8
|
+
- 06-modules/medias/05-integration
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
Le module ajoute un seul écran à l'admin, `/admin/media`. Tout s'y fait : téléverser,
|
|
12
12
|
chercher, renommer, remplacer, supprimer, récupérer les URL publiques. Cette page décrit
|
|
13
13
|
ce que fait l'interface, y compris les quelques comportements qui surprennent.
|
|
14
14
|
|
|
15
|
-
L'accès demande `media.view` : sans elle, `/admin/media` répond 404, comme une page inconnue. Voir [Configuration](./configuration.md).
|
|
15
|
+
L'accès demande `media.view` : sans elle, `/admin/media` répond 404, comme une page inconnue. Voir [Configuration](./02-configuration.md).
|
|
16
16
|
|
|
17
17
|
## Ce que chaque permission débloque
|
|
18
18
|
|
|
@@ -58,7 +58,7 @@ Le bouton accepte plusieurs fichiers d'un coup, mais les envoie **un par un**. U
|
|
|
58
58
|
refusé, pour un format ou une taille hors limites, produit son propre message et
|
|
59
59
|
n'interrompt pas les suivants. Le sélecteur de fichier ne propose que les extensions
|
|
60
60
|
acceptées, et celui du remplacement que celles de la catégorie du média. Voir
|
|
61
|
-
[Téléversement](./televersement.md) pour ce qui est accepté.
|
|
61
|
+
[Téléversement](./03-televersement.md) pour ce qui est accepté.
|
|
62
62
|
|
|
63
63
|
À la fin du lot, la vue revient en première page, là où les nouveaux médias apparaissent.
|
|
64
64
|
La confirmation compte les fichiers qui ont abouti.
|
|
@@ -94,7 +94,7 @@ propose de découper la sélection : la réduire est manuel.
|
|
|
94
94
|
suppressions réussies disparaissent de la grille ; celles qui échouent restent
|
|
95
95
|
sélectionnées, ce qui permet de recommencer sans tout re-pointer. Un média encore
|
|
96
96
|
référencé par un contenu compte parmi les échecs. Voir
|
|
97
|
-
[Intégration](./integration.md).
|
|
97
|
+
[Intégration](./05-integration.md).
|
|
98
98
|
|
|
99
99
|
## Fiche d'un média
|
|
100
100
|
|
|
@@ -114,7 +114,7 @@ Renommer vers un nom déjà pris fait échouer l'enregistrement complet : le tex
|
|
|
114
114
|
alternatif et la légende saisis en même temps ne sont pas écrits non plus. Corriger le
|
|
115
115
|
nom, puis enregistrer à nouveau. Le message « Ce nom de fichier est déjà utilisé »
|
|
116
116
|
apparaît en notification plutôt que sous le champ, pour la raison expliquée dans
|
|
117
|
-
[API](./api.md).
|
|
117
|
+
[API](./07-api.md).
|
|
118
118
|
|
|
119
119
|
Un fichier qui n'est pas une image n'a pas d'aperçu. Un lien `Ouvrir le fichier` le sert
|
|
120
120
|
à la place, ce qui déclenche un téléchargement pour tout ce qui n'est pas une image.
|
|
@@ -144,4 +144,4 @@ contenu d'abord.
|
|
|
144
144
|
réglables.
|
|
145
145
|
- L'interface ne montre pas qui a téléversé un média, ni la liste des contenus qui le
|
|
146
146
|
référencent. Ces deux informations existent en base et sont lisibles par
|
|
147
|
-
[l'API](./api.md).
|
|
147
|
+
[l'API](./07-api.md).
|