Browse Source

Début pour le passage du stockage de `serialize` à `json_encode()`.

- Le filtre `|tenter_unserialize` est déprécié.
- Il est remplacé par `|formidable_deserialize`.
- Ce filtre peut recevoir au choix :
  * Un tableau, qu'il retourne tel quel
  * Un tableau serializé via `json_encode`
  * Un tableau serializé via `serialize`
- Dans les deux dernier cas, il renvoie la version deserializé, en cas
de réussite, sinon l'argument passé.

Exemple

````
include_spip('formidable_fonctions');
'filtre');
$a = ['a' => 'a'];

$a = json_encode($a);
var_dump($a);

$a = formidable_deserialize($a);
var_dump($a);

$a = serialize($a);
var_dump($a);

$a = formidable_deserialize($a);
var_dump($a);

$a = serialize($a).'plop';//Serialisation corrompu
var_dump($a);

$a = formidable_deserialize($a);
var_dump($a);
````

Ainsi, pas besoin de convertir tous les formulaires de `serialize`  à
`json_encode`  à la mise à jour du plugin formidable :
on peut le faire au fur à mesure qu'on modifie les champs/traitements
d'un formulaire.

On utilisera donc ce filtre à chaque fois que l'on veut déchiffrer
depuis la BDD :
- * traitements d'un formulaire
- * saisies d'un formulaire
- * réponse d'un champ multivalué (ex: checkbox)
pull/121/head
Maïeul 5 months ago
parent
commit
4da796fbac
  1. 10
      CHANGELOG.md
  2. 6
      afficher_diff/array_serialized.php
  3. 11
      controleurs/formulaires_reponses_champ.php
  4. 5
      echanger/formulaire/yaml.php
  5. 16
      filtre/tenter_unserialize.php
  6. 3
      formidable_autorisations.php
  7. 48
      formidable_fonctions.php
  8. 3
      formidable_pipelines.php
  9. 14
      formulaires/editer_formulaire_champs.php
  10. 7
      formulaires/editer_formulaire_traitements.php
  11. 13
      formulaires/exporter_formulaire_analyse.php
  12. 18
      formulaires/exporter_formulaire_reponses.php
  13. 29
      formulaires/formidable.php
  14. 4
      genie/formidable_effacer_enregistrements.php
  15. 4
      http/collectionjson/inc-formulaire.html
  16. 24
      inc/formidable.php
  17. 2
      modeles/formulaire_aide_memoire.html
  18. 6
      modeles/formulaire_analyse.html
  19. 4
      modeles/formulaires_reponse.html
  20. 2
      prive/squelettes/contenu/formulaire.html

10
CHANGELOG.md

@ -6,6 +6,11 @@
- Lors de la construction du formulaire, vérifier à la fin si les champs conditionnant des affichages sont bien présents, retourner un message d'erreur dans le cas contraire
- #105 Ajout des pipelines `formidable_pre_raccourcis_arobases` et `formidable_post_raccourcis_arobases` pour ajustement les traitements avant/après l'interprétation des raccourcis `@champs@`
- #99 #111 Ajout du filtre `|formidable_deserialize` qui reçoit au choix :
* Un tableau déjà déserializé
* Un tableau serializé via `json_encode()`
* Un tableau serializé via `serialize()`
Et renvoie le tableau deserializé, ou la valeur reçue en cas d'échec.
### Changed
@ -36,6 +41,11 @@
### Removed
- #105 pipeline `formidable_affiche_resume_reponse` supprimé, remplacée par `formidable_pre_raccourcis_arobases` et `formidable_post_raccourcis_arobases`
### Deprecated
- Filtre `tenter_unserialize`, utiliser à la place `formidable_deserialize`
### Fixed
- #114 Afficher correctement les erreurs lors de la saisie d'une configuration de formulaire

6
afficher_diff/array_serialized.php

