Browse Source

Les enregistrement en base des :

- saisies d'un formulaire
- traitements d'un formulaire
- réponse pour un champ multivalué

Sont désormais en json, via
```
$formidable_serialize = charger_fonction('formidable_serialize', 'filtre');
```
C'est un filtre pour faire le sysmétrique à `|formidable_serialize`,
même si en fait on n'a pas vraiment de raison de l'utiliser en filtre.

Sont gardés en serialize_php :
- les paramètres passées en url pour l'action de recup de fichier
- la base du calcul des hash md5 dans les sessions (utilisés pour
s'assurer qu'on ne perd pas des données en cas d'interruption de config
d'un formulaire -> il faut surtout pas rompre la compat).
pull/121/head
Maïeul 5 months ago
parent
commit
2077bb4549
  1. 5
      CHANGELOG.md
  2. 5
      echanger/formulaire/wcs.php
  3. 6
      echanger/formulaire/yaml.php
  4. 2
      formidable_pipelines.php
  5. 3
      formulaires/editer_formulaire_champs.php
  6. 3
      formulaires/editer_formulaire_traitements.php
  7. 11
      inc/formidable.php
  8. 5
      traiter/enregistrement.php

5
CHANGELOG.md

@ -16,6 +16,11 @@
### Changed
- #99 #111 Les tableaux stockés en base (saisies et traitements d'un formulaire, réponses de champs multivaluées) sont à l'avenir encodés via `json_encode()` (à travers `formidable_serialize()`).
Le changement se fait au fur et à mesure de l'édition des formulaires. On peut donc dans une même base avoir des tableau serializé via `serialize()` (anciens) et `json_encode()` (nouveaux).
Pour les plugins qui étendent formidable :
- dans les traitements, on peut récuperer directement les valeurs déserializées des tableaux, qui sont désormais passés en arguments;
- dans les squelettes et autres fonctions perso, utiliser le filtre `|formidable_deserialize`.
- #105 `formidable_raccourcis_arobases_2_valeurs_champs` reçoit désormais les arguments suivants :
1. `$chaine` chaîne à transformer
2. `$saisies` liste des saisies du formulaire

5
echanger/formulaire/wcs.php

@ -9,6 +9,7 @@ function echanger_formulaire_wcs_importer_dist($fichier) {
include_spip('inc/xml');
include_spip('inc/filtres');
include_spip('inc/saisies');
include_spip('inc/formidable');
$arbre = spip_xml_load($fichier, false);
if ($arbre and is_array($arbre) and isset($arbre['formdef'])) {
@ -157,10 +158,10 @@ function echanger_formulaire_wcs_importer_dist($fichier) {
// Si ça a marché on transforme les tableaux et on modifie les champs
if ($id_formulaire > 0) {
if (is_array($formulaire['saisies'])) {
$formulaire['saisies'] = serialize($formulaire['saisies']);
$formulaire['saisies'] = formidable_serialize($formulaire['saisies']);
}
if (is_array($formulaire['traitements'])) {
$formulaire['traitements'] = serialize($formulaire['traitements']);
$formulaire['traitements'] = formidable_serialize($formulaire['traitements']);
}
$erreur = formulaire_modifier($id_formulaire, $formulaire);

6
echanger/formulaire/yaml.php

@ -36,7 +36,7 @@ function echanger_formulaire_yaml_exporter_dist($id_formulaire) {
}
function echanger_formulaire_yaml_importer_dist($fichier) {
include_spip('inc/formidable');
// Initialisation
$id_formulaire = 0;
$erreur = '';
@ -65,10 +65,10 @@ function echanger_formulaire_yaml_importer_dist($fichier) {
// Si ça a marché on transforme les tableaux et on modifie les champs
if ($id_formulaire > 0) {
if (is_array($formulaire['saisies'])) {
$formulaire['saisies'] = serialize($formulaire['saisies']);
$formulaire['saisies'] = formidable_serialize($formulaire['saisies']);
}
if (is_array($formulaire['traitements'])) {
$formulaire['traitements'] = serialize($formulaire['traitements']);
$formulaire['traitements'] = formidable_serialize($formulaire['traitements']);
}
$erreur = formulaire_modifier($id_formulaire, $formulaire);

2
formidable_pipelines.php

@ -368,7 +368,7 @@ function formidable_crayons_verifier($flux) {
if (saisies_saisie_est_tabulaire($saisie)) {
$atrouver = 'content_'.$flux['args']['wid'].'_valeur';
$valeur = saisies_request($atrouver);
$flux['data']['normaliser']['valeur'] = serialize($valeur);
$flux['data']['normaliser']['valeur'] = formidable_serialize($valeur);
}
saisies_set_request($data['nom'], $valeur);
$erreur = saisies_verifier(array($saisie), false);

3
formulaires/editer_formulaire_champs.php

@ -226,6 +226,7 @@ function formulaires_editer_formulaire_champs_verifier($id_formulaire) {
function formulaires_editer_formulaire_champs_traiter($id_formulaire) {
include_spip('inc/saisies');
include_spip('inc/formidable');
$retours = array();
$id_formulaire = intval($id_formulaire);
include_spip('formidable_fonctions');
@ -248,7 +249,7 @@ function formulaires_editer_formulaire_champs_traiter($id_formulaire) {
// On envoie les nouvelles dans la table
include_spip('action/editer_objet');
$err = objet_modifier('formulaire', $id_formulaire, array('saisies' => serialize(saisies_identifier($saisies_nouvelles))));
$err = objet_modifier('formulaire', $id_formulaire, array('saisies' => formidable_serialize(saisies_identifier($saisies_nouvelles))));
// Si c'est bon on appelle d'éventuelles fonctions d'update des traitements
// On reinitialise aussi les sessions

3
formulaires/editer_formulaire_traitements.php

@ -109,6 +109,7 @@ function formulaires_editer_formulaire_traitements_verifier($id_formulaire) {
function formulaires_editer_formulaire_traitements_traiter($id_formulaire) {
$retours = array();
$id_formulaire = intval($id_formulaire);
include_spip('inc/formidable');
// On récupère tout le tableau des traitements
$traitements = _request('traitements');
@ -128,7 +129,7 @@ function formulaires_editer_formulaire_traitements_traiter($id_formulaire) {
}
// Et on l'enregistre tel quel
include_spip('action/editer_objet');
$err = objet_modifier('formulaire', $id_formulaire, array('traitements' => serialize($traitements)));
$err = objet_modifier('formulaire', $id_formulaire, array('traitements' => formidable_serialize($traitements)));
// On va sur la page de visualisation quand c'est fini
if (!$err) {

11
inc/formidable.php

@ -687,3 +687,14 @@ function formidable_array_walk_recursive_strval(&$value, $key) {
}
}
/**
* Sérialize un tableau, pour stockage en base.
* On sérialize en json qui est plus robuse que la serialization PHP (pb #99)
*
* @param array Le tableau
* @return string
**/
function formidable_serialize(array $tab):string {
return json_encode($tab);
}

5
traiter/enregistrement.php

@ -8,6 +8,7 @@ include_spip('inc/formidable_fichiers');
function traiter_enregistrement_dist($args, $retours) {
include_spip('inc/formidable');
include_spip('base/abstract_sql');
include_spip('inc/formidable');
$retours['fichiers'] = array(); // on va stocker des infos sur les fichiers, pour les prochains traitement
$options = $args['options'];
$formulaire = $args['formulaire'];
@ -123,7 +124,7 @@ function traiter_enregistrement_dist($args, $retours) {
$insertions[] = array(
'id_formulaires_reponse' => $id_formulaires_reponse,
'nom' => $nom,
'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
'valeur' => is_array($valeur) ? formidable_serialize($valeur) : $valeur
);
$retours['fichiers'][$nom] = $valeur;
}
@ -135,7 +136,7 @@ function traiter_enregistrement_dist($args, $retours) {
$insertions[] = array(
'id_formulaires_reponse' => $id_formulaires_reponse,
'nom' => $nom,
'valeur' => is_array($valeur) ? serialize($valeur) : $valeur
'valeur' => is_array($valeur) ? formidable_serialize($valeur) : $valeur
);
}
}

Loading…
Cancel
Save