Browse Source

`saisies_afficher_si_get_valeur_champ()` se base sur `saisies_request()`,

sauf pour les fichiers, où l'on créee `saisies_request_property_from_files()`.

`saisies_requests` peut recevoir un tableau où chercher en second
argument.

Ps : soit dit en passant, c'était
buguée les tests d'afficher_si si la saisie fichiers est un tableau clés
(non numériques) / valeur.
Mais cela ne doit pas servir souvent, surtout vu la structure de `$_FILES` dans ce cas là.
pull/94/head
Maïeul 2 years ago
parent
commit
5521ff54b9
  1. 41
      inc/saisies.php
  2. 25
      inc/saisies_afficher_si_php.php

41
inc/saisies.php

@ -204,15 +204,20 @@ function saisies_supprimer_identifiants($saisies) {
* en tenant compte du fait que la saisie peut être décrit sous forme de sous entrées d'un tableau
*
* @todo Prendre en compte aussi la notation champ/index/index
* @todo Prendre un arg en plus pour chercher dans un autre tableau que le GET/POST
* @param string $champ
* Nom du champ de la saisie, y compris avec crochets pour sous entrées
* @param null|array $tableau
* Tableau où chercher, à defaut get/post
* @return string|array
* Résultat du _request()
**/
function saisies_request($champ) {
function saisies_request($champ, $tableau = null) {
if (preg_match('/([\w]+)((\[[\w]+\])+)/', $champ, $separe)) {
$valeur = _request($separe[1]);
if ($tableau) {
$valeur = $tableau[$separe[1]];
} else {
$valeur = _request($separe[1]);
}
preg_match_all('/\[([\w]+)\]/', $separe[2], $index);
// On va chercher au fond du tableau
foreach ($index[1] as $cle) {
@ -220,12 +225,40 @@ function saisies_request($champ) {
}
} else {
// Sinon la valeur est juste celle du champ
$valeur = _request($champ);
if ($tableau) {
$valeur = $tableau[$champ];
} else {
$valeur = _request($champ);
}
}
return $valeur;
}
/**
* Trouve une propriété d'un fichier uploadé au sein d'un $_FILES
* en tenant compte du fait que la saisie peut être décrit sous forme de sous entrées d'un tableau ET que dans ce cas la structure PHP de $_FILES est totalement aberrant
*
* @todo Prendre en compte aussi la notation champ/index/index
* @param string $champ
* Nom du champ de la saisie, y compris avec crochets pour sous entrées
* @param string $property
* @return string|array
* Résultat du _request()
**/
function saisies_request_property_from_FILES($champ, $property = 'name') {
// Si le nom du champ est un tableau indexé, il faut parser !
if (preg_match('/([\w]+)((\[[\w]+\])+)/', $champ, $separe)) {
$files = saisies_request($champ, array($separe[1] => $_FILES[$separe[1]][$property]));
if (is_null($files)) {
$files = array();
}
} else {
$files = isset($_FILES[$champ][$property]) ? $_FILES[$champ][$property] : array();
}
return $files;
}
/**
* Modifie la valeur d'un saisie postée en tenant compte que ça puisse être un tableau
*

25
inc/saisies_afficher_si_php.php

@ -144,29 +144,14 @@ function saisies_afficher_si_get_valeur_champ($champ, $env, $saisies_par_nom) {
} elseif ($config) {
$valeur = $config;
} elseif (is_null($env)) {
// Si le nom du champ est un tableau indexé, il faut parser !
if (preg_match('/([\w]+)((\[[\w]+\])+)/', $champ, $separe)) {
$valeur= _request($separe[1]);
preg_match_all('/\[([\w]+)\]/', $separe[2], $index);
// On va chercher au fond du tableau
foreach ($index[1] as $cle) {
if ($fichiers) {
$files = isset($_FILES[$valeur[$cle]]) ? $_FILES[$valeur[$cle]]['name'] : array();
$precedent = _request('cvtupload_fichiers_precedents');
$precedent = $precedent[$valeur[$cle]];
$precedent = saisies_request('cvtupload_fichiers_precedents');
$precedent = $precedent[$champ];
$valeur = saisies_request_property_from_FILES($champ, 'name');
} else {
$valeur = $valeur[$cle];
$valeur = saisies_request($champ);
}
}
} else {
if ($fichiers) {
$files = isset($_FILES[$champ]) ? $_FILES[$champ]['name'] : array();
$precedent = _request('cvtupload_fichiers_precedents');
$precedent = $precedent[$champ];
} else {
$valeur = _request($champ);
}
}
} else {
$valeur = $env['valeurs'][$champ];
}
@ -174,7 +159,7 @@ function saisies_afficher_si_get_valeur_champ($champ, $env, $saisies_par_nom) {
if (!is_array($precedent)) {
$precedent = array();
}
$valeur = array_merge($files, $precedent);
$valeur = array_merge($valeur, $precedent);
$valeur = array_filter($valeur);
}

Loading…
Cancel
Save