@ -18,9 +18,9 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function afficher_diff_array_serialized($champ, $old, $new, $format = 'diff') {
// Pour le diff de saisies, faire comme un diff de yaml
include_spip('inc/yaml');
$tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
$new = $tenter_unserialize($new);
$old = $tenter_unserialize($old);
include_spip('formidable_fonctions');
$new = formidable_deserialize($new);
$old = formidable_deserialize($old);
if (is_array($new)) {
$new = yaml_encode($new);
} else {

11
controleurs/formulaires_reponses_champ.php

@ -9,6 +9,8 @@
*/
function controleurs_formulaires_reponses_champ_dist($regs, $c = null) {
include_spip('inc/saisies');
include_spip('formidable_fonctions');
list(,$crayon, $type, $champ, $id) = $regs;
$id_formulaires_reponses_champ = $regs[4];
@ -27,7 +29,10 @@ function controleurs_formulaires_reponses_champ_dist($regs, $c = null) {
$nom = $data['nom'];
$valeur = $data['valeur'];
$saisie = saisies_chercher(unserialize($data['saisies']), $nom);
$saisie = saisies_chercher(
formidable_deserialize($data['saisies']),
$nom
);
$valeur = $data['valeur'];
$n = new Crayon(
@ -41,11 +46,11 @@ function controleurs_formulaires_reponses_champ_dist($regs, $c = null) {
unset($saisie['options']['explication']);
unset($saisie['options']['class']);
unset($saisie['options']['conteneur_class']);
// Crayons utilise son propre formalisme pour le 'name' des saisies.
$nom_crayons = 'content_' . $key . '_valeur';
$saisie['options']['nom'] = $nom_crayons;
include_spip('inc/formidable');
$valeur = filtre_tenter_unserialize_dist($valeur);// Pour une raison mystérieuse, charger_fonction déclenche une erreur (!)
$valeur = formidable_deserialize($valeur);
$contexte = array('_saisies' => array($saisie), $nom_crayons => $valeur);
$html = $n->formulaire($contexte);

5
echanger/formulaire/yaml.php

@ -7,6 +7,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function echanger_formulaire_yaml_exporter_dist($id_formulaire) {
include_spip('base/abstract_sql');
include_spip('formidable_fonctions');
include_spip('inc/yaml');
$id_formulaire = intval($id_formulaire);
$export = '';
@ -20,8 +21,8 @@ function echanger_formulaire_yaml_exporter_dist($id_formulaire) {
);
// On décompresse les trucs sérialisés
$formulaire['saisies'] = unserialize($formulaire['saisies']);
$formulaire['traitements'] = unserialize($formulaire['traitements']);
$formulaire['saisies'] = formidable_deserialize($formulaire['saisies']);
$formulaire['traitements'] = formidable_deserialize($formulaire['traitements']);
// On envode en yaml
$export = yaml_encode($formulaire);

16
filtre/tenter_unserialize.php

@ -0,0 +1,16 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* @deprecated
* @see `filtre_formidable_deserialize_dist()`
* @param string|array $texte
* @return array|string
**/
function filtre_tenter_deserialize_dist($texte) {
include_spip('formidable_fonctions');
return formidable_deserialize($texte);
}

3
formidable_autorisations.php

@ -157,7 +157,8 @@ function autoriser_formulaire_repondre_dist($faire, $type, $id, $qui, $opt) {
$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id);
}
$traitements = unserialize($formulaire['traitements']);
include_spip('formidable_fonctions');
$traitements = formidable_deserialize($formulaire['traitements']);
// S'il n'y a pas d'enregistrement, c'est forcément bon
if (!isset($traitements['enregistrement']) or !($options = $traitements['enregistrement'])) {

48
formidable_fonctions.php

@ -13,6 +13,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
include_spip('inc/formidable');
include_spip('public/formidable_criteres');
include_spip('filtre/tenter_unserialize');// Obsolète
/**
* #VOIR_REPONSE{checkbox_2} dans une boucle (FORMULAIRES_REPONSES)
*
@ -55,11 +56,11 @@ function balise_VOIR_REPONSE_dist($p) {
function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $sql_serveur = '', $type_retour = null, $sans_reponse = null) {
static $formulaires_saisies = array();
static $reponses_valeurs = array();
$tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
include_spip('formidable_fonctions');
// Si pas déjà présent, on cherche les saisies de ce formulaire
if (!isset($formulaires_saisies[$id_formulaire])) {
$formulaires_saisies[$id_formulaire] = unserialize(
$formulaires_saisies[$id_formulaire] = formidable_deserialize(
sql_getfetsel('saisies',//select
'spip_formulaires',//from
'id_formulaire = '.intval($id_formulaire),//where
@ -86,7 +87,7 @@ function calculer_voir_reponse($id_formulaires_reponse, $id_formulaire, $nom, $s
foreach ($champs as $champ) {
$reponses_valeurs[$id_formulaires_reponse][$champ['nom']] = array(
'valeur' => formidable_ajouter_action_recuperer_fichier(
$tenter_unserialize($champ['valeur']),
formidable_deserialize($champ['valeur']),
$champ['nom'],
$formulaires_saisies[$id_formulaire],
$id_formulaire,
@ -151,6 +152,8 @@ function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null,
static $modeles_resume = array();
static $saisies_form = array();
include_spip('formidable_fonctions');
if (is_null($id_formulaire)) {
$id_formulaire = sql_getfetsel(
'id_formulaire',
@ -161,9 +164,9 @@ function affiche_resume_reponse($id_formulaires_reponse, $id_formulaire = null,
if (is_null($modele_resume) and !isset($modeles_resume[$id_formulaire])) {
$row = sql_fetsel('saisies, traitements', 'spip_formulaires', 'id_formulaire='.intval($id_formulaire));
$saisies = unserialize($row['saisies']);
$saisies = formidable_deserialize($row['saisies']);
$saisies_form[$id_formulaire] = $saisies;
$traitements = unserialize($row['traitements']);
$traitements = formidable_deserialize($row['traitements']);
if (isset($traitements['enregistrement']['resume_reponse'])) {
$modeles_resume[$id_formulaire] = $traitements['enregistrement']['resume_reponse'];
} else {
@ -288,3 +291,38 @@ function formidable_afficher_statut_si_different_de($statut,$not_in = array()) {
return '';
}
/**
* Tente de déserialiser un texte
*
* Si le paramètre est un tableau, retourne le tableau,
* Si c'est une chaîne, tente de la désérialiser
* - d'abord depuis du JSON
* - puis depuis de la serialsation par défaut
* Si échec, retourne la chaîne
* retourne la chaîne.
*
* @filtre
*
* @param string|array $texte
* Le texte (possiblement sérializé) ou un tableau
* @return array|string
* Tableau, texte désérializé ou texte
**/
function formidable_deserialize($texte) {
// Cas 1. Deja tableau
if (is_array($texte)) {
return $texte;
}
// Cas 2. Tableau serializé en json
$tmp = json_decode($texte, true);
if (is_array($tmp)) {
return $tmp;
}
// Cas 3. Tableau serializé en PHP, si jamais ca echout on renvoie le texte
$tmp = @unserialize($texte);
if (is_array($tmp)) {
return $tmp;
}
return $texte;
}

3
formidable_pipelines.php

@ -362,7 +362,8 @@ function formidable_crayons_verifier($flux) {
['spip_formulaires_reponses_champs AS c', 'spip_formulaires_reponses AS r', 'spip_formulaires AS f'],
["id_formulaires_reponses_champ = $id", 'r.id_formulaires_reponse = c.id_formulaires_reponse', 'f.id_formulaire = r.id_formulaire']
);
$saisies = unserialize($data['saisies']);
include_spip('formidable_fonctions');
$saisies = formidable_deserialize($data['saisies']);
$saisie = saisies_chercher($saisies, $data['nom']);
if (saisies_saisie_est_tabulaire($saisie)) {
$atrouver = 'content_'.$flux['args']['wid'].'_valeur';

14
formulaires/editer_formulaire_champs.php

@ -9,19 +9,20 @@ function formulaires_editer_formulaire_champs_charger($id_formulaire) {
$id_formulaire = intval($id_formulaire);
$contexte = array();
$contexte['id_formulaire'] = $id_formulaire;
include_spip('formidable_fonctions');
// On teste si le formulaire existe
if ($id_formulaire
and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
and autoriser('editer', 'formulaire', $id_formulaire)
) {
$saisies = unserialize($formulaire['saisies']);
$saisies = formidable_deserialize($formulaire['saisies']);
// Est-ce qu'on restaure une révision ?
if ($id_version = _request('id_version')) {
include_spip('inc/revisions');
$old = recuperer_version($id_formulaire, 'formulaire', $id_version);
$saisies = unserialize($old['saisies']);
$saisies = formidable_deserialize($old['saisies']);
}
if (!is_array($saisies)) {
$saisies = array();
@ -157,7 +158,7 @@ function formulaires_editer_formulaire_champs_charger($id_formulaire) {
function formulaires_editer_formulaire_champs_verifier($id_formulaire) {
include_spip('inc/saisies');
$erreurs = array();
include_spip('formidable_fonctions');
// Si c'est pas une confirmation ni une annulation, ni un revert
if (!_request('enregistrer_confirmation')
and !($annulation = _request('annulation'))
@ -182,7 +183,7 @@ function formulaires_editer_formulaire_champs_verifier($id_formulaire) {
// Attention à s'assurer que tout les elements du tableau soit bien soit des tableaux, soit un string
// En effet, le md5 du formulaire_initial est calculé à partir de ce qui est passé au squelette
// Or dès qu'une valeur est passée à un squelette, elle est changé en string, à cause du mode de compilation (?)
$saisies_anciennes = unserialize($saisies_anciennes);
$saisies_anciennes = formidable_deserialize($saisies_anciennes);
$saisies_anciennes_str = $saisies_anciennes;
array_walk_recursive($saisies_anciennes_str, 'formidable_array_walk_recursive_strval');
$md5_saisies_anciennes = md5(serialize($saisies_anciennes_str));
@ -227,6 +228,7 @@ function formulaires_editer_formulaire_champs_traiter($id_formulaire) {
include_spip('inc/saisies');
$retours = array();
$id_formulaire = intval($id_formulaire);
include_spip('formidable_fonctions');
if (_request('revert')) {
session_set("constructeur_formulaire_formidable_$id_formulaire");
@ -238,7 +240,7 @@ function formulaires_editer_formulaire_champs_traiter($id_formulaire) {
$saisies_nouvelles = session_get("constructeur_formulaire_formidable_$id_formulaire");
// On récupère les anciennes saisies
$saisies_anciennes = unserialize(sql_getfetsel(
$saisies_anciennes = formidable_deserialize(sql_getfetsel(
'saisies',
'spip_formulaires',
'id_formulaire = '.$id_formulaire
@ -255,7 +257,7 @@ function formulaires_editer_formulaire_champs_traiter($id_formulaire) {
session_set("constructeur_formulaire_formidable_$id_formulaire");
session_set("constructeur_formulaire_formidable_$id_formulaire".'_md5_formulaire_initial');
// On va chercher les traitements
$traitements = unserialize(sql_getfetsel(
$traitements = formidable_deserialize(sql_getfetsel(
'traitements',
'spip_formulaires',
'id_formulaire = '.$id_formulaire

7
formulaires/editer_formulaire_traitements.php

@ -11,19 +11,20 @@ include_spip('inc/formidable_fichiers');
function formulaires_editer_formulaire_traitements_charger($id_formulaire) {
$contexte = array();
$id_formulaire = intval($id_formulaire);
include_spip('formidable_fonctions');
// On teste si le formulaire existe
if ($id_formulaire
and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
and autoriser('editer', 'formulaire', $id_formulaire)
) {
$traitements = unserialize($formulaire['traitements']);
$traitements = formidable_deserialize($formulaire['traitements']);
if ($id_version = _request('id_version')) {
include_spip('inc/revisions');
$old = recuperer_version($id_formulaire, 'formulaire', $id_version);
$traitements = unserialize($old['traitements']);
$traitements = formidable_deserialize($old['traitements']);
}
$saisies = unserialize($formulaire['saisies']);
$saisies = formidable_deserialize($formulaire['saisies']);
if (!is_array($traitements)) {
$traitements = array();
}

13
formulaires/exporter_formulaire_analyse.php

@ -40,6 +40,7 @@ function formulaires_exporter_formulaire_analyse_traiter($id_formulaire = 0) {
*/
function action_exporter_analyse_reponses($id_formulaire, $delim = ',') {
// on ne fait des choses seulements si le formulaire existe et qu'il a des enregistrements
include_spip('formidable_fonctions');
$ok = false;
if ($id_formulaire > 0
and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = '.$id_formulaire)
@ -50,10 +51,10 @@ function action_exporter_analyse_reponses($id_formulaire, $delim = ',') {
include_spip('inc/filtres');
$reponses_completes = array();
$saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
$saisies = saisies_lister_par_nom(formidable_deserialize($formulaire['saisies']), false);
// exclure les champs non analysés
$traitement = unserialize($formulaire['traitements']);
$traitement = formidable_deserialize($formulaire['traitements']);
foreach (explode('|', $traitement['enregistrement']['analyse_exclure_champs']) as $exclure) {
unset($saisies[$exclure]);
}
@ -69,9 +70,7 @@ function action_exporter_analyse_reponses($id_formulaire, $delim = ',') {
$valeurs = array();
while ($r = sql_fetch($res)) {
$valeurs[$r['nom']][] = is_array(unserialize($r['valeur']))
? unserialize($r['valeur'])
: $r['valeur'];
$valeurs[$r['nom']][] = formidable_deserialize($r['valeur']);
}
foreach ($saisies as $nom => $saisie) {
@ -80,9 +79,7 @@ function action_exporter_analyse_reponses($id_formulaire, $delim = ',') {
'spip_formulaires_reponses_champs',
'id_formulaires_reponse = '.intval($reponse['id_formulaires_reponse']).' and nom = '.sql_quote($nom)
);
if (is_array(unserialize($valeur))) {
$valeur = unserialize($valeur);
}
$valeur = formidable_deserialize($valeur);
$reponse_complete[] = formidable_analyser_saisie($saisie, $valeurs, 0, true);
}

18
formulaires/exporter_formulaire_reponses.php

@ -12,10 +12,11 @@ include_spip('inc/config');
function formulaires_exporter_formulaire_reponses_charger($id_formulaire = 0) {
$contexte = array();
$contexte['id_formulaire'] = intval($id_formulaire);
include_spip('formidable_fonctions');
// Vérifier si le formulaire dispose de champs "fichiers", pour proposer de ne pas les joindre à l'export
$saisies = sql_getfetsel('saisies','spip_formulaires','id_formulaire = '.intval($id_formulaire));
$saisies_par_type = saisies_lister_par_type(unserialize($saisies), false);
$saisies_par_type = saisies_lister_par_type(formidable_deserialize($saisies), false);
if(isset($saisies_par_type['fichiers'])){
$contexte['fichiers'] = true;
}
@ -139,6 +140,7 @@ function preparer_formulaire_reponses($formulaire, $reponses, $statut_reponses,
include_spip('inc/saisies');
include_spip('facteur_fonctions');
include_spip('inc/filtres');
include_spip('formidable_fonctions');
$id_formulaire = $formulaire['id_formulaire'];
$reponses_completes = array();
@ -159,7 +161,7 @@ function preparer_formulaire_reponses($formulaire, $reponses, $statut_reponses,
$titres[] = _T('formidable:reponse_statut');
}
$saisies = saisies_lister_par_nom(unserialize($formulaire['saisies']), false);
$saisies = saisies_lister_par_nom(formidable_deserialize($formulaire['saisies']), false);
foreach ($saisies as $nom => $saisie) {
if ($saisie['saisie'] != 'explication') { // on exporte tous les champs sauf explications
$options = $saisie['options'];
@ -213,7 +215,7 @@ function preparer_formulaire_reponses($formulaire, $reponses, $statut_reponses,
unset($_reponses_valeurs);
// Ensuite tous les champs
$tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
include_spip('formidable_fonctions');
// On parcourt chaque réponse
foreach ($reponses as $i => $reponse) {
@ -244,7 +246,7 @@ function preparer_formulaire_reponses($formulaire, $reponses, $statut_reponses,
// Saisie de type fichier ?
if (!$ignorer_fichiers && $saisie['saisie'] == 'fichiers') {
$_valeurs = $tenter_unserialize($valeurs[$nom]);
$_valeurs = formidable_deserialize($valeurs[$nom]);
//tester s'il y a des saisies parmi les fichiers
if (is_array($_valeurs) and $_valeurs) {
$chemin = _DIR_FICHIERS_FORMIDABLE . 'formulaire_' . $id_formulaire . '/reponse_' . $reponse['id_formulaires_reponse'];
@ -296,15 +298,13 @@ function preparer_formulaire_reponses($formulaire, $reponses, $statut_reponses,
*/
function formidable_generer_valeur_texte_saisie($valeur, $saisie, $cle_ou_valeur = 'valeur') {
static $resultats = array();
static $tenter_unserialize = null;
if (is_null($tenter_unserialize)) {
$tenter_unserialize = charger_fonction('tenter_unserialize', 'filtre/');
}
include_spip('formidable_fonctions');
$hash = ($saisie['saisie'] . ':' . serialize($saisie['options']) . ':' . $valeur);
if (!isset($resultats[$hash])) {
$valeur = $tenter_unserialize($valeur);
$valeur = formidable_deserialize($valeur);
// Il faut éviter de passer par là… ça prend du temps…
$resultats[$hash] = facteur_mail_html2text(
recuperer_fond(

29
formulaires/formidable.php

@ -61,12 +61,12 @@ function formidable_id_formulaire($id) {
**/
function formulaires_formidable_saisies_dist($id, $valeurs = array(), $id_formulaires_reponse = false) {
$saisies = array();
include_spip('formidable_fonctions');
if (
$id_formulaire = formidable_id_formulaire($id)
and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))
) {
$saisies = unserialize($formulaire['saisies']);
$saisies = formidable_deserialize($formulaire['saisies']);
// Si on est en train de réafficher les valeurs postées,
// ne pas afficher les saisies hidden
@ -107,6 +107,7 @@ function formulaires_formidable_saisies_dist($id, $valeurs = array(), $id_formul
**/
function formulaires_formidable_charger_dist($id, $valeurs = array(), $options_appel = [], $deprecated_url_redirect = false, $deprecated_forcer_modif = false) {
$contexte = array();
include_spip('formidable_fonctions');
// Retrocompatiblité
if (!is_array($options_appel)) {
@ -133,7 +134,7 @@ function formulaires_formidable_charger_dist($id, $valeurs = array(), $options_a
// Est-ce que la personne a le droit de répondre ?
if (autoriser('repondre', 'formulaire', $formulaire['id_formulaire'], null, array('formulaire' => $formulaire))) {
$traitements = unserialize($formulaire['traitements']);
$traitements = formidable_deserialize($formulaire['traitements']);
$contexte['mechantrobot'] = '';
@ -204,7 +205,7 @@ function formulaires_formidable_charger_dist($id, $valeurs = array(), $options_a
$contexte['formidable_afficher_apres'] = $formulaire['apres'];
// Si le formulaire via d'être posté, ne pas preremplir le nouveau formulaire avec les valeurs postées
if ($formulaire['apres'] == 'formulaire' and _request('formidable_traiter_ok')) {
foreach (saisies_lister_par_nom(unserialize($formulaire['saisies'])) as $nom => $valeur) {
foreach (saisies_lister_par_nom(formidable_deserialize($formulaire['saisies'])) as $nom => $valeur) {
set_request($nom, null);
}
set_request('cvtupload_etapes_files', null);
@ -328,15 +329,16 @@ function formulaires_formidable_verifier_etape_dist($etape, $id, $valeurs = arra
*/
function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $options_appel = [], $etapes = array(), $etape = null) {
$erreurs = array();
$id_formulaires_reponse = $options_appel['id_formulaires_reponse'] ?? false;
include_spip('formidable_fonctions');
if (
$id_formulaire = formidable_id_formulaire($id)
and $formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))
and $traitements = unserialize($formulaire['traitements'])
and $traitements = formidable_deserialize($formulaire['traitements'])
and is_array($traitements)
) {
$saisies = formidable_deserialize($formulaire['saisies']);
// Pour chaque traitement choisi, on cherche s'il propose une fonction de vérification propre à ses besoins
foreach ($traitements as $type_traitement => $options) {
if ($verifier_traitement = charger_fonction('verifier', "traiter/$type_traitement", true)) {
@ -392,6 +394,7 @@ function formulaires_formidable_verifier_traitements($id, $valeurs = array(), $o
**/
function formulaires_formidable_traiter_dist($id, $valeurs = [], $options_appel = [], $deprecated_url_redirect = false, $deprecated_forcer_modif = false) {
$retours = array();
include_spip('formidable_fonctions');
// Retrocompatiblité
if (!is_array($options_appel)) {
@ -417,8 +420,8 @@ function formulaires_formidable_traiter_dist($id, $valeurs = [], $options_appel
}
$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . $id_formulaire);
$saisies = unserialize($formulaire['saisies']);
$traitements = unserialize($formulaire['traitements']);
$saisies = formidable_deserialize($formulaire['saisies']);
$traitements = formidable_deserialize($formulaire['traitements']);
// On met à null les (sous-)saisies masquées par afficher_si
formidable_saisies_afficher_si_masquees_set_request_null();
@ -659,6 +662,7 @@ function formulaires_formidable_traiter_dist($id, $valeurs = [], $options_appel
* Tableau des champs de type fichier
**/
function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaires_reponse = false) {
include_spip('formidable_fonctions');
// On peut donner soit un id soit un identifiant
if (!$id_formulaire = formidable_id_formulaire($id)) {
return array();
@ -666,7 +670,7 @@ function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaire
// On cherche les saisies du formulaire
if ($saisies = sql_getfetsel('saisies', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))) {
$saisies = unserialize($saisies);
$saisies = formidable_deserialize($saisies);
include_spip('inc/saisies_lister');
$saisies_fichiers = array_keys(saisies_lister_avec_type($saisies, 'fichiers'));
return $saisies_fichiers;
@ -687,13 +691,14 @@ function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaire
*
**/
function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, &$ok) {
include_spip('formidable_fonctions');
if ($id_formulaires_reponse == false) {
$ok = true;
return $contexte;
}
// On prépare des infos si jamais on a des champs fichiers
$saisies = unserialize($contexte['_formidable']['saisies']);
$saisies = formidable_deserialize($contexte['_formidable']['saisies']);
$saisies_fichiers = saisies_lister_avec_type($saisies, 'fichiers');// les saisies de type fichier
$fichiers = array();
$id_formulaire = $contexte['_formidable']['id_formulaire'];
@ -708,7 +713,7 @@ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_rep
// On remplit le contexte avec les résultats précédents
foreach ($champs as $champ) {
if (array_key_exists($champ['nom'], $saisies_fichiers)) {
$valeur= unserialize($champ['valeur']);
$valeur= formidable_deserialize($champ['valeur']);
$nom = $champ['nom'];
$fichiers[$nom] = array();
$chemin = _DIR_FICHIERS_FORMIDABLE
@ -722,7 +727,7 @@ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_rep
}
}
} else {
$test_array = filtre_tenter_unserialize_dist($champ['valeur']);
$test_array = formidable_deserialize($champ['valeur']);
$contexte[$champ['nom']] = is_array($test_array) ? $test_array : $champ['valeur'];
}
}

4
genie/formidable_effacer_enregistrements.php

@ -6,13 +6,15 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
include_spip('inc/formidable_fichiers');
/**
* Effacer régulièrement les enregistrements obsolètes
**/
function genie_formidable_effacer_enregistrements($t) {
$res = sql_select('id_formulaire,traitements', 'spip_formulaires');
include_spip('formidable_fonctions');
while ($result = sql_fetch($res)) {
$traitements = unserialize($result['traitements']);
$traitements = formidable_deserialize($result['traitements']);
$id_formulaire = $result['id_formulaire'];
if (isset($traitements['enregistrement']['effacement'])
and $traitements['enregistrement']['effacement'] == 'on'

4
http/collectionjson/inc-formulaire.html

@ -26,8 +26,8 @@
[(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,titre, value,#TITRE, prompt,<:info_titre:>})]})]})]
[(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,descriptif, value,#DESCRIPTIF, prompt,<:info_descriptif:>})], #DESCRIPTIF})]})]
[(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,message_retour, value,[(#MESSAGE_RETOUR|propre)], prompt,<:formidable:editer_message_ok:>})], #MESSAGE_RETOUR})]})]
[(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,saisies, array,[(#SAISIES|unserialize)], prompt,<:formidable:champs:>})], #SAISIES})]})]
[(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,traitements, array,[(#TRAITEMENTS|unserialize)], prompt,<:formidable:voir_traitements:>})], #TRAITEMENTS})]})]
[(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,saisies, array,[(#SAISIES|formidable_deserialize)], prompt,<:formidable:champs:>})], #SAISIES})]})]
[(#SET{item, [(#GET{item}|push_table_valeur{data, [(#ARRAY{name,traitements, array,[(#TRAITEMENTS|formidable_deserialize)], prompt,<:formidable:voir_traitements:>})], #TRAITEMENTS})]})]
]
[(#REM) Des champs au contenu BRUT qui peut être modifié ]

24
inc/formidable.php

@ -391,29 +391,6 @@ function analyser_saisie($saisie) {
}
/**
* Tente de déserialiser un texte
*
* Si le paramètre est un tableau, retourne le tableau,
* Si c'est une chaîne, tente de la désérialiser, sinon
* retourne la chaîne.
*
* @filtre
*
* @param string|array $texte
* Le texte (possiblement sérializé) ou un tableau
* @return array|string
* Tableau, texte désérializé ou texte
**/
function filtre_tenter_unserialize_dist($texte) {
if (is_array($texte)) {
return $texte;
}
if ($tmp = @unserialize($texte)) {
return $tmp;
}
return $texte;
}
/**
@ -709,3 +686,4 @@ function formidable_array_walk_recursive_strval(&$value, $key) {
$value = strval($value);
}
}

2
modeles/formulaire_aide_memoire.html

@ -10,7 +10,7 @@
<dd><:formidable:editer_message_ok:></dd>
</dl>
[(#ENV{source}|!={sessions}|oui)
#SET{saisies,#SAISIES*|unserialize}
#SET{saisies,#SAISIES*|formidable_deserialize}
]
</BOUCLE_formulaire>
<BOUCLE_session(CONDITION) {si #GET{source}|=={session}}>

6
modeles/formulaire_analyse.html

@ -1,12 +1,12 @@
<BOUCLE_formulaire(FORMULAIRES){id_formulaire}>
#SET{exclure_champs,#TRAITEMENTS|unserialize|table_valeur{enregistrement}|table_valeur{analyse_exclure_champs}|explode{|}}
#SET{exclure_champs,#TRAITEMENTS|formidable_deserialize|table_valeur{enregistrement}|table_valeur{analyse_exclure_champs}|explode{|}}
<div class='formidable_analyse'>
[(#REM) On fait un tableau qui contient toutes les réponses, classées par champ, sauf pour les champs qui sont à ne pas prendre en compte ]
#SET{valeurs,#ARRAY}
#SET{reponses_total,0}
<BOUCLE_reponses(FORMULAIRES_REPONSES){id_formulaire}>
<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}{nom ?= #ENV{nom}}{!nom IN #GET{exclure_champs}}>
#SET_MERGE{liste_valeurs, #GET{valeurs}|table_valeur{#NOM}|sinon{#ARRAY}, #ARRAY{0,#VALEUR|tenter_unserialize}}
#SET_MERGE{liste_valeurs, #GET{valeurs}|table_valeur{#NOM}|sinon{#ARRAY}, #ARRAY{0,#VALEUR|formidable_deserialize}}
#SET_MERGE{valeurs, #ARRAY{#NOM,#GET{liste_valeurs}}}
</BOUCLE_champs>
</BOUCLE_reponses>
@ -18,7 +18,7 @@
<strong class='nombre_reponse'><:formidable:reponse_aucune:></strong>
<//B_reponses>
<BOUCLE_saisies(DATA){source tableau, #SAISIES|unserialize|saisies_lister_par_nom}>
<BOUCLE_saisies(DATA){source tableau, #SAISIES|formidable_deserialize|saisies_lister_par_nom}>
[(#VAL{saisie}|array_key_exists{#VALEUR}|oui)
[(#CLE|=={#ENV{nom,#CLE}}|oui)
[(#CLE|in_array{#GET{exclure_champs}}|non)

4
modeles/formulaires_reponse.html

@ -1,11 +1,11 @@
<BOUCLE_reponse(FORMULAIRES_REPONSES){tout}{id_formulaires_reponse}>
<BOUCLE_formulaire(FORMULAIRES){tout}{id_formulaire}>
#SET{saisies,#SAISIES|unserialize}
#SET{saisies,#SAISIES|formidable_deserialize}
</BOUCLE_formulaire>
#SET{valeurs,#ARRAY}
<BOUCLE_champs(FORMULAIRES_REPONSES_CHAMPS){id_formulaires_reponse}>
#SET_MERGE{valeurs,#ARRAY{#NOM,#VALEUR|tenter_unserialize|formidable_ajouter_action_recuperer_fichier{#NOM,#GET{saisies},#ID_FORMULAIRE,#ID_FORMULAIRES_REPONSE}}
#SET_MERGE{valeurs,#ARRAY{#NOM,#VALEUR|formidable_deserialize|formidable_ajouter_action_recuperer_fichier{#NOM,#GET{saisies},#ID_FORMULAIRE,#ID_FORMULAIRES_REPONSE}}
</BOUCLE_champs>
#VOIR_SAISIES{#GET{saisies}, #GET{valeurs}}

2
prive/squelettes/contenu/formulaire.html

@ -22,7 +22,7 @@
|concat{<:formidable:traitements_actives:>},'sobre traitements mini'})]
<B_traitements>
<ul class='spip'>
<BOUCLE_traitements(DATA){source tableau, #TRAITEMENTS|unserialize|sinon{#ARRAY}}>
<BOUCLE_traitements(DATA){source tableau, #TRAITEMENTS|formidable_deserialize|sinon{#ARRAY}}>
<li>[(#GET{traitements_disponibles}|table_valeur{#CLE}|table_valeur{titre})]</li>
</BOUCLE_traitements>
</ul>

Loading…
Cancel
Save