Browse Source

Partout où il y a des _request ou des set_request, on doit pouvoir passer un tableau de valeurs qui remplace GET/POST puisque ces fonctions de SPIP savent le faire. Ce qui permet alors de vérifier un jeu de valeurs prédéfinis, qu'on a sous la main, et non pas le POST.

pull/135/head
RastaPopoulos 1 year ago committed by Gitea
parent
commit
c1625bbd2e
  1. 14
      inc/saisies_afficher_si_php.php
  2. 34
      inc/saisies_request.php
  3. 14
      inc/saisies_verifier.php

14
inc/saisies_afficher_si_php.php

@ -96,7 +96,7 @@ function saisies_verifier_afficher_si($saisies, $env = null, $saisies_toutes_par
* * - options globales de saisies : `afficher_si_avec_post`
* * - option de la saisie spécifique : `afficher_si_avec_post`
**/
function saisies_afficher_si_masquees_set_request_empty_string($saisies) {
function saisies_afficher_si_masquees_set_request_empty_string($saisies, $valeurs = null) {
$saisies_masquees = saisies_afficher_si_liste_masquees('get');//Retenir que la saisie a été masquée
if (!is_array($saisies_masquees)) {
return;
@ -109,7 +109,7 @@ function saisies_afficher_si_masquees_set_request_empty_string($saisies) {
if (
empty($saisie['options']['afficher_si_avec_post']) // option de la saisie
) {
saisies_set_request_recursivement($saisie, '');
saisies_set_request_recursivement($saisie, '', $valeurs);
}
}
}
@ -120,15 +120,17 @@ function saisies_afficher_si_masquees_set_request_empty_string($saisies) {
* Utiliser notamment pour annuler toutes les sous saisies d'un fieldeset
* si le fieldset est masquée à cause d'un afficher_si.
* @param array $saisie
* @param null|str|array (defaut `''`)
* @param null|str|array $val (defaut `''`)
* @param array $valeurs
* Optionnellement un tableau de valeurs à passer à _request plutôt que GET/POST
**/
function saisies_set_request_recursivement($saisie, $val = '') {
function saisies_set_request_recursivement($saisie, $val = '', $valeurs = null) {
// Attention, tout champ peut être un sous-tableau !
saisies_set_request($saisie['options']['nom'], $val);
saisies_set_request($saisie['options']['nom'], $val, $valeurs);
if (isset($saisie['saisies'])) {
foreach ($saisie['saisies'] as $sous_saisie) {
saisies_set_request_recursivement($sous_saisie, $val);
saisies_set_request_recursivement($sous_saisie, $val, $valeurs);
}
}
}

34
inc/saisies_request.php

@ -24,16 +24,16 @@ if (!defined('_ECRIRE_INC_VERSION')) {
*
* @param string $champ
* Nom du champ de la saisie, y compris avec crochets pour sous entrées
* @param null|array $tableau
* @param null|array $valeurs
* Tableau où chercher, à defaut get/post
* @return string|array
* Résultat du _request()
**/
function saisies_request($champ, $tableau = null) {
function saisies_request($champ, $valeurs = null) {
$champ = saisie_nom2name($champ);
if (preg_match('/([\w]+)((\[[\w]+\])+)/', $champ, $separe)) {
$valeur = _request($separe[1], $tableau);
$valeur = _request($separe[1], $valeurs);
// On va chercher au fond du tableau
preg_match_all('/\[([\w]+)\]/', $separe[2], $index);
@ -43,7 +43,7 @@ function saisies_request($champ, $tableau = null) {
}
// Sinon la valeur est juste celle du champ
else {
$valeur = _request($champ, $tableau);
$valeur = _request($champ, $valeurs);
}
return $valeur;
@ -120,14 +120,16 @@ function saisies_request_property_from_FILES($champ, $property = 'name') {
* Nom du champ
* @param $valeur
* Valeur à remplir dans le request
* @param array $valeurs
* Optionnellement un tableau de valeurs à passer à _request plutôt que GET/POST
* @return void
*/
function saisies_set_request($champ, $valeur) {
function saisies_set_request($champ, $valeur, $valeurs = null) {
$champ = saisie_nom2name($champ);
// Si on détecte que c'est un tableau[index][index]
if (preg_match('/([\w]+)((\[[\w]+\])+)/', $champ, $separe)) {
$nom_champ_principal = $separe[1];
$champ_principal = _request($nom_champ_principal);
$champ_principal = _request($nom_champ_principal, $valeurs);
$enfant = &$champ_principal;
// On va chercher au fond du tableau
@ -138,11 +140,11 @@ function saisies_set_request($champ, $valeur) {
// Une fois descendu tout en bas, on met la valeur
$enfant = $valeur;
// Et on reinjecte le tout
saisies_liste_set_request('set', $nom_champ_principal, $champ_principal);
saisies_liste_set_request('set', $nom_champ_principal, $champ_principal, $valeurs);
set_request($nom_champ_principal, $champ_principal);
} else {// Sinon la valeur est juste celle du nom
saisies_liste_set_request('set', $champ, $valeur);
set_request($champ, $valeur);
saisies_liste_set_request('set', $champ, $valeur, $valeurs);
set_request($champ, $valeur, $valeurs);
}
}
@ -152,16 +154,18 @@ function saisies_set_request($champ, $valeur) {
* @param string $action 'set|get'
* @param string $champ
* @param string $nouvelle_valeur
* @param array $valeur
* Optionnellement un tableau de valeurs à passer à _request plutôt que GET/POST
* @return (si action = get) un tableau associatif
* - '<champ>' => ['valeur_initiale', 'valeur_modifiee1', 'valeur_modifiee2'
**/
function saisies_liste_set_request($action = 'set', $champ = 'null', $nouvelle_valeur = '') {
function saisies_liste_set_request($action = 'set', $champ = 'null', $nouvelle_valeur = '', $valeurs = null) {
static $cache = array();
if ($action === 'get') {
return $cache;
} else {
if (!isset($cache[$champ])) {
$cache[$champ] = array(_request($champ));
$cache[$champ] = array(_request($champ, $valeur));
}
$cache[$champ] = array_merge($cache[$champ], array($nouvelle_valeur));
}
@ -172,18 +176,20 @@ function saisies_liste_set_request($action = 'set', $champ = 'null', $nouvelle_v
* Chercher la valeur d'une saisie, en tenant compte du fait que potentiellement c'est une saisies fichiers
* @param array $saisie
* @return string|array $valeur
* @param array $valeurs
* Optionnellement un tableau de valeurs à passer à _request plutôt que GET/POST
**/
function saisies_get_valeur_saisie($saisie) {
function saisies_get_valeur_saisie($saisie, $valeurs = null) {
$champ = $saisie['options']['nom'];
$file = saisies_saisie_est_fichier($saisie);
// Cas de la saisie 'fichiers':
if ($file) {
if ($file and !is_array($valeurs)) {
$valeur = saisies_request_from_FILES($champ);
}
// Tout type de saisie, sauf fichiers
else {
$valeur = saisies_request($champ);
$valeur = saisies_request($champ, $valeurs);
// Filtrer les tableaux. Ex d'application:
// - saisie date/heure qui envoi des input texte en tableau > il faut pas que les champs envoyés soient vides
// - saisie destinataire, qui pourrait avoir une première option vide

14
inc/saisies_verifier.php

@ -18,9 +18,10 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* @param array $formulaire Le formulaire à vérifier, c'est à dire un tableau de saisies, avec éventuellement une clé options, comprenant tout les étapes
* @param bool $saisies_empty_string Si TRUE, les saisies masquées selon afficher_si ne seront pas verifiées, leur valeur étant forcée a `''`. Cette valeur est transmise à traiter (via set_request).
* @param $etape l'étape courante à vérifier
* @param array $valeurs Optionnellement un tableau de valeurs à passer à _request plutôt que GET/POST
* @return array Retourne un tableau d'erreurs
*/
function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $etape = null) {
function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $etape = null, $valeurs = null) {
include_spip('inc/verifier');
$verif_fonction = charger_fonction('verifier', 'inc', true);
@ -67,7 +68,7 @@ function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $e
} else {
$normaliser = null;
}
$valeur = saisies_get_valeur_saisie($saisie);
$valeur = saisies_get_valeur_saisie($saisie, $valeurs);
$options = isset($verifier['options']) ? $verifier['options'] : array();
if ($erreur_eventuelle = $verif_fonction($valeur, $verifier['type'], $options, $normaliser)) {
$erreurs[$champ] = $erreur_eventuelle;
@ -75,7 +76,7 @@ function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $e
}
// S'il n'y a pas d'erreur et que la variable de normalisation a été remplie, on l'injecte dans le POST
elseif (!is_null($normaliser) and $verifier['type'] != 'fichiers') {
saisies_set_request($champ, $normaliser);
saisies_set_request($champ, $normaliser, $valeurs);
}
}
}
@ -91,14 +92,15 @@ function saisies_verifier($formulaire, $saisies_masquees_empty_string = true, $e
'saisies_par_etapes_apres_verification_afficher_si' => $saisies_par_etapes_apres_verification_afficher_si,
'saisies_etape_courante_apres_verification_afficher_si' => $saisies_etape_courante_apres_verification_afficher_si,
'saisies_masquees_empty_string' => $saisies_masquees_empty_string,
'etape' => $etape
'etape' => $etape,
'valeurs' => $valeurs,
),
'data' => $erreurs
)
);
//S'il n'y a pas d'erreur, et seulement si on vient de franchir la dernière étape, on vide les afficher_si)
if (empty($erreurs) and ($etape === count($saisies_par_etapes) and !_request('aller_a_etape')) or (!$etape)) {
saisies_afficher_si_masquees_set_request_empty_string($saisies_par_etapes);
if (empty($erreurs) and ($etape === count($saisies_par_etapes) and !_request('aller_a_etape', $valeurs)) or (!$etape)) {
saisies_afficher_si_masquees_set_request_empty_string($saisies_par_etapes, $valeurs);
}

Loading…
Cancel
Save